openapi: 3.0.0
info:
title: VTex Anti-fraud Provider Account Payment Flow API
description: ">ℹ️ Onboarding guide\r\n>\r\n> Check the new [Payments onboarding guide](https://developers.vtex.com/docs/guides/payments-overview). We created this guide to improve the onboarding experience for developers at VTEX. It assembles all documentation on our Developer Portal about Payments and is organized by focusing on the developer's journey.\r\n\r\nThe Anti-fraud Provider Protocol is a set of definitions to help you integrate your anti-fraud service API into VTEX platform.\r\n\r\nTo achieve this, you need to implement a web API (REST) following the specifications described in this documentation.\r\n\r\n>⚠️ You can also access our [template on GitHub](https://github.com/vtex-apps/antifraud-provider-example) to help you quickly develop your anti-fraud connector using the Anti-fraud Provider Protocol and VTEX IO.\r\n\r\nTo learn more about the Anti-fraud Provider Protocol, check our [developer guide](https://developers.vtex.com/docs/guides/how-the-integration-protocol-between-vtex-and-antifraud-companies-works).\r\n\r\n## Anti-fraud Provider API Index\r\n\r\n### Anti-fraud Flow\r\n\r\n- `POST` [Send Anti-fraud Pre-Analysis Data (optional)](https://developers.vtex.com/docs/api-reference/antifraud-provider-protocol#post-/pre-analysis)\r\n- `POST` [Send Anti-fraud Data](https://developers.vtex.com/docs/api-reference/antifraud-provider-protocol#post-/transactions)\r\n- `PUT` [Update Anti-fraud Transactions (optional)](https://developers.vtex.com/docs/api-reference/antifraud-provider-protocol#put-/transactions/-transactionId-)\r\n- `GET` [List Anti-fraud Provider Manifest](https://developers.vtex.com/docs/api-reference/antifraud-provider-protocol#get-/manifest)\r\n- `GET` [Get Anti-fraud Status](https://developers.vtex.com/docs/api-reference/antifraud-provider-protocol#get-/transactions/-transactions.id-)\r\n- `DELETE` [Stop Anti-fraud Analysis (optional)](https://developers.vtex.com/docs/api-reference/antifraud-provider-protocol#delete-/transactions/-transactions.Id-)\r\n\r\n### OAuth Flow\r\n\r\n1. `POST` [Retrieve Token](https://developers.vtex.com/docs/api-reference/antifraud-provider-protocol#post-/authorization/token)\r\n2. `GET` [Redirect](https://developers.vtex.com/docs/api-reference/antifraud-provider-protocol#get-/redirect)\r\n3. `GET` [Return to VTEX](https://developers.vtex.com/docs/api-reference/antifraud-provider-protocol#get-/authorizationCode)\r\n4. `GET` [Get Credentials](https://developers.vtex.com/docs/api-reference/antifraud-provider-protocol#get-/authorization/credentials)"
version: '1.0'
servers:
- url: https://{providerApiEndpoint}
description: Anti-fraud provider endpoint URL.
variables:
providerApiEndpoint:
description: Anti-fraud 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.\r\n\r\n> ℹ️ This request is made from VTEX to the payment provider.\r\n\r\n## Available payment methods\r\n\r\n<table>\r\n <tr>\r\n <th>Payment Method</th>\r\n <th>Type</th>\r\n <th>Country</th>\r\n </tr>\r\n <tr>\r\n <td><code>Visa</code></td>\r\n <td>Credit Card</td>\r\n <td>Global</td>\r\n </tr>\r\n <tr>\r\n <td><code>Mastercard</code></td>\r\n <td>Credit Card</td>\r\n <td>Global</td>\r\n </tr>\r\n <tr>\r\n <td><code>American Express</code></td>\r\n <td>Credit Card</td>\r\n <td>Global</td>\r\n </tr>\r\n <tr>\r\n <td><code>Discover</code></td>\r\n <td>Credit Card</td>\r\n <td>Global</td>\r\n </tr>\r\n <tr>\r\n <td><code>JCB</code></td>\r\n <td>Credit Card</td>\r\n <td>Global</td>\r\n </tr>\r\n <tr>\r\n <td><code>Diners</code></td>\r\n <td>Credit Card</td>\r\n <td>Global</td>\r\n </tr>\r\n <tr>\r\n <td><code>Elo</code></td>\r\n <td>Credit Card</td>\r\n <td>Brazil</td>\r\n </tr>\r\n <tr>\r\n <td><code>Hipercard</code></td>\r\n <td>Credit Card</td>\r\n <td>Brazil</td>\r\n </tr>\r\n <tr>\r\n <td><code>Aura</code></td>\r\n <td>Credit Card</td>\r\n <td>Brazil</td>\r\n </tr>\r\n <tr>\r\n <td><code>Banricompras</code></td>\r\n <td>Credit Card</td>\r\n <td>Brazil</td>\r\n </tr>\r\n <tr>\r\n <td><code>Credz</code></td>\r\n <td>Credit Card</td>\r\n <td>Brazil</td>\r\n </tr>\r\n <tr>\r\n <td><code>Cabal</code></td>\r\n <td>Credit Card</td>\r\n <td>Argentina, Brazil, Uruguay, Paraguay</td>\r\n </tr>\r\n <td><code>Cartes Bancaires (CB)</code></td>\r\n <td>Credit Card</td>\r\n <td>France</td>\r\n </tr>\r\n <tr>\r\n <td><code>VirtualDebitElo</code></td>\r\n <td>Debit Card</td>\r\n <td>Brazil</td>\r\n </tr>\r\n <tr>\r\n <td><code>Visa Electron</code></td>\r\n <td>Debit Card</td>\r\n <td>Global</td>\r\n </tr>\r\n <tr>\r\n <td><code>Maestro</code></td>\r\n <td>Debit Card</td>\r\n <td>Global</td>\r\n </tr>\r\n <tr>\r\n <td><code>Mastercard Debit</code></td>\r\n <td>Debit Card</td>\r\n <td>Global</td>\r\n </tr>\r\n <tr>\r\n <td><code>Débito Online</code></td>\r\n <td>Debit Card</td>\r\n <td>Brazil</td>\r\n </tr>\r\n <tr>\r\n <td><code>Cobranded</code></td>\r\n <td>Card</td>\r\n <td>Global</td>\r\n </tr>\r\n <tr>\r\n <td><code>Privatelabels</code></td>\r\n <td>Card</td>\r\n <td>Global</td>\r\n </tr>\r\n <tr>\r\n <td><code>Promissories</code></td>\r\n <td>Generic</td>\r\n <td>Global</td>\r\n </tr>\r\n <tr>\r\n <td><code>Cash</code></td>\r\n <td>Generic</td>\r\n <td>Global</td>\r\n </tr>\r\n <tr>\r\n <td><code>Pix</code></td>\r\n <td>Online Transfer</td>\r\n <td>Brazil</td>\r\n </tr>\r\n <tr>\r\n <td><code>Safetypay</code></td>\r\n <td>Online Transfer</td>\r\n <td>Americas and Europe</td>\r\n </tr>\r\n <tr>\r\n <td><code>BankInvoice</code></td>\r\n <td>Offline/Voucher</td>\r\n <td>Brazil (Boleto Bancário)</td>\r\n </tr>\r\n <tr>\r\n <td><code>FichaDeposito</code></td>\r\n <td>Offline/Voucher</td>\r\n <td>Mexico</td>\r\n </tr>\r\n <tr>\r\n <td><code>Rapipago</code></td>\r\n <td>Offline/Voucher</td>\r\n <td>Argentina</td>\r\n </tr>\r\n <tr>\r\n <td><code>OXXO</code></td>\r\n <td>Offline/Voucher</td>\r\n <td>Mexico</td>\r\n </tr>\r\n <tr>\r\n <td><code>Voucher</code></td>\r\n <td>Offline/Voucher</td>\r\n <td>Mexico</td>\r\n </tr>\r\n <tr>\r\n <td><code>Bitcoin</code></td>\r\n <td>Cryptocurrency</td>\r\n <td>Global</td>\r\n </tr>\r\n <tr>\r\n <td><code>Venda Direta Credito</code></td>\r\n <td>Credit Card (Physical)</td>\r\n <td>Global</td>\r\n </tr>\r\n <tr>\r\n <td><code>Venda Direta Debito</code></td>\r\n <td>Debit Card (Physical)</td>\r\n <td>Global</td>\r\n </tr>\r\n</table> \r\n\r\n## Permissions\r\n\r\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.\r\n\r\n> ℹ️ This request is made from VTEX to the payment provider.\r\n\r\nPayment providers must:\r\n\r\n- Execute authorization on payments made through credit/debit card or any synchronized payments;\r\n\r\n- Return the required information to the customer on payments made through bank-issued invoice, redirect, or any async payments.\r\n\r\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.\r\n\r\n## Callbacks (asynchronous flow)\r\n\r\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:\r\n\r\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.\r\n\r\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`).\r\n\r\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.\r\n\r\n>⚠ For integrations not using VTEX IO, use the **Notification** callback. For integrations developed using VTEX IO infrastructure, use the **Retry** callback.\r\n\r\n### Callback URL\r\n\r\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`. \r\n\r\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:\r\n\r\n```\r\nhttps://gatewayqa.vtexpayments.com.br/api/pvt/payment-provider/transactions/8FB0F111111122222333344449984ACB/payments/A2A9A25B11111111222222333327883C/callback?accountName=teampaymentsintegrations&X-VTEX-signature=R******tk\r\n```\r\n\r\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`.\r\n\r\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.\r\n\r\nSee below an example of a payload forwarded along with the callback URL:\r\n\r\n```json\r\n{\r\n \"paymentId\": \"8B3BA2F4352545A8B1C5A215F356A01C\",\r\n \"status\": \"approved\",\r\n \"authorizationId\": \"184520\",\r\n \"nsu\": \"21705348\",\r\n \"tid\": \"21705348\",\r\n \"acquirer\": \"pagmm\",\r\n \"code\": \"0000\",\r\n \"message\": \"Successfully approved transaction\",\r\n \"delayToAutoSettle\": 1200,\r\n \"delayToAutoSettleAfterAntifraud\": 1200,\r\n \"delayToCancel\": 86400,\r\n \"cardBrand\": \"Mastercard\",\r\n \"firstDigits\": \"534696\",\r\n \"lastDigits\": \"6921\",\r\n \"maxValue\": 16.6\r\n}\r\n```\r\n\r\n>ℹ️ The parameter values sent in the callback payload replace the original values informed in the **Create Payment** request.\r\n\r\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.\r\n\r\n## Beta features\r\n\r\nThe beta features available for payment providers are:\r\n\r\n- `inboundRequestsUrl`: Allows to forward external requests back to your payment provider implementation, including the configured credentials (`X-VTEX-API-*` headers), and settings.\r\n\r\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.\r\n\r\n## Permissions\r\n\r\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
description: Configurable for Cobranded and Privatelabels payment methods.
nullable: true
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
description: Card holder name.
example: John Doe
nullable: true
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
description: Card number.
example: 364901****2661
nullable: true
csc:
type: string
description: Card security code.
example: '***'
nullable: true
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
description: Card expiration month (2-digits).
example: '12'
nullable: true
year:
type: string
description: Card expiration year (4-digits).
example: '2020'
nullable: true
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
description: Buyer's corporate name. This field is required if `isCorporate` is `true`.
example: VTEX
nullable: true
tradeName:
type: string
description: Buyer's trade name. This field is required if `isCorporate` is `true`.
example: VTEX
nullable: true
corporateDocument:
type: string
description: Buyer's corporate document number. This field is required if `isCorporate` is `true`.
example: '123456789'
nullable: true
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: string
description: Item identifier.
example: '8'
name:
type: string
description: Item name.
example: Tenis Preto I
price:
type: number
description: Item price per unity.
example: 30.9
quantity:
type: integer
description: Item quantity.
# --- truncated at 32 KB (124 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/vtex/refs/heads/main/openapi/vtex-payment-flow-api-openapi.yml