Accept a payment ๐๏ธ
Use a sale to charge a card and settle the funds in a single step.
A sale is the standard flow for a one-time payment. Set intent: transfer to charge the card and settle the funds in the same request, with no separate capture step. Use it whenever the final amount is known at the time of payment and won't need adjusting afterwards.
If you need to reserve funds now and settle a possibly different amount later, use Authorise a payment instead. To return funds from a completed sale, use Refund a payment.
How it works ๐๏ธโ
- Authenticate โ attach your Bearer token and Integrator ID (
X-Integrator-ID) to the request headers. - Place card details inside
sender.custom_data: PAN, expiry month, expiry year, and holder name. CVC is submitted separately at rootcustom_data.authentication.cvc. - Set
intent: transfer,channel: ecommerce, androuting.payment_flow: credit_card, then send the request โ the gateway debits the cardholder immediately. - A successful sale returns
status: pending(accepted and queued for the network) for the payment and anidโ save it as yourpayment_id. Checkcustom_data.transaction_iso_properties.processor_response_codefor the actual approval outcome;00means approved.
Let's try a payment ๐๏ธ๐งถโ
Keep in mind that:
intent: transferdebits funds immediately โ there is no separate capture step;senderholds the card;receiverholds theconfiguration_id.
Here's the smallest valid request for a sale โ set intent: transfer and provide the card details directly.
Comments below follow popular API clients' JSON syntax for readability โ strip them before sending via curl, fetch, or another HTTP client.
{
"amount": 1000, // Your amount in minor units
"currency": "EUR", // Your currency
"sender": {
"type": "credit_card", // Represent the sender in this operation
"custom_data": {
"pan": "5341260000000056",
"expiry_month": "12",
"expiry_year": "2033",
"holder_name": "John Snow"
}
},
"receiver": {
"configuration_id": "<CONFIGURATION_ID>" //PSP/acquirer configuration identifier.
},
"routing": {
"payment_flow": "credit_card"
},
"intent": "transfer", // This intent is used to debit funds immediately
"channel": "ecommerce", // Sale channel (e.g. `ecommerce`, `moto`)
"custom_data": {
"authentication": {
"cvc": "123"
}
}
}
Check the HTTP response โ the desired status is 201, meaning the request was accepted. The response body also includes status: pending, since the sale is queued for network processing. Save these fields to
later trace the payment
| Field | Purpose |
|---|---|
id | Payment ID โ used for GET, reverse, and webhooks |
initial_operation_id | Transfer ID for this sale |
network_transaction_reference | Scheme network reference |
For more in depth details check Payment status transitions and Response ID Fields.
๐งถ Try for yourself
Call this flow directly in the API Reference.
- POST Create Direct payment