> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kibocommerce.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Perform Payment Interaction

<Note>
  **Related API:** This extension modifies the [Perform Payment Action](/api-reference/order/perform-payment-action) operation.
</Note>

<Note>
  This action is only invoked for **third-party payment gateways** (such as PayPal, Pay With Amazon, etc). It is **not** called for standard credit card payments processed through payment gateway integrations. If you are working with credit card payments, see the [`action.before`](/pages/action-before) and [`action.after`](/pages/action-after) actions instead.
</Note>

This action occurs before a certain interaction is performed on a payment, and is particulary useful for third-party services interacting with payments. This action runs after the `embedded.commerce.payments.action.before` action and before the `embedded.commerce.payments.action.after` action. The main difference between these three actions is the methods each has access to and whether they occur before or after the payment interaction. The relevant payment interactions that this action responds to are:

* AuthAndCapture
* Authorize
* Capture
* Create
* Credit
* Decline
* RequestCheck
* Rollback
* Void

<table><tbody><tr><th>Action Type</th><td>[Embedded](/pages/types-of-actions)</td></tr><tr><th>Full Action ID</th><td>embedded.commerce.payments.action.performPaymentInteraction</td></tr><tr><th>Runs multiple custom functions?</th><td>No</td></tr></tbody></table>

## JavaScript File Structure

Action files share the following basic structure:

```
module.exports = function(context, callback) {
   // Your custom code here
   callback();
};
```

When you code the custom function for an action, you have access to two arguments:

`callback`—This argument follows the established JavaScript callback pattern: it takes an error as the first argument (or null if there is no error) and a result as the second argument (if required).

`context`—This argument provides the function access to relevant objects and methods that interface with Kibo.

## Context: Payment

The methods and objects documented here are available to this action through the use of the `context` argument.

**Microservice Operation**\
This action corresponds to the microservice that performs payment actions.

## Get

### get.payment

Returns the payment transaction.

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| N/A       | N/A  | N/A         |

Example:

```
context.get.payment();
```

Response:

```
{
   "amountCollected": "decimal",
   "amountCredited": "decimal",
   "amountRequested": "decimal",
   "auditInfo": {
      "createBy": "string",
      "createDate": "DateTime",
      "updateBy": "string",
      "updateDate": "DateTime"
   },
   "availableActions": "string",
   "billingInfo": {
      "auditInfo": {
         "createBy": "string",
         "createDate": "DateTime",
         "updateBy": "string",
         "updateDate": "DateTime"
      },
      "billingContact": {
         "address": {
            "address1": "string",
            "address2": "string",
            "address3": "string",
            "address4": "string",
            "addressType": "string",
            "cityOrTown": "string",
            "countryCode": "string",
            "isValidated": "bool",
            "postalOrZipCode": "string",
            "stateOrProvince": "string"
         },
         "companyOrOrganization": "string",
         "email": "string",
         "firstName": "string",
         "id": "int",
         "lastNameOrSurname": "string",
         "middleNameOrInitial": "string",
         "phoneNumbers": {
            "home": "string",
            "mobile": "string",
            "work": "string"
         }
      },
      "card": {
         "cardNumberPartOrMask": "string",
         "expireMonth": "short",
         "expireYear": "short",
         "isCardInfoSaved": "bool",
         "isUsedRecurring": "bool",
         "nameOnCard": "string",
         "paymentOrCardType": "string",
         "paymentServiceCardId": "string"
      },
      "isSameBillingShippingAddress": "bool",
      "paymentType": "string",
      "storeCreditCode": "string"
   },
   "changeMessages": [
      {
         "amount": "decimal",
         "appId": "string",
         "appKey": "string",
         "appName": "string",
         "correlationId": "string",
         "createDate": "DateTime",
         "id": "string",
         "identifier": "string",
         "message": "string",
         "metadata": "object",
         "newValue": "string",
         "oldValue": "string",
         "subject": "string",
         "subjectType": "string",
         "success": "bool",
         "userFirstName": "string",
         "userId": "string",
         "userLastName": "string",
         "userScopeType": "string",
         "verb": "string"
      }
   ],
   "id": "string",
   "interactions": [
      {
         "amount": "decimal",
         "auditInfo": {
            "createBy": "string",
            "createDate": "DateTime",
            "updateBy": "string",
            "updateDate": "DateTime"
         },
         "checkNumber": "string",
         "currencyCode": "string",
         "gatewayAuthCode": "string",
         "gatewayAVSCodes": "string",
         "gatewayCVV2Codes": "string",
         "gatewayInteractionId": "int",
         "gatewayResponseCode": "string",
         "gatewayResponseText": "string",
         "gatewayTransactionId": "string",
         "id": "string",
         "interactionDate": "DateTime",
         "interactionType": "string",
         "isManual": "bool",
         "isRecurring": "bool",
         "note": "string",
         "orderId": "string",
         "paymentEntryStatus": "string",
         "paymentId": "string",
         "paymentTransactionInteractionIdReference": "int",
         "status": "string"
      }
   ],
   "isRecurring": "bool",
   "orderId": "string",
   "paymentServiceTransactionId": "string",
   "paymentType": "string",
   "status": "string"
}
```

For information about the properties in the response, refer to the [REST API Help](/api-overviews/openapi_commerce_overview).

### get.paymentAction

Returns a primitive list of strings naming the available payment actions.

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| N/A       | N/A  | N/A         |

Example:

```
context.get.paymentAction();
```

Response:

```
[
   {}
]
```

## Exec

### exec.addPaymentInteraction

Adds a payment action.

| Parameter          | Type   | Description                                                                                          |
| ------------------ | ------ | ---------------------------------------------------------------------------------------------------- |
| paymentInteraction | string | The application installation state. You can retrieve this object using the corresponding GET method. |

Example:

```
context.exec.paymentInteraction("interaction");
```

Response:

```
[
   {}
]
```

Returns a payment interaction. For information about the properties in the response, refer to the [REST API Help](/api-overviews/openapi_commerce_overview).

### exec.setPaymentAmountRequested

Set a requested payment amount for the transaction.

| Parameter | Type   | Description                                           |
| --------- | ------ | ----------------------------------------------------- |
| amount    | number | The requested amount you want to set for the payment. |

Example:

```
context.exec.setPaymentAmountRequested(37.00);
```

Response:

```
{
   "amountCollected": "decimal",
   "amountCredited": "decimal",
   "amountRequested": "decimal",
   "auditInfo": {
      "createBy": "string",
      "createDate": "DateTime",
      "updateBy": "string",
      "updateDate": "DateTime"
   },
   "availableActions": "string",
   "billingInfo": {
      "auditInfo": {
         "createBy": "string",
         "createDate": "DateTime",
         "updateBy": "string",
         "updateDate": "DateTime"
      },
      "billingContact": {
         "address": {
            "address1": "string",
            "address2": "string",
            "address3": "string",
            "address4": "string",
            "addressType": "string",
            "cityOrTown": "string",
            "countryCode": "string",
            "isValidated": "bool",
            "postalOrZipCode": "string",
            "stateOrProvince": "string"
         },
         "companyOrOrganization": "string",
         "email": "string",
         "firstName": "string",
         "id": "int",
         "lastNameOrSurname": "string",
         "middleNameOrInitial": "string",
         "phoneNumbers": {
            "home": "string",
            "mobile": "string",
            "work": "string"
         }
      },
      "card": {
         "cardNumberPartOrMask": "string",
         "expireMonth": "short",
         "expireYear": "short",
         "isCardInfoSaved": "bool",
         "isUsedRecurring": "bool",
         "nameOnCard": "string",
         "paymentOrCardType": "string",
         "paymentServiceCardId": "string"
      },
      "isSameBillingShippingAddress": "bool",
      "paymentType": "string",
      "storeCreditCode": "string"
   },
   "changeMessages": [
      {
         "amount": "decimal",
         "appId": "string",
         "appKey": "string",
         "appName": "string",
         "correlationId": "string",
         "createDate": "DateTime",
         "id": "string",
         "identifier": "string",
         "message": "string",
         "metadata": "object",
         "newValue": "string",
         "oldValue": "string",
         "subject": "string",
         "subjectType": "string",
         "success": "bool",
         "userFirstName": "string",
         "userId": "string",
         "userLastName": "string",
         "userScopeType": "string",
         "verb": "string"
      }
   ],
   "id": "string",
   "interactions": [
      {
         "amount": "decimal",
         "auditInfo": {
            "createBy": "string",
            "createDate": "DateTime",
            "updateBy": "string",
            "updateDate": "DateTime"
         },
         "checkNumber": "string",
         "currencyCode": "string",
         "gatewayAuthCode": "string",
         "gatewayAVSCodes": "string",
         "gatewayCVV2Codes": "string",
         "gatewayInteractionId": "int",
         "gatewayResponseCode": "string",
         "gatewayResponseText": "string",
         "gatewayTransactionId": "string",
         "id": "string",
         "interactionDate": "DateTime",
         "interactionType": "string",
         "isManual": "bool",
         "isRecurring": "bool",
         "note": "string",
         "orderId": "string",
         "paymentEntryStatus": "string",
         "paymentId": "string",
         "paymentTransactionInteractionIdReference": "int",
         "status": "string"
      }
   ],
   "isRecurring": "bool",
   "orderId": "string",
   "paymentServiceTransactionId": "string",
   "paymentType": "string",
   "status": "string"
}
```

For information about the properties in the response, refer to the [REST API Help](/api-overviews/openapi_commerce_overview).

### exec.setPaymentAmountCollected

Set a collected payment amount for the transaction.

| Parameter | Type   | Description                                           |
| --------- | ------ | ----------------------------------------------------- |
| amount    | number | The collected amount you want to set for the payment. |

Example:

```
context.exec.setPaymentAmountCollected(17.00);
```

Response:

```
{
   "amountCollected": "decimal",
   "amountCredited": "decimal",
   "amountRequested": "decimal",
   "auditInfo": {
      "createBy": "string",
      "createDate": "DateTime",
      "updateBy": "string",
      "updateDate": "DateTime"
   },
   "availableActions": "string",
   "billingInfo": {
      "auditInfo": {
         "createBy": "string",
         "createDate": "DateTime",
         "updateBy": "string",
         "updateDate": "DateTime"
      },
      "billingContact": {
         "address": {
            "address1": "string",
            "address2": "string",
            "address3": "string",
            "address4": "string",
            "addressType": "string",
            "cityOrTown": "string",
            "countryCode": "string",
            "isValidated": "bool",
            "postalOrZipCode": "string",
            "stateOrProvince": "string"
         },
         "companyOrOrganization": "string",
         "email": "string",
         "firstName": "string",
         "id": "int",
         "lastNameOrSurname": "string",
         "middleNameOrInitial": "string",
         "phoneNumbers": {
            "home": "string",
            "mobile": "string",
            "work": "string"
         }
      },
      "card": {
         "cardNumberPartOrMask": "string",
         "expireMonth": "short",
         "expireYear": "short",
         "isCardInfoSaved": "bool",
         "isUsedRecurring": "bool",
         "nameOnCard": "string",
         "paymentOrCardType": "string",
         "paymentServiceCardId": "string"
      },
      "isSameBillingShippingAddress": "bool",
      "paymentType": "string",
      "storeCreditCode": "string"
   },
   "changeMessages": [
      {
         "amount": "decimal",
         "appId": "string",
         "appKey": "string",
         "appName": "string",
         "correlationId": "string",
         "createDate": "DateTime",
         "id": "string",
         "identifier": "string",
         "message": "string",
         "metadata": "object",
         "newValue": "string",
         "oldValue": "string",
         "subject": "string",
         "subjectType": "string",
         "success": "bool",
         "userFirstName": "string",
         "userId": "string",
         "userLastName": "string",
         "userScopeType": "string",
         "verb": "string"
      }
   ],
   "id": "string",
   "interactions": [
      {
         "amount": "decimal",
         "auditInfo": {
            "createBy": "string",
            "createDate": "DateTime",
            "updateBy": "string",
            "updateDate": "DateTime"
         },
         "checkNumber": "string",
         "currencyCode": "string",
         "gatewayAuthCode": "string",
         "gatewayAVSCodes": "string",
         "gatewayCVV2Codes": "string",
         "gatewayInteractionId": "int",
         "gatewayResponseCode": "string",
         "gatewayResponseText": "string",
         "gatewayTransactionId": "string",
         "id": "string",
         "interactionDate": "DateTime",
         "interactionType": "string",
         "isManual": "bool",
         "isRecurring": "bool",
         "note": "string",
         "orderId": "string",
         "paymentEntryStatus": "string",
         "paymentId": "string",
         "paymentTransactionInteractionIdReference": "int",
         "status": "string"
      }
   ],
   "isRecurring": "bool",
   "orderId": "string",
   "paymentServiceTransactionId": "string",
   "paymentType": "string",
   "status": "string"
}
```

For information about the properties in the response, refer to the [REST API Help](/api-overviews/openapi_commerce_overview).

### exec.setPaymentAmountCredited

Set a credited payment amount for the transaction.

| Parameter | Type   | Description                                          |
| --------- | ------ | ---------------------------------------------------- |
| amount    | number | The credited amount you want to set for the payment. |

Example:

```
context.exec.setPaymentAmountCredited(20.00);
```

Response:

```
{
   "amountCollected": "decimal",
   "amountCredited": "decimal",
   "amountRequested": "decimal",
   "auditInfo": {
      "createBy": "string",
      "createDate": "DateTime",
      "updateBy": "string",
      "updateDate": "DateTime"
   },
   "availableActions": "string",
   "billingInfo": {
      "auditInfo": {
         "createBy": "string",
         "createDate": "DateTime",
         "updateBy": "string",
         "updateDate": "DateTime"
      },
      "billingContact": {
         "address": {
            "address1": "string",
            "address2": "string",
            "address3": "string",
            "address4": "string",
            "addressType": "string",
            "cityOrTown": "string",
            "countryCode": "string",
            "isValidated": "bool",
            "postalOrZipCode": "string",
            "stateOrProvince": "string"
         },
         "companyOrOrganization": "string",
         "email": "string",
         "firstName": "string",
         "id": "int",
         "lastNameOrSurname": "string",
         "middleNameOrInitial": "string",
         "phoneNumbers": {
            "home": "string",
            "mobile": "string",
            "work": "string"
         }
      },
      "card": {
         "cardNumberPartOrMask": "string",
         "expireMonth": "short",
         "expireYear": "short",
         "isCardInfoSaved": "bool",
         "isUsedRecurring": "bool",
         "nameOnCard": "string",
         "paymentOrCardType": "string",
         "paymentServiceCardId": "string"
      },
      "isSameBillingShippingAddress": "bool",
      "paymentType": "string",
      "storeCreditCode": "string"
   },
   "changeMessages": [
      {
         "amount": "decimal",
         "appId": "string",
         "appKey": "string",
         "appName": "string",
         "correlationId": "string",
         "createDate": "DateTime",
         "id": "string",
         "identifier": "string",
         "message": "string",
         "metadata": "object",
         "newValue": "string",
         "oldValue": "string",
         "subject": "string",
         "subjectType": "string",
         "success": "bool",
         "userFirstName": "string",
         "userId": "string",
         "userLastName": "string",
         "userScopeType": "string",
         "verb": "string"
      }
   ],
   "id": "string",
   "interactions": [
      {
         "amount": "decimal",
         "auditInfo": {
            "createBy": "string",
            "createDate": "DateTime",
            "updateBy": "string",
            "updateDate": "DateTime"
         },
         "checkNumber": "string",
         "currencyCode": "string",
         "gatewayAuthCode": "string",
         "gatewayAVSCodes": "string",
         "gatewayCVV2Codes": "string",
         "gatewayInteractionId": "int",
         "gatewayResponseCode": "string",
         "gatewayResponseText": "string",
         "gatewayTransactionId": "string",
         "id": "string",
         "interactionDate": "DateTime",
         "interactionType": "string",
         "isManual": "bool",
         "isRecurring": "bool",
         "note": "string",
         "orderId": "string",
         "paymentEntryStatus": "string",
         "paymentId": "string",
         "paymentTransactionInteractionIdReference": "int",
         "status": "string"
      }
   ],
   "isRecurring": "bool",
   "orderId": "string",
   "paymentServiceTransactionId": "string",
   "paymentType": "string",
   "status": "string"
}
```

For information about the properties in the response, refer to the [REST API Help](/api-overviews/openapi_commerce_overview).

## Context Objects Available to All Actions

### apiContext

Accesses tenant information.

| Property            | Type      | Description                                                                                                                                              |
| ------------------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
| baseUrl             | string    | The base URL for the site.                                                                                                                               |
| basePciUrl          | string    | The base PCI URL for the site.                                                                                                                           |
| tenantPod           | string    | The name of the tenant pod in which the tenant resides.                                                                                                  |
| appClaims           | string    | The application claims token.                                                                                                                            |
| appKey              | string    | The application key.                                                                                                                                     |
| tenantId            | integer   | Unique identifier for the tenant.                                                                                                                        |
| siteId              | integer   | Unique identifier for the site. This ID is used at all levels of a store, catalog, and tenant to associate objects to a site.                            |
| masterCatalogId     | integer   | Unique identifier for the master catalog.                                                                                                                |
| catalogId           | integer   | The unique identifier for the product catalog. Catalogs are part of a master catalog.                                                                    |
| currencyCode        | string    | The default three-letter ISO currency code for monetary amounts.                                                                                         |
| previewDate         | date/time | The date and time that the content is being viewed. This might be a future date if the content is previewed with an active date range set in the future. |
| localeCode          | string    | The locale code per the country code provided. This code determines the localized content to use and display.                                            |
| correlationId       | string    | The unique identifier of the API request associated with the event action, which might contain multiple actions.                                         |
| isAuthorizedAsAdmin | Boolean   | Indicates whether the Dev Account user is authorized as an admin.                                                                                        |
| userClaims          | string    | The user claims token.                                                                                                                                   |

Example:

```
context.apiContext.baseUrl;
```

### configuration

Receives a JSON response that contains information about the configuration data set in the Action Management JSON editor.

| Property | Type   | Description                                                                     |
| -------- | ------ | ------------------------------------------------------------------------------- |
| Varies   | object | Custom fields and values that you can set in the Action Management JSON Editor. |

Example:

```
context.configuration.customData;
```
