Skip to main content
There are two separate things happening after a payment: the customer’s browser comes back to you, and your server finds out whether the money actually moved. Only the second one is trustworthy.

The callback flow

When you create an order, you supply a redirect URL:
After the customer completes 3-D Secure (or abandons it), they are sent back to that URL.
A customer arriving at your callback URL proves nothing. They may have closed the authentication window, hit back, or reached it after a decline. Always verify server-side before you fulfil anything.

There are no webhooks

The Checkout API does not push payment notifications. Status is poll-only:
Because there is no webhook, a customer who closes their browser mid-payment will still complete the payment without your callback ever firing. Reconcile pending orders from your backend on a schedule — do not rely on the customer coming back.

Verifying a payment

1

Read the reference

Use the order reference you generated at create time. Do not trust a reference supplied in the callback query string without checking it belongs to one of your orders.
2

Call verify from your server

With your secret key. This endpoint takes plain JSON — no encryption.
3

Check status and amount

Confirm the status is successful and the amount matches what you expected. An amount check protects you if a reference is ever replayed or tampered with.
4

Fulfil idempotently

Record that you have fulfilled this reference, and make repeat verifications no-ops. Polling means you will see the same successful status more than once.

Example

Your secret key must never reach the browser. Keep verification on the server, and keep the key in an environment variable rather than in source control.

Threading the callback through the redirect

If you are using the hosted redirect wrapper, pass the customer’s destination on the pay-order request so the wrapper knows where to send them once payment completes:
The header is consumed by Reeple and never forwarded onward. It must be an absolute http(s) URL; anything else is ignored.

Next steps

Verify an order

The endpoint reference, with the full response shape.

Order lifecycle

Every status value, and how long to keep polling.