Bancontact Wallet Initiated Payment (WIP)
This feature is only available in EMEA and limited to certain acquirers.
Bancontact Wallet Initiated Payments (WIP)
Bancontact Wallet Initiated Payments (WIP) allow a merchant wallet to initiate follow-up payments from a customer wallet that contains a Bancontact card. The feature is available only in EMEA and only for merchants and acquirers enabled for Bancontact WIP.
Account Setup
Before using Bancontact WIP, your account must be enabled for the required services:
- Bancontact card acceptance
- 3-D Secure authentication
- Payment token creation
- Bancontact WIP configuration
Your account must also be configured with the Bancontact WIP merchant identifier and the Bancontact WIP token assigned during onboarding. These values are configured by our gateway; they are not sent in each transaction request.
Bancontact or the acquirer may decline WIP transactions if the merchant is not approved for the requested WIP use case, such as one-click or recurring payments.
Supported Use Cases
Bancontact WIP supports two follow-up payment scenarios:
| Use case | Description | Typical stored credential values |
|---|---|---|
| One-click payment | Customer-initiated follow-up payment from a saved Bancontact card. | sequence=SUBSEQUENT, scheduled=false, initiator=CARDHOLDER |
| Recurring or installment payment | Merchant-initiated follow-up payment from a saved Bancontact card. | sequence=SUBSEQUENT, scheduled=true, initiator=MERCHANT |
Bancontact scheme limits may apply. One-click payments may be authorised up to 500 EUR, and recurring or installment payments may be authorised up to 1500 EUR. These limits are enforced by the Bancontact/acquirer processing flow and may result in a decline if exceeded.
WIP Registration
Before a WIP payment can be initiated, the customer must complete a one-time registration. Registration creates a reusable payment token and stores the required Bancontact wallet authentication data for later WIP transactions.
Registration is usually completed with a sale transaction that includes 3-D Secure authentication. A zero-amount registration may be used only when it still completes the required authentication and token creation.
Registration Fields
For REST API registration, send a PaymentCardSaleTransaction with authenticationRequest and createToken.
Send the following fields in createToken:
| Attribute | Presence | Description |
|---|---|---|
value | Optional | Client-supplied payment token value. Only applicable for DataVault tokenization. |
reusable | Required for WIP | Must be true for WIP, because the token is used for subsequent payments. |
declineDuplicates | Optional | Set to false when duplicate payment information should not be declined. |
customWalletRegistration | Optional | Include this object when registering a Bancontact wallet. |
customWalletRegistration.walletType | Required when customWalletRegistration is sent | Must be BANCONTACT_WALLET. |
customWalletRegistration.authenticationMethods | Optional | Indicates how the cardholder was authenticated by the merchant wallet. If omitted, the configured account value is used. If no account value is configured, USERNAME_PASSWORD_PIN is applied by default. |
Supported authenticationMethods values:
USERNAME_PASSWORD_PINSECRET_KEY_HARDWARESECRET_KEY_SOFTWARELOCATION_BASED_AUTHENTICATIONENVIRONMENTAL_AUTHENTICATIONBEHAVIORAL_AUTHENTICATIONBIOMETRICS_AUTHENTICATIONOUT_OF_BAND_USER_AUTHENTICATION
Registration Example
{
"requestType": "PaymentCardSaleTransaction",
"storeId": "2338102919",
"merchantTransactionId": "wip-registration-1234",
"transactionAmount": {
"total": 26.00,
"currency": "EUR",
"components": {
"subtotal": 21.00,
"vatAmount": 2.00,
"shipping": 3.00
}
},
"paymentMethod": {
"paymentCard": {
"number": "606005XXXXXXX9064",
"expiryDate": {
"month": "01",
"year": "29"
}
}
},
"authenticationRequest": {
"authenticationType": "Secure3DAuthenticationRequest",
"termURL": "https://www.example.com/3ds/return",
"methodNotificationURL": "https://www.example.com/3ds/method-notification",
"challengeIndicator": "01",
"challengeWindowSize": "05"
},
"order": {
"orderId": "1234567890"
},
"transactionOrigin": "ECOM",
"createToken": {
"reusable": true,
"declineDuplicates": false,
"customWalletRegistration": {
"walletType": "BANCONTACT_WALLET",
"authenticationMethods": [
"USERNAME_PASSWORD_PIN"
]
}
}
}
The response contains the payment token that must be stored by the merchant and used for later WIP initiation.
WIP Initiation
After registration, initiate a WIP payment by submitting a primary transaction with:
requestTypeset toPaymentTokenSaleTransactionpaymentMethod.paymentToken.valueset to the token created during registrationstoredCredentialsset according to the WIP use case
Do not include authenticationRequest in the standard WIP initiation request. The initial WIP registration already captured the required authentication data. If the customer must authenticate again with 3-D Secure, handle that as a separate authenticated token payment flow rather than the standard WIP initiation flow.
Stored Credential Values
| Attribute | One-click payment | Recurring or installment payment |
|---|---|---|
storedCredentials.sequence | SUBSEQUENT | SUBSEQUENT |
storedCredentials.scheduled | false | true |
storedCredentials.initiator | CARDHOLDER | MERCHANT |
For subsequent payments, include a reference returned from the initial registration where available:
storedCredentials.referencedSchemeTransactionId, orstoredCredentials.referencedTransactionLinkIdentifier
One-Click WIP Example
{
"requestType": "PaymentTokenSaleTransaction",
"storeId": "2338102919",
"merchantTransactionId": "wip-oneclick-1234",
"transactionAmount": {
"total": 20.00,
"currency": "EUR"
},
"paymentMethod": {
"paymentToken": {
"value": "780A33E9-5CA1-4682-8B6B-6877EAC83326"
}
},
"transactionOrigin": "ECOM",
"storedCredentials": {
"sequence": "SUBSEQUENT",
"scheduled": false,
"initiator": "CARDHOLDER",
"referencedSchemeTransactionId": "019087868716215"
}
}
Recurring WIP Example
{
"requestType": "PaymentTokenSaleTransaction",
"storeId": "2338102919",
"merchantTransactionId": "wip-recurring-1234",
"transactionAmount": {
"total": 35.00,
"currency": "EUR"
},
"paymentMethod": {
"paymentToken": {
"value": "780A33E9-5CA1-4682-8B6B-6877EAC83326"
}
},
"transactionOrigin": "ECOM",
"storedCredentials": {
"sequence": "SUBSEQUENT",
"scheduled": true,
"initiator": "MERCHANT",
"referencedSchemeTransactionId": "019087868716215"
}
}