Bancontact for Unified Payments API
Last updated: September 30, 2026
Bancontact payments follow a two-step process:
For the full API specification, see the API reference.
Information
Your base URL's {prefix} value is unique to your account and environment. To learn how to retrieve your base URLs for the sandbox and production environments, see API endpoints.
post
https://{prefix}.api.checkout.com/payments
1{2"amount": 100,3"currency": "EUR",4"source": {5"type": "bancontact",6"account_holder_name": "Hannah Bret",7"payment_country": "BE",8"billing_descriptor": "Test payment"9}10}
If you receive a 202 Success response, with a status field set to Pending, your request was successful. You now need to redirect your customer.
1{2"id": "pay_scoqartlkpzerp45c5ujmj6uue",3"status": "Pending",4"customer": {5"id": "cus_wqzgcjuiwucudpmfu7kn5mukh4"6},7"_links": {8"self": {9"href": "https://{prefix}.api.sandbox.checkout.com/payments/pay_scoqartlkpzerp45c5ujmj6uue"10},11"redirect": {12"href": "https://trusted.girogate.de/ti/dumbdummy?tx=455332564&rs=O34Tn460YM76zZzI7yfXXPIsVnnWAhaV&cs=bb716499d072a5adfb314437c5965e1150b15550aac7a298b5d9d317653427a1"13},14"bancontact:mobile": {15"href": "BEPGenApp://DoTx?TransId=1BC.GIROGATE.DE/BCMC/123456789$ICAE3BUIH5P9U53Y5HKA9CRT"16}17}18}
Redirect your customer to the redirect link’s href in the response. This will allow the customer to authorize the payment, before they are transferred to your predefined success or failure URL.
Alternatively, use the bancontact:mobile redirection link in the response to take them to the Bancontact mobile app. This mobile redirection link, however, is only provided in the production environment and only when the amount is less than or equal to 50000 (500 EUR).
Information
Bancontact recurring payments are available to eligible merchants only. To check availability, contact your account manager or request support.
Bancontact recurring payments follow a three-step process:
- Request the initial payment to create the agreement.
- Authenticate the initial payment. Once the authentication succeeds, the agreement becomes active and Checkout.com stores it as a payment instrument for future use.
- Request subsequent payments using the payment instrument.
The initial payment is a customer-initiated transaction (CIT) in which the customer authenticates and pays. If the payment succeeds, Checkout.com creates an agreement and stores it as a payment instrument that you can reuse in subsequent payment requests.
Call the Request a payment endpoint and provide the following fields:
payment_type– Set toRecurring.merchant_initiated– Set tofalse.
Information
The Payments API supports idempotency. You can safely retry API requests without the risk of duplicate payments.
Information
Your base URL's {prefix} value is unique to your account and environment. To learn how to retrieve your base URLs for the sandbox and production environments, see API endpoints.
post
https://{prefix}.api.checkout.com/payments
1{2"amount": 1000,3"currency": "EUR",4"source": {5"type": "bancontact",6"account_holder": {7"first_name": "Hannah",8"last_name": "Bret",9"billing_address": {10"country": "BE"11}12}13},14"payment_type": "Recurring",15"merchant_initiated": false,16"billing_descriptor": {17"name": "Test payment"18}19}
If you receive a 202 Accepted response with a status field set to Pending, your request was successful.
1{2"id": "pay_jwvjl5tin54ubn7x2stvmunske",3"status": "Pending",4"source": {5"type": "bancontact",6"id": "src_nwd3m4in3hkuddfpjsaevunhdy"7},8"_links": {9"self": {10"href": "https://{prefix}.api.sandbox.checkout.com/payments/pay_jwvjl5tin54ubn7x2stvmunske"11},12"redirect": {13"href": "https://trusted.girogate.de/ti/dumbdummy?tx=455332564&rs=O34Tn460YM76zZzI7yfXXPIsVnnWAhaV&cs=bb716499d072a5adfb314437c5965e1150b15550aac7a298b5d9d317653427a1"14}15}16}
The response returns the payment instrument ID in the source.id field. You cannot use the payment instrument until you authenticate the initial payment.
Redirect your customer to the URL returned in the response's _links.redirect.href field. The customer is asked to authenticate and pay, and redirected to your predefined success or failure URL depending on the authentication outcome.
If the payment is successful, you receive a payment_captured webhook, which also indicates that the payment instrument ID is ready for use in subsequent payments. Store the instrument ID and use it for subsequent payments.
Once the agreement is active, you can use the payment instrument ID in subsequent merchant-initiated transactions (MITs) without the cardholder present.
Call the Request a payment endpoint. Set the following fields, depending on the payment type:
For a one-click payment (CIT) – Set:
payment_typetoRecurringmerchant_initiatedtofalse
For a recurring payment (MIT) – Set:
payment_typetoRecurringmerchant_initiatedtotrue
Information
Your base URL's {prefix} value is unique to your account and environment. To learn how to retrieve your base URLs for the sandbox and production environments, see API endpoints.
post
https://{prefix}.api.checkout.com/payments
1{2"amount": 500,3"currency": "EUR",4"source": {5"type": "id",6"id": "src_nwd3m4in3hkuddfpjsaevunhdy"7},8"payment_type": "Recurring",9"merchant_initiated": true,10"billing_descriptor": {11"name": "Test payment"12}13}
If you receive a 202 Accepted response with a status field set to Pending, your request was successful. Checkout.com confirms the outcome with a payment_captured or payment_declined webhook.
1{2"id": "pay_4prafl3phiyejkfrjtgzlh4kye",3"status": "Pending",4"source": {5"type": "bancontact",6"id": "src_nwd3m4in3hkuddfpjsaevunhdy"7},8"_links": {9"self": {10"href": "https://{prefix}.api.sandbox.checkout.com/payments/pay_4prafl3phiyejkfrjtgzlh4kye"11}12}13}
You can retrieve details about an existing Bancontact payment with the following endpoint.
Use the following details to set up your request.
For the full API specification, see the API reference.
Information
Your base URL's {prefix} value is unique to your account and environment. To learn how to retrieve your base URLs for the sandbox and production environments, see API endpoints.
get
https://{prefix}.api.checkout.com/payments/{id}
1{2"id": "pay_zvamjy6rl3pehdeufoqaygbjzm",3"requested_on": "2024-05-17T15:17:06Z",4"source": {5"type": "bancontact"6},7"amount": 100,8"currency": "EUR",9"payment_type": "Regular",10"status": "Captured",11"approved": true,12"risk": {13"flagged": false14},15"customer": {16"id": "cus_t4rcgkbd2keuzeoo3p36u2xqcu"17},18"_links": {19"self": {20"href": "https://{prefix}.api.sandbox.checkout.com/payments/pay_zvamjy6rl3pehdeufoqaygbjzm"21},22"actions": {23"href": "https://{prefix}.api.sandbox.checkout.com/payments/pay_zvamjy6rl3pehdeufoqaygbjzm/actions"24},25"refund": {26"href": "https://{prefix}.api.sandbox.checkout.com/payments/pay_zvamjy6rl3pehdeufoqaygbjzm/refunds"27}28}29}
Bancontact supports both partial and full refunds. You can refund a payment through the Dashboard or by using the Refund API.
If the customer fails to complete their payment within one hour of payment creation, Checkout.com automatically voids the payment and sends a payment_expired webhook.
If the customer cancels their payment, we send a payment_canceled webhook.
Note
To start testing, contact your account manager or integrations engineer to activate Bancontact payments in the sandbox environment.
- Create a Bancontact transaction following the steps on this page, and open the redirect link in the response to Bancontact's website.
- Set the payment response and payment delay as necessary.
- Select Submit. You should then be redirected to your predefined success URL.