# Installment Transaction Service
Installment Transaction Service

## Version: 1

### Servers

| URL | Description |
| --- | ----------- |
| https://cert.api.visa.com | Sandbox server |

---
## Installment Transaction Service API - Deprecated
Financial Institution (FI) requests Visa Installments Service (VIS) for the list of confirmed or cancelled installment transactions for a given time-period, so they can process installment conversion together with the clearing file received from payment network. Financial Institution performs cancel and refund accordingly.

### [POST] /installments/planAcceptances/cancel
**Cancel plan acceptances**

Plan Cancellation API

#### Parameters

| Name | Located in | Description | Required | Schema | Style | Explode |
| ---- | ---------- | ----------- | -------- | ------ | ----- | ------- |
| X-SERVICE-CONTEXT | header | X-SERVICE-CONTEXT | Yes | string | simple | No |

#### Request Body

Plan acceptance cancellation information

| Required | Schema |
| -------- | ------ |
|  Yes | **application/json**: { **"consumerInfo"**: { **"hashedURN"**: string, **"encEmailAddress"**: string, **"encMobileNumber"**: string, **"encAccountNumber"**: string }, **"refundAmount"**: { **"amount"**: string, **"currencyCode"**: string }, **"transactionID"**: string, **"refundTransactionID"**: string, **"vInstallmentPlanAcceptanceID"**: string, **"vinstallmentPlanAcceptanceID"**: string }<br> |

#### Responses

| Code | Description | Schema |
| ---- | ----------- | ------ |
| 201 | Created | **application/json**: { **"201"**: object, **"UpdatePlanAcceptanceResponse"**: { **"transactionId"**: string, **"cancellationStatus"**: string, **"cancellationDateTime"**: string, **"vinstallmentPlanAcceptanceId"**: string } }<br> |
| 401 | Unauthorized |  |
| 403 | Forbidden |  |
| 404 | Not Found |  |

### [POST] /installments/candidates/batch
**Check Consumer Eligibility Batch**

#### Parameters

| Name | Located in | Description | Required | Schema | Style | Explode |
| ---- | ---------- | ----------- | -------- | ------ | ----- | ------- |
| X-SERVICE-CONTEXT | header | X-SERVICE-CONTEXT | Yes | string | simple | No |

#### Request Body

list of mobile phone numbers

| Required | Schema |
| -------- | ------ |
|  Yes | **application/json**: { **"consumerInfo"**: [ { **"hashedURN"**: string, **"encEmailAddress"**: string, **"encMobileNumber"**: string, **"encAccountNumber"**: string } ] }<br> |

#### Responses

| Code | Description | Schema |
| ---- | ----------- | ------ |
| 201 | Created | **application/json**: { **"201"**: object, **"ConsumerEligibilityBatchResponse"**: { **"failureCount"**: integer, **"successCount"**: integer, **"batchExpirationDate"**: string, **"vEligibilityBatchID"**: string } }<br> |
| 401 | Unauthorized |  |
| 403 | Forbidden |  |
| 404 | Not Found |  |

### [POST] /installments/plans/{planID}/planAcceptances
**Confirm plan acceptance**

Plan Selection API

#### Parameters

| Name | Located in | Description | Required | Schema | Style | Explode |
| ---- | ---------- | ----------- | -------- | ------ | ----- | ------- |
| planID | path | A PlanID of an available plan | Yes | string | simple | No |
| X-SERVICE-CONTEXT | header | X-SERVICE-CONTEXT | Yes | string | simple | No |

#### Request Body

Plan acceptance confirmation information

| Required | Schema |
| -------- | ------ |
|  Yes | **application/json**: { **"consumerInfo"**: { **"hashedURN"**: string, **"encEmailAddress"**: string, **"encMobileNumber"**: string, **"encAccountNumber"**: string }, **"vTransactionID"**: string, **"transactionAmount"**: { **"amount"**: string, **"currencyCode"**: string }, **"transactionDateTime"**: string, **"externalTransactionID"**: string, **"transactionDescriptor"**: string, **"vInstallmentPlanTermsAndConditionsVersion"**: { **"url"**: string, **"versionNumber"**: string } }<br> |

#### Responses

| Code | Description | Schema |
| ---- | ----------- | ------ |
| 201 | Created | **application/json**: { **"201"**: object, **"ConfirmPlanAcceptanceResponse"**: { **"vTransactionID"**: string, **"vInstallmentPlanID"**: string, **"planAcceptanceStatus"**: string, **"vInstallmentPlanAcceptanceID"**: string } }<br> |
| 401 | Unauthorized |  |
| 403 | Forbidden |  |
| 404 | Not Found |  |

### [GET] /installments/candidates/batch/{vCandidatesBatchID}
**Check Consumer Eligibility Batch Results by Batch ID**

#### Parameters

| Name | Located in | Description | Required | Schema | Style | Explode |
| ---- | ---------- | ----------- | -------- | ------ | ----- | ------- |
| vCandidatesBatchID | path | Batch id of the request job to getPlan the eligibility check results for the batch job submitted earlier | Yes | string | simple | No |
| X-SERVICE-CONTEXT | header | X-SERVICE-CONTEXT | Yes | string | simple | No |
| page | query | Results page you want to retrieve (0..N) | No | integer | form | Yes |
| size | query | Number of records per page | No | integer | form | Yes |

#### Responses

| Code | Description | Schema |
| ---- | ----------- | ------ |
| 200 | ok | **application/json**: { **"ConsumerEligibilityBatchDetailResponse"**: { **"batchData"**: { **"last"**: boolean, **"size"**: integer, **"sort"**: { **"empty"**: boolean, **"sorted"**: boolean, **"unsorted"**: boolean }, **"empty"**: boolean, **"first"**: boolean, **"number"**: integer, **"content"**: [ { **"errors"**: [ { **"error"**: string } ], **"consumerInfo"**: { **"hashedURN"**: string, **"encEmailAddress"**: string, **"encMobileNumber"**: string, **"encAccountNumber"**: string }, **"issuerBrandName"**: string, **"eligibilityStatus"**: boolean } ], **"pageable"**: { **"sort"**: { **"empty"**: boolean, **"sorted"**: boolean, **"unsorted"**: boolean }, **"paged"**: boolean, **"offset"**: long, **"unpaged"**: boolean, **"pageSize"**: integer, **"pageNumber"**: integer }, **"totalPages"**: integer, **"totalElements"**: long, **"numberOfElements"**: integer }, **"batchError"**: string, **"batchStatus"**: string, <br>**Available values:** "SUBMITTED", "COMPLETED", "FAILED", **"batchExpirationDate"**: string, **"veligibilityBatchID"**: string } }<br> |
| 401 | Unauthorized |  |
| 403 | Forbidden |  |
| 404 | Not Found |  |

### [POST] /installments/eligiblePlans
**Fetch plan options**

Eligibility Check API - Fetch Installment Plan Options

#### Parameters

| Name | Located in | Description | Required | Schema | Style | Explode |
| ---- | ---------- | ----------- | -------- | ------ | ----- | ------- |
| X-SERVICE-CONTEXT | header | X-SERVICE-CONTEXT | Yes | string | simple | No |

#### Request Body

Consumer Information

| Required | Schema |
| -------- | ------ |
|  Yes | **application/json**: { **"txnAmount"**: { **"amount"**: string, **"currencyCode"**: string }, **"consumerInfo"**: { **"hashedURN"**: string, **"encEmailAddress"**: string, **"encMobileNumber"**: string, **"encAccountNumber"**: string } }<br> |

#### Responses

| Code | Description | Schema |
| ---- | ----------- | ------ |
| 201 | Created | **application/json**: { **"201"**: object, **"InstallmentOffersResponse"**: { **"fees"**: [ { **"rate"**: number, **"type"**: string, <br>**Available values:** "CONSUMER", "ISSUER_TO_ACQUIRER", "ACQUIRER_TO_ISSUER", **"amount"**: number } ], **"name"**: string, **"type"**: string, **"partnerID"**: string, **"promotionID"**: string, **"promotionCode"**: string, **"totalPlanCost"**: { **"amount"**: string, **"currencyCode"**: string }, **"txnAmountRanges"**: [ { **"maximumTxnAmount"**: string, **"minimumTxnAmount"**: string } ], **"installmentAmount"**: { **"amount"**: string, **"currencyCode"**: string }, **"termsAndConditions"**: [ { **"status"**: string, **"tncUrl"**: string, **"version"**: string, **"createdOn"**: string } ], **"vInstallmentPlanID"**: string, **"effectiveDateRanges"**: [ { **"endDate"**: string, **"startDate"**: string } ], **"totalFixedFeeAmount"**: { **"amount"**: string, **"currencyCode"**: string }, **"installmentFrequency"**: string, **"numberOfInstallments"**: integer, **"lastInstallmentAmount"**: { **"amount"**: string, **"currencyCode"**: string }, **"totalVariableFeeAmount"**: { **"amount"**: string, **"currencyCode"**: string } } }<br> |
| 401 | Unauthorized |  |
| 403 | Forbidden |  |
| 404 | Not Found |  |

### [POST] /installments/candidates
**Check Consumer Eligibility for Installment Plans**

Eligibility Check API - Initiate Check Consumer Eligibility

#### Parameters

| Name | Located in | Description | Required | Schema | Style | Explode |
| ---- | ---------- | ----------- | -------- | ------ | ----- | ------- |
| X-SERVICE-CONTEXT | header | X-SERVICE-CONTEXT | Yes | string | simple | No |

#### Request Body

list of mobile phone numbers

| Required | Schema |
| -------- | ------ |
|  Yes | **application/json**: { **"consumerInfo"**: [ { **"hashedURN"**: string, **"encEmailAddress"**: string, **"encMobileNumber"**: string, **"encAccountNumber"**: string } ] }<br> |

#### Responses

| Code | Description | Schema |
| ---- | ----------- | ------ |
| 201 | Created | **application/json**: { **"201"**: object, **"ConsumerEligibilityResponse"**: { **"consumerInfo"**: { **"hashedURN"**: string, **"encEmailAddress"**: string, **"encMobileNumber"**: string, **"encAccountNumber"**: string }, **"issuerBrandName"**: string } }<br> |
| 401 | Unauthorized |  |
| 403 | Forbidden |  |
| 404 | Not Found |  |

---
## Installment Transaction Service API V2
APIs used by Sellers (Merchants/Acquirers/Gateways/Other Merchant Enablers) or issuers (in case of post-purchase model) to enable Visa Installment Solutions for both e-commerce and In-Store based on installment plans defined by issuers.

### [POST] /installments/v2/planAcceptances
**Plan Selection API**

This API enables the Merchant participant to confirm an Installment plan selection when the cardholder selects a plan among the eligible plan options and accepts terms and conditions for that plan. This API can also be used in post-purchase scenarios. The Merchant participant must get cardholders’ consent on the terms and conditions for the selected Installment plan before invoking this API. <p> Plan Selection can be made by providing either the <code>orderInfo</code> or <code>transactionInfo</code>. The <code>orderInfo</code> is recommended to be used only when <code>transactionInfo</code> details are not available and <code>orderInfo.orderAmount</code> is used to restrict the maximum transaction amount that can be applied on the created Plan Acceptance. </p>

#### Parameters

| Name | Located in | Description | Required | Schema | Explode |
| ---- | ---------- | ----------- | -------- | ------ | ------- |
| ex-correlation-id | header | Unique ID for every API request - an optional header. Generated by the API client. Used for end-to-end tracing/debugging. | No | string | No |
| v-c-idempotency-key | header | Unique ID for every API request - an optional header. Generated by the API client. Used for idempotency. | No | string (uuid) | No |

#### Request Body

| Required | Schema |
| -------- | ------ |
|  Yes | **application/json**: { **"encAccountNumber"**: byte, **"tokenAccountNumber"**: string, **"vProvisionedTokenID"**: string, **"paymentAccountReference"**: string } & { **"tokenReferenceID"**: string }<br> |

#### Responses

| Code | Description | Schema |
| ---- | ----------- | ------ |
| 201 | Plan Acceptance was successfully created<br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br>**v-c-idempotency-key**: Unique ID for the API response. v-c-idempotency-key is echoed back. Used for idempotency.<br> | **application/json**: { **"vPlanID"**: string (uuid), **"vPlanIDRef"**: string, **"createdDateTime"**: dateTime, **"transactionInfo"**: { **"authCode"**: string, **"currency"**: string, **"vTransactionID"**: string, **"externalTransactionRef"**: string } & { **"dateTime"**: dateTime, **"transactionAmount"**: long } & { **"installmentTransactions"**: [ { **"status"**: string, <br>**Available values:** "CONFIRMED", "CANCELLED", "PENDING_CONFIRMATION", "PENDING_CANCELLATION", "PARTIALLY_REFUNDED", **"vInstallmentTransactionID"**: string (uuid) } & { **"clearingAmount"**: long, **"clearingDateTime"**: dateTime, **"settlementCurrency"**: string, **"clearingSequenceNumber"**: string, **"acquirerReferenceNumber"**: string } ] }, **"vPlanAcceptanceID"**: string (uuid), **"paymentAccountReference"**: string }<br> |
| 400 | The 400 (Bad Request) HTTP Status code indicates that the server cannot or will not process the request due to an apparent client error. This can happen if you are trying to   + Invoke an API request with missing or invalid parameters.   + PlanAcceptances for Debit must include only <code>orderInfo</code> and must not include <code>transactionInfo</code>. <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } }<br> |
| 401 | API authorized error caused due to any of the following reasons: + x-pay-token is not present, blank, or not in a valid format. + Timestamp field not in valid UTC timestamp format. + Version field is invalid. + Token's timestamp is more than 8 minutes off from the current time. + Token hash mismatch. + APIKey not present in request. + APIKey is not active. + APIKey not valid. + APIKey not active. + Request has more than one authentication token, which is not supported <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 403 | The 403 (Forbidden) HTTP Status code indicates that the access failed due to insufficient permissions or the operation is not allowed. This can happen if you are trying to   + Invoke an API request for a resource that is not part of your project.   + Perform an operation that is not permitted in the given context  Check for the following:   + You are using a project and the credential for the project that includes the API being accessed.   + You created a project and received sandbox credentials for the API’s being called.   + You added the API being called to the project (if not already present) with the credentials that are being used.   + The Consumer Information provided in the request is not eligible for the Installment plan.The value of <code>errorResponse.reason</code> is <code>consumerInfoNotEligible</code>   + The Partner details given in the request is not authorized for on behalf of calls. The value of <code>errorResponse.reason</code> is <code>forbiddenClientIDAccess</code>   + The Merchant is not allowed to perform Installment Plan Acceptance. The value of <code>errorResponse.reason</code> is <code>planAcceptanceDisabled</code>   + The Merchant profile is not enabled for Debit Transactions.The value of <code>errorResponse.reason</code> is <code>forbiddenException</code>   + Cross Border Transaction are not allowed on Debit PANs.The value of <code>errorResponse.reason</code> is <code>forbiddenException</code>   + Post Purchase Transaction are not allowed on Debit PANs.The value of <code>errorResponse.reason</code> is <code>forbiddenException</code>   + Plan Acceptances are not allowed on expired cards.The value of <code>errorResponse.reason</code> is <code>consumerInfoNotEligible</code> <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 404 | The referenced Installment Plan was not found, deleted, or expired. The value of <code>errorResponse.reason</code> is <code>planNotFound</code> <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 406 | Not Acceptable - Indicates that the "Accept:" header field is present in a request and none of the available representations for the response have a media type that is listed as acceptable.  This can happen when the requested API version is not available or unsupported; for example, when the version requested in the Accept: header is newer than the currently live/supported version. <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 410 | Gone - Indicates that the resource at this end point is no longer available. This is usually returned for old API versions that are not available anymore - EOL (End-of-Life). The content-type header in the response indicates the latest supported API version. <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 429 | The Visa Developer Center project has clocked too many requests in a given amount of time.  Please contact Visa Support Representative if you want to increase the time limits. <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 500 | Internal Server Error.  Please contact Visa Support Representative with a complete error message, full http request and response details. <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 503 | The Visa system is currently unable to handle the request due to a temporary overloading or maintenance of the server.  There may be a Retry-After header field to suggest an appropriate amount of time for the client to wait before retrying the request. The value of this field can be either an HTTP-date or a number of seconds to delay after the response is received. <code>Retry-After = HTTP-date \|\| delay-seconds</code> examples: + <code>Retry-After: Thu, 31 Dec 2020 23:59:59 GMT</code> + <code>Retry-After: 120</code>  Please contact Visa Support Representative if the issue persists. <br>**Headers:**<br>**Retry-After**: Header field to suggest an appropriate amount of time for the client to wait before retrying the request, typically after a 503 error or after a batch request when the batch job is not completed.
The value of this field can be either an HTTP-date or a number of seconds to delay after the response is received.
<code>Retry-After = HTTP-date || delay-seconds</code>
examples:
+ <code>Retry-After: Thu, 31 Dec 2020 23:59:59 GMT</code>
+ <code>Retry-After: 120</code>
<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |

#### Callback: planAcceptanceStatusChange

##### [POST] `{postbackNotificationUrl}`
**Installment PlanAcceptance Status Change Notifications**

These are API calls initiated by the Visa backend, made to the Visa Partner’s backend servers.
The <code>postbackNotificationUrl</code> is configured by the Visa partners during onboarding.
+ This callback is available only for those clients that own the BIN for the PAN involved – <b>Lenders/Processors/BIN users/BIN owners</b>.
+ Invoked when one or more plan acceptances status change events are available for this lender.
+ These callbacks are sent only if the issuer has opted-in (as in the onboarding profile).
+ There will be 2 retries with random times from 1-30 minutes, if there are any 5XX or 404 errors returned from the client/partner.
<b>Note:</b> This callback is invoked only when a status change occurs at the plan acceptance level.
  For example, if a transaction is added to the plan acceptance and the transaction is not confirmed, since there is no change to the overall status
  of the plan acceptance, there will be no PlanAcceptanceStatusChangeCallback invoked. However, InstallmentTransactionStatusChangeCallback will be invoked for that action.
  If there are many installment transactions associated with a plan acceptance, and if all of them are confirmed, then a plan acceptance confirmation callback is invoked.

#### Parameters

| Name | Located in | Description | Required | Schema | Explode |
| ---- | ---------- | ----------- | -------- | ------ | ------- |
| x-message-tracking-id | header | Tracking ID for callback and notification sent by Visa | Yes | string | No |
| postbackNotificationUrl | path |  | Yes | string | No |
| apiKey | query |  | Yes | string | Yes |
| x-pay-token | header | See [XPayToken definition in Security Schemes](#/components/securitySchemes/x-pay-token) for details <SchemaDefinition schemaRef="#/components/securitySchemes/x-pay-token" />  | Yes | string | No |

#### Request Body

| Required | Schema |
| -------- | ------ |
|  No | **application/json**: { **"status"**: string, <br>**Available values:** "CREATED", "CANCELLED", "UPDATED", "CONFIRMED", **"cardType"**: string, <br>**Available values:** "CREDIT", "DEBIT", "PREPAID", <br>**Default:** CREDIT, **"cardBrand"**: string, <br>**Available values:** "VISA", "NON_VISA", "MASTERCARD", "AMERICAN_EXPRESS", "DISCOVER", "JCB", "UNIONPAY", "DINERSCLUB", <br>**Default:** VISA, **"orderInfo"**: { **"currency"**: string, **"orderAmount"**: long }, **"crossBorder"**: boolean, **"installmentPlan"**: { **"name"**: string, **"type"**: string, <br>**Available values:** "MARKET", "BI_LATERAL", "ISSUER_DEFAULT", "ISSUER_PROMOTION", "ISSUER_HYBRID", **"vPlanID"**: string (uuid), **"fundedBy"**: [ string, <br>**Available values:** "CONSUMER", "MERCHANT" ], **"vPlanIDRef"**: string, **"islamicPlan"**: boolean, **"promotionInfo"**: { **"promotionID"**: string, **"promotionCode"**: string }, **"termsAndConditions"**: [ { **"url"**: string, **"text"**: string, **"version"**: integer, **"languageCode"**: string } ], **"installmentFrequency"**: string, <br>**Available values:** "WEEKLY", "BIWEEKLY", "MONTHLY", "BIMONTHLY", **"numberOfInstallments"**: number (integer) } & { **"costInfo"**: { **"feeInfo"**: [ { **"type"**: string, <br>**Available values:** "ACQUIRER_TO_ISSUER", "ACQUIRER_TO_VISA", "ISSUER_TO_ACQUIRER", "ISSUER_TO_VISA", "ISSUER_TO_VISA_SCHEDULING_FEES", **"flatFee"**: long, **"ratePercentage"**: integer } ], **"currency"**: string, **"totalFees"**: long, **"totalPlanCost"**: long, **"lastInstallment"**: { **"amount"**: long, **"totalAmount"**: long, **"installmentFee"**: long }, **"firstInstallment"**: { **"upfrontFee"**: long, **"totalAmountExcludingUpfrontFee"**: long } & { **"amount"**: long, **"totalAmount"**: long, **"installmentFee"**: long }, **"totalUpfrontFees"**: long, **"totalRecurringFees"**: long, **"annualPercentageRate"**: integer } }, **"messageMetadata"**: { **"type"**: string, <br>**Available values:** "BATCH_COMPLETED", "ELIGIBILITY", "PLANACCEPTANCE_STATUS_UPDATE", "INSTALLMENT_TRANSACTION_STATUS_UPDATE", "BILATERAL_PLAN_PARTNER_STATUS_UPDATE", **"vMessageID"**: string (uuid), **"createdDateTime"**: string (date-time-nooffset) }, **"encAccountNumber"**: byte, **"externalClientID"**: string, **"statusTransitions"**: { **"createdDateTime"**: string (date-time-ms-nooffset), **"updatedDateTime"**: string (date-time-ms-nooffset), **"confirmedDateTime"**: string (date-time-ms-nooffset), **"cancellationDateTime"**: string (date-time-ms-nooffset) }, **"vPlanAcceptanceID"**: string (uuid), **"encSecondaryAccountNumber"**: byte, **"originalEncSecondaryAccountNumber"**: byte }<br> |

#### Responses

| Code | Description |
| ---- | ----------- |
| 401 | API authorized error caused due to any of the following reasons:   + x-pay-token is not present or blank or not in valid format.   + Timestamp field not in valid UTC timestamp format.   + APIKey not present in request.   + APIKey is not active.   + APIKey not valid.   + APIKey not active.  |
| 403 | Forbidden |
| 500 | Internal server error |
| 503 | Service unavailable |
| 2XX | Callback successfully processed and no retries will be performed |

##### Security

| Security Schema | Scopes |
| --------------- | ------ |
| apiKey |  | x-pay-token |  |

#### Callback: installmentTransactionStatusChange

##### [POST] `{postbackNotificationUrl}`
**Installment Transaction Status Change Notifications**

These are API calls initiated by the Visa backend, made to the Visa Partner’s backend servers.
The <code>postbackNotificationUrl</code> is configured by the Visa partners during onboarding. The
+ This callback is available only for those clients that own the BIN for the PAN involved – <b>Lenders/Processors/BIN users/BIN owners</b>.
+ Invoked when InstallmentTransaction status is updated. Installment Transaction corresponds to a clearing and a installment payment schedule.
+ These callbacks are sent only if the issuer has opted-in (as in the onboarding profile).
+ There will be 2 retries with random times from 1-30 minutes, if there are any 5XX or 404 errors returned from the client/partner.

#### Parameters

| Name | Located in | Description | Required | Schema | Explode |
| ---- | ---------- | ----------- | -------- | ------ | ------- |
| x-message-tracking-id | header | Tracking ID for callback and notification sent by Visa | Yes | string | No |
| postbackNotificationUrl | path |  | Yes | string | No |
| apiKey | query |  | Yes | string | Yes |
| x-pay-token | header | See [XPayToken definition in Security Schemes](#/components/securitySchemes/x-pay-token) for details <SchemaDefinition schemaRef="#/components/securitySchemes/x-pay-token" />  | Yes | string | No |

#### Request Body

| Required | Schema |
| -------- | ------ |
|  No | **application/json**: { **"vPlanID"**: string (uuid), **"authCode"**: string, **"cardType"**: string, <br>**Available values:** "CREDIT", "DEBIT", "PREPAID", <br>**Default:** CREDIT, **"currency"**: string, **"cardBrand"**: string, <br>**Available values:** "VISA", "NON_VISA", "MASTERCARD", "AMERICAN_EXPRESS", "DISCOVER", "JCB", "UNIONPAY", "DINERSCLUB", <br>**Default:** VISA, **"vPlanIDRef"**: string, **"crossBorder"**: boolean, **"promotionInfo"**: { **"promotionID"**: string, **"promotionCode"**: string }, **"sourceCurrency"**: string, **"vTransactionID"**: string, **"messageMetadata"**: { **"type"**: string, <br>**Available values:** "BATCH_COMPLETED", "ELIGIBILITY", "PLANACCEPTANCE_STATUS_UPDATE", "INSTALLMENT_TRANSACTION_STATUS_UPDATE", "BILATERAL_PLAN_PARTNER_STATUS_UPDATE", **"vMessageID"**: string (uuid), **"createdDateTime"**: string (date-time-nooffset) }, **"encAccountNumber"**: byte, **"externalClientID"**: string, **"transactionAmount"**: long, **"vPlanAcceptanceID"**: string (uuid), **"installmentTransaction"**: { **"status"**: string, <br>**Available values:** "PENDING_CONFIRMATION", "CONFIRMED", "PENDING_CANCELLATION", "CANCELLED", "PARTIALLY_REFUNDED", **"vInstallmentTransactionID"**: string (uuid) } & { **"clearingAmount"**: long, **"clearingDateTime"**: dateTime, **"settlementCurrency"**: string, **"clearingSequenceNumber"**: string, **"acquirerReferenceNumber"**: string } & { **"refundAmount"**: long, **"sourceCurrency"**: string, **"lastRefundDateTime"**: dateTime, **"refundAmountInSourceCurrency"**: long, **"clearingAmountInSourceCurrency"**: long }, **"transactionRefundAmount"**: long, **"encSecondaryAccountNumber"**: byte, **"originalEncSecondaryAccountNumber"**: byte, **"transactionAmountInSourceCurrency"**: long, **"transactionRefundAmountInSourceCurrency"**: long }<br> |

#### Responses

| Code | Description |
| ---- | ----------- |
| 401 | API authorized error caused due to any of the following reasons:   + x-pay-token is not present or blank or not in valid format.   + Timestamp field not in valid UTC timestamp format.   + APIKey not present in request.   + APIKey is not active.   + APIKey not valid.   + APIKey not active.  |
| 403 | Forbidden |
| 500 | Internal server error |
| 503 | Service unavailable |
| 2XX | Callback successfully processed and no retries will be performed |

##### Security

| Security Schema | Scopes |
| --------------- | ------ |
| apiKey |  | x-pay-token |  |

### [POST] /installments/v2/planAcceptances/transactions/search
**Retrieve Plan Acceptance Transactions - Search**

This API retrieves the list of Installment Transactions associated with a PlanAcceptance for a given set of criteria. A PlanAcceptance can be associated with one or more ISO transactions or a part of an ISO transaction (one clearing/settlement record among the many clearing/settlement records in a ISO transaction) The results are sorted by plan acceptance <code>createdDateTime</code> in reverse chronological order.

#### Parameters

| Name | Located in | Description | Required | Schema | Explode |
| ---- | ---------- | ----------- | -------- | ------ | ------- |
| ex-correlation-id | header | Unique ID for every API request - an optional header. Generated by the API client. Used for end-to-end tracing/debugging. | No | string | No |
| size | query |  | No | integer, <br>**Default:** 100 | Yes |
| page | query |  | No | integer | Yes |

#### Request Body

| Required | Schema |
| -------- | ------ |
|  Yes | **application/json**: { **"encAccountNumber"**: byte, **"tokenAccountNumber"**: string, **"vProvisionedTokenID"**: string, **"paymentAccountReference"**: string } & { **"tokenReferenceID"**: string } & { **"category"**: string, **"merchantReferenceID"**: string, **"partnerMerchantReferenceID"**: string } & { **"authCode"**: string, **"currency"**: string, **"vTransactionID"**: string, **"minTransactionAmount"**: long, **"externalTransactionRef"**: string }<br> |

#### Responses

| Code | Description | Schema |
| ---- | ----------- | ------ |
| 200 | PlanAcceptance Transactions Results Page<br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"last"**: boolean, **"empty"**: boolean, **"first"**: boolean, **"number"**: integer, **"totalCount"**: integer, **"totalPages"**: integer, **"resultsCount"**: integer } & { **"content"**: [ { **"authCode"**: string, **"currency"**: string, **"vTransactionID"**: string, **"externalTransactionRef"**: string } & { **"dormant"**: string, <br>**Available values:** "true", "false", <br>**Default:** false, **"cardBrand"**: string, <br>**Available values:** "VISA", "NON_VISA", "MASTERCARD", "AMERICAN_EXPRESS", "DISCOVER", "JCB", "UNIONPAY", "DINERSCLUB", <br>**Default:** VISA, **"vPlanIDRef"**: string, **"crossBorder"**: boolean, **"transactionAmount"**: long, **"vPlanAcceptanceID"**: string (uuid), **"installmentTransactions"**: [ { **"status"**: string, <br>**Available values:** "CONFIRMED", "CANCELLED", "PENDING_CONFIRMATION", "PENDING_CANCELLATION", "PARTIALLY_REFUNDED", **"vInstallmentTransactionID"**: string (uuid) } & { **"clearingAmount"**: long, **"clearingDateTime"**: dateTime, **"settlementCurrency"**: string, **"clearingSequenceNumber"**: string, **"acquirerReferenceNumber"**: string } & { **"refundAmount"**: long, **"lastRefundDateTime"**: dateTime } ], **"transactionRefundAmount"**: long } ] }<br> |
| 400 | The <code>errorResponse.details</code> part of the error response can provide a list of fields that failed data validation constraints and errorResponse.reason values for this error include:   <ul>   <li><code>invalidRequest</code>The API server could not understand the request; for example, base64 decoding failed, the field is not in a particular format, etc.   </ul> <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 401 | API authorized error caused due to any of the following reasons: + x-pay-token is not present, blank, or not in a valid format. + Timestamp field not in valid UTC timestamp format. + Version field is invalid. + Token's timestamp is more than 8 minutes off from the current time. + Token hash mismatch. + APIKey not present in request. + APIKey is not active. + APIKey not valid. + APIKey not active. + Request has more than one authentication token, which is not supported <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 403 | The 403 (Forbidden) HTTP Status code indicates that the access failed due to insufficient permissions or the operation is not allowed. This can happen if you are trying to + Invoke an API request for a resource that is not part of your project. + Perform an operation that is not permitted in the given context  Check for the following:   + You are using a project and the credential for the project that includes the API being accessed.   + You created a project and received sandbox credentials for the API’s being called.   + You added the API being called to the project (if not already present) with the credentials that are being used. <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 406 | Not Acceptable - Indicates that the "Accept:" header field is present in a request and none of the available representations for the response have a media type that is listed as acceptable.  This can happen when the requested API version is not available or unsupported; for example, when the version requested in the Accept: header is newer than the currently live/supported version. <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 410 | Gone - Indicates that the resource at this end point is no longer available. This is usually returned for old API versions that are not available anymore - EOL (End-of-Life). The content-type header in the response indicates the latest supported API version. <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 429 | The Visa Developer Center project has clocked too many requests in a given amount of time.  Please contact Visa Support Representative if you want to increase the time limits. <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 500 | Internal Server Error.  Please contact Visa Support Representative with a complete error message, full http request and response details. <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 503 | The Visa system is currently unable to handle the request due to a temporary overloading or maintenance of the server.  There may be a Retry-After header field to suggest an appropriate amount of time for the client to wait before retrying the request. The value of this field can be either an HTTP-date or a number of seconds to delay after the response is received. <code>Retry-After = HTTP-date \|\| delay-seconds</code> examples: + <code>Retry-After: Thu, 31 Dec 2020 23:59:59 GMT</code> + <code>Retry-After: 120</code>  Please contact Visa Support Representative if the issue persists. <br>**Headers:**<br>**Retry-After**: Header field to suggest an appropriate amount of time for the client to wait before retrying the request, typically after a 503 error or after a batch request when the batch job is not completed.
The value of this field can be either an HTTP-date or a number of seconds to delay after the response is received.
<code>Retry-After = HTTP-date || delay-seconds</code>
examples:
+ <code>Retry-After: Thu, 31 Dec 2020 23:59:59 GMT</code>
+ <code>Retry-After: 120</code>
<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |

### [POST] /installments/v2/vtms/offerConfirmation
**Offer Confirmation**

This API submits the offer confirmation to Visa. Visa will deliver offer information to the Issuer in the authorization message.

#### Request Body

| Required | Schema |
| -------- | ------ |
|  No |  |

#### Responses

| Code | Description |
| ---- | ----------- |
| 201 |  |

### [PUT] /installments/v2/merchantPreferences
**Update Merchant Preferences API**

This API updates the Merchant preferences like bilateral plan related preferences or any other preferences. Seller can Opt-In or Opt-Out of a Bilateral Plan Association using this API.

#### Parameters

| Name | Located in | Description | Required | Schema | Explode |
| ---- | ---------- | ----------- | -------- | ------ | ------- |
| ex-correlation-id | header | Unique ID for every API request - an optional header. Generated by the API client. Used for end-to-end tracing/debugging. | No | string | No |

#### Request Body

| Required | Schema |
| -------- | ------ |
|  Yes | **application/json**: { **"planPreferences"**: { **"vPlanID"**: string (uuid), **"bilateralPlanAction"**: string, <br>**Available values:** "OPT_IN", "OPT_OUT" }, **"partnerMerchantReferenceID"**: string }<br> |

#### Responses

| Code | Description | Schema |
| ---- | ----------- | ------ |
| 200 | Merchant Preference successfully updated<br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"planPreferences"**: { **"vPlanID"**: string (uuid), **"bilateralPlanAction"**: string, <br>**Available values:** "OPT_IN", "OPT_OUT" }, **"partnerMerchantReferenceID"**: string }<br> |
| 400 | The <code>errorResponse.details</code> part of the error response can provide a list of fields that failed data validation constraints and errorResponse.reason values for this error include:   <ul>   <li><code>invalidRequest</code>The API server could not understand the request; for example, base64 decoding failed, the field is not in a particular format, etc.   </ul> <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 401 | API authorized error caused due to any of the following reasons: + x-pay-token is not present, blank, or not in a valid format. + Timestamp field not in valid UTC timestamp format. + Version field is invalid. + Token's timestamp is more than 8 minutes off from the current time. + Token hash mismatch. + APIKey not present in request. + APIKey is not active. + APIKey not valid. + APIKey not active. + Request has more than one authentication token, which is not supported <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 403 | The 403 (Forbidden) HTTP Status code indicates that the access failed due to insufficient permissions or the operation is not allowed. This can happen if you are trying to + Invoke an API request for a resource that is not part of your project. + Perform an operation that is not permitted in the given context  Check for the following:   + You are using a project and the credential for the project that includes the API being accessed.   + You created a project and received sandbox credentials for the API’s being called.   + You added the API being called to the project (if not already present) with the credentials that are being used. <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 404 | The referenced Installment Plan was not found, deleted, or expired. The value of <code>errorResponse.reason</code> is <code>planNotFound</code> <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 406 | Not Acceptable - Indicates that the "Accept:" header field is present in a request and none of the available representations for the response have a media type that is listed as acceptable.  This can happen when the requested API version is not available or unsupported; for example, when the version requested in the Accept: header is newer than the currently live/supported version. <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 409 | Conflict<br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 410 | Gone - Indicates that the resource at this end point is no longer available. This is usually returned for old API versions that are not available anymore - EOL (End-of-Life). The content-type header in the response indicates the latest supported API version. <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 429 | The Visa Developer Center project has clocked too many requests in a given amount of time.  Please contact Visa Support Representative if you want to increase the time limits. <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 500 | Internal Server Error.  Please contact Visa Support Representative with a complete error message, full http request and response details. <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 503 | The Visa system is currently unable to handle the request due to a temporary overloading or maintenance of the server.  There may be a Retry-After header field to suggest an appropriate amount of time for the client to wait before retrying the request. The value of this field can be either an HTTP-date or a number of seconds to delay after the response is received. <code>Retry-After = HTTP-date \|\| delay-seconds</code> examples: + <code>Retry-After: Thu, 31 Dec 2020 23:59:59 GMT</code> + <code>Retry-After: 120</code>  Please contact Visa Support Representative if the issue persists. <br>**Headers:**<br>**Retry-After**: Header field to suggest an appropriate amount of time for the client to wait before retrying the request, typically after a 503 error or after a batch request when the batch job is not completed.
The value of this field can be either an HTTP-date or a number of seconds to delay after the response is received.
<code>Retry-After = HTTP-date || delay-seconds</code>
examples:
+ <code>Retry-After: Thu, 31 Dec 2020 23:59:59 GMT</code>
+ <code>Retry-After: 120</code>
<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |

#### Callback: partnerBilateralPlanStatusChange

##### [POST] `{postbackNotificationUrl}`
**Postback Notifications**

These are API calls initiated by the Visa backend to the Visa Partner’s backend servers.
+ The <code>postbackNotificationUrl</code> is configured by the Visa partners during onboarding.
+ Invoked whenever the partner(Issuer) associates/dissociates or make changes to Bilateral Plan assigned to Sellers.
+ Invoked whenever the partner(Seller) accepts or rejects or cancels a bilateral plan assigned to them by Issuers
+ There will be 2 retries with random times from 1-30 minutes if there are any 5XX or 404 errors returned from the client/partner.

#### Parameters

| Name | Located in | Description | Required | Schema | Explode |
| ---- | ---------- | ----------- | -------- | ------ | ------- |
| x-message-tracking-id | header | Tracking ID for callback and notification sent by Visa | Yes | string | No |
| postbackNotificationUrl | path |  | Yes | string | No |
| apiKey | query |  | Yes | string | Yes |
| x-pay-token | header | See [XPayToken definition in Security Schemes](#/components/securitySchemes/x-pay-token) for details <SchemaDefinition schemaRef="#/components/securitySchemes/x-pay-token" />  | Yes | string | No |

#### Request Body

| Required | Schema |
| -------- | ------ |
|  No | **application/json**: { **"name"**: string, **"vPlanID"**: string (uuid), **"planType"**: string, <br>**Available values:** "BI_LATERAL", **"statusType"**: string, <br>**Available values:** "PLAN_ASSOCIATED", "PLAN_DISSOCIATED", "PLAN_OPT_IN", "PLAN_OPT_OUT", "PLAN_TERMS_AND_CONDITIONS_UPDATED", "PLAN_EXPIRY_UPDATED", "PLAN_ACTIVATED", **"vPlanIDRef"**: string, **"partnerName"**: string, **"promotionInfo"**: { **"promotionID"**: string, **"promotionCode"**: string }, **"messageMetadata"**: { **"type"**: string, <br>**Available values:** "BATCH_COMPLETED", "ELIGIBILITY", "PLANACCEPTANCE_STATUS_UPDATE", "INSTALLMENT_TRANSACTION_STATUS_UPDATE", "BILATERAL_PLAN_PARTNER_STATUS_UPDATE", **"vMessageID"**: string (uuid), **"createdDateTime"**: string (date-time-nooffset) }, **"termsAndConditions"**: [ { **"url"**: string, **"text"**: string, **"version"**: integer, **"languageCode"**: string } ], **"effectiveDateRanges"**: [ { **"endDate"**: date, **"startDate"**: date } ], **"installmentFrequency"**: string, <br>**Available values:** "WEEKLY", "BIWEEKLY", "MONTHLY", "BIMONTHLY", **"numberOfInstallments"**: number (integer), **"partnerMerchantReferenceID"**: string }<br> |

#### Responses

| Code | Description |
| ---- | ----------- |
| 401 | Authorized error due to any of the following reasons:   + x-pay-token is not present, is blank, or is not in a valid format.   + Timestamp field not in UTC timestamp format.   + apiKey not present in request.   + apiKey is not active.   + apiKey not valid.   + apiKey not active.  |
| 403 | Forbidden |
| 500 | Internal Server Error |
| 503 | Service Unavailable |
| 2XX | Callback successfully processed; no retries will be performed. |

##### Security

| Security Schema | Scopes |
| --------------- | ------ |
| apiKey |  | x-pay-token |  |

### [POST] /installments/v2/clients
**Client Onboarding API**

This API enables Partners to onboard clients associated with them on to Visa Installments. The basic details captured in this API will be associated with the Client Identifier used by the Partner to invoke the API and only the Partner will be allowed to access the API on behalf of the Client.

#### Parameters

| Name | Located in | Description | Required | Schema | Explode |
| ---- | ---------- | ----------- | -------- | ------ | ------- |
| ex-correlation-id | header | Unique ID for every API request - an optional header. Generated by the API client. Used for end-to-end tracing/debugging. | No | string | No |
| v-c-idempotency-key | header | Unique ID for every API request - an optional header. Generated by the API client. Used for idempotency. | No | string (uuid) | No |

#### Request Body

| Required | Schema |
| -------- | ------ |
|  Yes | **application/json**: { **"city"**: string, **"phone"**: string, **"address1"**: string, **"address2"**: string, **"postalCode"**: string, **"countryCode"**: string, **"cardAcceptorId"**: string, **"primaryLegalName"**: string, **"primaryTradeName"**: string, **"primaryWebsiteURL"**: string, **"stateProvinceCode"**: string, **"primaryContactEmail"**: string, **"primaryContactLastName"**: string, **"onBehalfOfRelationships"**: [ { **"relationshipType"**: string, <br>**Available values:** "OBO_FUNDING_FEE_COLLECTOR", "OBO_SERVICE_FEE_COLLECTOR", **"partnerReferenceID"**: string, **"onBehalfOfReferenceID"**: string } ], **"primaryContactFirstName"**: string, **"partnerMerchantReferenceID"**: string }<br> |

#### Responses

| Code | Description | Schema |
| ---- | ----------- | ------ |
| 201 | Successful Merchant Creation Response<br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br>**v-c-idempotency-key**: Unique ID for the API response. v-c-idempotency-key is echoed back. Used for idempotency.<br> | **application/json**: { **"city"**: string, **"phone"**: string, **"address1"**: string, **"address2"**: string, **"postalCode"**: string, **"countryCode"**: string, **"cardAcceptorId"**: string, **"primaryLegalName"**: string, **"primaryTradeName"**: string, **"primaryWebsiteURL"**: string, **"stateProvinceCode"**: string, **"primaryContactEmail"**: string, **"primaryContactLastName"**: string, **"onBehalfOfRelationships"**: [ { **"relationshipType"**: string, <br>**Available values:** "OBO_FUNDING_FEE_COLLECTOR", "OBO_SERVICE_FEE_COLLECTOR", **"partnerReferenceID"**: string, **"onBehalfOfReferenceID"**: string } ], **"primaryContactFirstName"**: string, **"partnerMerchantReferenceID"**: string } & { **"status"**: string, <br>**Available values:** "ONBOARDED" }<br> |
| 400 | The <code>errorResponse.details</code> part of the error response can provide a list of fields that failed data validation constraints and errorResponse.reason values for this error include:   <ul>   <li><code>invalidRequest</code>The API server could not understand the request; for example, base64 decoding failed, the field is not in a particular format, etc.   </ul> <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 401 | API authorized error caused due to any of the following reasons: + x-pay-token is not present, blank, or not in a valid format. + Timestamp field not in valid UTC timestamp format. + Version field is invalid. + Token's timestamp is more than 8 minutes off from the current time. + Token hash mismatch. + APIKey not present in request. + APIKey is not active. + APIKey not valid. + APIKey not active. + Request has more than one authentication token, which is not supported <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 403 | The 403 (Forbidden) HTTP Status code indicates that the access failed due to insufficient permissions or the operation is not allowed. This can happen if you are trying to + Invoke an API request for a resource that is not part of your project. + Perform an operation that is not permitted in the given context  Check for the following:   + You are using a project and the credential for the project that includes the API being accessed.   + You created a project and received sandbox credentials for the API’s being called.   + You added the API being called to the project (if not already present) with the credentials that are being used. <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 406 | Not Acceptable - Indicates that the "Accept:" header field is present in a request and none of the available representations for the response have a media type that is listed as acceptable.  This can happen when the requested API version is not available or unsupported; for example, when the version requested in the Accept: header is newer than the currently live/supported version. <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 409 | Conflict<br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 410 | Gone - Indicates that the resource at this end point is no longer available. This is usually returned for old API versions that are not available anymore - EOL (End-of-Life). The content-type header in the response indicates the latest supported API version. <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 429 | The Visa Developer Center project has clocked too many requests in a given amount of time.  Please contact Visa Support Representative if you want to increase the time limits. <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 500 | Internal Server Error.  Please contact Visa Support Representative with a complete error message, full http request and response details. <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 503 | The Visa system is currently unable to handle the request due to a temporary overloading or maintenance of the server.  There may be a Retry-After header field to suggest an appropriate amount of time for the client to wait before retrying the request. The value of this field can be either an HTTP-date or a number of seconds to delay after the response is received. <code>Retry-After = HTTP-date \|\| delay-seconds</code> examples: + <code>Retry-After: Thu, 31 Dec 2020 23:59:59 GMT</code> + <code>Retry-After: 120</code>  Please contact Visa Support Representative if the issue persists. <br>**Headers:**<br>**Retry-After**: Header field to suggest an appropriate amount of time for the client to wait before retrying the request, typically after a 503 error or after a batch request when the batch job is not completed.
The value of this field can be either an HTTP-date or a number of seconds to delay after the response is received.
<code>Retry-After = HTTP-date || delay-seconds</code>
examples:
+ <code>Retry-After: Thu, 31 Dec 2020 23:59:59 GMT</code>
+ <code>Retry-After: 120</code>
<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |

### [GET] /installments/v2/candidates/batch/{vBatchID}
**Matched Candidates Batch Result API**

This API retrieves the result of a previously submitted Matched Candidates Batch request identified by the batch ID.

#### Parameters

| Name | Located in | Description | Required | Schema | Explode |
| ---- | ---------- | ----------- | -------- | ------ | ------- |
| ex-correlation-id | header | Unique ID for every API request - an optional header. Generated by the API client. Used for end-to-end tracing/debugging. | No | string | No |
| vBatchID | path |  | Yes | string (uuid) | No |
| size | query |  | No | <br>**Default:** 1000 | Yes |
| page | query |  | No | integer | Yes |
| eligibilityStatus | query |  | No | string, <br>**Available values:** "MATCHED", "NOT_MATCHED", "ERROR", <br>**Default:** MATCHED | Yes |

#### Responses

| Code | Description | Schema |
| ---- | ----------- | ------ |
| 200 | Get matched candidates results for the batch request submitted earlier. + All of the data submitted in the original HTTP request is echoed back in the response. + The order of the results is preserved (when compared to the order of items in the original request body). + If there were errors processing this candidate, an <code>errorResponse</code> is returned. In this case, the <code>eligibilityStatus</code> is 'ERROR'. + If any of the required fields in <code>consumerInfo</code> are not provided in the input, an empty string is returned for those fields with a 400 <code>errorMesage.details</code> entry pointing to the missing entries. + When <code>batchStatus == SUBMITTED</code> there will be no <code>content</code> in the response. + When <code>batchStatus == COMPLETED</code> all fields will be available in the response. + If the batch results are not ready, a Retry-After response header should be sent, when appropriate (Default value 600 seconds). <br>**Headers:**<br>**Retry-After**: Header field to suggest an appropriate amount of time for the client to wait before retrying the request, typically after a 503 error or after a batch request when the batch job is not completed.
The value of this field can be either an HTTP-date or a number of seconds to delay after the response is received.
<code>Retry-After = HTTP-date || delay-seconds</code>
examples:
+ <code>Retry-After: Thu, 31 Dec 2020 23:59:59 GMT</code>
+ <code>Retry-After: 120</code>
<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"last"**: boolean, **"empty"**: boolean, **"first"**: boolean, **"number"**: integer, **"totalCount"**: integer, **"totalPages"**: integer, **"resultsCount"**: integer } & { **"content"**: [ { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string }, **"encAccountNumber"**: byte, **"eligibilityStatus"**: string, <br>**Available values:** "MATCHED", "NOT_MATCHED", "ERROR", <br>**Default:** MATCHED, **"tokenAccountNumber"**: string, **"vProvisionedTokenID"**: string } ], **"vBatchID"**: string (uuid), **"batchType"**: string, <br>**Available values:** "CARDHOLDER_ENROLLMENT", "CARDHOLDER_ENROLLMENT_UPDATE", "CARDHOLDER_ENROLLMENT_DELETE", "PLAN_ACCEPTANCE_IRREGULAR_PAYMENTS", "CANDIDATES", **"batchStatus"**: string, <br>**Available values:** "SUBMITTED", "COMPLETED", **"batchExecutionDateTime"**: dateTime, **"batchExpirationDateTime"**: dateTime }<br> |
| 400 | The <code>errorResponse.details</code> part of the error response can provide a list of fields that failed data validation constraints and errorResponse.reason values for this error include:   <ul>   <li><code>invalidRequest</code>The API server could not understand the request; for example, base64 decoding failed, the field is not in a particular format, etc.   </ul> <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 401 | API authorized error caused due to any of the following reasons: + x-pay-token is not present, blank, or not in a valid format. + Timestamp field not in valid UTC timestamp format. + Version field is invalid. + Token's timestamp is more than 8 minutes off from the current time. + Token hash mismatch. + APIKey not present in request. + APIKey is not active. + APIKey not valid. + APIKey not active. + Request has more than one authentication token, which is not supported <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 403 | The 403 (Forbidden) HTTP Status code indicates that the access failed due to insufficient permissions or the operation is not allowed. This can happen if you are trying to   + Invoke an API request for a resource that is not part of your project.   + Perform an operation that is not permitted in the given context  Check for the following:   + You are using a project and the credential for the project that includes the API being accessed.   + You created a project and received sandbox credentials for the API’s being called.   + You added the API being called to the project (if not already present) with the credentials that are being used.   + The Client does not have the permissions to view the <code>batchId</code>. The value of <code>errorResponse.reason</code> is <code>forbiddenClientIDBatchIDAccess</code> <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 404 | Batch not found. The batch corresponding to the vBatchID is either expired or invalid.<br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 406 | Not Acceptable - Indicates that the "Accept:" header field is present in a request and none of the available representations for the response have a media type that is listed as acceptable.  This can happen when the requested API version is not available or unsupported; for example, when the version requested in the Accept: header is newer than the currently live/supported version. <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 410 | Gone - Indicates that the resource at this end point is no longer available. This is usually returned for old API versions that are not available anymore - EOL (End-of-Life). The content-type header in the response indicates the latest supported API version. <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 429 | The Visa Developer Center project has clocked too many requests in a given amount of time.  Please contact Visa Support Representative if you want to increase the time limits. <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 500 | Internal Server Error.  Please contact Visa Support Representative with a complete error message, full http request and response details. <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 503 | The Visa system is currently unable to handle the request due to a temporary overloading or maintenance of the server.  There may be a Retry-After header field to suggest an appropriate amount of time for the client to wait before retrying the request. The value of this field can be either an HTTP-date or a number of seconds to delay after the response is received. <code>Retry-After = HTTP-date \|\| delay-seconds</code> examples: + <code>Retry-After: Thu, 31 Dec 2020 23:59:59 GMT</code> + <code>Retry-After: 120</code>  Please contact Visa Support Representative if the issue persists. <br>**Headers:**<br>**Retry-After**: Header field to suggest an appropriate amount of time for the client to wait before retrying the request, typically after a 503 error or after a batch request when the batch job is not completed.
The value of this field can be either an HTTP-date or a number of seconds to delay after the response is received.
<code>Retry-After = HTTP-date || delay-seconds</code>
examples:
+ <code>Retry-After: Thu, 31 Dec 2020 23:59:59 GMT</code>
+ <code>Retry-After: 120</code>
<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |

### [POST] /installments/v2/plans/match
**Matched Eligible Installment Plans API**

This API retrieves eligible Installment plan information to provide Installment offers to a cardholder during checkout based on a set of criteria. The plans are looked up against all of the participating Issuers. This API checks the eligibility of a Payment Transaction for Installments plans and also checks against the Issuer Conditions for eligibility. + The result of this operation, when successful, is one or more eligible Installment plans presented as eligible plans. + If there are no active plans matching the given set of criteria, then an empty array will be returned in this API response. + Any plans that are already expired or are expiring in the next 24 hrs will not be returned in this API response.

#### Parameters

| Name | Located in | Description | Required | Schema | Explode |
| ---- | ---------- | ----------- | -------- | ------ | ------- |
| ex-correlation-id | header | Unique ID for every API request - an optional header. Generated by the API client. Used for end-to-end tracing/debugging. | No | string | No |

#### Request Body

| Required | Schema |
| -------- | ------ |
|  Yes | **application/json**: { **"encAccountNumber"**: byte, **"tokenAccountNumber"**: string, **"vProvisionedTokenID"**: string, **"paymentAccountReference"**: string } & { **"preferences"**: { **"capabilities"**: { **"visIndicatorCapability"**: string, <br>**Available values:** "SUPPORTED", "NOT_SUPPORTED" }, **"installmentMode"**: string, <br>**Available values:** "DURING_PURCHASE", "POST_PURCHASE", **"acceptanceChannel"**: string, <br>**Available values:** "IN_PERSON", "E_COMMERCE", <br>**Default:** IN_PERSON }, **"merchantInfo"**: { **"category"**: string, **"merchantReferenceID"**: string, **"partnerMerchantReferenceID"**: string }, **"transactionAmount"**: long, **"transactionCurrency"**: string }<br> |

#### Responses

| Code | Description | Schema |
| ---- | ----------- | ------ |
| 200 | A list of matched/eligible Installment plans. If none match, an empty array is returned.<br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"matchedPlans"**: [ { **"name"**: string, **"type"**: string, <br>**Available values:** "MARKET", "BI_LATERAL", "ISSUER_DEFAULT", "ISSUER_PROMOTION", "ISSUER_HYBRID", **"vPlanID"**: string (uuid), **"fundedBy"**: [ string, <br>**Available values:** "CONSUMER", "MERCHANT" ], **"vPlanIDRef"**: string, **"islamicPlan"**: boolean, **"promotionInfo"**: { **"promotionID"**: string, **"promotionCode"**: string }, **"termsAndConditions"**: [ { **"url"**: string, **"text"**: string, **"version"**: integer, **"languageCode"**: string } ], **"installmentFrequency"**: string, <br>**Available values:** "WEEKLY", "BIWEEKLY", "MONTHLY", "BIMONTHLY", **"numberOfInstallments"**: number (integer) } & { **"costInfo"**: { **"feeInfo"**: [ { **"type"**: string, <br>**Available values:** "CONSUMER", "CONSUMER_UPFRONT", "MERCHANT_FUNDING", "MERCHANT_SERVICE", **"flatFee"**: long, **"ratePercentage"**: integer, **"monthlyRatePercentage"**: integer } ], **"currency"**: string, **"totalFees"**: long, **"totalPlanCost"**: long, **"lastInstallment"**: { **"amount"**: long, **"totalAmount"**: long, **"installmentFee"**: long }, **"firstInstallment"**: { **"upfrontFee"**: long, **"totalAmountExcludingUpfrontFee"**: long } & { **"amount"**: long, **"totalAmount"**: long, **"installmentFee"**: long }, **"totalUpfrontFees"**: long, **"totalRecurringFees"**: long, **"annualPercentageRate"**: integer } } ], <br>**Default:** , **"merchantInfo"**: { **"category"**: string, **"merchantReferenceID"**: string, **"partnerMerchantReferenceID"**: string }, **"transactionAmount"**: long, **"transactionCurrency"**: string, **"paymentAccountReference"**: string }<br> |
| 400 | The <code>errorResponse.details</code> part of the error response can provide a list of fields that failed data validation constraints and errorResponse.reason values for this error include:   <ul>   <li><code>invalidRequest</code>The API server could not understand the request; for example, base64 decoding failed, the field is not in a particular format, etc.   </ul> <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 401 | API authorized error caused due to any of the following reasons: + x-pay-token is not present, blank, or not in a valid format. + Timestamp field not in valid UTC timestamp format. + Version field is invalid. + Token's timestamp is more than 8 minutes off from the current time. + Token hash mismatch. + APIKey not present in request. + APIKey is not active. + APIKey not valid. + APIKey not active. + Request has more than one authentication token, which is not supported <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 403 | The 403 (Forbidden) HTTP Status code indicates that the access failed due to insufficient permissions or the operation is not allowed. This can happen if you are trying to   + Invoke an API request for a resource that is not part of your project.   + Perform an operation that is not permitted in the given context  Check for the following:   + You are using a project and the credential for the project that includes the API being accessed.   + You created a project and received sandbox credentials for the API’s being called.   + You added the API being called to the project (if not already present) with the credentials that are being used.   + The Partner details given in the request is not authorized for on behalf of calls. The value of <code>errorResponse.reason</code> is <code>forbiddenClientIDAccess</code>  |  |
| 406 | Not Acceptable - Indicates that the "Accept:" header field is present in a request and none of the available representations for the response have a media type that is listed as acceptable.  This can happen when the requested API version is not available or unsupported; for example, when the version requested in the Accept: header is newer than the currently live/supported version. <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 410 | Gone - Indicates that the resource at this end point is no longer available. This is usually returned for old API versions that are not available anymore - EOL (End-of-Life). The content-type header in the response indicates the latest supported API version. <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 429 | The Visa Developer Center project has clocked too many requests in a given amount of time.  Please contact Visa Support Representative if you want to increase the time limits. <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 500 | Internal Server Error.  Please contact Visa Support Representative with a complete error message, full http request and response details. <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 503 | The Visa system is currently unable to handle the request due to a temporary overloading or maintenance of the server.  There may be a Retry-After header field to suggest an appropriate amount of time for the client to wait before retrying the request. The value of this field can be either an HTTP-date or a number of seconds to delay after the response is received. <code>Retry-After = HTTP-date \|\| delay-seconds</code> examples: + <code>Retry-After: Thu, 31 Dec 2020 23:59:59 GMT</code> + <code>Retry-After: 120</code>  Please contact Visa Support Representative if the issue persists. <br>**Headers:**<br>**Retry-After**: Header field to suggest an appropriate amount of time for the client to wait before retrying the request, typically after a 503 error or after a batch request when the batch job is not completed.
The value of this field can be either an HTTP-date or a number of seconds to delay after the response is received.
<code>Retry-After = HTTP-date || delay-seconds</code>
examples:
+ <code>Retry-After: Thu, 31 Dec 2020 23:59:59 GMT</code>
+ <code>Retry-After: 120</code>
<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |

### [POST] /installments/v2/candidates/batch/match
**Matched Candidates API - Batch**

This API allows Merchant participants to check if an individual cardholder is (or a set of cardholders are) enabled for Installments, in order to offer Installments to a qualified shopper during purchase. It is an optional API and does not return Installment offers. For retrieving Installment offers specific to a given Installment transaction, see Matched Eligible Installment Plans API.

#### Parameters

| Name | Located in | Description | Required | Schema | Explode |
| ---- | ---------- | ----------- | -------- | ------ | ------- |
| ex-correlation-id | header | Unique ID for every API request - an optional header. Generated by the API client. Used for end-to-end tracing/debugging. | No | string | No |

#### Request Body

Consumer information to use when checking for Installments eligibility.

| Required | Schema |
| -------- | ------ |
|  Yes | **application/json**: { **"encAccountNumbers"**: byte, **"tokenAccountNumbers"**: [ string ], **"vProvisionedTokenIDs"**: [ string ] }<br> |

#### Responses

| Code | Description | Schema |
| ---- | ----------- | ------ |
| 202 | Candidates eligibility batch job submitted successfully<br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"vBatchID"**: string (uuid), **"batchType"**: string, <br>**Available values:** "CARDHOLDER_ENROLLMENT", "CARDHOLDER_ENROLLMENT_UPDATE", "CARDHOLDER_ENROLLMENT_DELETE", "PLAN_ACCEPTANCE_IRREGULAR_PAYMENTS", "CANDIDATES", **"batchExpirationDateTime"**: dateTime }<br> |
| 400 | The <code>errorResponse.details</code> part of the error response can provide a list of fields that failed data validation constraints and errorResponse.reason values for this error include:   <ul>   <li><code>invalidRequest</code>The API server could not understand the request; for example, base64 decoding failed, the field is not in a particular format, etc.   </ul> <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 401 | API authorized error caused due to any of the following reasons: + x-pay-token is not present, blank, or not in a valid format. + Timestamp field not in valid UTC timestamp format. + Version field is invalid. + Token's timestamp is more than 8 minutes off from the current time. + Token hash mismatch. + APIKey not present in request. + APIKey is not active. + APIKey not valid. + APIKey not active. + Request has more than one authentication token, which is not supported <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 403 | The 403 (Forbidden) HTTP Status code indicates that the access failed due to insufficient permissions or the operation is not allowed. This can happen if you are trying to + Invoke an API request for a resource that is not part of your project. + Perform an operation that is not permitted in the given context  Check for the following:   + You are using a project and the credential for the project that includes the API being accessed.   + You created a project and received sandbox credentials for the API’s being called.   + You added the API being called to the project (if not already present) with the credentials that are being used. <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 406 | Not Acceptable - Indicates that the "Accept:" header field is present in a request and none of the available representations for the response have a media type that is listed as acceptable.  This can happen when the requested API version is not available or unsupported; for example, when the version requested in the Accept: header is newer than the currently live/supported version. <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 410 | Gone - Indicates that the resource at this end point is no longer available. This is usually returned for old API versions that are not available anymore - EOL (End-of-Life). The content-type header in the response indicates the latest supported API version. <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 413 | Payload Too Large<br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 429 | The Visa Developer Center project has clocked too many requests in a given amount of time.  Please contact Visa Support Representative if you want to increase the time limits. <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 500 | Internal Server Error.  Please contact Visa Support Representative with a complete error message, full http request and response details. <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 503 | The Visa system is currently unable to handle the request due to a temporary overloading or maintenance of the server.  There may be a Retry-After header field to suggest an appropriate amount of time for the client to wait before retrying the request. The value of this field can be either an HTTP-date or a number of seconds to delay after the response is received. <code>Retry-After = HTTP-date \|\| delay-seconds</code> examples: + <code>Retry-After: Thu, 31 Dec 2020 23:59:59 GMT</code> + <code>Retry-After: 120</code>  Please contact Visa Support Representative if the issue persists. <br>**Headers:**<br>**Retry-After**: Header field to suggest an appropriate amount of time for the client to wait before retrying the request, typically after a 503 error or after a batch request when the batch job is not completed.
The value of this field can be either an HTTP-date or a number of seconds to delay after the response is received.
<code>Retry-After = HTTP-date || delay-seconds</code>
examples:
+ <code>Retry-After: Thu, 31 Dec 2020 23:59:59 GMT</code>
+ <code>Retry-After: 120</code>
<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |

#### Callback: batchCompleted

##### [POST] `{postbackNotificationUrl}`
**Postback Notifications**

These are API calls initiated by the Visa backend to the Visa Partner’s backend servers.
+ The <code>postbackNotificationUrl</code> is configured by the Visa partners during onboarding.
+ Invoked whenever the enrollments batch request results are ready for Visa partner to pull the results from Visa using another API call.
+ There will be 2 retries with random times from 1-30 minutes if there are any 5XX or 404 errors returned from the client/partner.

#### Parameters

| Name | Located in | Description | Required | Schema | Explode |
| ---- | ---------- | ----------- | -------- | ------ | ------- |
| x-message-tracking-id | header | Tracking ID for callback and notification sent by Visa | Yes | string | No |
| postbackNotificationUrl | path |  | Yes | string | No |
| apiKey | query |  | Yes | string | Yes |
| x-pay-token | header | See [XPayToken definition in Security Schemes](#/components/securitySchemes/x-pay-token) for details <SchemaDefinition schemaRef="#/components/securitySchemes/x-pay-token" />  | Yes | string | No |

#### Request Body

| Required | Schema |
| -------- | ------ |
|  No | **application/json**: { **"vBatchID"**: string (uuid), **"batchType"**: string, <br>**Available values:** "CARDHOLDER_ENROLLMENT", "CARDHOLDER_ENROLLMENT_UPDATE", "CARDHOLDER_ENROLLMENT_DELETE", "PLAN_ACCEPTANCE_IRREGULAR_PAYMENTS", "CANDIDATES", **"batchStatus"**: string, <br>**Available values:** "SUBMITTED", "COMPLETED", **"messageMetadata"**: { **"type"**: string, <br>**Available values:** "BATCH_COMPLETED", "ELIGIBILITY", "PLANACCEPTANCE_STATUS_UPDATE", "INSTALLMENT_TRANSACTION_STATUS_UPDATE", "BILATERAL_PLAN_PARTNER_STATUS_UPDATE", **"vMessageID"**: string (uuid), **"createdDateTime"**: string (date-time-nooffset) }, **"batchExecutionDateTime"**: dateTime, **"batchExpirationDateTime"**: dateTime }<br> |

#### Responses

| Code | Description |
| ---- | ----------- |
| 401 | Authorized error due to any of the following reasons:   + x-pay-token is not present, is blank, or is not in a valid format.   + Timestamp field not in UTC timestamp format.   + apiKey not present in request.   + apiKey is not active.   + apiKey not valid.   + apiKey not active.  |
| 403 | Forbidden |
| 500 | Internal Server Error |
| 503 | Service Unavailable |
| 2XX | Callback successfully processed; no retries will be performed. |

##### Security

| Security Schema | Scopes |
| --------------- | ------ |
| apiKey |  | x-pay-token |  |

### [POST] /installments/v2/planAcceptances/{vPlanAcceptanceID}/transactions
**Transaction Association API**

This API is invoked after a plan acceptance is created. + In case of Post Purchase scenario,this API is used to associate a new clearing with a plan acceptance. + In case of During Purchase scenario,this API  is used to associate a new Transaction after authorization with a plan acceptance.   The sum of all associated transactions cannot exceed the order amount including buffer. It is important that the transaction amount (passed-in) needs to match the amount on the transaction   corresponding to the transactionID passed-in. + In case of ReAuthorized transaction,this API is used to swap existing transaction with the new Transaction

#### Parameters

| Name | Located in | Description | Required | Schema | Explode |
| ---- | ---------- | ----------- | -------- | ------ | ------- |
| vPlanAcceptanceID | path |  | Yes | string (uuid) | No |
| ex-correlation-id | header | Unique ID for every API request - an optional header. Generated by the API client. Used for end-to-end tracing/debugging. | No | string | No |
| v-c-idempotency-key | header | Unique ID for every API request - an optional header. Generated by the API client. Used for idempotency. | No | string (uuid) | No |

#### Request Body

| Required | Schema |
| -------- | ------ |
|  Yes | **application/json**: { **"transactionInfo"**: { **"authCode"**: string, **"currency"**: string, **"vTransactionID"**: string, **"externalTransactionRef"**: string } & { **"dateTime"**: dateTime, **"transactionAmount"**: long } & { **"installmentTransactions"**: [ { **"clearingAmount"**: long, **"clearingDateTime"**: dateTime, **"settlementCurrency"**: string, **"clearingSequenceNumber"**: string, **"acquirerReferenceNumber"**: string } ] }, **"dormantTransactionInfo"**: { **"authCode"**: string, **"currency"**: string, **"vTransactionID"**: string, **"externalTransactionRef"**: string } & { **"dateTime"**: dateTime, **"transactionAmount"**: long } }<br> |

#### Responses

| Code | Description | Schema |
| ---- | ----------- | ------ |
| 200 | Plan Acceptance was successfully associated with the given transaction<br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br>**v-c-idempotency-key**: Unique ID for the API response. v-c-idempotency-key is echoed back. Used for idempotency.<br> | **application/json**: { **"vPlanID"**: string (uuid), **"transactionInfo"**: { **"authCode"**: string, **"currency"**: string, **"vTransactionID"**: string, **"externalTransactionRef"**: string } & { **"dateTime"**: dateTime, **"transactionAmount"**: long } & { **"installmentTransactions"**: [ { **"status"**: string, <br>**Available values:** "CONFIRMED", "CANCELLED", "PENDING_CONFIRMATION", "PENDING_CANCELLATION", "PARTIALLY_REFUNDED", **"vInstallmentTransactionID"**: string (uuid) } & { **"clearingAmount"**: long, **"clearingDateTime"**: dateTime, **"settlementCurrency"**: string, **"clearingSequenceNumber"**: string, **"acquirerReferenceNumber"**: string } ] }, **"vPlanAcceptanceID"**: string (uuid), **"dormantTransactionInfo"**: { **"authCode"**: string, **"currency"**: string, **"vTransactionID"**: string, **"externalTransactionRef"**: string } & { **"dateTime"**: dateTime, **"transactionAmount"**: long }, **"paymentAccountReference"**: string }<br> |
| 400 | The 400 (Bad Request) HTTP Status code indicates that the server cannot or will not process the request due to an apparent client error. This can happen if you are trying to   + Invoke an API request with missing or invalid parameters.   + Multi Auth is not allowed for Debit based Plan Acceptance.   + Transaction Association for Debit Transactions  must not include <code>dormantTransactionInfo</code>.    + For Debit Transactions, the Transaction Amount must match the order amount of the Plan Acceptance.   + For Debit Transactions, the Transaction Currency must match the order currency of the Plan Acceptance. <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } }<br> |
| 401 | API authorized error caused due to any of the following reasons: + x-pay-token is not present, blank, or not in a valid format. + Timestamp field not in valid UTC timestamp format. + Version field is invalid. + Token's timestamp is more than 8 minutes off from the current time. + Token hash mismatch. + APIKey not present in request. + APIKey is not active. + APIKey not valid. + APIKey not active. + Request has more than one authentication token, which is not supported <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 403 | The 403 (Forbidden) HTTP Status code indicates that the access failed due to insufficient permissions or the operation is not allowed. This can happen if you are trying to   + Invoke an API request for a resource that is not part of your project.   + Perform an operation that is not permitted in the given context  Check for the following:   + You are using a project and the credential for the project that includes the API being accessed.   + You created a project and received sandbox credentials for the API’s being called.   + You added the API being called to the project (if not already present) with the credentials that are being used.   + The Transaction Amount specified in the request exceeds the Order Amount.The value of <code>errorResponse.reason</code> is <code>orderAmountExceeded</code>   + The Plan Acceptance status is in a state that cannot accept new transactions. The value of <code>errorResponse.reason</code> is <code>invalidPlanAcceptanceState</code>   + The Merchant profile is not enabled for Debit Transactions. The value of <code>errorResponse.reason</code> is <code>forbidden</code>   + Cross Border Transaction are not allowed on Debit PANs.The value of <code>errorResponse.reason</code> is <code>forbidden</code>   + Post Purchase Transaction are not allowed on Debit PANs.The value of <code>errorResponse.reason</code> is <code>forbidden</code> <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 404 | Installment Plan Acceptance not found<br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 406 | Not Acceptable - Indicates that the "Accept:" header field is present in a request and none of the available representations for the response have a media type that is listed as acceptable.  This can happen when the requested API version is not available or unsupported; for example, when the version requested in the Accept: header is newer than the currently live/supported version. <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 410 | Gone - Indicates that the resource at this end point is no longer available. This is usually returned for old API versions that are not available anymore - EOL (End-of-Life). The content-type header in the response indicates the latest supported API version. <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 429 | The Visa Developer Center project has clocked too many requests in a given amount of time.  Please contact Visa Support Representative if you want to increase the time limits. <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 500 | Internal Server Error.  Please contact Visa Support Representative with a complete error message, full http request and response details. <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 503 | The Visa system is currently unable to handle the request due to a temporary overloading or maintenance of the server.  There may be a Retry-After header field to suggest an appropriate amount of time for the client to wait before retrying the request. The value of this field can be either an HTTP-date or a number of seconds to delay after the response is received. <code>Retry-After = HTTP-date \|\| delay-seconds</code> examples: + <code>Retry-After: Thu, 31 Dec 2020 23:59:59 GMT</code> + <code>Retry-After: 120</code>  Please contact Visa Support Representative if the issue persists. <br>**Headers:**<br>**Retry-After**: Header field to suggest an appropriate amount of time for the client to wait before retrying the request, typically after a 503 error or after a batch request when the batch job is not completed.
The value of this field can be either an HTTP-date or a number of seconds to delay after the response is received.
<code>Retry-After = HTTP-date || delay-seconds</code>
examples:
+ <code>Retry-After: Thu, 31 Dec 2020 23:59:59 GMT</code>
+ <code>Retry-After: 120</code>
<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |

#### Callback: planAcceptanceStatusChange

##### [POST] `{postbackNotificationUrl}`
**Installment PlanAcceptance Status Change Notifications**

These are API calls initiated by the Visa backend, made to the Visa Partner’s backend servers.
The <code>postbackNotificationUrl</code> is configured by the Visa partners during onboarding.
+ This callback is available only for those clients that own the BIN for the PAN involved – <b>Lenders/Processors/BIN users/BIN owners</b>.
+ Invoked when one or more plan acceptances status change events are available for this lender.
+ These callbacks are sent only if the issuer has opted-in (as in the onboarding profile).
+ There will be 2 retries with random times from 1-30 minutes, if there are any 5XX or 404 errors returned from the client/partner.
<b>Note:</b> This callback is invoked only when a status change occurs at the plan acceptance level.
  For example, if a transaction is added to the plan acceptance and the transaction is not confirmed, since there is no change to the overall status
  of the plan acceptance, there will be no PlanAcceptanceStatusChangeCallback invoked. However, InstallmentTransactionStatusChangeCallback will be invoked for that action.
  If there are many installment transactions associated with a plan acceptance, and if all of them are confirmed, then a plan acceptance confirmation callback is invoked.

#### Parameters

| Name | Located in | Description | Required | Schema | Explode |
| ---- | ---------- | ----------- | -------- | ------ | ------- |
| x-message-tracking-id | header | Tracking ID for callback and notification sent by Visa | Yes | string | No |
| postbackNotificationUrl | path |  | Yes | string | No |
| apiKey | query |  | Yes | string | Yes |
| x-pay-token | header | See [XPayToken definition in Security Schemes](#/components/securitySchemes/x-pay-token) for details <SchemaDefinition schemaRef="#/components/securitySchemes/x-pay-token" />  | Yes | string | No |

#### Request Body

| Required | Schema |
| -------- | ------ |
|  No | **application/json**: { **"status"**: string, <br>**Available values:** "CREATED", "CANCELLED", "UPDATED", "CONFIRMED", **"cardType"**: string, <br>**Available values:** "CREDIT", "DEBIT", "PREPAID", <br>**Default:** CREDIT, **"cardBrand"**: string, <br>**Available values:** "VISA", "NON_VISA", "MASTERCARD", "AMERICAN_EXPRESS", "DISCOVER", "JCB", "UNIONPAY", "DINERSCLUB", <br>**Default:** VISA, **"orderInfo"**: { **"currency"**: string, **"orderAmount"**: long }, **"crossBorder"**: boolean, **"installmentPlan"**: { **"name"**: string, **"type"**: string, <br>**Available values:** "MARKET", "BI_LATERAL", "ISSUER_DEFAULT", "ISSUER_PROMOTION", "ISSUER_HYBRID", **"vPlanID"**: string (uuid), **"fundedBy"**: [ string, <br>**Available values:** "CONSUMER", "MERCHANT" ], **"vPlanIDRef"**: string, **"islamicPlan"**: boolean, **"promotionInfo"**: { **"promotionID"**: string, **"promotionCode"**: string }, **"termsAndConditions"**: [ { **"url"**: string, **"text"**: string, **"version"**: integer, **"languageCode"**: string } ], **"installmentFrequency"**: string, <br>**Available values:** "WEEKLY", "BIWEEKLY", "MONTHLY", "BIMONTHLY", **"numberOfInstallments"**: number (integer) } & { **"costInfo"**: { **"feeInfo"**: [ { **"type"**: string, <br>**Available values:** "ACQUIRER_TO_ISSUER", "ACQUIRER_TO_VISA", "ISSUER_TO_ACQUIRER", "ISSUER_TO_VISA", "ISSUER_TO_VISA_SCHEDULING_FEES", **"flatFee"**: long, **"ratePercentage"**: integer } ], **"currency"**: string, **"totalFees"**: long, **"totalPlanCost"**: long, **"lastInstallment"**: { **"amount"**: long, **"totalAmount"**: long, **"installmentFee"**: long }, **"firstInstallment"**: { **"upfrontFee"**: long, **"totalAmountExcludingUpfrontFee"**: long } & { **"amount"**: long, **"totalAmount"**: long, **"installmentFee"**: long }, **"totalUpfrontFees"**: long, **"totalRecurringFees"**: long, **"annualPercentageRate"**: integer } }, **"messageMetadata"**: { **"type"**: string, <br>**Available values:** "BATCH_COMPLETED", "ELIGIBILITY", "PLANACCEPTANCE_STATUS_UPDATE", "INSTALLMENT_TRANSACTION_STATUS_UPDATE", "BILATERAL_PLAN_PARTNER_STATUS_UPDATE", **"vMessageID"**: string (uuid), **"createdDateTime"**: string (date-time-nooffset) }, **"encAccountNumber"**: byte, **"externalClientID"**: string, **"statusTransitions"**: { **"createdDateTime"**: string (date-time-ms-nooffset), **"updatedDateTime"**: string (date-time-ms-nooffset), **"confirmedDateTime"**: string (date-time-ms-nooffset), **"cancellationDateTime"**: string (date-time-ms-nooffset) }, **"vPlanAcceptanceID"**: string (uuid), **"encSecondaryAccountNumber"**: byte, **"originalEncSecondaryAccountNumber"**: byte }<br> |

#### Responses

| Code | Description |
| ---- | ----------- |
| 401 | API authorized error caused due to any of the following reasons:   + x-pay-token is not present or blank or not in valid format.   + Timestamp field not in valid UTC timestamp format.   + APIKey not present in request.   + APIKey is not active.   + APIKey not valid.   + APIKey not active.  |
| 403 | Forbidden |
| 500 | Internal server error |
| 503 | Service unavailable |
| 2XX | Callback successfully processed and no retries will be performed |

##### Security

| Security Schema | Scopes |
| --------------- | ------ |
| apiKey |  | x-pay-token |  |

#### Callback: installmentTransactionStatusChange

##### [POST] `{postbackNotificationUrl}`
**Installment Transaction Status Change Notifications**

These are API calls initiated by the Visa backend, made to the Visa Partner’s backend servers.
The <code>postbackNotificationUrl</code> is configured by the Visa partners during onboarding. The
+ This callback is available only for those clients that own the BIN for the PAN involved – <b>Lenders/Processors/BIN users/BIN owners</b>.
+ Invoked when InstallmentTransaction status is updated. Installment Transaction corresponds to a clearing and a installment payment schedule.
+ These callbacks are sent only if the issuer has opted-in (as in the onboarding profile).
+ There will be 2 retries with random times from 1-30 minutes, if there are any 5XX or 404 errors returned from the client/partner.

#### Parameters

| Name | Located in | Description | Required | Schema | Explode |
| ---- | ---------- | ----------- | -------- | ------ | ------- |
| x-message-tracking-id | header | Tracking ID for callback and notification sent by Visa | Yes | string | No |
| postbackNotificationUrl | path |  | Yes | string | No |
| apiKey | query |  | Yes | string | Yes |
| x-pay-token | header | See [XPayToken definition in Security Schemes](#/components/securitySchemes/x-pay-token) for details <SchemaDefinition schemaRef="#/components/securitySchemes/x-pay-token" />  | Yes | string | No |

#### Request Body

| Required | Schema |
| -------- | ------ |
|  No | **application/json**: { **"vPlanID"**: string (uuid), **"authCode"**: string, **"cardType"**: string, <br>**Available values:** "CREDIT", "DEBIT", "PREPAID", <br>**Default:** CREDIT, **"currency"**: string, **"cardBrand"**: string, <br>**Available values:** "VISA", "NON_VISA", "MASTERCARD", "AMERICAN_EXPRESS", "DISCOVER", "JCB", "UNIONPAY", "DINERSCLUB", <br>**Default:** VISA, **"vPlanIDRef"**: string, **"crossBorder"**: boolean, **"promotionInfo"**: { **"promotionID"**: string, **"promotionCode"**: string }, **"sourceCurrency"**: string, **"vTransactionID"**: string, **"messageMetadata"**: { **"type"**: string, <br>**Available values:** "BATCH_COMPLETED", "ELIGIBILITY", "PLANACCEPTANCE_STATUS_UPDATE", "INSTALLMENT_TRANSACTION_STATUS_UPDATE", "BILATERAL_PLAN_PARTNER_STATUS_UPDATE", **"vMessageID"**: string (uuid), **"createdDateTime"**: string (date-time-nooffset) }, **"encAccountNumber"**: byte, **"externalClientID"**: string, **"transactionAmount"**: long, **"vPlanAcceptanceID"**: string (uuid), **"installmentTransaction"**: { **"status"**: string, <br>**Available values:** "PENDING_CONFIRMATION", "CONFIRMED", "PENDING_CANCELLATION", "CANCELLED", "PARTIALLY_REFUNDED", **"vInstallmentTransactionID"**: string (uuid) } & { **"clearingAmount"**: long, **"clearingDateTime"**: dateTime, **"settlementCurrency"**: string, **"clearingSequenceNumber"**: string, **"acquirerReferenceNumber"**: string } & { **"refundAmount"**: long, **"sourceCurrency"**: string, **"lastRefundDateTime"**: dateTime, **"refundAmountInSourceCurrency"**: long, **"clearingAmountInSourceCurrency"**: long }, **"transactionRefundAmount"**: long, **"encSecondaryAccountNumber"**: byte, **"originalEncSecondaryAccountNumber"**: byte, **"transactionAmountInSourceCurrency"**: long, **"transactionRefundAmountInSourceCurrency"**: long }<br> |

#### Responses

| Code | Description |
| ---- | ----------- |
| 401 | API authorized error caused due to any of the following reasons:   + x-pay-token is not present or blank or not in valid format.   + Timestamp field not in valid UTC timestamp format.   + APIKey not present in request.   + APIKey is not active.   + APIKey not valid.   + APIKey not active.  |
| 403 | Forbidden |
| 500 | Internal server error |
| 503 | Service unavailable |
| 2XX | Callback successfully processed and no retries will be performed |

##### Security

| Security Schema | Scopes |
| --------------- | ------ |
| apiKey |  | x-pay-token |  |

### [POST] /installments/v2/planAcceptances/cancel
**Plan Cancellation API**

Merchant Participants can request the cancellation of the Installment Plan for refunds processed on the original purchase Installment Transaction by calling the Plan Cancellation API. This updates the status of the Installment Plan Selection. Failure to call this API on refunds will result in continued Installment Payments for the cardholder.  If this API is invoked by any client other than the client that created the PlanAcceptance, then a 403 error is returned. Details on merchantInfo is captured as part of this API and used for authorization when invoked on behalf by the partner. This is a complex operation that involves updates to payments schedule and several updates to ledger activity. The parameters, including PII data, cannot be passed in the URI. Hence, it is a POST operation.  Based on the request parameters the cancellation behaviour is as follows   1. <b>Complete Plan Acceptance cancellation</b> (all associated ISO Auth Transactions and Clearing) - if only vPlanAcceptanceID and encAccountNumber are provided. <br> <b>Note:</b> For PlanAcceptances created using v1 only this option is applicable.   2. <b>Complete ISO Auth Transaction Cancellation</b> (all associated clearing) - if only transactionInfo is provided and does not contain details on <code>transactionRefundAmount</code> or <code>splitTransactionRefunds</code>.   3. <b>Cancellation based on refund amount at ISO Auth Transaction level</b>  - if transactionInfo is provided and contains <code>transactionRefundAmount</code> details. The associated clearing will be fully or partially cancelled based on transactionRefundAmount.   4. <b>Cancellation based on refund amount at clearing level</b> - if transactionInfo is provided and contains <code>splitTransactionRefunds</code> details.The clearing specified in splitTransactionRefunds will be partially or fully cancelled based on refundAmount.  If the request contains both the <code>vPlanAcceptanceID</code> and <code>splitTransactionRefunds</code> then precedence is given to cancellation on clearing level based on splitTransactionRefunds.  If the request contains both the <code>transactionRefundAmount</code> and <code>splitTransactionRefunds</code> then the total of refund amounts given in splitTransactionRefunds list must be equal to the transactionRefundAmount.

#### Parameters

| Name | Located in | Description | Required | Schema | Explode |
| ---- | ---------- | ----------- | -------- | ------ | ------- |
| ex-correlation-id | header | Unique ID for every API request - an optional header. Generated by the API client. Used for end-to-end tracing/debugging. | No | string | No |
| v-c-idempotency-key | header | Unique ID for every API request - an optional header. Generated by the API client. Used for idempotency. | No | string (uuid) | No |

#### Request Body

| Required | Schema |
| -------- | ------ |
|  Yes | **application/json**: { **"encAccountNumber"**: byte, **"tokenAccountNumber"**: string, **"vProvisionedTokenID"**: string, **"paymentAccountReference"**: string } & { **"tokenReferenceID"**: string }<br> |

#### Responses

| Code | Description | Schema |
| ---- | ----------- | ------ |
| 200 | Successful Plan Acceptance Cancellation Response<br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br>**v-c-idempotency-key**: Unique ID for the API response. v-c-idempotency-key is echoed back. Used for idempotency.<br> | **application/json**: { **"vPlanID"**: string (uuid), **"vPlanIDRef"**: string, **"transactions"**: [ { **"authCode"**: string, **"currency"**: string, **"vTransactionID"**: string, **"externalTransactionRef"**: string } & { **"dateTime"**: dateTime, **"transactionAmount"**: long } & { **"installmentTransactions"**: [ { **"status"**: string, <br>**Available values:** "CONFIRMED", "CANCELLED", "PENDING_CONFIRMATION", "PENDING_CANCELLATION", "PARTIALLY_REFUNDED", **"vInstallmentTransactionID"**: string (uuid) } & { **"clearingAmount"**: long, **"clearingDateTime"**: dateTime, **"settlementCurrency"**: string, **"clearingSequenceNumber"**: string, **"acquirerReferenceNumber"**: string } & { **"refundAmount"**: long, **"lastRefundDateTime"**: dateTime } ], **"transactionRefundAmount"**: long } ], <br>**Default:** , **"transactionInfo"**: { **"authCode"**: string, **"currency"**: string, **"vTransactionID"**: string, **"externalTransactionRef"**: string } & { **"dateTime"**: dateTime, **"transactionAmount"**: long } & { **"installmentTransactions"**: [ { **"status"**: string, <br>**Available values:** "CONFIRMED", "CANCELLED", "PENDING_CONFIRMATION", "PENDING_CANCELLATION", "PARTIALLY_REFUNDED", **"vInstallmentTransactionID"**: string (uuid) } & { **"clearingAmount"**: long, **"clearingDateTime"**: dateTime, **"settlementCurrency"**: string, **"clearingSequenceNumber"**: string, **"acquirerReferenceNumber"**: string } & { **"refundAmount"**: long, **"lastRefundDateTime"**: dateTime } ], **"transactionRefundAmount"**: long }, **"cancelledDateTime"**: dateTime, **"vPlanAcceptanceID"**: string (uuid), **"paymentAccountReference"**: string }<br> |
| 400 | The <code>errorResponse.details</code> part of the error response can provide a list of fields that failed data validation constraints and errorResponse.reason values for this error include:   <ul>   <li><code>invalidRequest</code>The API server could not understand the request; for example, base64 decoding failed, the field is not in a particular format, etc.   </ul> <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 401 | API authorized error caused due to any of the following reasons: + x-pay-token is not present, blank, or not in a valid format. + Timestamp field not in valid UTC timestamp format. + Version field is invalid. + Token's timestamp is more than 8 minutes off from the current time. + Token hash mismatch. + APIKey not present in request. + APIKey is not active. + APIKey not valid. + APIKey not active. + Request has more than one authentication token, which is not supported <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 403 | The 403 (Forbidden) HTTP Status code indicates that the access failed due to insufficient permissions or the operation is not allowed. This can happen if you are trying to   + Invoke an API request for a resource that is not part of your project.   + Perform an operation that is not permitted in the given context  Check for the following:   + You are using a project and the credential for the project that includes the API being accessed.   + You created a project and received sandbox credentials for the API’s being called.   + You added the API being called to the project (if not already present) with the credentials that are being used.   + The Plan Acceptance status is in a state that cannot be transitioned to the CANCELED or PENDING_CANCELLATION state based on this request. The value of <code>errorResponse.reason</code> is <code>invalidPlanAcceptanceState</code>   + The Refund Amount specified in the Cancellation request exceeds the Transaction Amount.The value of <code>errorResponse.reason</code> is <code>orderAmountExceeded</code>   + The Client does not have the permissions to perform this operation. The value of <code>errorResponse.reason</code> is <code>forbiddenClientIDAccess</code> <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 404 | Installment Plan Acceptance not found<br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 406 | Not Acceptable - Indicates that the "Accept:" header field is present in a request and none of the available representations for the response have a media type that is listed as acceptable.  This can happen when the requested API version is not available or unsupported; for example, when the version requested in the Accept: header is newer than the currently live/supported version. <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 410 | Gone - Indicates that the resource at this end point is no longer available. This is usually returned for old API versions that are not available anymore - EOL (End-of-Life). The content-type header in the response indicates the latest supported API version. <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 429 | The Visa Developer Center project has clocked too many requests in a given amount of time.  Please contact Visa Support Representative if you want to increase the time limits. <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 500 | Internal Server Error.  Please contact Visa Support Representative with a complete error message, full http request and response details. <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 503 | The Visa system is currently unable to handle the request due to a temporary overloading or maintenance of the server.  There may be a Retry-After header field to suggest an appropriate amount of time for the client to wait before retrying the request. The value of this field can be either an HTTP-date or a number of seconds to delay after the response is received. <code>Retry-After = HTTP-date \|\| delay-seconds</code> examples: + <code>Retry-After: Thu, 31 Dec 2020 23:59:59 GMT</code> + <code>Retry-After: 120</code>  Please contact Visa Support Representative if the issue persists. <br>**Headers:**<br>**Retry-After**: Header field to suggest an appropriate amount of time for the client to wait before retrying the request, typically after a 503 error or after a batch request when the batch job is not completed.
The value of this field can be either an HTTP-date or a number of seconds to delay after the response is received.
<code>Retry-After = HTTP-date || delay-seconds</code>
examples:
+ <code>Retry-After: Thu, 31 Dec 2020 23:59:59 GMT</code>
+ <code>Retry-After: 120</code>
<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |

#### Callback: planAcceptanceStatusChange

##### [POST] `{postbackNotificationUrl}`
**Installment PlanAcceptance Status Change Notifications**

These are API calls initiated by the Visa backend, made to the Visa Partner’s backend servers.
The <code>postbackNotificationUrl</code> is configured by the Visa partners during onboarding.
+ This callback is available only for those clients that own the BIN for the PAN involved – <b>Lenders/Processors/BIN users/BIN owners</b>.
+ Invoked when one or more plan acceptances status change events are available for this lender.
+ These callbacks are sent only if the issuer has opted-in (as in the onboarding profile).
+ There will be 2 retries with random times from 1-30 minutes, if there are any 5XX or 404 errors returned from the client/partner.
<b>Note:</b> This callback is invoked only when a status change occurs at the plan acceptance level.
  For example, if a transaction is added to the plan acceptance and the transaction is not confirmed, since there is no change to the overall status
  of the plan acceptance, there will be no PlanAcceptanceStatusChangeCallback invoked. However, InstallmentTransactionStatusChangeCallback will be invoked for that action.
  If there are many installment transactions associated with a plan acceptance, and if all of them are confirmed, then a plan acceptance confirmation callback is invoked.

#### Parameters

| Name | Located in | Description | Required | Schema | Explode |
| ---- | ---------- | ----------- | -------- | ------ | ------- |
| x-message-tracking-id | header | Tracking ID for callback and notification sent by Visa | Yes | string | No |
| postbackNotificationUrl | path |  | Yes | string | No |
| apiKey | query |  | Yes | string | Yes |
| x-pay-token | header | See [XPayToken definition in Security Schemes](#/components/securitySchemes/x-pay-token) for details <SchemaDefinition schemaRef="#/components/securitySchemes/x-pay-token" />  | Yes | string | No |

#### Request Body

| Required | Schema |
| -------- | ------ |
|  No | **application/json**: { **"status"**: string, <br>**Available values:** "CREATED", "CANCELLED", "UPDATED", "CONFIRMED", **"cardType"**: string, <br>**Available values:** "CREDIT", "DEBIT", "PREPAID", <br>**Default:** CREDIT, **"cardBrand"**: string, <br>**Available values:** "VISA", "NON_VISA", "MASTERCARD", "AMERICAN_EXPRESS", "DISCOVER", "JCB", "UNIONPAY", "DINERSCLUB", <br>**Default:** VISA, **"orderInfo"**: { **"currency"**: string, **"orderAmount"**: long }, **"crossBorder"**: boolean, **"installmentPlan"**: { **"name"**: string, **"type"**: string, <br>**Available values:** "MARKET", "BI_LATERAL", "ISSUER_DEFAULT", "ISSUER_PROMOTION", "ISSUER_HYBRID", **"vPlanID"**: string (uuid), **"fundedBy"**: [ string, <br>**Available values:** "CONSUMER", "MERCHANT" ], **"vPlanIDRef"**: string, **"islamicPlan"**: boolean, **"promotionInfo"**: { **"promotionID"**: string, **"promotionCode"**: string }, **"termsAndConditions"**: [ { **"url"**: string, **"text"**: string, **"version"**: integer, **"languageCode"**: string } ], **"installmentFrequency"**: string, <br>**Available values:** "WEEKLY", "BIWEEKLY", "MONTHLY", "BIMONTHLY", **"numberOfInstallments"**: number (integer) } & { **"costInfo"**: { **"feeInfo"**: [ { **"type"**: string, <br>**Available values:** "ACQUIRER_TO_ISSUER", "ACQUIRER_TO_VISA", "ISSUER_TO_ACQUIRER", "ISSUER_TO_VISA", "ISSUER_TO_VISA_SCHEDULING_FEES", **"flatFee"**: long, **"ratePercentage"**: integer } ], **"currency"**: string, **"totalFees"**: long, **"totalPlanCost"**: long, **"lastInstallment"**: { **"amount"**: long, **"totalAmount"**: long, **"installmentFee"**: long }, **"firstInstallment"**: { **"upfrontFee"**: long, **"totalAmountExcludingUpfrontFee"**: long } & { **"amount"**: long, **"totalAmount"**: long, **"installmentFee"**: long }, **"totalUpfrontFees"**: long, **"totalRecurringFees"**: long, **"annualPercentageRate"**: integer } }, **"messageMetadata"**: { **"type"**: string, <br>**Available values:** "BATCH_COMPLETED", "ELIGIBILITY", "PLANACCEPTANCE_STATUS_UPDATE", "INSTALLMENT_TRANSACTION_STATUS_UPDATE", "BILATERAL_PLAN_PARTNER_STATUS_UPDATE", **"vMessageID"**: string (uuid), **"createdDateTime"**: string (date-time-nooffset) }, **"encAccountNumber"**: byte, **"externalClientID"**: string, **"statusTransitions"**: { **"createdDateTime"**: string (date-time-ms-nooffset), **"updatedDateTime"**: string (date-time-ms-nooffset), **"confirmedDateTime"**: string (date-time-ms-nooffset), **"cancellationDateTime"**: string (date-time-ms-nooffset) }, **"vPlanAcceptanceID"**: string (uuid), **"encSecondaryAccountNumber"**: byte, **"originalEncSecondaryAccountNumber"**: byte }<br> |

#### Responses

| Code | Description |
| ---- | ----------- |
| 401 | API authorized error caused due to any of the following reasons:   + x-pay-token is not present or blank or not in valid format.   + Timestamp field not in valid UTC timestamp format.   + APIKey not present in request.   + APIKey is not active.   + APIKey not valid.   + APIKey not active.  |
| 403 | Forbidden |
| 500 | Internal server error |
| 503 | Service unavailable |
| 2XX | Callback successfully processed and no retries will be performed |

##### Security

| Security Schema | Scopes |
| --------------- | ------ |
| apiKey |  | x-pay-token |  |

#### Callback: installmentTransactionStatusChange

##### [POST] `{postbackNotificationUrl}`
**Installment Transaction Status Change Notifications**

These are API calls initiated by the Visa backend, made to the Visa Partner’s backend servers.
The <code>postbackNotificationUrl</code> is configured by the Visa partners during onboarding. The
+ This callback is available only for those clients that own the BIN for the PAN involved – <b>Lenders/Processors/BIN users/BIN owners</b>.
+ Invoked when InstallmentTransaction status is updated. Installment Transaction corresponds to a clearing and a installment payment schedule.
+ These callbacks are sent only if the issuer has opted-in (as in the onboarding profile).
+ There will be 2 retries with random times from 1-30 minutes, if there are any 5XX or 404 errors returned from the client/partner.

#### Parameters

| Name | Located in | Description | Required | Schema | Explode |
| ---- | ---------- | ----------- | -------- | ------ | ------- |
| x-message-tracking-id | header | Tracking ID for callback and notification sent by Visa | Yes | string | No |
| postbackNotificationUrl | path |  | Yes | string | No |
| apiKey | query |  | Yes | string | Yes |
| x-pay-token | header | See [XPayToken definition in Security Schemes](#/components/securitySchemes/x-pay-token) for details <SchemaDefinition schemaRef="#/components/securitySchemes/x-pay-token" />  | Yes | string | No |

#### Request Body

| Required | Schema |
| -------- | ------ |
|  No | **application/json**: { **"vPlanID"**: string (uuid), **"authCode"**: string, **"cardType"**: string, <br>**Available values:** "CREDIT", "DEBIT", "PREPAID", <br>**Default:** CREDIT, **"currency"**: string, **"cardBrand"**: string, <br>**Available values:** "VISA", "NON_VISA", "MASTERCARD", "AMERICAN_EXPRESS", "DISCOVER", "JCB", "UNIONPAY", "DINERSCLUB", <br>**Default:** VISA, **"vPlanIDRef"**: string, **"crossBorder"**: boolean, **"promotionInfo"**: { **"promotionID"**: string, **"promotionCode"**: string }, **"sourceCurrency"**: string, **"vTransactionID"**: string, **"messageMetadata"**: { **"type"**: string, <br>**Available values:** "BATCH_COMPLETED", "ELIGIBILITY", "PLANACCEPTANCE_STATUS_UPDATE", "INSTALLMENT_TRANSACTION_STATUS_UPDATE", "BILATERAL_PLAN_PARTNER_STATUS_UPDATE", **"vMessageID"**: string (uuid), **"createdDateTime"**: string (date-time-nooffset) }, **"encAccountNumber"**: byte, **"externalClientID"**: string, **"transactionAmount"**: long, **"vPlanAcceptanceID"**: string (uuid), **"installmentTransaction"**: { **"status"**: string, <br>**Available values:** "PENDING_CONFIRMATION", "CONFIRMED", "PENDING_CANCELLATION", "CANCELLED", "PARTIALLY_REFUNDED", **"vInstallmentTransactionID"**: string (uuid) } & { **"clearingAmount"**: long, **"clearingDateTime"**: dateTime, **"settlementCurrency"**: string, **"clearingSequenceNumber"**: string, **"acquirerReferenceNumber"**: string } & { **"refundAmount"**: long, **"sourceCurrency"**: string, **"lastRefundDateTime"**: dateTime, **"refundAmountInSourceCurrency"**: long, **"clearingAmountInSourceCurrency"**: long }, **"transactionRefundAmount"**: long, **"encSecondaryAccountNumber"**: byte, **"originalEncSecondaryAccountNumber"**: byte, **"transactionAmountInSourceCurrency"**: long, **"transactionRefundAmountInSourceCurrency"**: long }<br> |

#### Responses

| Code | Description |
| ---- | ----------- |
| 401 | API authorized error caused due to any of the following reasons:   + x-pay-token is not present or blank or not in valid format.   + Timestamp field not in valid UTC timestamp format.   + APIKey not present in request.   + APIKey is not active.   + APIKey not valid.   + APIKey not active.  |
| 403 | Forbidden |
| 500 | Internal server error |
| 503 | Service unavailable |
| 2XX | Callback successfully processed and no retries will be performed |

##### Security

| Security Schema | Scopes |
| --------------- | ------ |
| apiKey |  | x-pay-token |  |

### [POST] /installments/v2/plans/search
**Retrieve Plans API - Search**

This API retrieves all Installment plans relevant to the calling Merchant. In case of a Partner acts on behalf of a Seller(OBO), the plans relevant to the Seller be served. + The result of this operation, when successful, is one or more bilateral Installment plans presented. + If there are no active plans matching the given set of criteria, then an empty array will be returned in this API response. + All bilateral plans relevant to the Merchant in all states(Active,Pending OPT-IN) will be returned in this API response.

#### Parameters

| Name | Located in | Description | Required | Schema | Explode |
| ---- | ---------- | ----------- | -------- | ------ | ------- |
| ex-correlation-id | header | Unique ID for every API request - an optional header. Generated by the API client. Used for end-to-end tracing/debugging. | No | string | No |
| size | query |  | No | integer, <br>**Default:** 100 | Yes |
| page | query |  | No | integer | Yes |

#### Request Body

| Required | Schema |
| -------- | ------ |
|  Yes | **application/json**: { **"type"**: string, <br>**Available values:** "BI_LATERAL", **"vPlanID"**: string (uuid), **"partnerMerchantReferenceID"**: string }<br> |

#### Responses

| Code | Description | Schema |
| ---- | ----------- | ------ |
| 200 | A list of Installment plans. If none match, an empty array is returned.<br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"last"**: boolean, **"empty"**: boolean, **"first"**: boolean, **"number"**: integer, **"totalCount"**: integer, **"totalPages"**: integer, **"resultsCount"**: integer } & { **"content"**: [ { **"fees"**: [ { **"type"**: string, <br>**Available values:** "ACQUIRER_TO_ISSUER", "CONSUMER", "CONSUMER_UPFRONT", "ISSUER_TO_ACQUIRER", "APR", **"amount"**: long, **"ratePercentage"**: integer } ], **"name"**: string, **"type"**: string, <br>**Available values:** "BI_LATERAL", **"vPlanID"**: string (uuid), **"currency"**: string, **"fundedBy"**: [ string, <br>**Available values:** "CONSUMER", "MERCHANT" ], **"issuerName"**: string, **"vPlanIDRef"**: string, **"promotionInfo"**: { **"promotionID"**: string, **"promotionCode"**: string }, **"termsAndConditions"**: [ { **"url"**: string, **"text"**: string, **"version"**: integer, **"longText"**: string, **"languageCode"**: string } ], **"effectiveDateRanges"**: [ { **"endDate"**: date, **"startDate"**: date } ], **"planBilateralStatus"**: string, <br>**Available values:** "ACTIVE", "INACTIVE", "PENDING", **"installmentFrequency"**: string, <br>**Available values:** "WEEKLY", "BIWEEKLY", "MONTHLY", "BIMONTHLY", **"numberOfInstallments"**: number (integer), **"transactionAmountRanges"**: [ { **"maximumTransactionAmount"**: long, **"minimumTransactionAmount"**: long } ] } ], <br>**Default:**  }<br> |
| 400 | The <code>errorResponse.details</code> part of the error response can provide a list of fields that failed data validation constraints and errorResponse.reason values for this error include:   <ul>   <li><code>invalidRequest</code>The API server could not understand the request; for example, base64 decoding failed, the field is not in a particular format, etc.   </ul> <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 401 | API authorized error caused due to any of the following reasons: + x-pay-token is not present, blank, or not in a valid format. + Timestamp field not in valid UTC timestamp format. + Version field is invalid. + Token's timestamp is more than 8 minutes off from the current time. + Token hash mismatch. + APIKey not present in request. + APIKey is not active. + APIKey not valid. + APIKey not active. + Request has more than one authentication token, which is not supported <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 403 | The 403 (Forbidden) HTTP Status code indicates that the access failed due to insufficient permissions or the operation is not allowed. This can happen if you are trying to + Invoke an API request for a resource that is not part of your project. + Perform an operation that is not permitted in the given context  Check for the following:   + You are using a project and the credential for the project that includes the API being accessed.   + You created a project and received sandbox credentials for the API’s being called.   + You added the API being called to the project (if not already present) with the credentials that are being used. <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 406 | Not Acceptable - Indicates that the "Accept:" header field is present in a request and none of the available representations for the response have a media type that is listed as acceptable.  This can happen when the requested API version is not available or unsupported; for example, when the version requested in the Accept: header is newer than the currently live/supported version. <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 410 | Gone - Indicates that the resource at this end point is no longer available. This is usually returned for old API versions that are not available anymore - EOL (End-of-Life). The content-type header in the response indicates the latest supported API version. <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 429 | The Visa Developer Center project has clocked too many requests in a given amount of time.  Please contact Visa Support Representative if you want to increase the time limits. <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 500 | Internal Server Error.  Please contact Visa Support Representative with a complete error message, full http request and response details. <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 503 | The Visa system is currently unable to handle the request due to a temporary overloading or maintenance of the server.  There may be a Retry-After header field to suggest an appropriate amount of time for the client to wait before retrying the request. The value of this field can be either an HTTP-date or a number of seconds to delay after the response is received. <code>Retry-After = HTTP-date \|\| delay-seconds</code> examples: + <code>Retry-After: Thu, 31 Dec 2020 23:59:59 GMT</code> + <code>Retry-After: 120</code>  Please contact Visa Support Representative if the issue persists. <br>**Headers:**<br>**Retry-After**: Header field to suggest an appropriate amount of time for the client to wait before retrying the request, typically after a 503 error or after a batch request when the batch job is not completed.
The value of this field can be either an HTTP-date or a number of seconds to delay after the response is received.
<code>Retry-After = HTTP-date || delay-seconds</code>
examples:
+ <code>Retry-After: Thu, 31 Dec 2020 23:59:59 GMT</code>
+ <code>Retry-After: 120</code>
<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |

---
## Device Management API
Register a Payment Terminal / IoT device for invoking Seller APIs

### [POST] /installments/v2/devices
**Enroll Payment Terminal**

This API is used by Merchant Participants who owns or maintains the Payment terminal to enroll the payment terminal. Enrollment of the payment terminal(s) is the primary step and pre-requisite to enable payment terminals to access other Device APIs to enable Installments. For enrollment of payment terminal, merchant participants need two public key IDs from Visa (to show device already knows the value of this key) and at least one device public key.

#### Parameters

| Name | Located in | Description | Required | Schema | Explode |
| ---- | ---------- | ----------- | -------- | ------ | ------- |
| ex-correlation-id | header | Unique ID for every API request - an optional header. Generated by the API client. Used for end-to-end tracing/debugging. | No | string | No |
| v-c-idempotency-key | header | Unique ID for every API request - an optional header. Generated by the API client. Used for idempotency. | No | string (uuid) | No |

#### Request Body

| Required | Schema |
| -------- | ------ |
|  Yes | **application/json**: { **"visaKeys"**: [ { **"jwk"**: { **"kid"**: string, **"use"**: string, <br>**Available values:** "sig", "enc" }, **"keyKind"**: string, <br>**Available values:** "REFID", "KEYID", <br>**Default:** KEYID, **"keyFunction"**: string, <br>**Available values:** "AUTHENTICITY", "KEY_AGREEMENT", <br>**Default:** KEY_AGREEMENT, **"keyReference"**: string } ], **"deviceKeys"**: [ { **"jwk"**: { **"x"**: byte, **"y"**: byte, **"crv"**: string, <br>**Available values:** "P-256", <br>**Default:** P-256, **"kty"**: string, <br>**Available values:** "EC", **"use"**: string, <br>**Available values:** "sig", "enc" }, **"keyFunction"**: string, <br>**Available values:** "AUTHENTICITY", "KEY_AGREEMENT", <br>**Default:** KEY_AGREEMENT, **"keyReference"**: string } ], **"deviceAlias"**: string, **"deviceSoftware"**: { **"name"**: string, **"version"**: string }, **"devicePreferredName"**: string }<br> |

#### Responses

| Code | Description | Schema |
| ---- | ----------- | ------ |
| 201 | Device enrolled successfully<br>**Headers:**<br>**x-via-hint**: An optional hint header in response which API calller can send back to route the calls to a specific data center.<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br>**v-c-idempotency-key**: Unique ID for the API response. v-c-idempotency-key is echoed back. Used for idempotency.<br> | **application/json**: { **"visaKeys"**: [ { **"jwk"**: { **"kid"**: string, **"use"**: string, <br>**Available values:** "sig", "enc" }, **"keyKind"**: string, <br>**Available values:** "REFID", "KEYID", <br>**Default:** KEYID, **"keyFunction"**: string, <br>**Available values:** "AUTHENTICITY", "KEY_AGREEMENT", <br>**Default:** KEY_AGREEMENT, **"keyReference"**: string } ], **"vDeviceID"**: string, **"deviceKeys"**: [ { **"jwk"**: { **"kid"**: string, **"use"**: string, <br>**Available values:** "sig", "enc" }, **"keyKind"**: string, <br>**Available values:** "REFID", "KEYID", <br>**Default:** KEYID, **"keyFunction"**: string, <br>**Available values:** "AUTHENTICITY", "KEY_AGREEMENT", <br>**Default:** KEY_AGREEMENT, **"keyReference"**: string } ], **"deviceAlias"**: string, **"devicePreferredName"**: string }<br> |
| 400 | The <code>errorResponse.details</code> part of the error response can provide a list of fields that failed data validation constraints and errorResponse.reason values for this error include:   <ul>   <li><code>invalidRequest</code>The API server could not understand the request; for example, base64 decoding failed, the field is not in a particular format, etc.   </ul> <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 401 | API authorized error caused due to any of the following reasons: + x-pay-token is not present, blank, or not in a valid format. + Timestamp field not in valid UTC timestamp format. + Version field is invalid. + Token's timestamp is more than 8 minutes off from the current time. + Token hash mismatch. + APIKey not present in request. + APIKey is not active. + APIKey not valid. + APIKey not active. + Request has more than one authentication token, which is not supported <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 403 | The 403 (Forbidden) HTTP Status code indicates that the access failed due to insufficient permissions or the operation is not allowed. This can happen if you are trying to + Invoke an API request for a resource that is not part of your project. + Perform an operation that is not permitted in the given context  Check for the following:   + You are using a project and the credential for the project that includes the API being accessed.   + You created a project and received sandbox credentials for the API’s being called.   + You added the API being called to the project (if not already present) with the credentials that are being used. <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 406 | Not Acceptable - Indicates that the "Accept:" header field is present in a request and none of the available representations for the response have a media type that is listed as acceptable.  This can happen when the requested API version is not available or unsupported; for example, when the version requested in the Accept: header is newer than the currently live/supported version. <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 409 | Conflict<br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 410 | Gone - Indicates that the resource at this end point is no longer available. This is usually returned for old API versions that are not available anymore - EOL (End-of-Life). The content-type header in the response indicates the latest supported API version. <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 429 | The Visa Developer Center project has clocked too many requests in a given amount of time.  Please contact Visa Support Representative if you want to increase the time limits. <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 500 | Internal Server Error.  Please contact Visa Support Representative with a complete error message, full http request and response details. <br>**Headers:**<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |
| 503 | The Visa system is currently unable to handle the request due to a temporary overloading or maintenance of the server.  There may be a Retry-After header field to suggest an appropriate amount of time for the client to wait before retrying the request. The value of this field can be either an HTTP-date or a number of seconds to delay after the response is received. <code>Retry-After = HTTP-date \|\| delay-seconds</code> examples: + <code>Retry-After: Thu, 31 Dec 2020 23:59:59 GMT</code> + <code>Retry-After: 120</code>  Please contact Visa Support Representative if the issue persists. <br>**Headers:**<br>**Retry-After**: Header field to suggest an appropriate amount of time for the client to wait before retrying the request, typically after a 503 error or after a batch request when the batch job is not completed.
The value of this field can be either an HTTP-date or a number of seconds to delay after the response is received.
<code>Retry-After = HTTP-date || delay-seconds</code>
examples:
+ <code>Retry-After: Thu, 31 Dec 2020 23:59:59 GMT</code>
+ <code>Retry-After: 120</code>
<br>**ex-correlation-id**: Unique ID for the API response; ex-correlation-id is echoed back. Used for end-to-end tracing/debugging.<br> | **application/json**: { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } }<br> |

---
### Schemas

#### CategoryCode Schema

The Merchant Category Code (MCC) is a four-digit number assigned to describe a merchant’s primary business based on annual sales volume measured in local currency.
In addition, some MCCs identify a specific merchant or type of transaction. Visa and its members use MCC data for a range of purposes, including activity tracking, reporting, and risk management.
Acquirers (and their agents) are required to assign the correct MCC to each of their merchants. Visa retains the right to require corrections to MCC assignments and use.

The MCCs and descriptions have been derived from Standard Industrial Classification (SIC) Codes and the International Organization for Standardization (ISO) Codes.
Please note that Visa MCCs and SIC codes do not always correspond. In many cases, Visa has consolidated several SIC codes into one MCC to manage the number of MCCs.
In other cases, such as for T&E and direct marketing merchants, Visa established MCCs that do not have corresponding SIC codes.

See [Visa Merchant Data Standards Manual](https://usa.visa.com/dam/VCOM/download/merchants/visa-merchant-data-standards-manual.pdf) for more info.

For information related to MCC codes, please navigate to [this link](https://www.visa.com/supplierlocator-app/app/#/home/supplier-locator) about Supplier Locator.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| CategoryCode | string | The Merchant Category Code (MCC) is a four-digit number assigned to describe a merchant’s primary business based on annual sales volume measured in local currency. In addition, some MCCs identify a specific merchant or type of transaction. Visa and its members use MCC data for a range of purposes, including activity tracking, reporting, and risk management. Acquirers (and their agents) are required to assign the correct MCC to each of their merchants. Visa retains the right to require corrections to MCC assignments and use.  The MCCs and descriptions have been derived from Standard Industrial Classification (SIC) Codes and the International Organization for Standardization (ISO) Codes. Please note that Visa MCCs and SIC codes do not always correspond. In many cases, Visa has consolidated several SIC codes into one MCC to manage the number of MCCs. In other cases, such as for T&E and direct marketing merchants, Visa established MCCs that do not have corresponding SIC codes.  See [Visa Merchant Data Standards Manual](https://usa.visa.com/dam/VCOM/download/merchants/visa-merchant-data-standards-manual.pdf) for more info.  For information related to MCC codes, please navigate to [this link](https://www.visa.com/supplierlocator-app/app/#/home/supplier-locator) about Supplier Locator.  |  |

**Example**
<pre>3001</pre>

#### BaseConsumerInformation Schema

Defines the cardholder/consumer that is initiating the creation of the plan acceptance or is selecting one of the eligible plans from the Seller.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| encAccountNumber | byte | JWE<AccountNumber> - This is a URL-safe base64-encoded string that represents the encrypted payload for AccountNumber. The format is the JSON Web Encryption using asymmetric/symmetric key material made available at time of onboarding. It is a standard JWT with a single custom AccountNumber claim, “accountNumber” that contains the card number/PAN.  Visa uses JSON Web Encryption (JWE) to encrypt sensitive information in APIs. For more info, see "Encryption (JWE) Details".  | No |
| tokenAccountNumber | string | EMVCo Token account number provisioned by Visa<br>*Example:* `"4024007133554278"` | No |
| vProvisionedTokenID | string | This is the token information corresponding to the PAN tokenized by the TokenRequester. The token requester is usually the seller.<br>*Example:* `"ac9e1cf6693c32cb7921112b7eb07d01"` | No |
| paymentAccountReference | string | A Payment Account Reference (PAR) is a unique reference value associated with a specific card holder PAN. It identifies the card account, not just a card. PAR is a non-payment identifier that can be associated to PANs and tokens, as defined by EMVCo.  PAR allows all participants in the payments chain to have a single, non-sensitive value assigned to a consumer. This value can be used in place of sensitive card holder identification fields, and transmitted across the payments ecosystem to facilitate card holder identification. PAR has a well-defined format (as per the Jan 2016 EMVCo documentation): - Fixed length of 29 characters - All Uppercase, Roman, & Alphanumeric values - 4-character BIN Controller ID assigned by EMVCo followed by a 25-character value <br>*Example:* `"V0010013820238835225373131610"` | No |

#### PlanForSeller Schema

Installment plan that has been matched against the eligibility criteria setup by the plan's issuer. The input for the matching criteria is provided by the Seller to Visa either during or after the purchase.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| PlanForSeller | { **"name"**: string, **"type"**: string, <br>**Available values:** "MARKET", "BI_LATERAL", "ISSUER_DEFAULT", "ISSUER_PROMOTION", "ISSUER_HYBRID", **"vPlanID"**: string (uuid), **"fundedBy"**: [ string, <br>**Available values:** "CONSUMER", "MERCHANT" ], **"vPlanIDRef"**: string, **"islamicPlan"**: boolean, **"promotionInfo"**: { **"promotionID"**: string, **"promotionCode"**: string }, **"termsAndConditions"**: [ { **"url"**: string, **"text"**: string, **"version"**: integer, **"languageCode"**: string } ], **"installmentFrequency"**: string, <br>**Available values:** "WEEKLY", "BIWEEKLY", "MONTHLY", "BIMONTHLY", **"numberOfInstallments"**: number (integer) } & { **"costInfo"**: { **"feeInfo"**: [ { **"type"**: string, <br>**Available values:** "CONSUMER", "CONSUMER_UPFRONT", "MERCHANT_FUNDING", "MERCHANT_SERVICE", **"flatFee"**: long, **"ratePercentage"**: integer, **"monthlyRatePercentage"**: integer } ], **"currency"**: string, **"totalFees"**: long, **"totalPlanCost"**: long, **"lastInstallment"**: { **"amount"**: long, **"totalAmount"**: long, **"installmentFee"**: long }, **"firstInstallment"**: { **"upfrontFee"**: long, **"totalAmountExcludingUpfrontFee"**: long } & { **"amount"**: long, **"totalAmount"**: long, **"installmentFee"**: long }, **"totalUpfrontFees"**: long, **"totalRecurringFees"**: long, **"annualPercentageRate"**: integer } } | Installment plan that has been matched against the eligibility criteria setup by the plan's issuer. The input for the matching criteria is provided by the Seller to Visa either during or after the purchase. |  |

#### CardNetworkBrand Schema

The card network brand. When no value is set (or the field is not returned), it should be treated as VISA.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| CardNetworkBrand | string, <br>**Available values:** "VISA", "NON_VISA", "MASTERCARD", "AMERICAN_EXPRESS", "DISCOVER", "JCB", "UNIONPAY", "DINERSCLUB", <br>**Default:** VISA | The card network brand. When no value is set (or the field is not returned), it should be treated as VISA. |  |

#### BaseTransactionInformation Schema

This structure represents the fields required for identifying a Visa transaction.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| authCode | string | ISO transaction auth code (alphanumeric)<br>*Example:* `"05754C"` | No |
| currency | string | <b>  Conditional Mandatory Field  </b>: Always required when <code>transactionAmount</code> is specified. Currency of <code>transactionAmount</code> and <code>transactionRefundAmount</code>. Currency code in [ISO 4217 format](https://www.iban.com/currency-codes).  | No |
| vTransactionID | string | ISO Visa Authorization Transaction ID. + A unique value that Visa assigns to each transaction and returns to the acquirer in the authorization response. + Visa uses this value to maintain an audit trail throughout the life cycle of the transaction and all related transactions, such as reversals, adjustments, confirmations, and chargebacks. + In case of <b>Post Purchase scenario</b>, if Visa Transaction ID differs between authorization and clearing, this value should refer to clearing Visa Transaction ID. <br><b>Note:</b><br> In transactions using Mastercard credentials, where a single transaction ID is not available, Participants should use the Mastercard <code>Tran ID</code> field. <code>Tran ID</code> is made up of <code>Financial Network Code + Banknet Reference Number + MMDD(TransactionDate)</code>, concatenated with no spaces. <br>*Example:* `"460162701383910"` | No |
| externalTransactionRef | string | This is used by external clients as an opaque identifier and is sometimes used to correlate multiple transaction.<br>*Example:* `"17013357808877803992"` | No |

#### EncryptedSecondaryAccountNumber Schema

JWE<AccountNumber> - This is a URL-safe base64-encoded string that represents the encrypted payload for AccountNumber.
The format is the JSON Web Encryption using asymmetric/symmetric key material made available at time of onboarding.
It is a standard JWT with a single custom AccountNumber claim, “accountNumber” that contains the card number/PAN.

Visa uses JSON Web Encryption (JWE) to encrypt sensitive information in APIs. For more info, see "Encryption (JWE) Details".

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| EncryptedSecondaryAccountNumber | byte | JWE<AccountNumber> - This is a URL-safe base64-encoded string that represents the encrypted payload for AccountNumber. The format is the JSON Web Encryption using asymmetric/symmetric key material made available at time of onboarding. It is a standard JWT with a single custom AccountNumber claim, “accountNumber” that contains the card number/PAN.  Visa uses JSON Web Encryption (JWE) to encrypt sensitive information in APIs. For more info, see "Encryption (JWE) Details".  |  |

#### y_JWK Schema

EC y Coordinate in *base64Url* encoded value. Applicable only for EC key type.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| y_JWK | byte | EC y Coordinate in *base64Url* encoded value. Applicable only for EC key type. |  |

#### MerchantState Schema

State where the merchant is located

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| MerchantState | string | State where the merchant is located |  |

#### BasicNonVisaTransactionData Schema

This is a subset of common elements across ISO 8583 Authorization & Clearing Transaction Message fields for *non-Visa* cards as needed by installments application.
This structure is used in callback/webhook responses as it does not contain the account number info.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| type | string, <br>**Available values:** "AUTH", "AUTH_REVERSAL", "CS_SALES_DRAFT", "CS_CREDIT_VOUCHER", "CS_CASH_DISBURSEMENT", "CS_SALES_DRAFT_REVERSAL", "CS_CREDIT_VOUCHER_REVERAL", "CS_CASH_DISBURSEMENT_REVERSAL" | ISO Transaction or Settlement message type + AUTH - ISO 0100/0110 - Authorization request/response data for purchase, cash, balance inquiry, return of goods + AUTH_REVERSAL - ISO 400/410 - ISO  Reversal of an Authorization Request. Reversals are not the same as a merchandise return, but instead are used to reverse approved authorizations or financial transactions which are not completed due to unintended transactions. For example, when a merchant put the wrong dollar amount in an auth, the reversal ‘undoes’ it so that another auth message can be sent with the correct amount. + CS_SALES_DRAFT - TC 05 – Original purchase or representment; or dispute response financial + CS_CREDIT_VOUCHER - TC 06 – Original credit voucher or representment or dispute response financial; or original credit or representment + CS_CASH_DISBURSEMENT - TC 07 – Original cash disbursement/withdrawal or representment or dispute response financial + CS_SALES_DRAFT_REVERSAL - TC 25 – Reversal of an original purchase or representment or dispute response financial transaction + CS_CREDIT_VOUCHER_REVERAL - TC 26 – Reversal of an original credit voucher or representment or dispute response financial transaction; or original credit or representment transaction. + CS_CASH_DISBURSEMENT_REVERSAL - TC 27 – Reversal of an original cash disbursement/withdrawal transaction <br>*Enum:* `"AUTH"`, `"AUTH_REVERSAL"`, `"CS_SALES_DRAFT"`, `"CS_CREDIT_VOUCHER"`, `"CS_CASH_DISBURSEMENT"`, `"CS_SALES_DRAFT_REVERSAL"`, `"CS_CREDIT_VOUCHER_REVERAL"`, `"CS_CASH_DISBURSEMENT_REVERSAL"` | No |
| authCode | string | ISO transaction Auth Code (alphanumeric). This Field 38 in ISO 8583 contains the response identification assigned by the authorizing institution. <br>*Example:* `"05754C"` | No |
| category | string | The Merchant Category Code (MCC) is a four-digit number assigned to describe a merchant’s primary business based on annual sales volume measured in local currency. In addition, some MCCs identify a specific merchant or type of transaction. Visa and its members use MCC data for a range of purposes, including activity tracking, reporting, and risk management. Acquirers (and their agents) are required to assign the correct MCC to each of their merchants. Visa retains the right to require corrections to MCC assignments and use.  The MCCs and descriptions have been derived from Standard Industrial Classification (SIC) Codes and the International Organization for Standardization (ISO) Codes. Please note that Visa MCCs and SIC codes do not always correspond. In many cases, Visa has consolidated several SIC codes into one MCC to manage the number of MCCs. In other cases, such as for T&E and direct marketing merchants, Visa established MCCs that do not have corresponding SIC codes.  See [Visa Merchant Data Standards Manual](https://usa.visa.com/dam/VCOM/download/merchants/visa-merchant-data-standards-manual.pdf) for more info.  For information related to MCC codes, please navigate to [this link](https://www.visa.com/supplierlocator-app/app/#/home/supplier-locator) about Supplier Locator. <br>*Example:* `"3001"` | No |
| cardBrand | string, <br>**Available values:** "VISA", "NON_VISA", "MASTERCARD", "AMERICAN_EXPRESS", "DISCOVER", "JCB", "UNIONPAY", "DINERSCLUB", <br>**Default:** VISA | The card network brand. When no value is set (or the field is not returned), it should be treated as VISA.<br>*Enum:* `"VISA"`, `"NON_VISA"`, `"MASTERCARD"`, `"AMERICAN_EXPRESS"`, `"DISCOVER"`, `"JCB"`, `"UNIONPAY"`, `"DINERSCLUB"` | No |
| merchantCity | string | Name of the merchant's city<br>*Example:* `"Foster City"` | No |
| merchantName | string | Name of the merchant used for reporting purposes<br>*Example:* `"XYZ123"` | No |
| merchantState | string | State where the merchant is located | No |
| vPlanAcceptanceID | string (uuid) | Visa-generated identifier for a plan acceptance<br>*Example:* `"31e9f2b5-d90d-089e-67a5-1f533b02d301"` | No |
| merchantPostalCode | string | Postal/Zip code of the merchant<br>*Example:* `"123456"` | No |
| merchantCountryCode | string | ISO Country code where the merchant is located in ISO 3166-2 (alpha) format<br>*Example:* `"CA"` | No |
| paymentAccountReference | string | A Payment Account Reference (PAR) is a unique reference value associated with a specific card holder PAN. It identifies the card account, not just a card. PAR is a non-payment identifier that can be associated to PANs and tokens, as defined by EMVCo.  PAR allows all participants in the payments chain to have a single, non-sensitive value assigned to a consumer. This value can be used in place of sensitive card holder identification fields, and transmitted across the payments ecosystem to facilitate card holder identification. PAR has a well-defined format (as per the Jan 2016 EMVCo documentation): - Fixed length of 29 characters - All Uppercase, Roman, & Alphanumeric values - 4-character BIN Controller ID assigned by EMVCo followed by a 25-character value <br>*Example:* `"V0010013820238835225373131610"` | No |
| originatorTransactionReference | string | Reference number allocated by the card acceptor to enable lookup of transaction for various use cases like disputes. This can be the acquirer reference number for the transaction in case of CS data.  | No |

#### InstallmentTransactionStatus Schema

Status of the ISO Transaction's Clearing associated with a plan acceptance.
  + "CONFIRMED" - Clearing received and InstallmentTransaction is confirmed.
  + "CANCELLED" - Cancel request received and cancelled.
  + "PENDING_CONFIRMATION" - Authorization received and waiting for clearing match in Visa Installments.
  + "PENDING_CANCELLATION" - Cancel request received and waiting for original clearing.
  + "PARTIALLY_REFUNDED" - Cancel request received and transaction amount partially refunded.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| InstallmentTransactionStatus | string, <br>**Available values:** "CONFIRMED", "CANCELLED", "PENDING_CONFIRMATION", "PENDING_CANCELLATION", "PARTIALLY_REFUNDED" | Status of the ISO Transaction's Clearing associated with a plan acceptance.   + "CONFIRMED" - Clearing received and InstallmentTransaction is confirmed.   + "CANCELLED" - Cancel request received and cancelled.   + "PENDING_CONFIRMATION" - Authorization received and waiting for clearing match in Visa Installments.   + "PENDING_CANCELLATION" - Cancel request received and waiting for original clearing.   + "PARTIALLY_REFUNDED" - Cancel request received and transaction amount partially refunded.  |  |

**Example**
<pre>CONFIRMED</pre>

#### AccountRangeEnrollmentIdentifier Schema

Visa-generated identifier for a Account Range Enrollment

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| AccountRangeEnrollmentIdentifier | string (uuid) | Visa-generated identifier for a Account Range Enrollment |  |

**Example**
<pre>cd15d26e-5a4e-4eb5-9c35-9cfb4cbca7ee</pre>

#### EnrollmentStatus Schema

Defined the enrollment status for each enrollment record. "NOT_ENROLLED" means the card holder is currently not enrolled or enrollment will end within 24 hours of enrollmentEndDate. "ERROR" means the card holder was not enrolled due to an error.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| EnrollmentStatus | string, <br>**Available values:** "ENROLLED", "NOT_ENROLLED", "ERROR" | Defined the enrollment status for each enrollment record. "NOT_ENROLLED" means the card holder is currently not enrolled or enrollment will end within 24 hours of enrollmentEndDate. "ERROR" means the card holder was not enrolled due to an error. |  |

**Example**
<pre>ENROLLED</pre>

#### TransactionRefundAmount Schema

The amount used for partial or full cancellation of clearings associated with Visa ISO transaction.
The amount is represented in minor units. It is a numerical value in the minor units of the currency (Cents for USD, for example [<b>minor units</b>](https://www.currency-iso.org/en/home/tables/table-a1.html)). If the currency is USD, “214010” is used for representing the amount, "$2,140.10".
Note that there are no fractional minor units represented. They're rounded to the nearest whole number of minor units.

When used in the HTTP request body for Visa Installment APIs
+ This field will be used to specify the refund amount to be split across the associated clearing within a transaction.
+ If this field is not provided then all clearing associated with the transaction will be fully cancelled based on the Transaction Amount.

When returned in the HTTP response body or callback notifications,
+ This field is populated if provided by the merchant/seller in the request and represents the refund amount that was split across the associated clearing within a transaction.

When requested in API request from Merchant (<b>During Purchase scenario</b>):
+ In multi-currency scenario, this field should be populated in source currency.

When returned in API response or callback notification (<b>During Purchase scenario</b>):
+ When returned to Merchant in multi-currency scenario, this field will be populated in source currency.
+ When returned to Issuer in multi-currency scenario, this field will be populated in Issuer's currency.

When requested in API request from Issuer (<b>Post Purchase scenario</b>):
 + In multi-currency scenario, this field should be populated in Issuer's currency.

When returned in API response or callback notification to Issuer (<b>Post Purchase scenario</b>):
+ In multi-currency scenario, this field will be populated in Issuer's currency.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| TransactionRefundAmount | long | The amount used for partial or full cancellation of clearings associated with Visa ISO transaction. The amount is represented in minor units. It is a numerical value in the minor units of the currency (Cents for USD, for example [<b>minor units</b>](https://www.currency-iso.org/en/home/tables/table-a1.html)). If the currency is USD, “214010” is used for representing the amount, "$2,140.10". Note that there are no fractional minor units represented. They're rounded to the nearest whole number of minor units.  When used in the HTTP request body for Visa Installment APIs + This field will be used to specify the refund amount to be split across the associated clearing within a transaction. + If this field is not provided then all clearing associated with the transaction will be fully cancelled based on the Transaction Amount.  When returned in the HTTP response body or callback notifications, + This field is populated if provided by the merchant/seller in the request and represents the refund amount that was split across the associated clearing within a transaction.  When requested in API request from Merchant (<b>During Purchase scenario</b>): + In multi-currency scenario, this field should be populated in source currency.  When returned in API response or callback notification (<b>During Purchase scenario</b>): + When returned to Merchant in multi-currency scenario, this field will be populated in source currency. + When returned to Issuer in multi-currency scenario, this field will be populated in Issuer's currency.  When requested in API request from Issuer (<b>Post Purchase scenario</b>):  + In multi-currency scenario, this field should be populated in Issuer's currency.  When returned in API response or callback notification to Issuer (<b>Post Purchase scenario</b>): + In multi-currency scenario, this field will be populated in Issuer's currency.  |  |

#### TransactionSequenceTotal Schema

Total number of clearings for the corresponding Authorization. This is present only when there are multiple clearings per auth.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| TransactionSequenceTotal | integer | Total number of clearings for the corresponding Authorization. This is present only when there are multiple clearings per auth. |  |

**Example**
<pre>3</pre>

#### Currency Schema

Currency code in [ISO 4217 format](https://www.iban.com/currency-codes)

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| Currency | string | Currency code in [ISO 4217 format](https://www.iban.com/currency-codes)  |  |

**Example**
<pre>USD</pre>

#### InstallmentTransactionForResponse Schema

Associated transaction for a given plan acceptance. A plan acceptance can be created with a single ISO transaction or
many ISO transactions, or a part of an ISO transaction (one clearing out of many, for example).
Represents the schedule of payments corresponding to a plan acceptance.
Clearing data will be always included when available.
<BR/><b>NOTES:</b>
+ When returned in the HTTP response body or callback notifications, all of the fields below are required (i.e., al fields are populated when used in response body).
+ When used in the HTTP request body of an API request to Visa Installments, the required fields must be provided.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| InstallmentTransactionForResponse | { **"status"**: string, <br>**Available values:** "CONFIRMED", "CANCELLED", "PENDING_CONFIRMATION", "PENDING_CANCELLATION", "PARTIALLY_REFUNDED", **"vInstallmentTransactionID"**: string (uuid) } & { **"clearingAmount"**: long, **"clearingDateTime"**: dateTime, **"settlementCurrency"**: string, **"clearingSequenceNumber"**: string, **"acquirerReferenceNumber"**: string } | Associated transaction for a given plan acceptance. A plan acceptance can be created with a single ISO transaction or many ISO transactions, or a part of an ISO transaction (one clearing out of many, for example). Represents the schedule of payments corresponding to a plan acceptance. Clearing data will be always included when available. <BR/><b>NOTES:</b> + When returned in the HTTP response body or callback notifications, all of the fields below are required (i.e., al fields are populated when used in response body). + When used in the HTTP request body of an API request to Visa Installments, the required fields must be provided.  |  |

#### BasePage Schema

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| last | boolean |  | No |
| empty | boolean |  | No |
| first | boolean |  | No |
| number | integer |  | No |
| totalCount | integer |  | No |
| totalPages | integer |  | No |
| resultsCount | integer |  | No |

#### InstallmentCostDetails Schema

Cost details (fee and principal) for each Installment.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| amount | long | The principal amount for this Installment period. The currency is specified in the parent object that includes this structure. The amount is represented in minor units. It is a numerical value in the [<b>minor units</b>](https://www.currency-iso.org/en/home/tables/table-a1.html) of the currency, such as Cents for USD. If the currency is USD, “13400” is used for representing the amount, "$134.00". Note that there are no fractional minor units represented. They're rounded to the whole minor units. <br>*Example:* `50000` | Yes |
| totalAmount | long | The total amount payable for this Installment period, inclusive of principal amount, consumer fee and any upfront fee. The currency is specified in the parent object that includes this structure. The amount is represented in minor units. It is a numerical value in the [<b>minor units</b>](https://www.currency-iso.org/en/home/tables/table-a1.html) of the currency, such as Cents for USD. If the currency is USD, “13400” is used for representing the amount, "$134.00". Note that there are no fractional minor units represented. They're rounded to the whole minor units. <br>*Example:* `55000` | Yes |
| installmentFee | long | The consumer fee for this Installment period. This fee corresponds to the fee type <code>CONSUMER</code>. The amount is represented in minor units. It is a numerical value in the [<b>minor units</b>](https://www.currency-iso.org/en/home/tables/table-a1.html) of the currency, such as Cents for USD. If the currency is USD, “13400” is used for representing the amount, "$134.00". Note that there are no fractional minor units represented. They're rounded to the whole minor units. <br>*Example:* `5000` | Yes |

#### LastInstallment Schema

Cost details (fee and principal) for the last Installment.
Note that the last Installment includes the balance of the rounding amounts when amount is split across various Installment periods.
The amount is represented in minor units. It is a numerical value in the [<b>minor units</b>](https://www.currency-iso.org/en/home/tables/table-a1.html) of the currency, such as Cents for USD. If the currency is USD, “13400” is used for representing the amount, "$134.00".
Note that there are no fractional minor units represented. They're rounded to the whole minor units.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| LastInstallment | { **"amount"**: long, **"totalAmount"**: long, **"installmentFee"**: long } | Cost details (fee and principal) for the last Installment. Note that the last Installment includes the balance of the rounding amounts when amount is split across various Installment periods. The amount is represented in minor units. It is a numerical value in the [<b>minor units</b>](https://www.currency-iso.org/en/home/tables/table-a1.html) of the currency, such as Cents for USD. If the currency is USD, “13400” is used for representing the amount, "$134.00". Note that there are no fractional minor units represented. They're rounded to the whole minor units.  |  |

#### PlanAcceptanceStatusTransitions Schema

The timestamps at which the Plan Acceptance status was updated.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| createdDateTime | string (date-time-ms-nooffset) | When the plan acceptance was created/initiated from the Seller.<br>*Example:* `"2021-01-17T16:15:21.298"` | Yes |
| updatedDateTime | string (date-time-ms-nooffset) | When the plan acceptance was updated (associated with another ISO transaction). This field is present only if an additional ISO transaction was associated with this plan acceptance after creation.<br>*Example:* `"2021-01-17T16:15:21.298"` | No |
| confirmedDateTime | string (date-time-ms-nooffset) | When the plan acceptance was confirmed after the Visa ISO transaction clearing. This field is present only if the plan acceptance is confirmed.<br>*Example:* `"2021-01-17T16:15:21.298"` | No |
| cancellationDateTime | string (date-time-ms-nooffset) | When the plan acceptance was canceled before it was closed. This field is present only if the plan acceptance was canceled at some point.<br>*Example:* `"2021-01-17T16:15:21.298"` | No |

#### AccountRangeMax Schema

Maximum acceptable value in the defined Account Range Enrollment

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| AccountRangeMax | string | Maximum acceptable value in the defined Account Range Enrollment |  |

**Example**
<pre>5236910248839999</pre>

#### CandidatesBatchPageContentArrayItem Schema

Each of the submitted <code>ConsumerInfo</code> object is echoed back in the response along with the following:
+ Eligibility Status
+ Error Response (if any encountered during matching process, eligibility status should be 'ERROR')

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| CandidatesBatchPageContentArrayItem | { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string }, **"encAccountNumber"**: byte, **"eligibilityStatus"**: string, <br>**Available values:** "MATCHED", "NOT_MATCHED", "ERROR", <br>**Default:** MATCHED, **"tokenAccountNumber"**: string, **"vProvisionedTokenID"**: string } | Each of the submitted <code>ConsumerInfo</code> object is echoed back in the response along with the following: + Eligibility Status + Error Response (if any encountered during matching process, eligibility status should be 'ERROR')  |  |

#### PromotionInformation Schema

This is the promotion information shared between the Issuer and Seller.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| promotionID | string | An opaque string (as an external identifier) provided by the issuer to Visa that identifies a program or promotion that is setup outside of Visa Installment Services. + Up to 8 alphanumeric characters + This identifier is used during plan search or eligibility checks. <br>*Example:* `"MBANK12"` | No |
| promotionCode | string | An opaque string (as an external identifier to this plan) provided by the issuer to Visa that identifies this Installment plan. + Up to 2 alphanumeric characters + It is typically shared to the Seller by the Financial Institution/Issuer so that it can be passed-in during eligibility checks or plan acceptance. <br>*Example:* `"A2"` | No |

#### PlanEndDate Schema

Effective End date of the Plan.Plan end date as set by the Issuer.This can be null if there is no end date.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| PlanEndDate | date | Effective End date of the Plan.Plan end date as set by the Issuer.This can be null if there is no end date.  |  |

#### ProductType Schema

Product Type of the PAN.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| ProductType | string, <br>**Available values:** "CREDIT", "DEBIT" | Product Type of the PAN. |  |

**Example**
<pre>DEBIT</pre>

#### AccountRange Schema

Defines the set of cards corresponding to the enrollment profile. These account ranges are checked for ownership by the API caller; if not authorized, an HTTP 403 error is returned.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| max | string | The maximum of the account range to be included for PANs. All “wild card” digits in the account number should be filled with 0s.<br>*Example:* `"412667478532410943000"` | Yes |
| min | string | The minimum of the account range to be included for PANs. All “wild card” digits in the account number should be filled with 0s.<br>*Example:* `"412667478532410942000"` | Yes |

#### PlanFlatFee Schema

Flat fee applied on the first Installment payment in Issuer currency.
The amount is represented in minor units. It is a numerical value in the minor units of the currency (Cents for USD, for example).

+ The currency field decides the [<b>minor units</b>](https://www.currency-iso.org/en/home/tables/table-a1.html). If the currency is USD, “1034” is used for representing the amount "$10.34".
+ Note that there are no fractional minor units represented. They're rounded to the whole minor units.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| PlanFlatFee | long | Flat fee applied on the first Installment payment in Issuer currency. The amount is represented in minor units. It is a numerical value in the minor units of the currency (Cents for USD, for example).  + The currency field decides the [<b>minor units</b>](https://www.currency-iso.org/en/home/tables/table-a1.html). If the currency is USD, “1034” is used for representing the amount "$10.34". + Note that there are no fractional minor units represented. They're rounded to the whole minor units.  |  |

**Example**
<pre>13400</pre>

#### InstallmentMode Schema

Specifies the mode of installment. 
<br>
<b>Note:</b> This is an optional field, however it must be provided when Acquirer makes the call on behalf of the Merchant(OnUs Transactions) and in such cases it must be set to <code>DURING_PURCHASE</code>.
- "DURING_PURCHASE" - Indicates the installment is initiated during the purchase.
- "POST_PURCHASE" - Indicates the installment is initiated after the purchase.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| InstallmentMode | string, <br>**Available values:** "DURING_PURCHASE", "POST_PURCHASE" | Specifies the mode of installment.  <br> <b>Note:</b> This is an optional field, however it must be provided when Acquirer makes the call on behalf of the Merchant(OnUs Transactions) and in such cases it must be set to <code>DURING_PURCHASE</code>. - "DURING_PURCHASE" - Indicates the installment is initiated during the purchase. - "POST_PURCHASE" - Indicates the installment is initiated after the purchase.  |  |

**Example**
<pre>DURING_PURCHASE</pre>

#### AccountRangeMin Schema

Minimum acceptable value in the defined Account Range Enrollment

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| AccountRangeMin | string | Minimum acceptable value in the defined Account Range Enrollment |  |

**Example**
<pre>5236910248830000</pre>

#### BaseOnboardingInformation-1 Schema

Details required to Onboard a client associated with a Partner

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| city | string | Name of the merchant's city<br>*Example:* `"Foster City"` | No |
| phone | string | Client's primary phone number.  Client's primary phone number and the format is based on the countryCode field              <table>               <tr><th><b>countryCode</b></th><th><b>MinLength</b></th><th><b>MaxLength</b></th><th><b>Format</b></th></tr>               <tr>                 <td>                 <ul>                   <li>AU (Australia)</li>                   <li>CA (Canada)</li>                   <li>US (United States of America)</li>                 </ul>                 </td>                 <td>10</td>                 <td>16</td>                 <td>Allowed characters are digits, a hyphen, an open parenthesis, a close parenthesis, a dot, a plus sign, or whitespace.Example:+(001)-97444108</td>               </tr>              <tr>                 <td>                 <ul>                   <li>MY (Malaysia)</li>                   <li>MX (Mexico)</li>                   <li>NZ (New Zealand)</li>                 </ul>              </td>                 <td>3</td>                 <td>15</td>                 <td>Only digits are allowed.Example:0097444100888</td>               </tr>                 <tr>                   <td>Other Countries</td>                   <td>1</td>                   <td>16</td>                   <td>Only digits are allowed.Example:0097444100888</td>             </table>  | No |
| address1 | string | First line of the client's primary address. This value can be Alphabetic, numeric, or the following characters: spaces, ' (single quote), # (pound-sign or hash), , (comma), _ (underscore), : (colon), / (forward slash), and - (hyphen) <br>*Example:* `"1 Main Street"` | Yes |
| address2 | string | Second line of the client's primary address. It can be empty. This value can be Alphabetic, numeric, or the following characters: spaces, ' (single quote), # (pound-sign or hash), , (comma), _ (underscore), : (colon), / (forward slash), and - (hyphen) <br>*Example:* `"2nd Block"` | No |
| postalCode | string | Postal/Zip code of the merchant<br>*Example:* `"123456"` | No |
| countryCode | string | ISO Country code where the merchant is located in ISO 3166-2 (alpha) format<br>*Example:* `"CA"` | Yes |
| cardAcceptorId | string | Unique identifier that identifies the card acceptor operating the POS terminal. This field must contain an acquirer-assigned alphanumeric code that identifies the Card Acceptor(store/merchant transaction point). <br>*Example:* `"234568785"` | No |
| primaryLegalName | string | Legal name of client. This value must contain only English alphabets,numbers and space. <br>*Example:* `"ABZ Inc"` | Yes |
| primaryTradeName | string | Trade name of client, such as a doing business-as (DBA) name. If not specified, the legal name (companyPrimaryLegalName) is used by default. This value must contain only English alphabets,numbers and space. <br>*Example:* `"ABZ Traders"` | No |
| primaryWebsiteURL | string | URL of Clients's website. <br>*Example:* `"http://www.example.com"` | Yes |
| stateProvinceCode | string | State or province code associated with the physical address in the specified country. This value can be alphabetic, numeric, or the following characters: spaces, '(single quote), ,(comma), and -(hyphen).  Recommended to use the country subdivision codes defined in ISO-3166-2. (Note: must use ISO-3166-2 subdivision codes for AU, CA, and US).  Additional validations based on countryCode:  <table>   <tr><th><b>countryCode</b></th><th><b>Description</b></th></tr>   <tr>     <td>AU (Australia), CA (Canada), US (United States of America)</td>     <td>Must be a subdivision code (up to three characters) defined in ISO-3166-2. e.g. NSW (AU), QC (CA), DE (US)</td>   </tr> </table> <br>*Example:* `"QC"` | No |
| primaryContactEmail | string | Email address of Client's primary contact, which is also the user name for Visa portal access. <br>*Example:* `"test@xyz.com"` | No |
| primaryContactLastName | string | Surname of Client's primary contact person. Alphabetic or the following characters: spaces, ' (single quote), ` (back tick), ~ (tilde), " (double quote), . (period), and - (hyphen) <br>*Example:* `"Smith"` | No |
| primaryContactFirstName | string | First name of Client's primary contact person. Alphabetic or the following characters: spaces, ' (single quote), ` (back tick), ~ (tilde), " (double quote), . (period), and - (hyphen) <br>*Example:* `"John"` | No |
| partnerMerchantReferenceID | string | Usually, this reference ID is assigned by the Partner but in cases where not provided when onboarding the Merchant, this value will be generated by Visa and provided to the Partner.  It is used by Visa for enforcing authorization (so that one Merchant's plan acceptance is not accessed/modified by an unauthorized merchant/partner), risk assessment and for instrumentation.   It is also used to serve bilateral plan agreements between a Seller and Issuer. In the future, it can be used to specify merchant-specific filters for installment plans.     - When provided in cancellation or search, this ID is used to match the plan acceptance and enforce authorization.    - When provided in plan selection (plan acceptance creation) API, it is used to later for authorization checks on cancel or search plan acceptances.    - When provided in plan match API, it is used for filter bilateral plans & instrumentation/reporting purposes. <br>*Example:* `"98243463"` | No |

#### BatchStatus Schema

Status of the submitted batch job. The results are available when the job is COMPLETED.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| BatchStatus | string, <br>**Available values:** "SUBMITTED", "COMPLETED" | Status of the submitted batch job. The results are available when the job is COMPLETED. |  |

**Example**
<pre>COMPLETED</pre>

#### AccountRangeEnrollment Schema

Details of Account Range Enrollment in Installment

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| accountRangeMax | string | Maximum acceptable value in the defined Account Range Enrollment<br>*Example:* `"5236910248839999"` | Yes |
| accountRangeMin | string | Minimum acceptable value in the defined Account Range Enrollment<br>*Example:* `"5236910248830000"` | Yes |
| vEnrollmentProfileID | string (uuid) | Visa-generated Enrollment Profile Identifier<br>*Example:* `"278a6873-9dc2-b466-284c-1d10ee797301"` | Yes |
| vAccountRangeEnrollmentID | string (uuid) | Visa-generated identifier for a Account Range Enrollment<br>*Example:* `"cd15d26e-5a4e-4eb5-9c35-9cfb4cbca7ee"` | Yes |

#### TransactionInfoWithRefundInstallmentTransaction Schema

Transaction information that includes the associated transaction along multiple clearing info and refund details.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| TransactionInfoWithRefundInstallmentTransaction | { **"authCode"**: string, **"currency"**: string, **"vTransactionID"**: string, **"externalTransactionRef"**: string } & { **"dateTime"**: dateTime, **"transactionAmount"**: long } & { **"installmentTransactions"**: [ { **"status"**: string, <br>**Available values:** "CONFIRMED", "CANCELLED", "PENDING_CONFIRMATION", "PENDING_CANCELLATION", "PARTIALLY_REFUNDED", **"vInstallmentTransactionID"**: string (uuid) } & { **"clearingAmount"**: long, **"clearingDateTime"**: dateTime, **"settlementCurrency"**: string, **"clearingSequenceNumber"**: string, **"acquirerReferenceNumber"**: string } & { **"refundAmount"**: long, **"lastRefundDateTime"**: dateTime } ], **"transactionRefundAmount"**: long } | Transaction information that includes the associated transaction along multiple clearing info and refund details.  |  |

#### EffectiveEnrollmentUpdateDate Schema

Effective date for the enrollment profile Id update to be effective. *This must be later than (midnight() UTC + 24 hours), otherwise a 400 error will be returned*
*Required* and used only when <code>vEnrollmentProfileID</code> is updated for an already enrolled cardholder. Otherwise, this value is ignored.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| EffectiveEnrollmentUpdateDate | date | Effective date for the enrollment profile Id update to be effective. *This must be later than (midnight() UTC + 24 hours), otherwise a 400 error will be returned* *Required* and used only when <code>vEnrollmentProfileID</code> is updated for an already enrolled cardholder. Otherwise, this value is ignored.  |  |

#### NonVisaClearingSettlementData Schema

This is a subset of Clearing / Settlement Transaction Message fields for *non-Visa* cards as needed by installments application.
This structure is used in callback/webhook responses as it does not contain the account number info.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| NonVisaClearingSettlementData | { **"type"**: string, <br>**Available values:** "AUTH", "AUTH_REVERSAL", "CS_SALES_DRAFT", "CS_CREDIT_VOUCHER", "CS_CASH_DISBURSEMENT", "CS_SALES_DRAFT_REVERSAL", "CS_CREDIT_VOUCHER_REVERAL", "CS_CASH_DISBURSEMENT_REVERSAL", **"authCode"**: string, **"category"**: string, **"cardBrand"**: string, <br>**Available values:** "VISA", "NON_VISA", "MASTERCARD", "AMERICAN_EXPRESS", "DISCOVER", "JCB", "UNIONPAY", "DINERSCLUB", <br>**Default:** VISA, **"merchantCity"**: string, **"merchantName"**: string, **"merchantState"**: string, **"vPlanAcceptanceID"**: string (uuid), **"merchantPostalCode"**: string, **"merchantCountryCode"**: string, **"paymentAccountReference"**: string, **"originatorTransactionReference"**: string } & { **"sequenceTotal"**: integer, **"sequenceNumber"**: integer, **"settlementAmount"**: long, **"settlementCurrency"**: string, **"settlementDateTime"**: dateTime, **"settlementBillingAmount"**: long, **"settlementBillingCurrency"**: string } | This is a subset of Clearing / Settlement Transaction Message fields for *non-Visa* cards as needed by installments application. This structure is used in callback/webhook responses as it does not contain the account number info.  |  |

#### StandardError Schema

API errors are reported using a Standard Error Response structure. All errors are categorized into Standard errors and Business errors. Standard errors can be returned by any API and should be handled in a common way. Business errors are returned only by some APIs and are documented for each API.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| errorResponse | { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } | Standard error response body provided when there is an error.  | No |

#### DeviceSoftwareID Schema

The unique name or id assigned to the software on the device

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| DeviceSoftwareID | string | The unique name or id assigned to the software on the device |  |

**Example**
<pre>SA2.0</pre>

#### ExternalKeyReference Schema

+ Meaningful only to the caller of this API
+ Used, optionally, to cross-reference with the keys between the request and response. Use numbers like '1', '2', etc.
+ If not present, the response will include the keys in the same order as the request

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| ExternalKeyReference | string | + Meaningful only to the caller of this API + Used, optionally, to cross-reference with the keys between the request and response. Use numbers like '1', '2', etc. + If not present, the response will include the keys in the same order as the request  |  |

**Example**
<pre>1</pre>

#### EligibleTransaction Schema

Invoked whenever there are transactions eligible for Installment plans of cardholders already registered through a POST_PURCHASE Installment mode.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| cardBrand | string, <br>**Available values:** "VISA", "NON_VISA", "MASTERCARD", "AMERICAN_EXPRESS", "DISCOVER", "JCB", "UNIONPAY", "DINERSCLUB", <br>**Default:** VISA | The card network brand. When no value is set (or the field is not returned), it should be treated as VISA.<br>*Enum:* `"VISA"`, `"NON_VISA"`, `"MASTERCARD"`, `"AMERICAN_EXPRESS"`, `"DISCOVER"`, `"JCB"`, `"UNIONPAY"`, `"DINERSCLUB"` | No |
| matchedPlans | [ string (uuid) ] | List of eligible and active Installment Plans | Yes |
| transactionInfo | { **"authCode"**: string, **"currency"**: string, **"vTransactionID"**: string, **"externalTransactionRef"**: string } & { **"dateTime"**: dateTime, **"transactionAmount"**: long } |  | Yes |
| encAccountNumber | byte | JWE<AccountNumber> - This is a URL-safe base64-encoded string that represents the encrypted payload for AccountNumber. The format is the JSON Web Encryption using asymmetric/symmetric key material made available at time of onboarding. It is a standard JWT with a single custom AccountNumber claim, “accountNumber” that contains the card number/PAN.  Visa uses JSON Web Encryption (JWE) to encrypt sensitive information in APIs. For more info, see "Encryption (JWE) Details".  | Yes |
| eligibilityDateTime | dateTime | Time when this eligibility was determined by Visa Installments<br>*Example:* `"2021-01-17T16:15:21Z"` | Yes |
| eligibilityExpiryDateTime | dateTime | Time when this eligibility expires<br>*Example:* `"2021-01-17T16:15:21Z"` | Yes |

#### TokenReferenceIdentifier Schema

Token Reference value for corresponding to the PAN tokenized by the TokenRequester. The token requester is usually the seller.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| TokenReferenceIdentifier | string | Token Reference value for corresponding to the PAN tokenized by the TokenRequester. The token requester is usually the seller. |  |

**Example**
<pre>rf692we31cf6693c32cb7921112b7eb07d01</pre>

#### KeyFunction Schema

The purpose of this key, which is  generated by the device.
+ Typically, device keys are used for <code>AUTHENTICITY</code>; that is, the Payment Terminal/device Public Key is associated to Payment Terminal/device Authentication
+ Typically, Visa keys are used for <code>AUTHENTICITY</code> and <code>KEY_AGREEMENT</code>
  + <code>AUTHENTICITY</code> for the Visa Public Key associated to Authenticated Message in Visa responses occurring during Payment Terminal/Device Authentication
  + <code>KEY_AGREEMENT</code> for the Visa Static Public Key associated to Key Agreement occurring during Payment Terminal/Device Authentication

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| KeyFunction | string, <br>**Available values:** "AUTHENTICITY", "KEY_AGREEMENT", <br>**Default:** KEY_AGREEMENT | The purpose of this key, which is  generated by the device. + Typically, device keys are used for <code>AUTHENTICITY</code>; that is, the Payment Terminal/device Public Key is associated to Payment Terminal/device Authentication + Typically, Visa keys are used for <code>AUTHENTICITY</code> and <code>KEY_AGREEMENT</code>   + <code>AUTHENTICITY</code> for the Visa Public Key associated to Authenticated Message in Visa responses occurring during Payment Terminal/Device Authentication   + <code>KEY_AGREEMENT</code> for the Visa Static Public Key associated to Key Agreement occurring during Payment Terminal/Device Authentication  |  |

**Example**
<pre>AUTHENTICITY</pre>

#### PlanFeesForBilateral Schema

Fee rate table used to calculate the fees.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| type | string, <br>**Available values:** "ACQUIRER_TO_ISSUER", "CONSUMER", "CONSUMER_UPFRONT", "ISSUER_TO_ACQUIRER", "APR" | Fee types applicable for Bilateral.<br>*Enum:* `"ACQUIRER_TO_ISSUER"`, `"CONSUMER"`, `"CONSUMER_UPFRONT"`, `"ISSUER_TO_ACQUIRER"`, `"APR"`<br>*Example:* `"ACQUIRER_TO_ISSUER"` | No |
| amount | long | Flat Fee for the Plan The amount is represented in minor units. It is a numerical value in the minor units of the currency (Cents for USD, for example).  + The currency field decides the [<b>minor units</b>](https://www.currency-iso.org/en/home/tables/table-a1.html). If the currency is USD, “1034” is used for representing the amount "$10.34". + Note that there are no fractional minor units represented. They're rounded to the whole minor units. <br>*Example:* `500` | No |
| ratePercentage | integer | Interest fee rate in percentage applied on Installment payment. + Percentage rate and is a non-negative value. + The percentage value is represented with two implicit decimals. (max 10000) <b>Example: 250 specifies 2.5%</b> + For calculations, the actual percentage value should be interpreted as follows: <code>actualPercentageValue = ratePercentage / 100.00</code> <br>*Example:* `320` | No |

#### InstallmentTransactionStatusForNotification Schema

Status of an ISO Transaction's Clearing associated with a plan acceptance.
+ "PENDING_CONFIRMATION" - Authorization received and waiting for clearing match in Visa Installments. For Non-Visa based transactions, this should be used as a trigger to send the Auth/Clearing Feed to Visa Installments.
+ "CONFIRMED" - Clearing received and InstallmentTransaction is confirmed.
+ "PENDING_CANCELLATION" - Cancel request received and waiting for original clearing.
+ "CANCELLED" - Cancel request received and cancelled.
+ "PARTIALLY_REFUNDED" - Cancel request received and transaction amount partially refunded.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| InstallmentTransactionStatusForNotification | string, <br>**Available values:** "PENDING_CONFIRMATION", "CONFIRMED", "PENDING_CANCELLATION", "CANCELLED", "PARTIALLY_REFUNDED" | Status of an ISO Transaction's Clearing associated with a plan acceptance. + "PENDING_CONFIRMATION" - Authorization received and waiting for clearing match in Visa Installments. For Non-Visa based transactions, this should be used as a trigger to send the Auth/Clearing Feed to Visa Installments. + "CONFIRMED" - Clearing received and InstallmentTransaction is confirmed. + "PENDING_CANCELLATION" - Cancel request received and waiting for original clearing. + "CANCELLED" - Cancel request received and cancelled. + "PARTIALLY_REFUNDED" - Cancel request received and transaction amount partially refunded.  |  |

**Example**
<pre>PENDING_CONFIRMATION</pre>

#### TransactionSequenceNumber Schema

Transaction sequence number of this transaction when there are multiple clearings per Authorization. They are assumed to be in increments of 1 with no gaps. This is present only when there are multiple clearings per auth.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| TransactionSequenceNumber | integer | Transaction sequence number of this transaction when there are multiple clearings per Authorization. They are assumed to be in increments of 1 with no gaps. This is present only when there are multiple clearings per auth. |  |

**Example**
<pre>1</pre>

#### TotalPlanCost Schema

Grand total of the entire plan cost including the principal amounts and total fees charged to the consumer, across all Installment periods.
The amount is represented in minor units. It is a numerical value in [<b>minor units</b>](https://www.currency-iso.org/en/home/tables/table-a1.html) of the currency (Cents for USD, for example). If the currency is USD, “61299” is used for representing the amount "$612.99".
Note that there are no fractional minor units represented, they're rounded to the whole minor units.<br />
For <b>Canada</b>, total plan cost calculation includes small buffer value to ensure Merchant displays the highest possible value for the transaction at the time of checkout (Issuers are not expected to use the value).

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| TotalPlanCost | long | Grand total of the entire plan cost including the principal amounts and total fees charged to the consumer, across all Installment periods. The amount is represented in minor units. It is a numerical value in [<b>minor units</b>](https://www.currency-iso.org/en/home/tables/table-a1.html) of the currency (Cents for USD, for example). If the currency is USD, “61299” is used for representing the amount "$612.99". Note that there are no fractional minor units represented, they're rounded to the whole minor units.<br /> For <b>Canada</b>, total plan cost calculation includes small buffer value to ensure Merchant displays the highest possible value for the transaction at the time of checkout (Issuers are not expected to use the value).  |  |

**Example**
<pre>612990</pre>

#### PlanAcceptanceStatus Schema

Specifies the status of the plan acceptance.
+ <code>CREATED</code>: The intial state, until <b>all</b> of the installment transactions are confirmed or cancelled or until transaction is associated to this plan acceptance.
+ <code>CANCELLED</code>: Plan acceptance is transitioned to this state when <b>all</b> of the installment transactions are cancelled
+ <code>CONFIRMED</code>: Plan acceptance is transitioned to this state when <b>all</b> of the installment transactions are confirmed
+ <code>UPDATED</code>: Plan acceptance is transitioned to this state from <code>CREATED</code> state when a transaction is associated to this plan acceptance

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| PlanAcceptanceStatus | string, <br>**Available values:** "CREATED", "CANCELLED", "UPDATED", "CONFIRMED" | Specifies the status of the plan acceptance. + <code>CREATED</code>: The intial state, until <b>all</b> of the installment transactions are confirmed or cancelled or until transaction is associated to this plan acceptance. + <code>CANCELLED</code>: Plan acceptance is transitioned to this state when <b>all</b> of the installment transactions are cancelled + <code>CONFIRMED</code>: Plan acceptance is transitioned to this state when <b>all</b> of the installment transactions are confirmed + <code>UPDATED</code>: Plan acceptance is transitioned to this state from <code>CREATED</code> state when a transaction is associated to this plan acceptance  |  |

**Example**
<pre>CREATED</pre>

#### MessageMetadata Schema

Generic metadata that is always present for every postback message sent from Visa to the partners.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| type | string, <br>**Available values:** "BATCH_COMPLETED", "ELIGIBILITY", "PLANACCEPTANCE_STATUS_UPDATE", "INSTALLMENT_TRANSACTION_STATUS_UPDATE", "BILATERAL_PLAN_PARTNER_STATUS_UPDATE" | Type of the notification message. Here are the valid values:   +  <code>BATCH_COMPLETED</code> - For callback when a batch job is completed and results are available.   +  <code>ELIGIBILITY</code> - For callback when there are eligible transactions for post-purchase use cases.   +  <code>PLANACCEPTANCE_STATUS_UPDATE</code> - For callback when PlanAcceptance status is updated and the status updates are subscribed during onboarding.   +  <code>INSTALLMENT_TRANSACTION_STATUS_UPDATE</code> - For callback when Installment Transaction status is updated and the status updates are subscribed during onboarding.   +  <code>BILATERAL_PLAN_PARTNER_STATUS_UPDATE</code> - For callback when Bilateral Plan status is updated and the status updates are subscribed during onboarding. <br>*Enum:* `"BATCH_COMPLETED"`, `"ELIGIBILITY"`, `"PLANACCEPTANCE_STATUS_UPDATE"`, `"INSTALLMENT_TRANSACTION_STATUS_UPDATE"`, `"BILATERAL_PLAN_PARTNER_STATUS_UPDATE"`<br>*Example:* `"BATCH_COMPLETED"` | Yes |
| vMessageID | string (uuid) | Unique message identifier for all postback messages produced by Visa.<br>*Example:* `"173e4567-e89b-12d3-a456-426614174000"` | Yes |
| createdDateTime | string (date-time-nooffset) | Timestamp of the creation of this message<br>*Example:* `"2021-01-17T16:15:21"` | Yes |

#### Crv_JWK Schema

Applicable only for EC key type.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| Crv_JWK | string, <br>**Available values:** "P-256", <br>**Default:** P-256 | Applicable only for EC key type. |  |

**Example**
<pre>P-256</pre>

#### FeesAndCostForSeller Schema

A list of applicable seller costs/fees for the Installment plan.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| feeInfo | [ { **"type"**: string, <br>**Available values:** "CONSUMER", "CONSUMER_UPFRONT", "MERCHANT_FUNDING", "MERCHANT_SERVICE", **"flatFee"**: long, **"ratePercentage"**: integer, **"monthlyRatePercentage"**: integer } ] | Fee rate table used to calculate the Seller fees.  + The feeInfo will contain an array of fee type(s) with the associated ratePercentage or flatFee.  + One or many of the fee types - <code>CONSUMER</code>, <code>CONSUMER_UPFRONT</code>, <code>MERCHANT_FUNDING</code> and <code>MERCHANT_SERVICE</code> might be present based on the plan type and plan setup.  + <code>MERCHANT_FUNDING</code> and <code>MERCHANT_SERVICE</code> appear only when the API request is initiated by Acquirers.  | Yes |
| currency | string | Currency used for all of the above amounts. Currency code in [ISO 4217 format](https://www.iban.com/currency-codes)  | Yes |
| totalFees | long | Total fees charged to the consumer, calculated as <code>totalUpfrontFees + totalRecurringFees</code>. The amount is represented in minor units. It is a numerical value in the [<b>minor units</b>](https://www.currency-iso.org/en/home/tables/table-a1.html) of the currency, such as Cents for USD. If the currency is USD, “13400” is used for representing the amount, "$134.00". Note that there are no fractional minor units represented. They're rounded to the whole minor units. <br>*Example:* `50000` | Yes |
| totalPlanCost | long | Grand total of the entire plan cost including the principal amounts and total fees charged to the consumer, across all Installment periods. The amount is represented in minor units. It is a numerical value in [<b>minor units</b>](https://www.currency-iso.org/en/home/tables/table-a1.html) of the currency (Cents for USD, for example). If the currency is USD, “61299” is used for representing the amount "$612.99". Note that there are no fractional minor units represented, they're rounded to the whole minor units.<br /> For <b>Canada</b>, total plan cost calculation includes small buffer value to ensure Merchant displays the highest possible value for the transaction at the time of checkout (Issuers are not expected to use the value). <br>*Example:* `612990` | Yes |
| lastInstallment | { **"amount"**: long, **"totalAmount"**: long, **"installmentFee"**: long } | Cost details (fee and principal) for the last Installment. Note that the last Installment includes the balance of the rounding amounts when amount is split across various Installment periods. The amount is represented in minor units. It is a numerical value in the [<b>minor units</b>](https://www.currency-iso.org/en/home/tables/table-a1.html) of the currency, such as Cents for USD. If the currency is USD, “13400” is used for representing the amount, "$134.00". Note that there are no fractional minor units represented. They're rounded to the whole minor units.  | Yes |
| firstInstallment | { **"upfrontFee"**: long, **"totalAmountExcludingUpfrontFee"**: long } & { **"amount"**: long, **"totalAmount"**: long, **"installmentFee"**: long } | Cost details (fee and principal) for the first Installment. The amount is represented in minor units. It is a numerical value in the [<b>minor units</b>](https://www.currency-iso.org/en/home/tables/table-a1.html) of the currency, such as Cents for USD. If the currency is USD, “13400” is used for representing the amount, "$134.00". Note that there are no fractional minor units represented. They're rounded to the whole minor units.  | Yes |
| totalUpfrontFees | long | Total upfront fees charged to the consumer for this Installment plan. This fee corresponds to the fee type <code>CONSUMER_UPFRONT</code>. This is the amount charged upfront along with the <b>first Installment principal</b> only. The amount is represented in minor units. It is a numerical value in the [<b>minor units</b>](https://www.currency-iso.org/en/home/tables/table-a1.html) of the currency, such as Cents for USD. If the currency is USD, “13400” is used for representing the amount, "$134.00". Note that there are no fractional minor units represented. They're rounded to the whole minor units. <br>*Example:* `10000` | Yes |
| totalRecurringFees | long | Total recurring fees charged to the consumer for this Installment plan. This fee corresponds to the fee type <code>CONSUMER</code>. The amount is represented in minor units. It is a numerical value in the [<b>minor units</b>](https://www.currency-iso.org/en/home/tables/table-a1.html) of the currency, such as Cents for USD. If the currency is USD, “13400” is used for representing the amount, "$134.00". Note that there are no fractional minor units represented. They're rounded to the whole minor units. <br>*Example:* `2000` | Yes |
| annualPercentageRate | integer | Annual Percentage Rate (APR) as configured by the Issuer during plan creation. This is not used for calculations, but used only for display purposes. + Interest fee rate in percentage applied on Installment payment. + Percentage rate and is a non-negative value. + The percentage value is represented with two implicit decimals. (max 10000) <b>Example: 320 specifies 3.2%</b> + For your calculations, the actual percentage value should be interpreted as follows: <code>actualPercentageValue = ratePercentage / 100.00</code> <br>*Example:* `320` | No |

#### ExternalClientIdentifier Schema

Partner relationship ID. Relationship name identifier of the partner on whose behalf the API is called. This identifier is set up during client-partner relationship onboarding in Visa Developer Center.
<BR/>This value must only be provided when the API caller is invoking this API on behalf of some other partner.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| ExternalClientIdentifier | string | Partner relationship ID. Relationship name identifier of the partner on whose behalf the API is called. This identifier is set up during client-partner relationship onboarding in Visa Developer Center. <BR/>This value must only be provided when the API caller is invoking this API on behalf of some other partner.  |  |

**Example**
<pre>31e9f2b5-d90d-089e-67a5-1f533b02d301</pre>

#### MerchantName Schema

Name of the merchant used for reporting purposes

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| MerchantName | string | Name of the merchant used for reporting purposes |  |

**Example**
<pre>XYZ123</pre>

#### PlanIdentifier Schema

Visa-generated identifier for an Installment plan

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| PlanIdentifier | string (uuid) | Visa-generated identifier for an Installment plan |  |

**Example**
<pre>9d16a09e-3812-4ce3-a258-9981cc13a1f3</pre>

#### BatchExecutionDateTime Schema

This is the execution date of the batch data.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| BatchExecutionDateTime | dateTime | This is the execution date of the batch data. |  |

**Example**
<pre>2021-01-17T16:15:21Z</pre>

#### EncryptedAccountNumbers Schema

A URL-safe base64-encoded JWE string representing a set of eligible cardholders (set of PANs) for batch enrollment.
<code>JWE<accountNumber[]></code> - This is an URL-safe base64 encoded string that represents the encrypted payload for a JSON array of accountNumbers.
The number of items in the JSON array must be between 1 to 2000.
The format is the JSON Web Encryption using asymmetric/symmetric key material made available at time of onboarding.
It is a standard JWT with a single custom claim, "accountNumbers" that is a JSON array of <code>'#/components/schemas/AccountNumber'</code>

<SchemaDefinition schemaRef='#/components/schemas/AccountNumber' />

Visa uses JSON Web Encryption (JWE) to encrypt sensitive information in APIs. For more info, see "Encryption (JWE) Details."

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| EncryptedAccountNumbers | byte | A URL-safe base64-encoded JWE string representing a set of eligible cardholders (set of PANs) for batch enrollment. <code>JWE<accountNumber[]></code> - This is an URL-safe base64 encoded string that represents the encrypted payload for a JSON array of accountNumbers. The number of items in the JSON array must be between 1 to 2000. The format is the JSON Web Encryption using asymmetric/symmetric key material made available at time of onboarding. It is a standard JWT with a single custom claim, "accountNumbers" that is a JSON array of <code>'#/components/schemas/AccountNumber'</code>  <SchemaDefinition schemaRef='#/components/schemas/AccountNumber' />  Visa uses JSON Web Encryption (JWE) to encrypt sensitive information in APIs. For more info, see "Encryption (JWE) Details."  |  |

#### AnnualPercentageRate Schema

Annual Percentage Rate (APR) as configured by the Issuer during plan creation. This is not used for calculations, but used only for display purposes.
+ Interest fee rate in percentage applied on Installment payment.
+ Percentage rate and is a non-negative value.
+ The percentage value is represented with two implicit decimals. (max 10000) <b>Example: 320 specifies 3.2%</b>
+ For your calculations, the actual percentage value should be interpreted as follows: <code>actualPercentageValue = ratePercentage / 100.00</code>

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| AnnualPercentageRate | integer | Annual Percentage Rate (APR) as configured by the Issuer during plan creation. This is not used for calculations, but used only for display purposes. + Interest fee rate in percentage applied on Installment payment. + Percentage rate and is a non-negative value. + The percentage value is represented with two implicit decimals. (max 10000) <b>Example: 320 specifies 3.2%</b> + For your calculations, the actual percentage value should be interpreted as follows: <code>actualPercentageValue = ratePercentage / 100.00</code>  |  |

**Example**
<pre>320</pre>

#### OrderAmount Schema

The amount corresponding to the order for a Plan Acceptance. This is the max amount (within a certain tolerance percentage) that is enforced for all transactions added to this plan acceptance.
The amount is represented in minor units. It is a numerical value in the minor units of the currency (Cents for USD, for example [<b>minor units</b>](https://www.currency-iso.org/en/home/tables/table-a1.html)). If the currency is USD, “214010” is used for representing the amount, "$2,140.10".
Note that there are no fractional minor units represented. They're rounded to the nearest whole number of minor units.<br /><br />
In case of <b>Post Purchase scenario</b>, this value need not be provided and will internally be set as the sum of clearing amounts (<code>installmentTransactions.clearingAmount</code>).

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| OrderAmount | long | The amount corresponding to the order for a Plan Acceptance. This is the max amount (within a certain tolerance percentage) that is enforced for all transactions added to this plan acceptance. The amount is represented in minor units. It is a numerical value in the minor units of the currency (Cents for USD, for example [<b>minor units</b>](https://www.currency-iso.org/en/home/tables/table-a1.html)). If the currency is USD, “214010” is used for representing the amount, "$2,140.10". Note that there are no fractional minor units represented. They're rounded to the nearest whole number of minor units.<br /><br /> In case of <b>Post Purchase scenario</b>, this value need not be provided and will internally be set as the sum of clearing amounts (<code>installmentTransactions.clearingAmount</code>).  |  |

#### PlanFeeRatePercentage Schema

Interest fee rate in percentage applied on Installment payment.
+ Percentage rate and is a non-negative value.
+ The percentage value is represented with two implicit decimals. (max 10000) <b>Example: 250 specifies 2.5%</b>
+ For calculations, the actual percentage value should be interpreted as follows: <code>actualPercentageValue = ratePercentage / 100.00</code>

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| PlanFeeRatePercentage | integer | Interest fee rate in percentage applied on Installment payment. + Percentage rate and is a non-negative value. + The percentage value is represented with two implicit decimals. (max 10000) <b>Example: 250 specifies 2.5%</b> + For calculations, the actual percentage value should be interpreted as follows: <code>actualPercentageValue = ratePercentage / 100.00</code>  |  |

**Example**
<pre>320</pre>

#### PlanAcceptanceIdentifier Schema

Visa-generated identifier for a plan acceptance

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| PlanAcceptanceIdentifier | string (uuid) | Visa-generated identifier for a plan acceptance |  |

**Example**
<pre>31e9f2b5-d90d-089e-67a5-1f533b02d301</pre>

#### TransactionInfoWithPartialRefund Schema

Transaction information that includes the associated transaction and cancellation/refund details.
When used in the response body, this field is provided when the refund/cancellation information is available.
When used in the request body, this field is to be used for specifying a refund details(refund amount,reason,shipped status) to be used for refund .

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| TransactionInfoWithPartialRefund | { **"authCode"**: string, **"currency"**: string, **"vTransactionID"**: string, **"externalTransactionRef"**: string } & { **"dateTime"**: dateTime, **"transactionAmount"**: long } & { **"splitTransactionRefunds"**: [ { **"status"**: string, <br>**Available values:** "CONFIRMED", "CANCELLED", "PENDING_CONFIRMATION", "PENDING_CANCELLATION", "PARTIALLY_REFUNDED", **"refundAmount"**: long, **"refundReason"**: string, **"itemShippedStatus"**: string, <br>**Available values:** "SHIPPED", "NOT_SHIPPED", <br>**Default:** SHIPPED, **"vInstallmentTransactionID"**: string (uuid) } & { **"clearingAmount"**: long, **"clearingDateTime"**: dateTime, **"settlementCurrency"**: string, **"clearingSequenceNumber"**: string, **"acquirerReferenceNumber"**: string } ], **"transactionRefundAmount"**: long } | Transaction information that includes the associated transaction and cancellation/refund details. When used in the response body, this field is provided when the refund/cancellation information is available. When used in the request body, this field is to be used for specifying a refund details(refund amount,reason,shipped status) to be used for refund .  |  |

#### DeviceSoftwareVersion Schema

Version associated with the client software (the software making oauth2 requests)
+ String that follows the versioning scheme, "<major_version>.<minor_version>[.<patch_version>]"
  + Where the alphabet for major_version, minor_version, and patch_version is only digits.
  + The patch version is optional
+ Versions must me incremental sequences as comparisons might be done on them in order to apply distinct logic
  + For comparison purposes the following conversion is done
    + Remove the '.' separating the minor and patch versions, if any, from the string
    + Convert the string into a float number
+ The device clients are responsible for defining their own version numbers as long as they adhere to the scheme

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| DeviceSoftwareVersion | string | Version associated with the client software (the software making oauth2 requests) + String that follows the versioning scheme, "<major_version>.<minor_version>[.<patch_version>]"   + Where the alphabet for major_version, minor_version, and patch_version is only digits.   + The patch version is optional + Versions must me incremental sequences as comparisons might be done on them in order to apply distinct logic   + For comparison purposes the following conversion is done     + Remove the '.' separating the minor and patch versions, if any, from the string     + Convert the string into a float number + The device clients are responsible for defining their own version numbers as long as they adhere to the scheme  |  |

**Example**
<pre>2.0.11</pre>

#### PaymentAccountReference Schema

A Payment Account Reference (PAR) is a unique reference value associated with a specific card holder PAN. It identifies the card account, not just a card.
PAR is a non-payment identifier that can be associated to PANs and tokens, as defined by EMVCo.  PAR allows all participants in the payments chain to have a single, non-sensitive value assigned to a consumer. This value can be used in place of sensitive card holder identification fields, and transmitted across the payments ecosystem to facilitate card holder identification.
PAR has a well-defined format (as per the Jan 2016 EMVCo documentation):
- Fixed length of 29 characters
- All Uppercase, Roman, & Alphanumeric values
- 4-character BIN Controller ID assigned by EMVCo followed by a 25-character value

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| PaymentAccountReference | string | A Payment Account Reference (PAR) is a unique reference value associated with a specific card holder PAN. It identifies the card account, not just a card. PAR is a non-payment identifier that can be associated to PANs and tokens, as defined by EMVCo.  PAR allows all participants in the payments chain to have a single, non-sensitive value assigned to a consumer. This value can be used in place of sensitive card holder identification fields, and transmitted across the payments ecosystem to facilitate card holder identification. PAR has a well-defined format (as per the Jan 2016 EMVCo documentation): - Fixed length of 29 characters - All Uppercase, Roman, & Alphanumeric values - 4-character BIN Controller ID assigned by EMVCo followed by a 25-character value  |  |

**Example**
<pre>V0010013820238835225373131610</pre>

#### Amount Schema

+ All Amount fields use a representation in minor units only. For example, in Cents for USD currency
+ There are no fractional minor units; they are rounded to a whole number of minor units
+ The currency field contains the [<b>number of minor units (per ISO 4217)</b>](https://www.currency-iso.org/en/home/tables/table-a1.html). For example, “123112” in USD represents the amount, USD 1231.12.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| Amount | long | + All Amount fields use a representation in minor units only. For example, in Cents for USD currency + There are no fractional minor units; they are rounded to a whole number of minor units + The currency field contains the [<b>number of minor units (per ISO 4217)</b>](https://www.currency-iso.org/en/home/tables/table-a1.html). For example, “123112” in USD represents the amount, USD 1231.12.  |  |

**Example**
<pre>123112</pre>

#### RefundAmount Schema

The amount used for partial or full cancellation of clearing.
This field will be always populated when clearing is in PARTIALLY_REFUNDED or fully CANCELLED state.
The amount is represented in minor units. It is a numerical value in the minor units of the currency (Cents for USD, for example [<b>minor units</b>](https://www.currency-iso.org/en/home/tables/table-a1.html)). If the currency is USD, “214010” is used for representing the amount, "$2,140.10".
Note that there are no fractional minor units represented. They're rounded to the nearest whole number of minor units.

When requested in API request from Merchant (<b>During Purchase scenario</b>):
+ In multi-currency scenario, this field should be populated in source currency.

When returned in API response or callback notification (<b>During Purchase scenario</b>):
+ When returned to Merchant in multi-currency scenario, this field will be populated in source currency.
+ When returned to Issuer in multi-currency scenario, this field will be populated in Issuer's currency.

When requested in API request from Issuer (<b>Post Purchase scenario</b>):
+ In multi-currency scenario, this field should be populated in Issuer's currency.

When returned in API response or callback notification to Issuer (<b>Post Purchase scenario</b>):
+ In multi-currency scenario, this field will be populated in Issuer's currency.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| RefundAmount | long | The amount used for partial or full cancellation of clearing. This field will be always populated when clearing is in PARTIALLY_REFUNDED or fully CANCELLED state. The amount is represented in minor units. It is a numerical value in the minor units of the currency (Cents for USD, for example [<b>minor units</b>](https://www.currency-iso.org/en/home/tables/table-a1.html)). If the currency is USD, “214010” is used for representing the amount, "$2,140.10". Note that there are no fractional minor units represented. They're rounded to the nearest whole number of minor units.  When requested in API request from Merchant (<b>During Purchase scenario</b>): + In multi-currency scenario, this field should be populated in source currency.  When returned in API response or callback notification (<b>During Purchase scenario</b>): + When returned to Merchant in multi-currency scenario, this field will be populated in source currency. + When returned to Issuer in multi-currency scenario, this field will be populated in Issuer's currency.  When requested in API request from Issuer (<b>Post Purchase scenario</b>): + In multi-currency scenario, this field should be populated in Issuer's currency.  When returned in API response or callback notification to Issuer (<b>Post Purchase scenario</b>): + In multi-currency scenario, this field will be populated in Issuer's currency.  |  |

#### TransactionRefundAmountInSourceCurrency Schema

The amount (in source currency) used for partial or full cancellation of clearings associated with Visa ISO transaction.
The amount is represented in minor units. It is a numerical value in the minor units of the currency (Cents for USD, for example [<b>minor units</b>](https://www.currency-iso.org/en/home/tables/table-a1.html)). If the currency is USD, “214010” is used for representing the amount, "$2,140.10".
Note that there are no fractional minor units represented. They're rounded to the nearest whole number of minor units.

When used in the HTTP request body for Visa Installment APIs
+ This field will be used to specify the refund amount to be split across the associated clearing within a transaction.
+ If this field is not provided then all clearing associated with the transaction will be fully cancelled based on the Transaction Amount.

When returned in the HTTP response body or callback notifications,
+ This field is populated if provided by the merchant/seller in the request and represents the refund amount that was split across the associated clearing within a transaction.

When returned in API response or callback notification to Issuer (<b>During Purchase scenario</b>):
+ In multi-currency scenario, this field will be populated in source currency.

This field will not be returned to Issuer in <b>Post Purchase scenario</b>.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| TransactionRefundAmountInSourceCurrency | long | The amount (in source currency) used for partial or full cancellation of clearings associated with Visa ISO transaction. The amount is represented in minor units. It is a numerical value in the minor units of the currency (Cents for USD, for example [<b>minor units</b>](https://www.currency-iso.org/en/home/tables/table-a1.html)). If the currency is USD, “214010” is used for representing the amount, "$2,140.10". Note that there are no fractional minor units represented. They're rounded to the nearest whole number of minor units.  When used in the HTTP request body for Visa Installment APIs + This field will be used to specify the refund amount to be split across the associated clearing within a transaction. + If this field is not provided then all clearing associated with the transaction will be fully cancelled based on the Transaction Amount.  When returned in the HTTP response body or callback notifications, + This field is populated if provided by the merchant/seller in the request and represents the refund amount that was split across the associated clearing within a transaction.  When returned in API response or callback notification to Issuer (<b>During Purchase scenario</b>): + In multi-currency scenario, this field will be populated in source currency.  This field will not be returned to Issuer in <b>Post Purchase scenario</b>.  |  |

#### BatchType Schema

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| BatchType | string, <br>**Available values:** "CARDHOLDER_ENROLLMENT", "CARDHOLDER_ENROLLMENT_UPDATE", "CARDHOLDER_ENROLLMENT_DELETE", "PLAN_ACCEPTANCE_IRREGULAR_PAYMENTS", "CANDIDATES" |  |  |

**Example**
<pre>CANDIDATES</pre>

#### ErrorResponse Schema

Standard error response body provided when there is an error.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| reason | string | API developers must use this field to drive their error handling logic<br>*Example:* `"invalidRequest"` | Yes |
| status | integer | 3-digit HTTP Status Code<br>*Example:* `400` | No |
| details | [ { **"reason"**: string, **"message"**: string, **"location"**: string } ] | Array of fields - Data validation errors should use this array to specify  fields that failed validation using the location field | No |
| message | string | Every error should have a human readable message describing the error. The message can very even for the same reason, thus providing additional details. API providers are free to change the message at any point of time. API clients should not use the message field to drive their business logic or to expose it directly to the consumers via UI or other means.<br>*Example:* `"Input parameters validation failed"` | No |

#### BaseInstallmentTransaction Schema

This structure represents the fields required for identifying a Clearing.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| clearingAmount | long | Clearing amount for the transaction. This field will always be populated by Visa Installments when clearing data is available. This field is also used to create Plan Acceptance for a clearing in <b>Post Purchase scenario</b>.  When returned in API response or callback notification (<b>During Purchase scenario</b>): + When returned to Merchant in multi-currency scenario, this field will be populated in source currency. + When returned to Issuer in multi-currency scenario, this field will be populated in Issuer's currency.  When requested in API request from Issuer (<b>Post Purchase scenario</b>): + This field must always be provided. + In multi-currency scenario, this field should be populated in Issuer's currency.  When returned in API response or callback notification to Issuer (<b>Post Purchase scenario</b>): + In multi-currency scenario, this field will be populated in Issuer's currency.  | No |
| clearingDateTime | dateTime | Clearing date and time as set by the card network. This is the information in the clearing data sent to the issuers by the card network. This field will be always populated by Visa Installments when clearing data is available. + When returned in the HTTP response body or callback notifications,the time value will be defaulted to '00:00:00Z' when only clearing date is available from source system. + When used in the HTTP request body of an API request to Visa Installments, the value must conform to date-time format. <br>*Example:* `"2021-01-17T00:00:00Z"` | No |
| settlementCurrency | string | Always required when <code>clearingAmount</code> is specified. Currency of <code>clearingAmount</code> and <code>refundAmount</code>. Currency code in [ISO 4217 format](https://www.iban.com/currency-codes).  | No |
| ~~clearingSequenceNumber~~ | string | This field is deprecated and only supported for clients currently using it. New clients must not use this field.  Clearing sequence number, provided for multi-clearing scenarios - where a single transaction corresponds to multiple clearings. This field is used to identify the particular clearings associated with a plan acceptance when a partial transaction is used to associate with a plan acceptance. If this field is not provided, a sequence number is generated by Visa Installments. When used in the response for plan acceptances associated with a partial transactions, this field is populated. This field will be always populated by Visa Installments when clearing data is available. <b>When used in the request body for Visa Installment APIs it is highly recommended for the Visa partners to pass this in, if available. Otherwise, it will be generated by Visa Installments.</b> <br>*Example:* `"2"`<br>**Deprecated** | No |
| acquirerReferenceNumber | string | Acquirer Reference Number (ARN) is a 23-digit identification number associated with every draft and voucher. It consists of a Format Code, BASE Identification Number (BIN), Capture Date, Film Locator, and Check Digit. The ARN must be unique for each clearing. <br>*Example:* `"15524351474316171567231"` | No |

#### TransactionAmount Schema

<b>  Conditional Mandatory Field  </b>:
<br>
The amount used in the Visa ISO transaction authorization and is represented as numerical value in the minor units of the currency (Cents for USD, for example [<b>minor units</b>](https://www.currency-iso.org/en/home/tables/table-a1.html)).

When requested in API request from Merchant (<b>During Purchase scenario</b>):
+ In multi-currency scenario, this field should be populated in source currency.

When returned in API response or callback notification (<b>During Purchase scenario</b>):
+ When returned to Merchant in multi-currency scenario, this field will be populated in source currency.
+ When returned to Issuer in multi-currency scenario, this field will be populated in Issuer's currency.

When requested in API request from Issuer (<b>Post Purchase scenario</b>):
+ This field need not be provided and will internally be set as the sum of clearing amounts (<code>installmentTransactions.clearingAmount</code>).

When returned in API response or callback notification to Issuer (<b>Post Purchase scenario</b>):
+ In multi-currency scenario, this field will be populated in Issuer's currency.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| TransactionAmount | long | <b>  Conditional Mandatory Field  </b>: <br> The amount used in the Visa ISO transaction authorization and is represented as numerical value in the minor units of the currency (Cents for USD, for example [<b>minor units</b>](https://www.currency-iso.org/en/home/tables/table-a1.html)).  When requested in API request from Merchant (<b>During Purchase scenario</b>): + In multi-currency scenario, this field should be populated in source currency.  When returned in API response or callback notification (<b>During Purchase scenario</b>): + When returned to Merchant in multi-currency scenario, this field will be populated in source currency. + When returned to Issuer in multi-currency scenario, this field will be populated in Issuer's currency.  When requested in API request from Issuer (<b>Post Purchase scenario</b>): + This field need not be provided and will internally be set as the sum of clearing amounts (<code>installmentTransactions.clearingAmount</code>).  When returned in API response or callback notification to Issuer (<b>Post Purchase scenario</b>): + In multi-currency scenario, this field will be populated in Issuer's currency.  |  |

#### BaseOnboardingInformation Schema

Details required to Onboard a client associated with a Partner

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| city | string | Name of the merchant's city<br>*Example:* `"Foster City"` | No |
| phone | string | Client's primary phone number.  Client's primary phone number and the format is based on the countryCode field              <table>               <tr><th><b>countryCode</b></th><th><b>MinLength</b></th><th><b>MaxLength</b></th><th><b>Format</b></th></tr>               <tr>                 <td>                 <ul>                   <li>AU (Australia)</li>                   <li>CA (Canada)</li>                   <li>US (United States of America)</li>                 </ul>                 </td>                 <td>10</td>                 <td>16</td>                 <td>Allowed characters are digits, a hyphen, an open parenthesis, a close parenthesis, a dot, a plus sign, or whitespace.Example:+(001)-97444108</td>               </tr>              <tr>                 <td>                 <ul>                   <li>MY (Malaysia)</li>                   <li>MX (Mexico)</li>                   <li>NZ (New Zealand)</li>                 </ul>              </td>                 <td>3</td>                 <td>15</td>                 <td>Only digits are allowed.Example:0097444100888</td>               </tr>                 <tr>                   <td>Other Countries</td>                   <td>1</td>                   <td>16</td>                   <td>Only digits are allowed.Example:0097444100888</td>             </table>  | No |
| address1 | string | First line of the client's primary address. This value can be Alphabetic, numeric, or the following characters: spaces, ' (single quote), # (pound-sign or hash), , (comma), _ (underscore), : (colon), / (forward slash), and - (hyphen) <br>*Example:* `"1 Main Street"` | Yes |
| address2 | string | Second line of the client's primary address. It can be empty. This value can be Alphabetic, numeric, or the following characters: spaces, ' (single quote), # (pound-sign or hash), , (comma), _ (underscore), : (colon), / (forward slash), and - (hyphen) <br>*Example:* `"2nd Block"` | No |
| postalCode | string | Postal/Zip code of the merchant<br>*Example:* `"123456"` | No |
| countryCode | string | ISO Country code where the merchant is located in ISO 3166-2 (alpha) format<br>*Example:* `"CA"` | Yes |
| cardAcceptorId | string | Unique identifier that identifies the card acceptor operating the POS terminal. This field must contain an acquirer-assigned alphanumeric code that identifies the Card Acceptor(store/merchant transaction point). <br>*Example:* `"234568785"` | No |
| primaryLegalName | string | Legal name of client. This value must contain only English alphabets,numbers and space. <br>*Example:* `"ABZ Inc"` | Yes |
| primaryTradeName | string | Trade name of client, such as a doing business-as (DBA) name. If not specified, the legal name (companyPrimaryLegalName) is used by default. This value must contain only English alphabets,numbers and space. <br>*Example:* `"ABZ Traders"` | No |
| primaryWebsiteURL | string | URL of Clients's website. <br>*Example:* `"http://www.example.com"` | Yes |
| stateProvinceCode | string | State or province code associated with the physical address in the specified country. This value can be alphabetic, numeric, or the following characters: spaces, '(single quote), ,(comma), and -(hyphen).  Recommended to use the country subdivision codes defined in ISO-3166-2. (Note: must use ISO-3166-2 subdivision codes for AU, CA, and US).  Additional validations based on countryCode:  <table>   <tr><th><b>countryCode</b></th><th><b>Description</b></th></tr>   <tr>     <td>AU (Australia), CA (Canada), US (United States of America)</td>     <td>Must be a subdivision code (up to three characters) defined in ISO-3166-2. e.g. NSW (AU), QC (CA), DE (US)</td>   </tr> </table> <br>*Example:* `"QC"` | No |
| primaryContactEmail | string | Email address of Client's primary contact. This field is optional. Partners may choose not to provide the email address of their indirect merchants. <br>*Example:* `"test@xyz.com"` | No |
| primaryContactLastName | string | Surname of Client's primary contact person. Alphabetic or the following characters: spaces, ' (single quote), ` (back tick), ~ (tilde), " (double quote), . (period), and - (hyphen) <br>*Example:* `"Smith"` | No |
| onBehalfOfRelationships | [ { **"relationshipType"**: string, <br>**Available values:** "OBO_FUNDING_FEE_COLLECTOR", "OBO_SERVICE_FEE_COLLECTOR", **"partnerReferenceID"**: string, **"onBehalfOfReferenceID"**: string } ] | This field is used to specify third-party partners that perform operation on-behalf-of the client/merchant being onboarded.  | No |
| primaryContactFirstName | string | First name of Client's primary contact person. Alphabetic or the following characters: spaces, ' (single quote), ` (back tick), ~ (tilde), " (double quote), . (period), and - (hyphen) <br>*Example:* `"John"` | No |
| partnerMerchantReferenceID | string | Usually, this reference ID is assigned by the Partner but in cases where not provided when onboarding the Merchant, this value will be generated by Visa and provided to the Partner.  It is used by Visa for enforcing authorization (so that one Merchant's plan acceptance is not accessed/modified by an unauthorized merchant/partner), risk assessment and for instrumentation.   It is also used to serve bilateral plan agreements between a Seller and Issuer. In the future, it can be used to specify merchant-specific filters for installment plans.     - When provided in cancellation or search, this ID is used to match the plan acceptance and enforce authorization.    - When provided in plan selection (plan acceptance creation) API, it is used to later for authorization checks on cancel or search plan acceptances.    - When provided in plan match API, it is used for filter bilateral plans & instrumentation/reporting purposes. <br>*Example:* `"98243463"` | No |

#### CardHolderSearchResultItem Schema

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| productType | string, <br>**Available values:** "CREDIT", "DEBIT" | Product Type of the PANs enrolled in this Batch.If the Product type is not provided in request the PANs enrolled will be considered as Credit by default.  | No |
| encAccountNumber | byte | JWE<AccountNumber> - This is a URL-safe base64-encoded string that represents the encrypted payload for AccountNumber. The format is the JSON Web Encryption using asymmetric/symmetric key material made available at time of onboarding. It is a standard JWT with a single custom AccountNumber claim, “accountNumber” that contains the card number/PAN.  Visa uses JSON Web Encryption (JWE) to encrypt sensitive information in APIs. For more info, see "Encryption (JWE) Details".  | Yes |
| enrollmentStatus | string, <br>**Available values:** "ENROLLED", "NOT_ENROLLED", "ERROR" | Defined the enrollment status for each enrollment record. "NOT_ENROLLED" means the card holder is currently not enrolled or enrollment will end within 24 hours of enrollmentEndDate. "ERROR" means the card holder was not enrolled due to an error.<br>*Enum:* `"ENROLLED"`, `"NOT_ENROLLED"`, `"ERROR"`<br>*Example:* `"ENROLLED"` | No |
| enrollmentEndDate | dateTime | Enrollment end date - Returned if provided during enrollment. | No |
| enrollmentStartDate | dateTime | Enrollment date of the latest Enrollment Event | No |
| enrollmentTimestamp | dateTime | Timestamp of cardholder enrollment.<br>*Example:* `"2021-01-17T16:15:21Z"` | Yes |
| vEnrollmentProfileID | string (uuid) | Visa-generated Enrollment Profile Identifier<br>*Example:* `"278a6873-9dc2-b466-284c-1d10ee797301"` | Yes |
| lastEnrollmentEndDate | dateTime | Enrollment end date of the latest UnEnrollment Event | No |
| extendedEligibilityEndDate | dateTime | Extended Eligibility end date - Returned if provided during enrollment. | No |

#### TransactionInfoWithBasicInstallmentTransactionDetails Schema

Transaction information that includes the associated transaction and multiple clearing info.
When used in the response body, this field is provided when the clearing information is available.
When used in request body, this object will be used to specify the required transaction information used for plan acceptance creation.
It is highly recommended for the Visa partners to populate all the available fields in the transaction information during plan acceptance creation.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| TransactionInfoWithBasicInstallmentTransactionDetails | { **"authCode"**: string, **"currency"**: string, **"vTransactionID"**: string, **"externalTransactionRef"**: string } & { **"dateTime"**: dateTime, **"transactionAmount"**: long } & { **"installmentTransactions"**: [ { **"clearingAmount"**: long, **"clearingDateTime"**: dateTime, **"settlementCurrency"**: string, **"clearingSequenceNumber"**: string, **"acquirerReferenceNumber"**: string } ] } | Transaction information that includes the associated transaction and multiple clearing info. When used in the response body, this field is provided when the clearing information is available. When used in request body, this object will be used to specify the required transaction information used for plan acceptance creation. It is highly recommended for the Visa partners to populate all the available fields in the transaction information during plan acceptance creation.  |  |

#### TotalRecurringFees Schema

Total recurring fees charged to the consumer for this Installment plan. This fee corresponds to the fee type <code>CONSUMER</code>.
The amount is represented in minor units. It is a numerical value in the [<b>minor units</b>](https://www.currency-iso.org/en/home/tables/table-a1.html) of the currency, such as Cents for USD. If the currency is USD, “13400” is used for representing the amount, "$134.00".
Note that there are no fractional minor units represented. They're rounded to the whole minor units.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| TotalRecurringFees | long | Total recurring fees charged to the consumer for this Installment plan. This fee corresponds to the fee type <code>CONSUMER</code>. The amount is represented in minor units. It is a numerical value in the [<b>minor units</b>](https://www.currency-iso.org/en/home/tables/table-a1.html) of the currency, such as Cents for USD. If the currency is USD, “13400” is used for representing the amount, "$134.00". Note that there are no fractional minor units represented. They're rounded to the whole minor units.  |  |

**Example**
<pre>2000</pre>

#### DevicePreferredName Schema

Preferred name of the Payment Terminal

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| DevicePreferredName | string | Preferred name of the Payment Terminal |  |

**Example**
<pre>BNPL TERMINAL</pre>

#### TransactionInfoWithRefundInstallmentTransactionForLender Schema

Transaction information that includes the associated transaction along multiple clearing info and refund details.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| TransactionInfoWithRefundInstallmentTransactionForLender | { **"authCode"**: string, **"currency"**: string, **"vTransactionID"**: string, **"externalTransactionRef"**: string } & { **"dateTime"**: dateTime, **"transactionAmount"**: long } & { **"sourceCurrency"**: string, **"installmentTransactions"**: [ { **"status"**: string, <br>**Available values:** "CONFIRMED", "CANCELLED", "PENDING_CONFIRMATION", "PENDING_CANCELLATION", "PARTIALLY_REFUNDED", **"vInstallmentTransactionID"**: string (uuid) } & { **"clearingAmount"**: long, **"clearingDateTime"**: dateTime, **"settlementCurrency"**: string, **"clearingSequenceNumber"**: string, **"acquirerReferenceNumber"**: string } & { **"sourceCurrency"**: string, **"clearingAmountInSourceCurrency"**: long } & { **"refundAmount"**: long, **"lastRefundDateTime"**: dateTime, **"refundAmountInSourceCurrency"**: long } ], **"transactionRefundAmount"**: long, **"transactionAmountInSourceCurrency"**: long, **"transactionRefundAmountInSourceCurrency"**: long } | Transaction information that includes the associated transaction along multiple clearing info and refund details.  |  |

#### BaseBilateralPlan Schema

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| fees | [ { **"type"**: string, <br>**Available values:** "ACQUIRER_TO_ISSUER", "CONSUMER", "CONSUMER_UPFRONT", "ISSUER_TO_ACQUIRER", "APR", **"amount"**: long, **"ratePercentage"**: integer } ] | Fees for Plan | No |
| name | string | Name of the installment plan. This may not be unique.<br>*Example:* `"The Market Plan"` | Yes |
| type | string, <br>**Available values:** "BI_LATERAL" | Type of the installment plan as configured in Visa Developer Center/Portal by the issuer.   + BI_LATERAL <table>   <thead>   <tr>     <td>Installment Plan Type</td>     <td>Party Responsible for Installment Funding Fees</td>     <td>Description</td>   </tr>   </thead>   <tbody>     <tr>       <td><code>BI_LATERAL</code></td>       <td>Dictated by the <code>fundedBy</code> value as the responsible party can be any of the following:       <ul>         <li>Merchant Participant</li>         <li>Seller</li>         <li>Consumer</li>         <li>Hybrid Arrangement where two parties are involved</li>       </ul>       </td>       <td>         <ul>         <li>Applies an Installment Funding Fee different from Market Rate Installment Funding Fee.</li>         <li>This Installment Funding Fee is agreed to between an Issuer and a Merchant Participant pursuant to a written agreement between the Merchant Participant and the Issuer.</li>         <li>These Installment Plans are available only to specific Merchant Participants which have a Bilateral Plan with the Issuer pursuant to an agreement with the Issuer.</li>         </ul>       </td>     </tr>   </tbody> </table> <br>*Enum:* `"BI_LATERAL"`<br>*Example:* `"BI_LATERAL"` | Yes |
| vPlanID | string (uuid) | Visa-generated identifier for an Installment plan<br>*Example:* `"9d16a09e-3812-4ce3-a258-9981cc13a1f3"` | Yes |
| currency | string | Plan Currency. Currency code in [ISO 4217 format](https://www.iban.com/currency-codes)  | No |
| fundedBy | [ string, <br>**Available values:** "CONSUMER", "MERCHANT" ] | Party responsible for Installment Funding Fees of this plan. | Yes |
| issuerName | string | Name of the Issuer created this Plan<br>*Example:* `"Bank of VI"` | No |
| vPlanIDRef | string | A Visa-generated, alphanumeric, unique, and short human-readable friendly name for Installment Plan.This identifier is called Plan Registration System Identifier in Auth and Clearing messages. Reference - Field 104 in Auth.Base II TCR D Position 43-52.SMS Raw Data Financial Transaction record 5 -V22226.<br>*Example:* `"A123459876"` | Yes |
| promotionInfo | { **"promotionID"**: string, **"promotionCode"**: string } | This is the promotion information shared between the Issuer and Seller. | No |
| termsAndConditions | [ { **"url"**: string, **"text"**: string, **"version"**: integer, **"longText"**: string, **"languageCode"**: string } ] | Plan terms and conditions as setup by Issuers in Plan configuration. There may be one terms and conditions per language. If there is only one setup, then there will be only one item in the array.  | Yes |
| effectiveDateRanges | [ { **"endDate"**: date, **"startDate"**: date } ] | Effective Date ranges of Bilateral Plan | Yes |
| planBilateralStatus | string, <br>**Available values:** "ACTIVE", "INACTIVE", "PENDING" | Indicates if the Bilateral plan has been opted in by the Seller. This value must be always provided for Bilateral plans and is not applicable for other type of plans  + "PENDING" - Bilateral Plan has not yet been opted in by Seller  + "ACTIVE" - Bilateral Plan has been opted in by/for Seller  + "INACTIVE" - Bilateral Plan has been opted out by/for Seller <br>*Enum:* `"ACTIVE"`, `"INACTIVE"`, `"PENDING"`<br>*Example:* `"ACTIVE"` | No |
| installmentFrequency | string, <br>**Available values:** "WEEKLY", "BIWEEKLY", "MONTHLY", "BIMONTHLY" | Supported Tenure Types for a plan.<br>*Enum:* `"WEEKLY"`, `"BIWEEKLY"`, `"MONTHLY"`, `"BIMONTHLY"`<br>*Example:* `"WEEKLY"` | Yes |
| numberOfInstallments | number (integer) | Maximum number of installments that can be in the Plan Acceptance created from this plan.<br>*Example:* `10` | Yes |
| transactionAmountRanges | [ { **"maximumTransactionAmount"**: long, **"minimumTransactionAmount"**: long } ] | Transaction Amount Ranges | Yes |

#### MerchantPostalCode Schema

Postal/Zip code of the merchant

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| MerchantPostalCode | string | Postal/Zip code of the merchant |  |

**Example**
<pre>123456</pre>

#### NonVisaTransactionPageContentArrayItem Schema

Results of the Non-Visa transaction save action showing the errors, if any.
+  If there were any errors, then the <code>errorResponse</code> element must be present to describe the error.
+  If the transaction was successfully saved, then there will be no <code>errorResponse</code> element

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| type | string, <br>**Available values:** "AUTH", "AUTH_REVERSAL", "CS_SALES_DRAFT", "CS_CREDIT_VOUCHER", "CS_CASH_DISBURSEMENT", "CS_SALES_DRAFT_REVERSAL", "CS_CREDIT_VOUCHER_REVERAL", "CS_CASH_DISBURSEMENT_REVERSAL" | ISO Transaction or Settlement message type + AUTH - ISO 0100/0110 - Authorization request/response data for purchase, cash, balance inquiry, return of goods + AUTH_REVERSAL - ISO 400/410 - ISO  Reversal of an Authorization Request. Reversals are not the same as a merchandise return, but instead are used to reverse approved authorizations or financial transactions which are not completed due to unintended transactions. For example, when a merchant put the wrong dollar amount in an auth, the reversal ‘undoes’ it so that another auth message can be sent with the correct amount. + CS_SALES_DRAFT - TC 05 – Original purchase or representment; or dispute response financial + CS_CREDIT_VOUCHER - TC 06 – Original credit voucher or representment or dispute response financial; or original credit or representment + CS_CASH_DISBURSEMENT - TC 07 – Original cash disbursement/withdrawal or representment or dispute response financial + CS_SALES_DRAFT_REVERSAL - TC 25 – Reversal of an original purchase or representment or dispute response financial transaction + CS_CREDIT_VOUCHER_REVERAL - TC 26 – Reversal of an original credit voucher or representment or dispute response financial transaction; or original credit or representment transaction. + CS_CASH_DISBURSEMENT_REVERSAL - TC 27 – Reversal of an original cash disbursement/withdrawal transaction <br>*Enum:* `"AUTH"`, `"AUTH_REVERSAL"`, `"CS_SALES_DRAFT"`, `"CS_CREDIT_VOUCHER"`, `"CS_CASH_DISBURSEMENT"`, `"CS_SALES_DRAFT_REVERSAL"`, `"CS_CREDIT_VOUCHER_REVERAL"`, `"CS_CASH_DISBURSEMENT_REVERSAL"` | Yes |
| authCode | string | ISO transaction Auth Code (alphanumeric). This Field 38 in ISO 8583 contains the response identification assigned by the authorizing institution. <br>*Example:* `"05754C"` | Yes |
| cardBrand | string, <br>**Available values:** "VISA", "NON_VISA", "MASTERCARD", "AMERICAN_EXPRESS", "DISCOVER", "JCB", "UNIONPAY", "DINERSCLUB", <br>**Default:** VISA | The card network brand. When no value is set (or the field is not returned), it should be treated as VISA.<br>*Enum:* `"VISA"`, `"NON_VISA"`, `"MASTERCARD"`, `"AMERICAN_EXPRESS"`, `"DISCOVER"`, `"JCB"`, `"UNIONPAY"`, `"DINERSCLUB"` | Yes |
| errorResponse | { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } | Standard Error Response Body - Provided only when this transaction data has errors and was not successfully saved. | No |
| vPlanAcceptanceID | string (uuid) | Visa-generated identifier for a plan acceptance<br>*Example:* `"31e9f2b5-d90d-089e-67a5-1f533b02d301"` | Yes |
| paymentAccountReference | string | A Payment Account Reference (PAR) is a unique reference value associated with a specific card holder PAN. It identifies the card account, not just a card. PAR is a non-payment identifier that can be associated to PANs and tokens, as defined by EMVCo.  PAR allows all participants in the payments chain to have a single, non-sensitive value assigned to a consumer. This value can be used in place of sensitive card holder identification fields, and transmitted across the payments ecosystem to facilitate card holder identification. PAR has a well-defined format (as per the Jan 2016 EMVCo documentation): - Fixed length of 29 characters - All Uppercase, Roman, & Alphanumeric values - 4-character BIN Controller ID assigned by EMVCo followed by a 25-character value <br>*Example:* `"V0010013820238835225373131610"` | Yes |

#### PlanStartDate Schema

Effective Start date of the Plan.Plan start date as set by the Issuer.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| PlanStartDate | date | Effective Start date of the Plan.Plan start date as set by the Issuer.  |  |

#### InstallmentTransactionForResponseForLender Schema

Associated transaction for a given plan acceptance. A plan acceptance can be created with a single ISO transaction or
many ISO transactions, or a part of an ISO transaction (one clearing out of many, for example).
Represents the schedule of payments corresponding to a plan acceptance.
Clearing data will be always included when available.
<BR/><b>NOTES:</b>
+ When returned in the HTTP response body or callback notifications, all of the fields below are required (i.e., al fields are populated when used in response body).
+ When used in the HTTP request body of an API request to Visa Installments, the required fields must be provided.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| InstallmentTransactionForResponseForLender | { **"status"**: string, <br>**Available values:** "CONFIRMED", "CANCELLED", "PENDING_CONFIRMATION", "PENDING_CANCELLATION", "PARTIALLY_REFUNDED", **"vInstallmentTransactionID"**: string (uuid) } & { **"clearingAmount"**: long, **"clearingDateTime"**: dateTime, **"settlementCurrency"**: string, **"clearingSequenceNumber"**: string, **"acquirerReferenceNumber"**: string } & { **"sourceCurrency"**: string, **"clearingAmountInSourceCurrency"**: long } | Associated transaction for a given plan acceptance. A plan acceptance can be created with a single ISO transaction or many ISO transactions, or a part of an ISO transaction (one clearing out of many, for example). Represents the schedule of payments corresponding to a plan acceptance. Clearing data will be always included when available. <BR/><b>NOTES:</b> + When returned in the HTTP response body or callback notifications, all of the fields below are required (i.e., al fields are populated when used in response body). + When used in the HTTP request body of an API request to Visa Installments, the required fields must be provided.  |  |

#### PartnerMerchantReferenceID Schema

Usually, this reference ID is assigned by the Partner but in cases where not provided
when onboarding the Merchant, this value will be generated by Visa and provided to the
Partner. 
It is used by Visa for enforcing authorization (so that one Merchant's plan acceptance is not accessed/modified by an unauthorized merchant/partner), risk assessment and for instrumentation. 
 It is also used to serve bilateral plan agreements between a Seller and Issuer. In the future, it can be used to specify merchant-specific filters for installment plans.

   - When provided in cancellation or search, this ID is used to match the plan acceptance and enforce authorization.
   - When provided in plan selection (plan acceptance creation) API, it is used to later for authorization checks on cancel or search plan acceptances.
   - When provided in plan match API, it is used for filter bilateral plans & instrumentation/reporting purposes.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| PartnerMerchantReferenceID | string | Usually, this reference ID is assigned by the Partner but in cases where not provided when onboarding the Merchant, this value will be generated by Visa and provided to the Partner.  It is used by Visa for enforcing authorization (so that one Merchant's plan acceptance is not accessed/modified by an unauthorized merchant/partner), risk assessment and for instrumentation.   It is also used to serve bilateral plan agreements between a Seller and Issuer. In the future, it can be used to specify merchant-specific filters for installment plans.     - When provided in cancellation or search, this ID is used to match the plan acceptance and enforce authorization.    - When provided in plan selection (plan acceptance creation) API, it is used to later for authorization checks on cancel or search plan acceptances.    - When provided in plan match API, it is used for filter bilateral plans & instrumentation/reporting purposes.  |  |

**Example**
<pre>98243463</pre>

#### Locale Schema

Locale in in [IETF BCP 47 format](https://tools.ietf.org/html/bcp47)
The BCP 47 locale format is <Language Subtag>-<Extended Language Subtag (Optional)>-<Script Subtag (Optional)>-<Region Subtag (Optional)>-<Variant1 Subtag (Optional)>-<Variant2 Subtag (Optional)>
However, only following locale formats are supported by Installments API:
<Language Subtag>-<Region Subtag>
Language Subtag: [a-zA-Z]{2,8}
Region Subtag: [a-zA-Z]{2} | [0-9]{3}

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| Locale | string | Locale in in [IETF BCP 47 format](https://tools.ietf.org/html/bcp47) The BCP 47 locale format is <Language Subtag>-<Extended Language Subtag (Optional)>-<Script Subtag (Optional)>-<Region Subtag (Optional)>-<Variant1 Subtag (Optional)>-<Variant2 Subtag (Optional)> However, only following locale formats are supported by Installments API: <Language Subtag>-<Region Subtag> Language Subtag: [a-zA-Z]{2,8} Region Subtag: [a-zA-Z]{2} | [0-9]{3}  |  |

**Example**
<pre>en-US</pre>

#### Preferences-1 Schema

Allows Seller Enablers to specify the Capabilities or Preferences of Merchants on behalf which this request is made. This must be used only when there is a need to
- <b>Override</b> an enabler's default config in Visa Installments
- Specify additional filters for cases in which Merchant needs special handling.

<p>
<b>Important:</b></p>
<b>This is an optional parameter which must be provided when required.
Please carefully go through the specific fields in this object to understand how this impacts your implementation.
</b>

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| capabilities | { **"visIndicatorCapability"**: string, <br>**Available values:** "SUPPORTED", "NOT_SUPPORTED" } | Capabilities of Merchant handled in this request.Valid in context of Enabler acting on behalf of Merchant | No |
| acceptanceChannel | string, <br>**Available values:** "IN_PERSON", "E_COMMERCE", <br>**Default:** IN_PERSON | Specifies the channel through which the transaction is initiated and payment information is collected.  - When specified in Eligibility requests this value indicates the merchant preferred channel for the transaction.  - When specified in Plan Acceptance request this value indicates the channel through which the transaction was made.  - Though optional highly recommended to provide this value and if not provided then Acceptance Channel would be considered as IN_PERSON option.  - "IN_PERSON" - Indicates transactions initiated via In-Store/Face-to-Face.  - "E_COMMERCE" - Indicates transactions initiated via e-commerce websites.  <b>Note:</b>       This field is technicallv optional to maintain backward compatibility and is defaulted to <code>IN_PERSON</code>.       When defaulted to <code>IN PERSON</code>, the merchants will not get installment offers with certain Issuers who are onlv enrolled for <code>E_COMMERCE</code> transaction and not <code>IN_PERSON</code> <br>*Enum:* `"IN_PERSON"`, `"E_COMMERCE"`<br>*Example:* `"E_COMMERCE"` | No |

#### PlanAcceptanceTransactionSearchResultItem Schema

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| PlanAcceptanceTransactionSearchResultItem | { **"authCode"**: string, **"currency"**: string, **"vTransactionID"**: string, **"externalTransactionRef"**: string } & { **"dormant"**: string, <br>**Available values:** "true", "false", <br>**Default:** false, **"cardBrand"**: string, <br>**Available values:** "VISA", "NON_VISA", "MASTERCARD", "AMERICAN_EXPRESS", "DISCOVER", "JCB", "UNIONPAY", "DINERSCLUB", <br>**Default:** VISA, **"vPlanIDRef"**: string, **"crossBorder"**: boolean, **"transactionAmount"**: long, **"vPlanAcceptanceID"**: string (uuid), **"installmentTransactions"**: [ { **"status"**: string, <br>**Available values:** "CONFIRMED", "CANCELLED", "PENDING_CONFIRMATION", "PENDING_CANCELLATION", "PARTIALLY_REFUNDED", **"vInstallmentTransactionID"**: string (uuid) } & { **"clearingAmount"**: long, **"clearingDateTime"**: dateTime, **"settlementCurrency"**: string, **"clearingSequenceNumber"**: string, **"acquirerReferenceNumber"**: string } & { **"refundAmount"**: long, **"lastRefundDateTime"**: dateTime } ], **"transactionRefundAmount"**: long } |  |  |

#### BasePlan Schema

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| name | string | Name of the installment plan. This may not be unique.<br>*Example:* `"The Market Plan"` | Yes |
| type | string, <br>**Available values:** "MARKET", "BI_LATERAL", "ISSUER_DEFAULT", "ISSUER_PROMOTION", "ISSUER_HYBRID" | Type of the installment plan as configured in Visa Developer Center/Portal by the issuer.   + MARKET   + BI_LATERAL   + ISSUER_DEFAULT   + ISSUER_PROMOTION   + ISSUER_HYBRID <table>   <thead>   <tr>     <td>Installment Plan Type</td>     <td>Party Responsible for Installment Funding Fees</td>     <td>Description</td>   </tr>   </thead>   <tbody>   <tr>     <td><code>MARKET</code></td>     <td>Dictated by the <code>fundedBy</code> value as the responsible party can be any of the following:     <ul>       <li>Merchant Participant</li>       <li>Seller</li>       <li>Consumer</li>       <li>Hybrid Arrangement where two parties are involved</li>     </ul>     </td>     <td>       <ul>       <li>Applies a Market Rate Installment Plan.</li>       <li>These are standardized Installment Plans recommended by Visa for defined tenures that Issuers may choose to provide to Eligible Cardholders by opting into Market Plans.</li>       <li>The Installment Funding Fee payable as dictated by <code>fundedBy</code> value for a Market Plan may vary by country and may be revised at Visa’s discretion</li>       </ul>     </td>   </tr>   <tr>     <td><code>BI_LATERAL</code></td>     <td>Dictated by the <code>fundedBy</code> value as the responsible party can be any of the following:     <ul>       <li>Merchant Participant</li>       <li>Seller</li>       <li>Consumer</li>       <li>Hybrid Arrangement where two parties are involved</li>     </ul>     </td>     <td>       <ul>       <li>Applies an Installment Funding Fee different from Market Rate Installment Funding Fee.</li>       <li>This Installment Funding Fee is agreed to between an Issuer and a Merchant Participant pursuant to a written agreement between the Merchant Participant and the Issuer.</li>       <li>These Installment Plans are available only to specific Merchant Participants which have a Bilateral Plan with the Issuer pursuant to an agreement with the Issuer.</li>       </ul>     </td>   </tr>   <tr>     <td><code>ISSUER_DEFAULT</code></td>     <td>Consumer-funded. This one is locked with the old behavior. <code>fundedBy</code> does not affect this category. This will remain funded by the Consumer.</td>     <td>       <ul>       <li>Applies an Installment Funding Fee applicable to the Consumer-Funded Plans.</li>       <li>These Installment Plans are available to all Merchant Participants to display to Eligible Cardholders.</li>       </ul>     </td>   </tr>   <tr>     <td><code>ISSUER_PROMOTION</code></td>     <td>Consumer-funded. This one is locked with the old behavior. <code>fundedBy</code> does not affect this category. This will remain funded by the Consumer.</td>     <td>       <ul>       <li>Applies a promotional rate as an Installment Funding Fee applicable to the Consumer-Funded Installment Plan.</li>       <li>An Issuer Promotion Plan must have an explicit expiration date.</li>       <li>These Installment Plans are available to all Merchant Participants to display to Eligible Cardholders</li>       </ul>     </td>   </tr>   <tr>     <td><code>ISSUER_HYBRID</code></td>     <td>This is a new category where the funding responsibility is shared between the Merchant and Consumer.</td>     <td>       <ul>       <li>Applies an Installment Funding Fee applicable to the Hybrid-Funded Plans.</li>       <li>These Installment Plans are available to all Merchant Participants to display to Eligible Cardholders.</li>       </ul>     </td>   </tr>   </tbody> </table> <br>*Enum:* `"MARKET"`, `"BI_LATERAL"`, `"ISSUER_DEFAULT"`, `"ISSUER_PROMOTION"`, `"ISSUER_HYBRID"`<br>*Example:* `"MARKET"` | Yes |
| vPlanID | string (uuid) | Visa-generated identifier for an Installment plan<br>*Example:* `"9d16a09e-3812-4ce3-a258-9981cc13a1f3"` | Yes |
| fundedBy | [ string, <br>**Available values:** "CONSUMER", "MERCHANT" ] | Party responsible for Installment Funding Fees of this plan. | No |
| vPlanIDRef | string | A Visa-generated, alphanumeric, unique, and short human-readable friendly name for Installment Plan.This identifier is called Plan Registration System Identifier in Auth and Clearing messages. Reference - Field 104 in Auth.Base II TCR D Position 43-52.SMS Raw Data Financial Transaction record 5 -V22226.<br>*Example:* `"A123459876"` | Yes |
| islamicPlan | boolean | Indicates whether the Plan is an Islamic Plan. If this field is set to <code>true</code>, Plan should be displayed according to Shariah Banking principles, for example using the term <b>profit</b> instead of <b>interest</b>. If this field is not set (or not returned in response), it should be treated as <code>false</code> and the Plan is not an Islamic Plan.<br>*Example:* `false` | No |
| promotionInfo | { **"promotionID"**: string, **"promotionCode"**: string } | This is the promotion information shared between the Issuer and Seller. | No |
| termsAndConditions | [ { **"url"**: string, **"text"**: string, **"version"**: integer, **"languageCode"**: string } ] | Plan terms and conditions as setup by Issuers in Plan configuration. There may be one terms and conditions per language. If there is only one setup, then there will be only one item in the array.  | Yes |
| installmentFrequency | string, <br>**Available values:** "WEEKLY", "BIWEEKLY", "MONTHLY", "BIMONTHLY" | Supported Tenure Types for a plan.<br>*Enum:* `"WEEKLY"`, `"BIWEEKLY"`, `"MONTHLY"`, `"BIMONTHLY"`<br>*Example:* `"WEEKLY"` | Yes |
| numberOfInstallments | number (integer) | Maximum number of installments that can be in the Plan Acceptance created from this plan.<br>*Example:* `10` | Yes |

#### FundedBy Schema

Party responsible for Installment Funding Fees

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| FundedBy | string, <br>**Available values:** "CONSUMER", "MERCHANT" | Party responsible for Installment Funding Fees |  |

**Example**
<pre>CONSUMER</pre>

#### ExtendedEligibilityEndDate Schema

Effective end date for cardholder extended eligibility enrollment. *This must be later than (midnight() UTC + 24 hours), otherwise a 400 error will be returned*
+ After this date, the extended eligibility is no longer effective for this cardholder.
+ This date *must not* be later than the enrollmentEndDate, when enrollmentEndDate is provided.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| ExtendedEligibilityEndDate | dateTime | Effective end date for cardholder extended eligibility enrollment. *This must be later than (midnight() UTC + 24 hours), otherwise a 400 error will be returned* + After this date, the extended eligibility is no longer effective for this cardholder. + This date *must not* be later than the enrollmentEndDate, when enrollmentEndDate is provided.  |  |

**Example**
<pre>2019-10-17T16:15:21Z</pre>

#### TransactionCrossBorderIndicator Schema

Indicates whether Plan Acceptance for the Transaction is Cross-Border

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| TransactionCrossBorderIndicator | boolean | Indicates whether Plan Acceptance for the Transaction is Cross-Border |  |

**Example**
<pre>false</pre>

#### BatchIdentifier Schema

Batch id of the request job submitted to Visa. This is the identifier for the batch request to be queried later to get the results.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| BatchIdentifier | string (uuid) | Batch id of the request job submitted to Visa. This is the identifier for the batch request to be queried later to get the results. |  |

**Example**
<pre>123e4567-e89b-12d3-a456-426614174000</pre>

#### EligibilityStatus Schema

Defined the eligibility/match status. "ERROR" means eligiblity could not be determined.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| EligibilityStatus | string, <br>**Available values:** "MATCHED", "NOT_MATCHED", "ERROR", <br>**Default:** MATCHED | Defined the eligibility/match status. "ERROR" means eligiblity could not be determined. |  |

**Example**
<pre>MATCHED</pre>

#### PlanFeesForLender Schema

Fee rate table used to calculate the fees.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| type | string, <br>**Available values:** "ACQUIRER_TO_ISSUER", "ACQUIRER_TO_VISA", "ISSUER_TO_ACQUIRER", "ISSUER_TO_VISA", "ISSUER_TO_VISA_SCHEDULING_FEES" | Fee types applicable for lender.<br>*Enum:* `"ACQUIRER_TO_ISSUER"`, `"ACQUIRER_TO_VISA"`, `"ISSUER_TO_ACQUIRER"`, `"ISSUER_TO_VISA"`, `"ISSUER_TO_VISA_SCHEDULING_FEES"`<br>*Example:* `"ACQUIRER_TO_ISSUER"` | No |
| flatFee | long | Flat fee applied on the first Installment payment in Issuer currency. The amount is represented in minor units. It is a numerical value in the minor units of the currency (Cents for USD, for example).  + The currency field decides the [<b>minor units</b>](https://www.currency-iso.org/en/home/tables/table-a1.html). If the currency is USD, “1034” is used for representing the amount "$10.34". + Note that there are no fractional minor units represented. They're rounded to the whole minor units. <br>*Example:* `13400` | No |
| ratePercentage | integer | Interest fee rate in percentage applied on Installment payment. + Percentage rate and is a non-negative value. + The percentage value is represented with two implicit decimals. (max 10000) <b>Example: 250 specifies 2.5%</b> + For calculations, the actual percentage value should be interpreted as follows: <code>actualPercentageValue = ratePercentage / 100.00</code> <br>*Example:* `320` | No |

#### x_JWK Schema

EC x Coordinate in *base64Url* encoded value. Applicable only for EC key type.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| x_JWK | byte | EC x Coordinate in *base64Url* encoded value. Applicable only for EC key type.  |  |

#### TransactionInformation Schema

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| TransactionInformation | { **"authCode"**: string, **"currency"**: string, **"vTransactionID"**: string, **"externalTransactionRef"**: string } & { **"dateTime"**: dateTime, **"transactionAmount"**: long } |  |  |

#### MonthlyPlanFeeRatePercentage Schema

Monthly interest fee rate in percentage applied on Installment payment. This will only be set for fee type "CONSUMER".
+ Percentage rate and is a non-negative value.
+ The percentage value is represented with two implicit decimals. (max 10000) <b>Example: 250 specifies 2.5%</b>
+ For calculations, the actual percentage value should be interpreted as follows: <code>actualPercentageValue = ratePercentage / 100.00</code>

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| MonthlyPlanFeeRatePercentage | integer | Monthly interest fee rate in percentage applied on Installment payment. This will only be set for fee type "CONSUMER". + Percentage rate and is a non-negative value. + The percentage value is represented with two implicit decimals. (max 10000) <b>Example: 250 specifies 2.5%</b> + For calculations, the actual percentage value should be interpreted as follows: <code>actualPercentageValue = ratePercentage / 100.00</code>  |  |

**Example**
<pre>320</pre>

#### ConsumerInformation Schema

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| ConsumerInformation | { **"encAccountNumber"**: byte, **"tokenAccountNumber"**: string, **"vProvisionedTokenID"**: string, **"paymentAccountReference"**: string } & { **"tokenReferenceID"**: string } |  |  |

#### EffectiveDateRange Schema

Plans Effective Start and End date range

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| endDate | date | Effective End date of the Plan.Plan end date as set by the Issuer.This can be null if there is no end date.  | No |
| startDate | date | Effective Start date of the Plan.Plan start date as set by the Issuer.  | Yes |

#### ExternalTransactionReference Schema

This is used by external clients as an opaque identifier and is sometimes used to correlate multiple transaction.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| ExternalTransactionReference | string | This is used by external clients as an opaque identifier and is sometimes used to correlate multiple transaction. |  |

**Example**
<pre>17013357808877803992</pre>

#### EnrollmentTimestamp Schema

Timestamp of cardholder enrollment.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| EnrollmentTimestamp | dateTime | Timestamp of cardholder enrollment. |  |

**Example**
<pre>2021-01-17T16:15:21Z</pre>

#### RefundAmountInSourceCurrency Schema

The amount (in source currency) used for partial or full cancellation of clearing.
This field will be always populated when clearing is in PARTIALLY_REFUNDED or fully CANCELLED state.
The amount is represented in minor units. It is a numerical value in the minor units of the currency (Cents for USD, for example [<b>minor units</b>](https://www.currency-iso.org/en/home/tables/table-a1.html)). If the currency is USD, “214010” is used for representing the amount, "$2,140.10".
Note that there are no fractional minor units represented. They're rounded to the nearest whole number of minor units.

When returned in API response or callback notification to Issuer (<b>During Purchase scenario</b>):
+ In multi-currency scenario, this field will be populated in source currency.

This field will not be returned to Issuer in <b>Post Purchase scenario</b>.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| RefundAmountInSourceCurrency | long | The amount (in source currency) used for partial or full cancellation of clearing. This field will be always populated when clearing is in PARTIALLY_REFUNDED or fully CANCELLED state. The amount is represented in minor units. It is a numerical value in the minor units of the currency (Cents for USD, for example [<b>minor units</b>](https://www.currency-iso.org/en/home/tables/table-a1.html)). If the currency is USD, “214010” is used for representing the amount, "$2,140.10". Note that there are no fractional minor units represented. They're rounded to the nearest whole number of minor units.  When returned in API response or callback notification to Issuer (<b>During Purchase scenario</b>): + In multi-currency scenario, this field will be populated in source currency.  This field will not be returned to Issuer in <b>Post Purchase scenario</b>.  |  |

#### MerchantCountryCode Schema

ISO Country code where the merchant is located in ISO 3166-2 (alpha) format

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| MerchantCountryCode | string | ISO Country code where the merchant is located in ISO 3166-2 (alpha) format |  |

**Example**
<pre>CA</pre>

#### Use_JWK Schema

The "use" (public key use) parameter identifies the intended use of the public key.
+ Required when the JWK is used to represent the device keys
+ Indirectly defined by the value of <code>keyFunction</code>
+ Employed to indicate whether the key is used for encrypting data or verifying the signature on data.
  + <code>enc</code> must be used when the key is used for <code>KEY_AGREEMENT</code>
  + <code>sig</code> must be used when the key is used for <code>AUTHENTICITY</code>

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| Use_JWK | string, <br>**Available values:** "sig", "enc" | The "use" (public key use) parameter identifies the intended use of the public key. + Required when the JWK is used to represent the device keys + Indirectly defined by the value of <code>keyFunction</code> + Employed to indicate whether the key is used for encrypting data or verifying the signature on data.   + <code>enc</code> must be used when the key is used for <code>KEY_AGREEMENT</code>   + <code>sig</code> must be used when the key is used for <code>AUTHENTICITY</code>  |  |

**Example**
<pre>enc</pre>

#### MerchantCity Schema

Name of the merchant's city

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| MerchantCity | string | Name of the merchant's city |  |

**Example**
<pre>Foster City</pre>

#### DeviceAlias Schema

A supplementary ID for the device defined by the client/partner enrolling this device
+ Must be unique for this client/partner
+ An alias is analogous to the <code>vDeviceID</code> with the difference that it is assigned by the caller of this API
+ Examples of aliases might be serial numbers and IMEIs
+ The alias might be used to guarantee only one subject identity is created for the same physical device

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| DeviceAlias | string | A supplementary ID for the device defined by the client/partner enrolling this device + Must be unique for this client/partner + An alias is analogous to the <code>vDeviceID</code> with the difference that it is assigned by the caller of this API + Examples of aliases might be serial numbers and IMEIs + The alias might be used to guarantee only one subject identity is created for the same physical device  |  |

**Example**
<pre>990000862471854</pre>

#### EnrollmentProfileIdentifier Schema

Visa-generated Enrollment Profile Identifier

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| EnrollmentProfileIdentifier | string (uuid) | Visa-generated Enrollment Profile Identifier |  |

**Example**
<pre>278a6873-9dc2-b466-284c-1d10ee797301</pre>

#### EncryptedAccountNumber Schema

JWE<AccountNumber> - This is a URL-safe base64-encoded string that represents the encrypted payload for AccountNumber.
The format is the JSON Web Encryption using asymmetric/symmetric key material made available at time of onboarding.
It is a standard JWT with a single custom AccountNumber claim, “accountNumber” that contains the card number/PAN.

Visa uses JSON Web Encryption (JWE) to encrypt sensitive information in APIs. For more info, see "Encryption (JWE) Details".

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| EncryptedAccountNumber | byte | JWE<AccountNumber> - This is a URL-safe base64-encoded string that represents the encrypted payload for AccountNumber. The format is the JSON Web Encryption using asymmetric/symmetric key material made available at time of onboarding. It is a standard JWT with a single custom AccountNumber claim, “accountNumber” that contains the card number/PAN.  Visa uses JSON Web Encryption (JWE) to encrypt sensitive information in APIs. For more info, see "Encryption (JWE) Details".  |  |

#### PlanIDRef Schema

A Visa-generated, alphanumeric, unique, and short human-readable friendly name for Installment Plan.This identifier is called Plan Registration System Identifier in Auth and Clearing messages. Reference - Field 104 in Auth.Base II TCR D Position 43-52.SMS Raw Data Financial Transaction record 5 -V22226.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| PlanIDRef | string | A Visa-generated, alphanumeric, unique, and short human-readable friendly name for Installment Plan.This identifier is called Plan Registration System Identifier in Auth and Clearing messages. Reference - Field 104 in Auth.Base II TCR D Position 43-52.SMS Raw Data Financial Transaction record 5 -V22226. |  |

**Example**
<pre>A123459876</pre>

#### MerchantInformation Schema

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| category | string | The Merchant Category Code (MCC) is a four-digit number assigned to describe a merchant’s primary business based on annual sales volume measured in local currency. In addition, some MCCs identify a specific merchant or type of transaction. Visa and its members use MCC data for a range of purposes, including activity tracking, reporting, and risk management. Acquirers (and their agents) are required to assign the correct MCC to each of their merchants. Visa retains the right to require corrections to MCC assignments and use.  The MCCs and descriptions have been derived from Standard Industrial Classification (SIC) Codes and the International Organization for Standardization (ISO) Codes. Please note that Visa MCCs and SIC codes do not always correspond. In many cases, Visa has consolidated several SIC codes into one MCC to manage the number of MCCs. In other cases, such as for T&E and direct marketing merchants, Visa established MCCs that do not have corresponding SIC codes.  See [Visa Merchant Data Standards Manual](https://usa.visa.com/dam/VCOM/download/merchants/visa-merchant-data-standards-manual.pdf) for more info.  For information related to MCC codes, please navigate to [this link](https://www.visa.com/supplierlocator-app/app/#/home/supplier-locator) about Supplier Locator. <br>*Example:* `"3001"` | No |
| ~~merchantReferenceID~~ | string | When the seller provides this ID during plan match, it is used in an eligibility check to match the appropriate Installment plans. - When provided in cancellation or search, this ID is used to match the plan acceptances whose plans have this merchantReferenceID. - When provided in plan selection (plan acceptance creation) API, it is saved to be used later for search plan acceptances. - When provided in plan match API, it is used for instrumentation/reporting purposes. <br>*Example:* `"69847986"`<br>**Deprecated** | No |
| partnerMerchantReferenceID | string | <b>  Conditional Mandatory Field  </b>: This field is always 'required' when the API call is made by the (merchant) partner on behalf of the merchant.  Usually, this reference ID is assigned by the Partner but in cases where not provided when onboarding the Merchant, this value will be generated by Visa and provided to the Partner.  It is used by Visa for enforcing authorization (so that one Merchant's plan acceptance is not accessed/modified by an unauthorized merchant/partner), risk assessment and for instrumentation.  It is also used to serve bilateral plan agreements between a Seller and Issuer. In the future, it can be used to specify merchant-specific filters for installment plans.  - When provided in cancellation or search, this ID is used to match the plan acceptance and enforce authorization. - When provided in plan selection (plan acceptance creation) API, it is used to later for authorization checks on cancel or search plan acceptances. - When provided in plan match API, it is used for filter bilateral plans & instrumentation/reporting purposes.  | No |

#### TokenID Schema

This is the token information corresponding to the PAN tokenized by the TokenRequester. The token requester is usually the seller.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| TokenID | string | This is the token information corresponding to the PAN tokenized by the TokenRequester. The token requester is usually the seller. |  |

**Example**
<pre>ac9e1cf6693c32cb7921112b7eb07d01</pre>

#### OnboardingOBORelationship Schema

On-Behalf-Of Relationship Information for Client/Merchant Onboarding

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| relationshipType | string, <br>**Available values:** "OBO_FUNDING_FEE_COLLECTOR", "OBO_SERVICE_FEE_COLLECTOR" | Type of operation performed by the third-party partner on-behalf-of the client/merchant being onboarded <br>*Enum:* `"OBO_FUNDING_FEE_COLLECTOR"`, `"OBO_SERVICE_FEE_COLLECTOR"`<br>*Example:* `"OBO_FUNDING_FEE_COLLECTOR"` | Yes |
| partnerReferenceID | string | Reference ID to identify the third-party partner <br>*Example:* `"81339002"` | Yes |
| onBehalfOfReferenceID | string | Reference ID used by the third-party partner to identify the client/merchant being onboarded <br>*Example:* `"09124980"` | Yes |

#### PlanTermsAndConditionsForSearchPlan Schema

Terms and Conditions that need to be accepted by consumer before the plan acceptance can be created using the Installment plan corresponding to this terms and conditions.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| url | string | A Terms and Conditions HTTPS URL hosted by the Issuer for displaying to the cardholder for acceptance when initiating a plan acceptance for this plan. This HTTPS URL must not invoke an executable script and must point to an HTML page containing terms and conditions text in a displayable manner. When provided during onboarding, the URL is checked for validity. <br>*Example:* `"https://examplebank.com/tc"` | No |
| text | string | This is the text of the Terms and Conditions for Installment Plan.<br>*Example:* `"These terms of use constitute an agreement between you and X Pay Pvt Ltd ABN 123456 trading as X Pay(we, our, or us) (and any person who acquires your Payment Plan from us).\nOur Buy Now Pay Later option allows you to purchase goods or services over a period of time by repaying us in equal instalments (Payment Plan).\nBy entering into a Payment Plan, you agree to be bound by these Terms of Use.\nYou should also read our Privacy Policy which forms a part of this agreement.\n"` | Yes |
| version | integer | Version of the Terms & Conditions accepted by the consumer. The version is auto-incremented every time an update is made to the Plan by the issuer in the Visa Developer Center/Portal UI. This is same as <code>Plan.termsAndConditions[i].version</code> sent to the Seller in the response of the matched plans API. <br>*Example:* `2` | Yes |
| longText | string | This is the long text of the Terms and Conditions for Installment Plan.<br>*Example:* `"These terms of use constitute an agreement between you and X Pay Pvt Ltd ABN 123456 trading as X Pay(we, our, or us) (and any person who acquires your Payment Plan from us).\nOur Buy Now Pay Later option allows you to purchase goods or services over a period of time by repaying us in equal instalments (Payment Plan).\nBy entering into a Payment Plan, you agree to be bound by these Terms of Use.\nYou should also read our Privacy Policy which forms a part of this agreement.\n"` | No |
| languageCode | string | Language code for the terms and conditions text for installment plans. The format is defined by [<b>ISO 639-2</b>](https://www.loc.gov/standards/iso639-2/php/code_list.php) <br>*Example:* `"eng"` | No |

#### IslamicPlan Schema

Indicates whether the Plan is an Islamic Plan. If this field is set to <code>true</code>, Plan should be displayed according to Shariah Banking principles, for example using the term <b>profit</b> instead of <b>interest</b>. If this field is not set (or not returned in response), it should be treated as <code>false</code> and the Plan is not an Islamic Plan.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| IslamicPlan | boolean | Indicates whether the Plan is an Islamic Plan. If this field is set to <code>true</code>, Plan should be displayed according to Shariah Banking principles, for example using the term <b>profit</b> instead of <b>interest</b>. If this field is not set (or not returned in response), it should be treated as <code>false</code> and the Plan is not an Islamic Plan. |  |

**Example**
<pre>false</pre>

#### InstallmentTransactionIdentifier Schema

Installment Plan schedule is identified by this ID.
Visa-generated identifier for a clearing associated with this plan acceptance. This is useful if there are more than one clearing associated with a plan acceptance as ISO Transaction
is not sufficient to identify a plan acceptance, as there can be more than one plan acceptances associated with a single ISO transaction.
There can be more than one vInstallmentTransactionID per plan acceptance in the case of multiple clearings and partial ISO transaction associated with a plan acceptance.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| InstallmentTransactionIdentifier | string (uuid) | Installment Plan schedule is identified by this ID. Visa-generated identifier for a clearing associated with this plan acceptance. This is useful if there are more than one clearing associated with a plan acceptance as ISO Transaction is not sufficient to identify a plan acceptance, as there can be more than one plan acceptances associated with a single ISO transaction. There can be more than one vInstallmentTransactionID per plan acceptance in the case of multiple clearings and partial ISO transaction associated with a plan acceptance.  |  |

**Example**
<pre>8eb01a5e-1f7c-15c7-414c-13189004c101</pre>

#### InstallmentTransaction Schema

Associated transaction for a given plan acceptance. A plan acceptance can be created with a single ISO transaction or
many ISO transactions, or a part of an ISO transaction (one clearing out of many, for example).
Represents the schedule of payments corresponding to a plan acceptance.
Clearing data will be always included when available.
<BR/><b>NOTES:</b>
+ When returned in the HTTP response body or callback notifications, all of the fields below are required (i.e., al fields are populated when used in response body).
+ When used in the HTTP request body of an API request to Visa Installments, the required fields must be provided.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| InstallmentTransaction | { **"status"**: string, <br>**Available values:** "CONFIRMED", "CANCELLED", "PENDING_CONFIRMATION", "PENDING_CANCELLATION", "PARTIALLY_REFUNDED", **"vInstallmentTransactionID"**: string (uuid) } & { **"clearingAmount"**: long, **"clearingDateTime"**: dateTime, **"settlementCurrency"**: string, **"clearingSequenceNumber"**: string, **"acquirerReferenceNumber"**: string } | Associated transaction for a given plan acceptance. A plan acceptance can be created with a single ISO transaction or many ISO transactions, or a part of an ISO transaction (one clearing out of many, for example). Represents the schedule of payments corresponding to a plan acceptance. Clearing data will be always included when available. <BR/><b>NOTES:</b> + When returned in the HTTP response body or callback notifications, all of the fields below are required (i.e., al fields are populated when used in response body). + When used in the HTTP request body of an API request to Visa Installments, the required fields must be provided.  |  |

#### PlanFeesForSeller Schema

Fee rate table used to calculate the fees.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| type | string, <br>**Available values:** "CONSUMER", "CONSUMER_UPFRONT", "MERCHANT_FUNDING", "MERCHANT_SERVICE" | Fee types applicable for the Plan.  + "CONSUMER" - Fee for Consumer Funded Plan that consumer must pay to Issuer.  + "CONSUMER_UPFRONT" - Upfront fee that consumer must pay to Issuer.  + "MERCHANT_FUNDING" - Fee for Merchant Funded Plan that Merchant must pay to Issuer.  + "MERCHANT_SERVICE" - Service Fee charged to the merchant by Visa. <br>*Enum:* `"CONSUMER"`, `"CONSUMER_UPFRONT"`, `"MERCHANT_FUNDING"`, `"MERCHANT_SERVICE"`<br>*Example:* `"CONSUMER"` | No |
| flatFee | long | Flat fee applied on the first Installment payment in Issuer currency. The amount is represented in minor units. It is a numerical value in the minor units of the currency (Cents for USD, for example).  + The currency field decides the [<b>minor units</b>](https://www.currency-iso.org/en/home/tables/table-a1.html). If the currency is USD, “1034” is used for representing the amount "$10.34". + Note that there are no fractional minor units represented. They're rounded to the whole minor units. <br>*Example:* `13400` | No |
| ratePercentage | integer | Interest fee rate in percentage applied on Installment payment. + Percentage rate and is a non-negative value. + The percentage value is represented with two implicit decimals. (max 10000) <b>Example: 250 specifies 2.5%</b> + For calculations, the actual percentage value should be interpreted as follows: <code>actualPercentageValue = ratePercentage / 100.00</code> <br>*Example:* `320` | No |
| monthlyRatePercentage | integer | Monthly interest fee rate in percentage applied on Installment payment. This will only be set for fee type "CONSUMER". + Percentage rate and is a non-negative value. + The percentage value is represented with two implicit decimals. (max 10000) <b>Example: 250 specifies 2.5%</b> + For calculations, the actual percentage value should be interpreted as follows: <code>actualPercentageValue = ratePercentage / 100.00</code> <br>*Example:* `320` | No |

#### Kid_JWK Schema

Key identifier for situations in which the Client Software already possesses a key known and registered at Visa.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| Kid_JWK | string | Key identifier for situations in which the Client Software already possesses a key known and registered at Visa.  |  |

**Example**
<pre>eaa6db43</pre>

#### AcquirerReferenceNumber Schema

Acquirer Reference Number (ARN) is a 23-digit identification number associated with every draft and voucher.
It consists of a Format Code, BASE Identification Number (BIN), Capture Date, Film Locator, and Check Digit.
The ARN must be unique for each clearing.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| AcquirerReferenceNumber | string | Acquirer Reference Number (ARN) is a 23-digit identification number associated with every draft and voucher. It consists of a Format Code, BASE Identification Number (BIN), Capture Date, Film Locator, and Check Digit. The ARN must be unique for each clearing.  |  |

**Example**
<pre>15524351474316171567231</pre>

#### AuthorizationIdentificationResponseCode Schema

ISO transaction Auth Code (alphanumeric).
This Field 38 in ISO 8583 contains the response identification assigned by the authorizing institution.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| AuthorizationIdentificationResponseCode | string | ISO transaction Auth Code (alphanumeric). This Field 38 in ISO 8583 contains the response identification assigned by the authorizing institution.  |  |

**Example**
<pre>05754C</pre>

#### TotalUpfrontFees Schema

Total upfront fees charged to the consumer for this Installment plan. This fee corresponds to the fee type <code>CONSUMER_UPFRONT</code>.
This is the amount charged upfront along with the <b>first Installment principal</b> only.
The amount is represented in minor units. It is a numerical value in the [<b>minor units</b>](https://www.currency-iso.org/en/home/tables/table-a1.html) of the currency, such as Cents for USD. If the currency is USD, “13400” is used for representing the amount, "$134.00".
Note that there are no fractional minor units represented. They're rounded to the whole minor units.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| TotalUpfrontFees | long | Total upfront fees charged to the consumer for this Installment plan. This fee corresponds to the fee type <code>CONSUMER_UPFRONT</code>. This is the amount charged upfront along with the <b>first Installment principal</b> only. The amount is represented in minor units. It is a numerical value in the [<b>minor units</b>](https://www.currency-iso.org/en/home/tables/table-a1.html) of the currency, such as Cents for USD. If the currency is USD, “13400” is used for representing the amount, "$134.00". Note that there are no fractional minor units represented. They're rounded to the whole minor units.  |  |

**Example**
<pre>10000</pre>

#### TokenAccountNumber Schema

EMVCo Token account number provisioned by Visa

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| TokenAccountNumber | string | EMVCo Token account number provisioned by Visa |  |

**Example**
<pre>4024007133554278</pre>

#### PlanPreferences Schema

To specify the Plan Preferences of Sellers & Seller Enablers(OBO- when invoked on behalf of Merchants).

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| vPlanID | string (uuid) | Visa-generated identifier for an Installment plan<br>*Example:* `"9d16a09e-3812-4ce3-a258-9981cc13a1f3"` | Yes |
| bilateralPlanAction | string, <br>**Available values:** "OPT_IN", "OPT_OUT" | Specifies the action taken by the Merchant on a Bilateral Installment Plan. - "OPT_IN"  - Indicates Merchant agrees to associate them to the Plan. - "OPT_OUT"  - Indicates Merchant disagrees and Decline to associate them to the Plan. <br>*Enum:* `"OPT_IN"`, `"OPT_OUT"`<br>*Example:* `"OPT_IN"` | Yes |

#### PlanForLender Schema

Installment Plan details relevant for issuer

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| PlanForLender | { **"name"**: string, **"type"**: string, <br>**Available values:** "MARKET", "BI_LATERAL", "ISSUER_DEFAULT", "ISSUER_PROMOTION", "ISSUER_HYBRID", **"vPlanID"**: string (uuid), **"fundedBy"**: [ string, <br>**Available values:** "CONSUMER", "MERCHANT" ], **"vPlanIDRef"**: string, **"islamicPlan"**: boolean, **"promotionInfo"**: { **"promotionID"**: string, **"promotionCode"**: string }, **"termsAndConditions"**: [ { **"url"**: string, **"text"**: string, **"version"**: integer, **"languageCode"**: string } ], **"installmentFrequency"**: string, <br>**Available values:** "WEEKLY", "BIWEEKLY", "MONTHLY", "BIMONTHLY", **"numberOfInstallments"**: number (integer) } & { **"costInfo"**: { **"feeInfo"**: [ { **"type"**: string, <br>**Available values:** "ACQUIRER_TO_ISSUER", "ACQUIRER_TO_VISA", "ISSUER_TO_ACQUIRER", "ISSUER_TO_VISA", "ISSUER_TO_VISA_SCHEDULING_FEES", **"flatFee"**: long, **"ratePercentage"**: integer } ], **"currency"**: string, **"totalFees"**: long, **"totalPlanCost"**: long, **"lastInstallment"**: { **"amount"**: long, **"totalAmount"**: long, **"installmentFee"**: long }, **"firstInstallment"**: { **"upfrontFee"**: long, **"totalAmountExcludingUpfrontFee"**: long } & { **"amount"**: long, **"totalAmount"**: long, **"installmentFee"**: long }, **"totalUpfrontFees"**: long, **"totalRecurringFees"**: long, **"annualPercentageRate"**: integer } } | Installment Plan details relevant for issuer |  |

#### PlanTermsAndConditions Schema

Terms and Conditions that need to be accepted by consumer before the plan acceptance can be created using the Installment plan corresponding to this terms and conditions.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| url | string | A Terms and Conditions HTTPS URL hosted by the Issuer for displaying to the cardholder for acceptance when initiating a plan acceptance for this plan. This HTTPS URL must not invoke an executable script and must point to an HTML page containing terms and conditions text in a displayable manner. When provided during onboarding, the URL is checked for validity. <br>*Example:* `"https://examplebank.com/tc"` | No |
| text | string | This is the text of the Terms and Conditions for Installment Plan.<br>*Example:* `"These terms of use constitute an agreement between you and X Pay Pvt Ltd ABN 123456 trading as X Pay(we, our, or us) (and any person who acquires your Payment Plan from us).\nOur Buy Now Pay Later option allows you to purchase goods or services over a period of time by repaying us in equal instalments (Payment Plan).\nBy entering into a Payment Plan, you agree to be bound by these Terms of Use.\nYou should also read our Privacy Policy which forms a part of this agreement.\n"` | Yes |
| version | integer | Version of the Terms & Conditions accepted by the consumer. The version is auto-incremented every time an update is made to the Plan by the issuer in the Visa Developer Center/Portal UI. This is same as <code>Plan.termsAndConditions[i].version</code> sent to the Seller in the response of the matched plans API. <br>*Example:* `2` | Yes |
| languageCode | string | Language code for the terms and conditions text for installment plans. The format is defined by [<b>ISO 639-2</b>](https://www.loc.gov/standards/iso639-2/php/code_list.php) <br>*Example:* `"eng"` | No |

#### VISIndicatorCapability Schema

Merchant Acquirer's VIS flag handling capability.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| VISIndicatorCapability | string, <br>**Available values:** "SUPPORTED", "NOT_SUPPORTED" | Merchant Acquirer's VIS flag handling capability. |  |

**Example**
<pre>SUPPORTED</pre>

#### Kty_JWK Schema

+ The "kty" (key type) parameter identifies the cryptographic algorithm family used with the key, such as "RSA" or "EC".
+ <code>EC</code> is the only supported value, for now. Future versions may provide others.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| Kty_JWK | string, <br>**Available values:** "EC" | + The "kty" (key type) parameter identifies the cryptographic algorithm family used with the key, such as "RSA" or "EC". + <code>EC</code> is the only supported value, for now. Future versions may provide others.  |  |

**Example**
<pre>EC</pre>

#### CardType Schema

The card network Type. When no value is provided, it is defaulted to CREDIT.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| CardType | string, <br>**Available values:** "CREDIT", "DEBIT", "PREPAID", <br>**Default:** CREDIT | The card network Type. When no value is provided, it is defaulted to CREDIT. |  |

#### ForbiddenError Schema

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| ForbiddenError | { **"errorResponse"**: { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } } & { **"errorResponse"**: { **"reason"**: string, **"status"**: integer } } |  |  |

#### EnrollmentEndDate Schema

Effective end date for cardholder enrollment. *This must be later than (midnight() UTC + 24 hours), otherwise a 400 error will be returned*
After this date, the enrollment is deleted, even if extendedEligibilityEndDate is set for a later date.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| EnrollmentEndDate | dateTime | Effective end date for cardholder enrollment. *This must be later than (midnight() UTC + 24 hours), otherwise a 400 error will be returned* After this date, the enrollment is deleted, even if extendedEligibilityEndDate is set for a later date.  |  |

**Example**
<pre>2019-10-17T16:15:21Z</pre>

#### PlanForLenderOrSeller Schema

Installment plan with cost and fee structure

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| PlanForLenderOrSeller |  | Installment plan with cost and fee structure |  |

#### NonVisaAuthorizationData Schema

This is a subset of ISO 8583 Authorization Transaction Message fields for *non-Visa* cards as needed by installments application.
This structure is used in callback/webhook responses as it does not contain the account number info.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| NonVisaAuthorizationData | { **"type"**: string, <br>**Available values:** "AUTH", "AUTH_REVERSAL", "CS_SALES_DRAFT", "CS_CREDIT_VOUCHER", "CS_CASH_DISBURSEMENT", "CS_SALES_DRAFT_REVERSAL", "CS_CREDIT_VOUCHER_REVERAL", "CS_CASH_DISBURSEMENT_REVERSAL", **"authCode"**: string, **"category"**: string, **"cardBrand"**: string, <br>**Available values:** "VISA", "NON_VISA", "MASTERCARD", "AMERICAN_EXPRESS", "DISCOVER", "JCB", "UNIONPAY", "DINERSCLUB", <br>**Default:** VISA, **"merchantCity"**: string, **"merchantName"**: string, **"merchantState"**: string, **"vPlanAcceptanceID"**: string (uuid), **"merchantPostalCode"**: string, **"merchantCountryCode"**: string, **"paymentAccountReference"**: string, **"originatorTransactionReference"**: string } & { **"currency"**: string, **"billingAmount"**: long, **"billingCurrency"**: string, **"authorizationAmount"**: long, **"authorizationDateTime"**: dateTime } | This is a subset of ISO 8583 Authorization Transaction Message fields for *non-Visa* cards as needed by installments application. This structure is used in callback/webhook responses as it does not contain the account number info.  |  |

#### BatchExpirationDateTime Schema

This is the expiration date of the batch data. The batchID after this date is not relevant any more. The request will have to be re-initiated after this expiration date.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| BatchExpirationDateTime | dateTime | This is the expiration date of the batch data. The batchID after this date is not relevant any more. The request will have to be re-initiated after this expiration date. |  |

**Example**
<pre>2021-01-17T16:15:21Z</pre>

#### Preferences Schema

Allows Seller Enablers to specify the Capabilities or Preferences of Merchants on behalf which this request is made. This must be used only when there is a need to
- <b>Override</b> an enabler's default config in Visa Installments
- Specify additional filters for cases in which Merchant needs special handling.

<p>
<b>Important:</b></p>
<b>This is an optional parameter which must be provided when required.
Please carefully go through the specific fields in this object to understand how this impacts your implementation.
</b>

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| capabilities | { **"visIndicatorCapability"**: string, <br>**Available values:** "SUPPORTED", "NOT_SUPPORTED" } | Capabilities of Merchant handled in this request.Valid in context of Enabler acting on behalf of Merchant | No |
| installmentMode | string, <br>**Available values:** "DURING_PURCHASE", "POST_PURCHASE" | Specifies the mode of installment.  <br> <b>Note:</b> This is an optional field, however it must be provided when Acquirer makes the call on behalf of the Merchant(OnUs Transactions) and in such cases it must be set to <code>DURING_PURCHASE</code>. - "DURING_PURCHASE" - Indicates the installment is initiated during the purchase. - "POST_PURCHASE" - Indicates the installment is initiated after the purchase. <br>*Enum:* `"DURING_PURCHASE"`, `"POST_PURCHASE"`<br>*Example:* `"DURING_PURCHASE"` | No |
| acceptanceChannel | string, <br>**Available values:** "IN_PERSON", "E_COMMERCE", <br>**Default:** IN_PERSON | Specifies the channel through which the transaction is initiated and payment information is collected.  - When specified in Eligibility requests this value indicates the merchant preferred channel for the transaction.  - When specified in Plan Acceptance request this value indicates the channel through which the transaction was made.  - Though optional highly recommended to provide this value and if not provided then Acceptance Channel would be considered as IN_PERSON option.  - "IN_PERSON" - Indicates transactions initiated via In-Store/Face-to-Face.  - "E_COMMERCE" - Indicates transactions initiated via e-commerce websites.  <b>Note:</b>       This field is technicallv optional to maintain backward compatibility and is defaulted to <code>IN_PERSON</code>.       When defaulted to <code>IN PERSON</code>, the merchants will not get installment offers with certain Issuers who are onlv enrolled for <code>E_COMMERCE</code> transaction and not <code>IN_PERSON</code> <br>*Enum:* `"IN_PERSON"`, `"E_COMMERCE"`<br>*Example:* `"E_COMMERCE"` | No |

#### AuthorizationCode Schema

ISO transaction auth code (alphanumeric)

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| AuthorizationCode | string | ISO transaction auth code (alphanumeric) |  |

**Example**
<pre>05754C</pre>

#### EnrollmentBatchPageContentArrayItem Schema

Cardholder item used in enrollment batch array pagination results.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| productType | string, <br>**Available values:** "CREDIT", "DEBIT" | Product Type of the PAN.<br>*Enum:* `"CREDIT"`, `"DEBIT"`<br>*Example:* `"DEBIT"` | No |
| errorResponse | { **"reason"**: string, **"status"**: integer, **"details"**: [ { **"reason"**: string, **"message"**: string, **"location"**: string } ], **"message"**: string } | Standard Error Response Body - Provided only when this enrollment has errors with enrollmentStatus as 'ERROR'. | No |
| encAccountNumber | byte | JWE<AccountNumber> - This is a URL-safe base64-encoded string that represents the encrypted payload for AccountNumber. The format is the JSON Web Encryption using asymmetric/symmetric key material made available at time of onboarding. It is a standard JWT with a single custom AccountNumber claim, “accountNumber” that contains the card number/PAN.  Visa uses JSON Web Encryption (JWE) to encrypt sensitive information in APIs. For more info, see "Encryption (JWE) Details".  | No |
| enrollmentStatus | string, <br>**Available values:** "ENROLLED", "NOT_ENROLLED", "ERROR" | Defined the enrollment status for each enrollment record. "NOT_ENROLLED" means the card holder is currently not enrolled or enrollment will end within 24 hours of enrollmentEndDate. "ERROR" means the card holder was not enrolled due to an error.<br>*Enum:* `"ENROLLED"`, `"NOT_ENROLLED"`, `"ERROR"`<br>*Example:* `"ENROLLED"` | No |
| enrollmentEndDate | dateTime | Enrollment end date - Returned if it was provided in the input. | No |
| enrollmentStartDate | dateTime | Enrollment date of the latest Enrollment Event | No |
| enrollmentTimestamp | dateTime | Timestamp of cardholder enrollment.<br>*Example:* `"2021-01-17T16:15:21Z"` | No |
| vEnrollmentProfileID | string (uuid) | Enrollment Profile Identifier for the cardholder enrollment. + Required in case of cardholder enrollment create/update (success or failure)  | No |
| lastEnrollmentEndDate | dateTime | Enrollment end date of the latest UnEnrollment Event | No |
| extendedEligibilityEndDate | dateTime | Extended Eligibility end date - Returned if it was provided in the input. | No |

#### VisaTransactionIdentifier Schema

ISO Visa Authorization Transaction ID.
+ A unique value that Visa assigns to each transaction and returns to the acquirer in the authorization response.
+ Visa uses this value to maintain an audit trail throughout the life cycle of the transaction and all related transactions, such as reversals, adjustments, confirmations, and chargebacks.
+ In case of <b>Post Purchase scenario</b>, if Visa Transaction ID differs between authorization and clearing, this value should refer to clearing Visa Transaction ID.
<br><b>Note:</b><br> In transactions using Mastercard credentials, where a single transaction ID is not available, Participants should use the Mastercard <code>Tran ID</code> field. <code>Tran ID</code> is made up of <code>Financial Network Code + Banknet Reference Number + MMDD(TransactionDate)</code>, concatenated with no spaces.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| VisaTransactionIdentifier | string | ISO Visa Authorization Transaction ID. + A unique value that Visa assigns to each transaction and returns to the acquirer in the authorization response. + Visa uses this value to maintain an audit trail throughout the life cycle of the transaction and all related transactions, such as reversals, adjustments, confirmations, and chargebacks. + In case of <b>Post Purchase scenario</b>, if Visa Transaction ID differs between authorization and clearing, this value should refer to clearing Visa Transaction ID. <br><b>Note:</b><br> In transactions using Mastercard credentials, where a single transaction ID is not available, Participants should use the Mastercard <code>Tran ID</code> field. <code>Tran ID</code> is made up of <code>Financial Network Code + Banknet Reference Number + MMDD(TransactionDate)</code>, concatenated with no spaces.  |  |

**Example**
<pre>460162701383910</pre>

#### InstallmentTransactionForNotification Schema

Associated transaction for a given plan acceptance. A plan acceptance can be created with a single ISO transaction or
many ISO transactions, or a part of an ISO transaction (one clearing out of many, for example).
Represents the schedule of payments corresponding to a plan acceptance.
Clearing data will be always included when available.
<BR/><b>NOTES:</b>
+ When returned in the HTTP response body or callback notifications, all of the fields below are required (i.e., al fields are populated when used in response body).
+ When used in the HTTP request body for Visa Installment APIs, only <code>clearingAmount</code> and <code>clearingDateTime</code> are required to be passed-in.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| InstallmentTransactionForNotification | { **"status"**: string, <br>**Available values:** "PENDING_CONFIRMATION", "CONFIRMED", "PENDING_CANCELLATION", "CANCELLED", "PARTIALLY_REFUNDED", **"vInstallmentTransactionID"**: string (uuid) } & { **"clearingAmount"**: long, **"clearingDateTime"**: dateTime, **"settlementCurrency"**: string, **"clearingSequenceNumber"**: string, **"acquirerReferenceNumber"**: string } & { **"refundAmount"**: long, **"sourceCurrency"**: string, **"lastRefundDateTime"**: dateTime, **"refundAmountInSourceCurrency"**: long, **"clearingAmountInSourceCurrency"**: long } | Associated transaction for a given plan acceptance. A plan acceptance can be created with a single ISO transaction or many ISO transactions, or a part of an ISO transaction (one clearing out of many, for example). Represents the schedule of payments corresponding to a plan acceptance. Clearing data will be always included when available. <BR/><b>NOTES:</b> + When returned in the HTTP response body or callback notifications, all of the fields below are required (i.e., al fields are populated when used in response body). + When used in the HTTP request body for Visa Installment APIs, only <code>clearingAmount</code> and <code>clearingDateTime</code> are required to be passed-in.  |  |

#### PlanDetailLevel Schema

Specifies the detail level of the plan to be returned in the API response. Not all plan detail levels are applicable to all types of roles.
For example, the full detail level is applicable only to Issuers.
+ <code>NONE</code>: Only planID and no other plan details are returned.
+ <code>SUMMARY</code>: Summary information about the plan with limited cost and fees are returned.
+ <code>FULL_DETAIL</code> Detailed plan information including all fees and cost.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| PlanDetailLevel | string, <br>**Available values:** "NONE", "SUMMARY", "FULL_DETAIL", <br>**Default:** NONE | Specifies the detail level of the plan to be returned in the API response. Not all plan detail levels are applicable to all types of roles. For example, the full detail level is applicable only to Issuers. + <code>NONE</code>: Only planID and no other plan details are returned. + <code>SUMMARY</code>: Summary information about the plan with limited cost and fees are returned. + <code>FULL_DETAIL</code> Detailed plan information including all fees and cost.  |  |

**Example**
<pre>SUMMARY</pre>

#### KeyKind Schema

The type of the key. Used by Visa to determine the source of this key.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| KeyKind | string, <br>**Available values:** "REFID", "KEYID", <br>**Default:** KEYID | The type of the key. Used by Visa to determine the source of this key.  |  |

**Example**
<pre>KEYID</pre>

#### PlanAcceptanceForLender Schema

Plan acceptance created against an eligible plan after consumer accepts the plan terms and conditions.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| status | string, <br>**Available values:** "CREATED", "CANCELLED", "UPDATED", "CONFIRMED" | Specifies the status of the plan acceptance. + <code>CREATED</code>: The intial state, until <b>all</b> of the installment transactions are confirmed or cancelled or until transaction is associated to this plan acceptance. + <code>CANCELLED</code>: Plan acceptance is transitioned to this state when <b>all</b> of the installment transactions are cancelled + <code>CONFIRMED</code>: Plan acceptance is transitioned to this state when <b>all</b> of the installment transactions are confirmed + <code>UPDATED</code>: Plan acceptance is transitioned to this state from <code>CREATED</code> state when a transaction is associated to this plan acceptance <br>*Enum:* `"CREATED"`, `"CANCELLED"`, `"UPDATED"`, `"CONFIRMED"`<br>*Example:* `"CREATED"` | Yes |
| cardBrand | string, <br>**Available values:** "VISA", "NON_VISA", "MASTERCARD", "AMERICAN_EXPRESS", "DISCOVER", "JCB", "UNIONPAY", "DINERSCLUB", <br>**Default:** VISA | The card network brand. When no value is set (or the field is not returned), it should be treated as VISA.<br>*Enum:* `"VISA"`, `"NON_VISA"`, `"MASTERCARD"`, `"AMERICAN_EXPRESS"`, `"DISCOVER"`, `"JCB"`, `"UNIONPAY"`, `"DINERSCLUB"` | No |
| crossBorder | boolean | Indicates whether Plan Acceptance is Cross-Border<br>*Example:* `false` | No |
| transactions | [ { **"authCode"**: string, **"currency"**: string, **"vTransactionID"**: string, **"externalTransactionRef"**: string } & { **"dateTime"**: dateTime, **"transactionAmount"**: long } & { **"sourceCurrency"**: string, **"installmentTransactions"**: [ { **"status"**: string, <br>**Available values:** "CONFIRMED", "CANCELLED", "PENDING_CONFIRMATION", "PENDING_CANCELLATION", "PARTIALLY_REFUNDED", **"vInstallmentTransactionID"**: string (uuid) } & { **"clearingAmount"**: long, **"clearingDateTime"**: dateTime, **"settlementCurrency"**: string, **"clearingSequenceNumber"**: string, **"acquirerReferenceNumber"**: string } & { **"sourceCurrency"**: string, **"clearingAmountInSourceCurrency"**: long } & { **"refundAmount"**: long, **"lastRefundDateTime"**: dateTime, **"refundAmountInSourceCurrency"**: long } ], **"transactionRefundAmount"**: long, **"transactionAmountInSourceCurrency"**: long, **"transactionRefundAmountInSourceCurrency"**: long } ], <br>**Default:**  | A list of Visa ISO transactions associated with this Installment PlanAcceptance.  | Yes |
| installmentPlan | { **"name"**: string, **"type"**: string, <br>**Available values:** "MARKET", "BI_LATERAL", "ISSUER_DEFAULT", "ISSUER_PROMOTION", "ISSUER_HYBRID", **"vPlanID"**: string (uuid), **"fundedBy"**: [ string, <br>**Available values:** "CONSUMER", "MERCHANT" ], **"vPlanIDRef"**: string, **"islamicPlan"**: boolean, **"promotionInfo"**: { **"promotionID"**: string, **"promotionCode"**: string }, **"termsAndConditions"**: [ { **"url"**: string, **"text"**: string, **"version"**: integer, **"languageCode"**: string } ], **"installmentFrequency"**: string, <br>**Available values:** "WEEKLY", "BIWEEKLY", "MONTHLY", "BIMONTHLY", **"numberOfInstallments"**: number (integer) } & { **"costInfo"**: { **"feeInfo"**: [ { **"type"**: string, <br>**Available values:** "ACQUIRER_TO_ISSUER", "ACQUIRER_TO_VISA", "ISSUER_TO_ACQUIRER", "ISSUER_TO_VISA", "ISSUER_TO_VISA_SCHEDULING_FEES", **"flatFee"**: long, **"ratePercentage"**: integer } ], **"currency"**: string, **"totalFees"**: long, **"totalPlanCost"**: long, **"lastInstallment"**: { **"amount"**: long, **"totalAmount"**: long, **"installmentFee"**: long }, **"firstInstallment"**: { **"upfrontFee"**: long, **"totalAmountExcludingUpfrontFee"**: long } & { **"amount"**: long, **"totalAmount"**: long, **"installmentFee"**: long }, **"totalUpfrontFees"**: long, **"totalRecurringFees"**: long, **"annualPercentageRate"**: integer } } | Installment Plan details relevant for issuer | Yes |
| encAccountNumber | byte | JWE<AccountNumber> - This is a URL-safe base64-encoded string that represents the encrypted payload for AccountNumber. The format is the JSON Web Encryption using asymmetric/symmetric key material made available at time of onboarding. It is a standard JWT with a single custom AccountNumber claim, “accountNumber” that contains the card number/PAN.  Visa uses JSON Web Encryption (JWE) to encrypt sensitive information in APIs. For more info, see "Encryption (JWE) Details".  | Yes |
| statusTransitions | { **"createdDateTime"**: string (date-time-ms-nooffset), **"updatedDateTime"**: string (date-time-ms-nooffset), **"confirmedDateTime"**: string (date-time-ms-nooffset), **"cancellationDateTime"**: string (date-time-ms-nooffset) } | The timestamps at which the Plan Acceptance status was updated. | Yes |
| vPlanAcceptanceID | string (uuid) | Visa-generated identifier for a plan acceptance<br>*Example:* `"31e9f2b5-d90d-089e-67a5-1f533b02d301"` | Yes |

#### AccountNumber Schema

PAN / Account Number / Card Number of the card to be enrolled

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| AccountNumber | integer | PAN / Account Number / Card Number of the card to be enrolled |  |

**Example**
<pre>4036576265160027</pre>

#### TransactionAmountInSourceCurrency Schema

<b>  Conditional Mandatory Field  </b>:
<br>
The amount (in source currency) used in the Visa ISO transaction authorization and is represented as numerical value in the minor units of the currency (Cents for USD, for example [<b>minor units</b>](https://www.currency-iso.org/en/home/tables/table-a1.html)).

When returned in API response or callback notification to Issuer (<b>During Purchase scenario</b>):
+ In multi-currency scenario, this field will be populated in source currency.

This field will not be returned to Issuer in <b>Post Purchase scenario</b>.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| TransactionAmountInSourceCurrency | long | <b>  Conditional Mandatory Field  </b>: <br> The amount (in source currency) used in the Visa ISO transaction authorization and is represented as numerical value in the minor units of the currency (Cents for USD, for example [<b>minor units</b>](https://www.currency-iso.org/en/home/tables/table-a1.html)).  When returned in API response or callback notification to Issuer (<b>During Purchase scenario</b>): + In multi-currency scenario, this field will be populated in source currency.  This field will not be returned to Issuer in <b>Post Purchase scenario</b>.  |  |

#### FirstInstallment Schema

Cost details (fee and principal) for the first Installment.
The amount is represented in minor units. It is a numerical value in the [<b>minor units</b>](https://www.currency-iso.org/en/home/tables/table-a1.html) of the currency, such as Cents for USD. If the currency is USD, “13400” is used for representing the amount, "$134.00".
Note that there are no fractional minor units represented. They're rounded to the whole minor units.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| FirstInstallment | { **"upfrontFee"**: long, **"totalAmountExcludingUpfrontFee"**: long } & { **"amount"**: long, **"totalAmount"**: long, **"installmentFee"**: long } | Cost details (fee and principal) for the first Installment. The amount is represented in minor units. It is a numerical value in the [<b>minor units</b>](https://www.currency-iso.org/en/home/tables/table-a1.html) of the currency, such as Cents for USD. If the currency is USD, “13400” is used for representing the amount, "$134.00". Note that there are no fractional minor units represented. They're rounded to the whole minor units.  |  |

#### TotalFees Schema

Total fees charged to the consumer, calculated as <code>totalUpfrontFees + totalRecurringFees</code>.
The amount is represented in minor units. It is a numerical value in the [<b>minor units</b>](https://www.currency-iso.org/en/home/tables/table-a1.html) of the currency, such as Cents for USD. If the currency is USD, “13400” is used for representing the amount, "$134.00".
Note that there are no fractional minor units represented. They're rounded to the whole minor units.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| TotalFees | long | Total fees charged to the consumer, calculated as <code>totalUpfrontFees + totalRecurringFees</code>. The amount is represented in minor units. It is a numerical value in the [<b>minor units</b>](https://www.currency-iso.org/en/home/tables/table-a1.html) of the currency, such as Cents for USD. If the currency is USD, “13400” is used for representing the amount, "$134.00". Note that there are no fractional minor units represented. They're rounded to the whole minor units.  |  |

**Example**
<pre>50000</pre>

#### AcceptanceChannel Schema

Specifies the channel through which the transaction is initiated and payment information is collected.
 - When specified in Eligibility requests this value indicates the merchant preferred channel for the transaction.
 - When specified in Plan Acceptance request this value indicates the channel through which the transaction was made.
 - Though optional highly recommended to provide this value and if not provided then Acceptance Channel would be considered as IN_PERSON option.
 - "IN_PERSON" - Indicates transactions initiated via In-Store/Face-to-Face.
 - "E_COMMERCE" - Indicates transactions initiated via e-commerce websites.
 <b>Note:</b>
      This field is technicallv optional to maintain backward compatibility and is defaulted to <code>IN_PERSON</code>.
      When defaulted to <code>IN PERSON</code>, the merchants will not get installment offers with certain Issuers who are onlv enrolled for <code>E_COMMERCE</code> transaction and not <code>IN_PERSON</code>

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| AcceptanceChannel | string, <br>**Available values:** "IN_PERSON", "E_COMMERCE", <br>**Default:** IN_PERSON | Specifies the channel through which the transaction is initiated and payment information is collected.  - When specified in Eligibility requests this value indicates the merchant preferred channel for the transaction.  - When specified in Plan Acceptance request this value indicates the channel through which the transaction was made.  - Though optional highly recommended to provide this value and if not provided then Acceptance Channel would be considered as IN_PERSON option.  - "IN_PERSON" - Indicates transactions initiated via In-Store/Face-to-Face.  - "E_COMMERCE" - Indicates transactions initiated via e-commerce websites.  <b>Note:</b>       This field is technicallv optional to maintain backward compatibility and is defaulted to <code>IN_PERSON</code>.       When defaulted to <code>IN PERSON</code>, the merchants will not get installment offers with certain Issuers who are onlv enrolled for <code>E_COMMERCE</code> transaction and not <code>IN_PERSON</code>  |  |

**Example**
<pre>E_COMMERCE</pre>

#### TransactionInfoWithInstallmentTransaction Schema

Transaction information that includes the associated transaction and multiple clearing info.
When used in the response body, this field is provided when the clearing information is available.
When used in the request body, this field is to be used for specifying a clearing amount to be used for plan acceptance creation. This is most likely in a post-purchase use case.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| TransactionInfoWithInstallmentTransaction | { **"authCode"**: string, **"currency"**: string, **"vTransactionID"**: string, **"externalTransactionRef"**: string } & { **"dateTime"**: dateTime, **"transactionAmount"**: long } & { **"installmentTransactions"**: [ { **"status"**: string, <br>**Available values:** "CONFIRMED", "CANCELLED", "PENDING_CONFIRMATION", "PENDING_CANCELLATION", "PARTIALLY_REFUNDED", **"vInstallmentTransactionID"**: string (uuid) } & { **"clearingAmount"**: long, **"clearingDateTime"**: dateTime, **"settlementCurrency"**: string, **"clearingSequenceNumber"**: string, **"acquirerReferenceNumber"**: string } ] } | Transaction information that includes the associated transaction and multiple clearing info. When used in the response body, this field is provided when the clearing information is available. When used in the request body, this field is to be used for specifying a clearing amount to be used for plan acceptance creation. This is most likely in a post-purchase use case.  |  |

#### PlanAcceptanceCrossBorderIndicator Schema

Indicates whether Plan Acceptance is Cross-Border

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| PlanAcceptanceCrossBorderIndicator | boolean | Indicates whether Plan Acceptance is Cross-Border |  |

**Example**
<pre>false</pre>

#### Capabilities Schema

Capabilities of Merchant handled in this request.Valid in context of Enabler acting on behalf of Merchant

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| visIndicatorCapability | string, <br>**Available values:** "SUPPORTED", "NOT_SUPPORTED" | Merchant Acquirer's VIS flag handling capability.<br>*Enum:* `"SUPPORTED"`, `"NOT_SUPPORTED"`<br>*Example:* `"SUPPORTED"` | No |

#### OrderInformation Schema

Order Information corresponding to the plan acceptance.
When this is provided, it is used to enforce the maximum amount applicable for this Plan Acceptance.
This field is required when there is no transactionInfo provided in this API.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| currency | string | Currency of the order amount. Currency code in [ISO 4217 format](https://www.iban.com/currency-codes) | Yes |
| orderAmount | long | The amount corresponding to the order for a Plan Acceptance. This is the max amount (within a certain tolerance percentage) that is enforced for all transactions added to this plan acceptance. The amount is represented in minor units. It is a numerical value in the minor units of the currency (Cents for USD, for example [<b>minor units</b>](https://www.currency-iso.org/en/home/tables/table-a1.html)). If the currency is USD, “214010” is used for representing the amount, "$2,140.10". Note that there are no fractional minor units represented. They're rounded to the nearest whole number of minor units.<br /><br /> In case of <b>Post Purchase scenario</b>, this value need not be provided and will internally be set as the sum of clearing amounts (<code>installmentTransactions.clearingAmount</code>).  | Yes |

#### RefundInstallmentTransaction Schema

Refund/Cancel information for the Transaction based at clearing level.
When used in the response body, this object provides the results of partial or full cancellation.
When used in the request body, this object is to be used for specifying a refund details to be used for refund transaction.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| RefundInstallmentTransaction | { **"status"**: string, <br>**Available values:** "CONFIRMED", "CANCELLED", "PENDING_CONFIRMATION", "PENDING_CANCELLATION", "PARTIALLY_REFUNDED", **"refundAmount"**: long, **"refundReason"**: string, **"itemShippedStatus"**: string, <br>**Available values:** "SHIPPED", "NOT_SHIPPED", <br>**Default:** SHIPPED, **"vInstallmentTransactionID"**: string (uuid) } & { **"clearingAmount"**: long, **"clearingDateTime"**: dateTime, **"settlementCurrency"**: string, **"clearingSequenceNumber"**: string, **"acquirerReferenceNumber"**: string } | Refund/Cancel information for the Transaction based at clearing level. When used in the response body, this object provides the results of partial or full cancellation. When used in the request body, this object is to be used for specifying a refund details to be used for refund transaction.  |  |

#### OriginalEncryptedSecondaryAccountNumber Schema

This is JWE encrypted Secondary PAN that was mapped to the Primary PAN at the point of Plan Acceptance. 
This will be populated only in cases when the Secondary PAN gets updated after the Plan Acceptance.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| OriginalEncryptedSecondaryAccountNumber | byte | This is JWE encrypted Secondary PAN that was mapped to the Primary PAN at the point of Plan Acceptance.  This will be populated only in cases when the Secondary PAN gets updated after the Plan Acceptance.  |  |

#### OriginatorTransactionReference Schema

Reference number allocated by the card acceptor to enable lookup of transaction for various use cases like disputes.
This can be the acquirer reference number for the transaction in case of CS data.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| OriginatorTransactionReference | string | Reference number allocated by the card acceptor to enable lookup of transaction for various use cases like disputes. This can be the acquirer reference number for the transaction in case of CS data.  |  |

#### TransactionAmountRange Schema

Min and Max transaction amount for a Plan

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| maximumTransactionAmount | long | Maximum Amount required for eligiblity. The amount is represented in minor units. It is a numerical value in the minor units of the currency (Cents for USD, for example).  + The currency field decides the [<b>minor units</b>](https://www.currency-iso.org/en/home/tables/table-a1.html). If the currency is USD, “1034” is used for representing the amount "$10.34". + Note that there are no fractional minor units represented. They're rounded to the whole minor units. <br>*Example:* `500000` | Yes |
| minimumTransactionAmount | long | Minimum Amount required for eligiblity The amount is represented in minor units. It is a numerical value in the minor units of the currency (Cents for USD, for example).  + The currency field decides the [<b>minor units</b>](https://www.currency-iso.org/en/home/tables/table-a1.html). If the currency is USD, “1034” is used for representing the amount "$10.34". + Note that there are no fractional minor units represented. They're rounded to the whole minor units. <br>*Example:* `5000` | Yes |

#### TransactionMessageType Schema

ISO Transaction or Settlement message type
+ AUTH - ISO 0100/0110 - Authorization request/response data for purchase, cash, balance inquiry, return of goods
+ AUTH_REVERSAL - ISO 400/410 - ISO  Reversal of an Authorization Request. Reversals are not the same as a merchandise return, but instead are used to reverse approved authorizations or financial transactions which are not completed due to unintended transactions. For example, when a merchant put the wrong dollar amount in an auth, the reversal ‘undoes’ it so that another auth message can be sent with the correct amount.
+ CS_SALES_DRAFT - TC 05 – Original purchase or representment; or dispute response financial
+ CS_CREDIT_VOUCHER - TC 06 – Original credit voucher or representment or dispute response financial; or original credit or representment
+ CS_CASH_DISBURSEMENT - TC 07 – Original cash disbursement/withdrawal or representment or dispute response financial
+ CS_SALES_DRAFT_REVERSAL - TC 25 – Reversal of an original purchase or representment or dispute response financial transaction
+ CS_CREDIT_VOUCHER_REVERAL - TC 26 – Reversal of an original credit voucher or representment or dispute response financial transaction; or original credit or representment transaction.
+ CS_CASH_DISBURSEMENT_REVERSAL - TC 27 – Reversal of an original cash disbursement/withdrawal transaction

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| TransactionMessageType | string, <br>**Available values:** "AUTH", "AUTH_REVERSAL", "CS_SALES_DRAFT", "CS_CREDIT_VOUCHER", "CS_CASH_DISBURSEMENT", "CS_SALES_DRAFT_REVERSAL", "CS_CREDIT_VOUCHER_REVERAL", "CS_CASH_DISBURSEMENT_REVERSAL" | ISO Transaction or Settlement message type + AUTH - ISO 0100/0110 - Authorization request/response data for purchase, cash, balance inquiry, return of goods + AUTH_REVERSAL - ISO 400/410 - ISO  Reversal of an Authorization Request. Reversals are not the same as a merchandise return, but instead are used to reverse approved authorizations or financial transactions which are not completed due to unintended transactions. For example, when a merchant put the wrong dollar amount in an auth, the reversal ‘undoes’ it so that another auth message can be sent with the correct amount. + CS_SALES_DRAFT - TC 05 – Original purchase or representment; or dispute response financial + CS_CREDIT_VOUCHER - TC 06 – Original credit voucher or representment or dispute response financial; or original credit or representment + CS_CASH_DISBURSEMENT - TC 07 – Original cash disbursement/withdrawal or representment or dispute response financial + CS_SALES_DRAFT_REVERSAL - TC 25 – Reversal of an original purchase or representment or dispute response financial transaction + CS_CREDIT_VOUCHER_REVERAL - TC 26 – Reversal of an original credit voucher or representment or dispute response financial transaction; or original credit or representment transaction. + CS_CASH_DISBURSEMENT_REVERSAL - TC 27 – Reversal of an original cash disbursement/withdrawal transaction  |  |

#### PlanTAndCVersion Schema

Version of the Terms & Conditions accepted by the consumer. The version is auto-incremented every time an update is made to the Plan by the issuer in the Visa Developer Center/Portal UI.
This is same as <code>Plan.termsAndConditions[i].version</code> sent to the Seller in the response of the matched plans API.

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| PlanTAndCVersion | integer | Version of the Terms & Conditions accepted by the consumer. The version is auto-incremented every time an update is made to the Plan by the issuer in the Visa Developer Center/Portal UI. This is same as <code>Plan.termsAndConditions[i].version</code> sent to the Seller in the response of the matched plans API.  |  |

**Example**
<pre>2</pre>

#### FeesAndCostForLender Schema

A list of applicable lender costs/fees for the Installment plan

| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| feeInfo | [ { **"type"**: string, <br>**Available values:** "ACQUIRER_TO_ISSUER", "ACQUIRER_TO_VISA", "ISSUER_TO_ACQUIRER", "ISSUER_TO_VISA", "ISSUER_TO_VISA_SCHEDULING_FEES", **"flatFee"**: long, **"ratePercentage"**: integer } ] | Fee rate table used to calculate the Issuer fees. | Yes |
| currency | string | Currency used for all of the above amounts. Currency code in [ISO 4217 format](https://www.iban.com/currency-codes)  | Yes |
| totalFees | long | Total fees charged to the consumer, calculated as <code>totalUpfrontFees + totalRecurringFees</code>. The amount is represented in minor units. It is a numerical value in the [<b>minor units</b>](https://www.currency-iso.org/en/home/tables/table-a1.html) of the currency, such as Cents for USD. If the currency is USD, “13400” is used for representing the amount, "$134.00". Note that there are no fractional minor units represented. They're rounded to the whole minor units. <br>*Example:* `50000` | Yes |
| totalPlanCost | long | Grand total of the entire plan cost including the principal amounts and total fees charged to the consumer, across all Installment periods. The amount is represented in minor units. It is a numerical value in [<b>minor units</b>](https://www.currency-iso.org/en/home/tables/table-a1.html) of the currency (Cents for USD, for example). If the currency is USD, “61299” is used for representing the amount "$612.99". Note that there are no fractional minor units represented, they're rounded to the whole minor units.<br /> For <b>Canada</b>, total plan cost calculation includes small buffer value to ensure Merchant displays the highest possible value for the transaction at the time of checkout (Issuers are not expected to use the value). <br>*Example:* `612990` | Yes |
| lastInstallment | { **"amount"**: long, **"totalAmount"**: long, **"installmentFee"**: long } | Cost details (fee and principal) for the last Installment. Note that the last Installment includes the balance of the rounding amounts when amount is split across various Installment periods. The amount is represented in minor units. It is a numerical value in the [<b>minor units</b>](https://www.currency-iso.org/en/home/tables/table-a1.html) of the currency, such as Cents for USD. If the currency is USD, “13400” is used for representing the amount, "$134.00". Note that there are no fractional minor units represented. They're rounded to the whole minor units.  | Yes |
| firstInstallment | { **"upfrontFee"**: long, **"totalAmountExcludingUpfrontFee"**: long } & { **"amount"**: long, **"totalAmount"**: long, **"installmentFee"**: long } | Cost details (fee and principal) for the first Installment. The amount is represented in minor units. It is a numerical value in the [<b>minor units</b>](https://www.currency-iso.org/en/home/tables/table-a1.html) of the currency, such as Cents for USD. If the currency is USD, “13400” is used for representing the amount, "$134.00". Note that there are no fractional minor units represented. They're rounded to the whole minor units.  | Yes |
| totalUpfrontFees | long | Total upfront fees charged to the consumer for this Installment plan. This fee corresponds to the fee type <code>CONSUMER_UPFRONT</code>. This is the amount charged upfront along with the <b>first Installment principal</b> only. The amount is represented in minor units. It is a numerical value in the [<b>minor units</b>](https://www.currency-iso.org/en/home/tables/table-a1.html) of the currency, such as Cents for USD. If the currency is USD, “13400” is used for representing the amount, "$134.00". Note that there are no fractional minor units represented. They're rounded to the whole minor units. <br>*Example:* `10000` | Yes |
| totalRecurringFees | long | Total recurring fees charged to the consumer for this Installment plan. This fee corresponds to the fee type <code>CONSUMER</code>. The amount is represented in minor units. It is a numerical value in the [<b>minor units</b>](https://www.currency-iso.org/en/home/tables/table-a1.html) of the currency, such as Cents for USD. If the currency is USD, “13400” is used for representing the amount, "$134.00". Note that there are no fractional minor units represented. They're rounded to the whole minor units. <br>*Example:* `2000` | Yes |
| annualPercentageRate | integer | Annual Percentage Rate (APR) as configured by the Issuer during plan creation. This is not used for calculations, but used only for display purposes. + Interest fee rate in percentage applied on Installment payment. + Percentage rate and is a non-negative value. + The percentage value is represented with two implicit decimals. (max 10000) <b>Example: 320 specifies 3.2%</b> + For your calculations, the actual percentage value should be interpreted as follows: <code>actualPercentageValue = ratePercentage / 100.00</code> <br>*Example:* `320` | No |
