Skip to main content
Card charges let you collect card details server-side and process the payment through the API. Because card authentication varies by issuer and market, a single charge can require one or more follow-up steps before it settles.
Handling raw card numbers puts your systems in PCI DSS scope. Confirm your compliance obligations before you collect card details server-side, and never log or persist a full PAN or CVV.

Happy path

1

Initiate the charge

Send card details, amount, currency, and customer information.
2

Handle any required step

The transaction may ask for a PIN, OTP, address, or a 3DS redirect.
3

Wait for the final webhook

A successful or failed transaction_updated event is the real outcome.
4

Fulfil

Only once the status is successful.

1. Initiate the charge

Send a request to Card Charge.
Response
Card charges are processed asynchronously. Track the outcome with the transactionId via Get Transaction, or by listening for webhooks.
Supplying device3DSInfo and ipAddress gives the issuer more signal for risk assessment, which can reduce how often a customer is challenged with 3DS.

2. Identify the required step

Both the transaction status response and the webhook carry a stepRequired field when the charge is waiting on the customer.

3. Handle webhooks

The same stepRequired values arrive as transaction_updated events.

4. Authorise the charge

For pin, otp, and address_verification, collect the value from the customer and submit it to Authorise Charge.
Authorising one step can surface another. Always inspect stepData in the response — a successful PIN submission may still be followed by a 3DS redirect. Loop until no further step is returned, then wait for the final webhook.

5. Handle 3DS redirects

When stepRequired is redirect:
1

Extract the URL

Take redirectUrl from the webhook, the transaction status, or the stepData of an authorise response.
2

Send the customer

They land on their bank’s secure authentication page.
3

Wait for the final webhook

After the customer completes or abandons authentication, the outcome arrives as transaction_updated with successful or failed.
Do not poll aggressively during a redirect flow. The final outcome is delivered by webhook once the bank responds.