Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
find_apisBrowse and filter every API in the catalog.
get_api_artifactsOne API's artifacts, grouped by type.
get_openapiThe primary OpenAPI for this API.
find_similar_apisAPIs that look like this one.
apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
resolveTurn a domain, URL or GitHub org into the provider it belongs to.
find_cohortsEvery scored population of providers in the catalog.
All 92 tools →
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/vtex-payment-flow-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: VTex Payment Provider Protocol Payment Flow API
description: ">ℹ️ The Payment Provider Protocol is a set of definitions to help you integrate your payment processing API into the VTEX platform, including sub-acquirers, acquirers, gateways, and custom payment services. \n\nTo achieve this, you must implement a web API (REST) following the specifications described in this documentation.\n\nTo learn more about the Payment Provider Protocol, check our [Help Center article](https://help.vtex.com/en/tutorial/payment-provider-protocol--RdsT2spdq80MMwwOeEq0m).\n\n## Endpoint requirements\n\n * Must use a standard subdomain/domain name, not an IP address.\n * Must be served over HTTPS on port 443 with TLS 1.2 support.\n * Must respond in less than 5 seconds when running the tests.\n * Must respond in less than 20 seconds when in production.\n * Must be [PCI-DSS compliant](https://developers.vtex.com/docs/guides/payments-integration-pci-dss-compliance) or use [Secure Proxy](https://developers.vtex.com/docs/guides/payments-integration-secure-proxy) to accept branded cards like Visa, Mastercard, Amex, etc.\n\n## Testing\n\nYou can perform tests on your payment provider using our [VTEX - Payment Provider Test Suite](https://apps.vtex.com/vtex-payment-provider-test-suite/p).\n\n>ℹ An extra header `X-VTEX-API-Is-TestSuite` = `true` will be sent for every test suite request, to help you easily identify it and mock any required scenarios.\n\nFor more details about testing a Payment Provider, check our [Payment Provider Homologation](https://developers.vtex.com/docs/guides/payments-integration-payment-provider-homologation) article.\n\n## Common parameters in the documentation\n\n<table>\n <tr>\n <td><code>{{providerApiEndpoint}}</code></td>\n <td>Provider's endpoint for the implementation.</td>\n </tr>\n <tr>\n <td><code>{{X-PROVIDER-API-AppKey}}</code></td>\n <td>Unique identifier created by the provider and configured on the provider configuration page (Admin VTEX).</td>\n </tr>\n <tr>\n <td><code>{{X-PROVIDER-API-AppToken}}</code></td>\n <td>Unique token created by the provider and configured on the provider configuration page (Admin VTEX).</td>\n </tr>\n</table> \n\n## Payment Provider Protocol API Index\n\n### Payment Flow\n\n- `GET` [List Payment Provider Manifest](https://developers.vtex.com/docs/api-reference/payment-provider-protocol#get-/manifest)\n- `POST` [Create payment](https://developers.vtex.com/docs/api-reference/payment-provider-protocol#post-/payments)\n- `POST` [Cancel payment](https://developers.vtex.com/docs/api-reference/payment-provider-protocol#post-/payments/-paymentId-/cancellations)\n- `POST` [Settle payment](https://developers.vtex.com/docs/api-reference/payment-provider-protocol#post-/payments/-paymentId-/settlements)\n- `POST` [Refund payment](https://developers.vtex.com/docs/api-reference/payment-provider-protocol#post-/payments/-paymentId-/refunds)\n- `POST` [Inbound request (BETA)](https://developers.vtex.com/docs/api-reference/payment-provider-protocol#post-/payments/-paymentId-/inbound-request/-action-)\n\n### Configuration Flow\n\n- `POST` [Create authorization token](https://developers.vtex.com/docs/api-reference/payment-provider-protocol#post-/authorization/token)\n- `GET` [Provider authentication](https://developers.vtex.com/docs/api-reference/payment-provider-protocol#get-/authorization/redirect)\n- `GET` [Get credentials](https://developers.vtex.com/docs/api-reference/payment-provider-protocol#get-/authorization/credentials)"
version: '1.0'
servers:
- url: https://{providerApiEndpoint}
description: Payment provider endpoint URL.
variables:
providerApiEndpoint:
description: Payment provider endpoint URL.
default: '{providerApiEndpoint}'
tags:
- name: Payment Flow
paths:
/manifest:
get:
tags:
- Payment Flow
summary: VTex List Payment Provider Manifest
description: "Exposes the provider manifest, including metadata settings such as payment methods, split configuration, and custom fields.\n\n> ℹ️ This request is made from VTEX to the payment provider.\n\n## Available payment methods\n\n<table>\n <tr>\n <th>Payment Method</th>\n <th>Type</th>\n <th>Country</th>\n </tr>\n <tr>\n <td><code>Visa</code></td>\n <td>Credit Card</td>\n <td>Global</td>\n </tr>\n <tr>\n <td><code>Mastercard</code></td>\n <td>Credit Card</td>\n <td>Global</td>\n </tr>\n <tr>\n <td><code>American Express</code></td>\n <td>Credit Card</td>\n <td>Global</td>\n </tr>\n <tr>\n <td><code>Discover</code></td>\n <td>Credit Card</td>\n <td>Global</td>\n </tr>\n <tr>\n <td><code>JCB</code></td>\n <td>Credit Card</td>\n <td>Global</td>\n </tr>\n <tr>\n <td><code>Diners</code></td>\n <td>Credit Card</td>\n <td>Global</td>\n </tr>\n <tr>\n <td><code>Elo</code></td>\n <td>Credit Card</td>\n <td>Brazil</td>\n </tr>\n <tr>\n <td><code>Hipercard</code></td>\n <td>Credit Card</td>\n <td>Brazil</td>\n </tr>\n <tr>\n <td><code>Aura</code></td>\n <td>Credit Card</td>\n <td>Brazil</td>\n </tr>\n <tr>\n <td><code>Banricompras</code></td>\n <td>Credit Card</td>\n <td>Brazil</td>\n </tr>\n <tr>\n <td><code>Credz</code></td>\n <td>Credit Card</td>\n <td>Brazil</td>\n </tr>\n <tr>\n <td><code>Cabal</code></td>\n <td>Credit Card</td>\n <td>Argentina, Brazil, Uruguay, Paraguay</td>\n </tr>\n <td><code>Cartes Bancaires (CB)</code></td>\n <td>Credit Card</td>\n <td>France</td>\n </tr>\n <tr>\n <td><code>VirtualDebitElo</code></td>\n <td>Debit Card</td>\n <td>Brazil</td>\n </tr>\n <tr>\n <td><code>Visa Electron</code></td>\n <td>Debit Card</td>\n <td>Global</td>\n </tr>\n <tr>\n <td><code>Maestro</code></td>\n <td>Debit Card</td>\n <td>Global</td>\n </tr>\n <tr>\n <td><code>Mastercard Debit</code></td>\n <td>Debit Card</td>\n <td>Global</td>\n </tr>\n <tr>\n <td><code>Débito Online</code></td>\n <td>Debit Card</td>\n <td>Brazil</td>\n </tr>\n <tr>\n <td><code>Cobranded</code></td>\n <td>Card</td>\n <td>Global</td>\n </tr>\n <tr>\n <td><code>Privatelabels</code></td>\n <td>Card</td>\n <td>Global</td>\n </tr>\n <tr>\n <td><code>Promissories</code></td>\n <td>Generic</td>\n <td>Global</td>\n </tr>\n <tr>\n <td><code>Cash</code></td>\n <td>Generic</td>\n <td>Global</td>\n </tr>\n <tr>\n <td><code>Pix</code></td>\n <td>Online Transfer</td>\n <td>Brazil</td>\n </tr>\n <tr>\n <td><code>Safetypay</code></td>\n <td>Online Transfer</td>\n <td>Americas and Europe</td>\n </tr>\n <tr>\n <td><code>BankInvoice</code></td>\n <td>Offline/Voucher</td>\n <td>Brazil (Boleto Bancário)</td>\n </tr>\n <tr>\n <td><code>FichaDeposito</code></td>\n <td>Offline/Voucher</td>\n <td>Mexico</td>\n </tr>\n <tr>\n <td><code>Rapipago</code></td>\n <td>Offline/Voucher</td>\n <td>Argentina</td>\n </tr>\n <tr>\n <td><code>OXXO</code></td>\n <td>Offline/Voucher</td>\n <td>Mexico</td>\n </tr>\n <tr>\n <td><code>Voucher</code></td>\n <td>Offline/Voucher</td>\n <td>Mexico</td>\n </tr>\n <tr>\n <td><code>Bitcoin</code></td>\n <td>Cryptocurrency</td>\n <td>Global</td>\n </tr>\n <tr>\n <td><code>Venda Direta Credito</code></td>\n <td>Credit Card (Physical)</td>\n <td>Global</td>\n </tr>\n <tr>\n <td><code>Venda Direta Debito</code></td>\n <td>Debit Card (Physical)</td>\n <td>Global</td>\n </tr>\n</table> \n\n## Permissions\n\nCheck with your service provider to know what permissions are needed."
operationId: Manifest
security: []
parameters:
- $ref: '#/components/parameters/Content-Type'
- $ref: '#/components/parameters/Accept'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/Success-Manifest'
example:
paymentMethods:
- name: Visa
allowsSplit: onCapture
- name: Pix
allowsSplit: disabled
- name: Mastercard
allowsSplit: onCapture
- name: American Express
allowsSplit: onCapture
- name: BankInvoice
allowsSplit: onAuthorize
- name: Privatelabels
allowsSplit: disabled
- name: Promissories
allowsSplit: disabled
customFields:
- name: Merchant's custom field
type: text
- name: Merchant's custom select field
type: select
options:
- text: Field option 1
value: '1'
- text: Field option 2
value: '2'
- text: Field option 3
value: '3'
autoSettleDelay:
minimum: '0'
maximum: '720'
metadataFields:
- MetadataName1
- MetadataName2
deprecated: false
/payments:
post:
tags:
- Payment Flow
summary: VTex Create payment
description: "Creates a new payment and initiates the payment flow.\n\n> ℹ️ This request is made from VTEX to the payment provider.\n\nPayment providers must:\n\n- Execute authorization on payments made through credit/debit card or any synchronized payments;\n\n- Return the required information to the customer on payments made through bank-issued invoice, redirect, or any async payments.\n\n >ℹ️ This endpoint has to meet the principle of [idempotence](https://en.wikipedia.org/wiki/Idempotence). When calling this endpoint for the first time of a payment, without a `paymentId`, it should create a new payment. When calling this endpoint for an existing `paymentId`, it should not create another payment, but return the updated status of the existing payment instead.\n\n## Callbacks (asynchronous flow)\n\nCallbacks are used for asynchronous payments, which do not receive the final status immediately. At first, an `undefined` status is returned, and the final status will be received from a callback request in the future as `authorized` or `denied`. There are two types of callbacks:\n\n- **Notification:** If a payment returns with `undefined` status, you are expected to send us a callback/notification to update it later, sending a POST with an updated version of your response (same structure as above) to the `callbackUrl` we have provided.\n\n- **Retry:** If a payment returns with `undefined` status, you are expected to call the retry endpoint provided by the `callbackUrl` when the processing of the payment is completed, so we make another Create Payment request to update the status with the new value (`authorized` or `denied`).\n\nCallback requests should be authenticated using a Key and Token which you can [generate from your VTEX partner account License Manager](https://help.vtex.com/en/tutorial/application-keys--2iffYzlvvz4BDMr6WGUtet#generating-app-keys-in-your-account). To do so, `POST` your request passing the `X-VTEX-API-AppKey` and `X-VTEX-API-AppToken` headers with your credentials. **Note:** do not mix up these credentials with the ones we send on behalf of the merchant when sending our requests.\n\n>⚠ For integrations not using VTEX IO, use the **Notification** callback. For integrations developed using VTEX IO infrastructure, use the **Retry** callback.\n\n### Callback URL\n\nThe `callbackUrl` field contains an URL that the payment provider uses to make a callback and inform our gateway of the final payment status: `approved` or `denied`. \n\nThis URL has some query parameters, including the `X-VTEX-signature`. This parameter is mandatory and contains a signature token to identify that the request has been generated from VTEX as a security measure. The signature token has at most 32 characters. You can check an example of callback URL with the signature token below:\n\n```\nhttps://gatewayqa.vtexpayments.com.br/api/pvt/payment-provider/transactions/8FB0F111111122222333344449984ACB/payments/A2A9A25B11111111222222333327883C/callback?accountName=teampaymentsintegrations&X-VTEX-signature=R******tk\n```\n\nIn the [Transactions page of the Admin](https://help.vtex.com/en/tutorial/how-to-view-the-orders-details--tutorials_452), the signature token appears masked for security reasons, as in this example: `X-VTEX-signature=Rj******tk`.\n\nWhen making the callback request, we recommend that payment providers use the callback URL exactly as received, which guarantees that all the parameters are included.\n\nSee below an example of a payload forwarded along with the callback URL:\n\n```json\n{\n \"paymentId\": \"8B3BA2F4352545A8B1C5A215F356A01C\",\n \"status\": \"approved\",\n \"authorizationId\": \"184520\",\n \"nsu\": \"21705348\",\n \"tid\": \"21705348\",\n \"acquirer\": \"pagmm\",\n \"code\": \"0000\",\n \"message\": \"Successfully approved transaction\",\n \"delayToAutoSettle\": 1200,\n \"delayToAutoSettleAfterAntifraud\": 1200,\n \"delayToCancel\": 86400,\n \"cardBrand\": \"Mastercard\",\n \"firstDigits\": \"534696\",\n \"lastDigits\": \"6921\",\n \"maxValue\": 16.6\n}\n```\n\n>ℹ️ The parameter values sent in the callback payload replace the original values informed in the **Create Payment** request.\n\n>⚠️ If the waiting parameters (`delayToAutoSettle` and `delayToAutoSettleAfterAntifraud`) are not sent with the callback URL, the values for these parameters will be automatically set to 24 hours.\n\n## Beta features\n\nThe beta features available for payment providers are:\n\n- `inboundRequestsUrl`: Allows to forward external requests back to your payment provider implementation, including the configured credentials (`X-VTEX-API-*` headers), and settings.\n\n>ℹ You can reach out to our team by [opening a ticket](https://help.vtex.com/en/tutorial/opening-tickets-to-vtex-support--16yOEqpO32UQYygSmMSSAM) to know more about any beta features.\n\n## Permissions\n\nCheck with your service provider to know what permissions are needed."
operationId: CreatePayment
parameters:
- $ref: '#/components/parameters/X-PROVIDER-API-AppKey'
- $ref: '#/components/parameters/X-PROVIDER-API-AppToken'
- $ref: '#/components/parameters/Content-Type'
- $ref: '#/components/parameters/Accept'
security:
- appKey: []
appToken: []
- VtexIdclientAutCookie: []
requestBody:
content:
application/json:
schema:
type: object
required:
- reference
- orderId
- shopperInteraction
- transactionId
- paymentId
- paymentMethod
- paymentMethodCustomCode
- merchantName
- value
- currency
- installments
- deviceFingerprint
- miniCart
- url
- callbackUrl
- returnUrl
properties:
reference:
type: string
description: Merchant's order reference provided by VTEX Checkout.
example: '618272'
orderId:
type: string
description: Merchant's order identifier provided by VTEX Checkout (also called order group).
example: '1072430428324'
shopperInteraction:
type: string
description: 'Indicates which system the buyer interacted with (examples: ecommerce, instore, subscription).'
example: ecommerce
verificationOnly:
type: boolean
description: Indicates whether this payment is just to validate the buyer's payment method information (for instance, validate the credit card information).
example: false
transactionId:
type: string
description: VTEX transaction ID related to this payment.
example: 2F023FD5A72A49D48A8633252B7CCBD6
paymentId:
type: string
description: VTEX payment ID that can be used as unique identifier.
example: 01693EB95BE443AC85874E395CD91565
paymentMethod:
type: string
description: The payment method chosen for this payment. It must be one of the available payment methods offered by the provider, which can be obtained from the [List Payment Provider Manifest endpoint](https://developers.vtex.com/docs/api-reference/payment-provider-protocol#get-/manifest).
example: Diners
paymentMethodCustomCode:
type:
- string
- 'null'
description: Configurable for Cobranded and Privatelabels payment methods.
example: null
merchantName:
type: string
description: VTEX merchant name that will receive the payment.
example: mystore
value:
type: number
description: Value amount of the payment.
example: 31.9
referenceValue:
type: number
description: Value amount of the payment without interest applied. This value is the same as the "value" field when "installmentsInterestRate" is 0.0.
example: 31.9
currency:
type: string
description: Currency code (ISO 4217 alpha-3).
example: BRL
installments:
type: number
description: Number of installments.
example: 1
installmentsInterestRate:
type: number
description: The interest rate.
example: 0
installmentsValue:
type: number
description: The value of each installment.
example: 31.9
deviceFingerprint:
type: string
description: A hash that represents the device used to initiate the payment.
example: '75076388'
ipAddress:
type: string
description: The IP Address of the buyer.
example: 187.105.111.65
card:
type: object
description: Card information used for payment. This parameter is required only with card payment methods (credit, debit or co-branded).
required:
- holder
- number
- csc
- expiration
properties:
holder:
type:
- string
- 'null'
description: Card holder name.
example: John Doe
holderToken:
type: string
description: A token representing the card holder (this field is absent in case the provider does not use the [Secure Proxy](https://developers.vtex.com/docs/guides/payments-integration-secure-proxy)).
example: '#vtex#token#d799bae#csc#'
number:
type:
- string
- 'null'
description: Card number.
example: 364901****2661
csc:
type:
- string
- 'null'
description: Card security code.
example: '***'
bin:
type: string
description: First six digits of the card number (this field is absent in case the provider does not use the [Secure Proxy](https://developers.vtex.com/docs/guides/payments-integration-secure-proxy)).
example: '364901'
numberToken:
type: string
description: A token representing the card number (this field is absent in case the provider does not use the [Secure Proxy](https://developers.vtex.com/docs/guides/payments-integration-secure-proxy)).
example: '#vtex#token#d799bae#number#'
numberLength:
type: number
description: The number of characters in the card number (this field is absent in case the provider does not use the [Secure Proxy](https://developers.vtex.com/docs/guides/payments-integration-secure-proxy)).
example: 16
cscToken:
type: string
description: A token representing the card security code (this field is absent in case the provider does not use the [Secure Proxy](https://developers.vtex.com/docs/guides/payments-integration-secure-proxy)).
example: '#vtex#token#d799bae#csc#'
cscLength:
type: number
description: The number of characters in the Card Security Code (this field is absent in case the provider does not use the [Secure Proxy](https://developers.vtex.com/docs/guides/payments-integration-secure-proxy)).
example: 3
expiration:
type: object
description: Information about card expiration.
required:
- month
- year
properties:
month:
type:
- string
- 'null'
description: Card expiration month (2-digits).
example: '12'
year:
type:
- string
- 'null'
description: Card expiration year (4-digits).
example: '2020'
document:
type: string
description: Card holder's document.
example: '39295416023'
paymentOrigin:
type: string
description: Identifies the type of wallet used in the payment. Please contact our [VTEX Support](https://help.vtex.com/support) to enable this field in your account.
example: Google Pay
cryptogram:
type: string
description: 3DS cryptogram information (available only for payments transactions with DPAN cards). Please contact our [VTEX Support](https://help.vtex.com/support) to enable this field in your account.
example: /gAAAAAAAbQHWutaqaYsQLsAAAA=
eci:
type: string
description: '[Electronic Commerce Indicator](https://support.midtrans.com/hc/en-us/articles/204161150-What-is-ECI-on-3DS-protocol-). This value indicates the result of the authentication attempt on transactions enforced by the 3DS (available only for payments transactions with DPAN cards). Please contact our [VTEX Support](https://help.vtex.com/support) to enable this field in your account.'
example: '05'
miniCart:
type: object
description: Minicart information.
required:
- shippingValue
- taxValue
- buyer
- shippingAddress
- billingAddress
- items
properties:
shippingValue:
type: number
description: Total shipping value.
example: 2
taxValue:
type: number
description: Total tax value.
example: 1
buyer:
type: object
description: Buyer information.
required:
- firstName
- lastName
- document
- documentType
- email
- phone
properties:
id:
type: string
description: Buyer's unique identifier.
example: c1245228-1c68-11e6-94ac-0afa86a846a5
firstName:
type: string
description: Buyer's first name.
example: John
lastName:
type: string
description: Buyer's last name.
example: Doe
document:
type: string
description: Buyer's document number.
example: 01234567890
documentType:
type: string
description: Buyer's document type.
example: cpf
email:
type: string
description: Buyer's email.
example: john.doe@example.com
phone:
type: string
description: Buyer's phone number.
example: '+5521999999999'
isCorporate:
type: boolean
description: Indicates whether or not the buyer is corporate. If `true`, the fields `corporateName`, `tradeName` and `corporateDocument` are required.
example: false
corporateName:
type:
- string
- 'null'
description: Buyer's corporate name. This field is required if `isCorporate` is `true`.
example: VTEX
tradeName:
type:
- string
- 'null'
description: Buyer's trade name. This field is required if `isCorporate` is `true`.
example: VTEX
corporateDocument:
type:
- string
- 'null'
description: Buyer's corporate document number. This field is required if `isCorporate` is `true`.
example: '123456789'
createdDate:
type: string
description: Date when the buyer's profile was created in yyyy-MM-ddTHH:mm:ss format.
example: '2020-02-18T18:17:45'
shippingAddress:
type: object
description: Information about the address where the purchase will be delivered.
required:
- country
- street
- number
- neighborhood
- postalCode
- city
- state
properties:
country:
type: string
description: Shipping address country code (ISO 3166 alpha-3).
example: BRA
street:
type: string
description: Shipping address street.
example: Praia de Botafogo St.
number:
type: string
description: Shipping address number.
example: '300'
complement:
type: string
description: Shipping address complement.
example: 3rd Floor
neighborhood:
type: string
description: Shipping address neighborhood.
example: Botafogo
postalCode:
type: string
description: Shipping address postal code.
example: '22250040'
city:
type: string
description: Shipping address city.
example: Rio de Janeiro
state:
type: string
description: Shipping address state/province.
example: RJ
billingAddress:
type: object
description: Buyer's billing address information.
required:
- country
- street
- number
- neighborhood
- postalCode
- city
- state
properties:
country:
type: string
description: Billing address country code (ISO 3166 alpha-3).
example: BRA
street:
type: string
description: Billing address street.
example: Brigadeiro Faria Lima Avenue
number:
type: string
description: Billing address number.
example: '4440'
complement:
type: string
description: Billing address complement.
example: 10th Floor
neighborhood:
type: string
description: Billing address neighborhood.
example: Itaim Bibi
postalCode:
type: string
description: Billing address postal code.
example: 04538132
city:
type: string
description: Billing address city.
example: São Paulo
state:
type: string
description: Billing address state/province.
example: SP
items:
type: array
description: Items of the cart of the purchase.
items:
type: object
description: Cart items information.
required:
- id
- name
- price
- quantity
- discount
properties:
id:
type
# --- truncated at 32 KB (125 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/vtex/refs/heads/main/openapi/vtex-payment-flow-api-openapi.yml