Skip to main content

📄 Guide

Organization onboarding, employee creation, card issuing, transactions and deposits are all asynchronous: the platform pushes the final state to the callback URL you registered as soon as the event happens, so you never have to poll. Your receiver only needs one endpoint — every event shares the same envelope, so you read webhookType and then parse data. The full event list and each event’s data structure are in Events and data structures.

1. Registering the callback URL

The callback URL is configured for you by platform operations; there is no self-service endpoint, so contact your DCS representative to change it. Sandbox and production are configured separately and must both be registered.
With no callback URL configured, any path that needs your participation fails outright — a 3DS challenge cannot be forwarded to you and the transaction is declined. Configure the callback URL before going live with OOB or with otpSendMode=ENTERPRISE.

Requirements for the callback URL

2. Verifying the signature (HMAC-SHA256)

Every delivery carries X-Signature:
SK is the webhook signing key issued to you specifically, isolated per partner. It is not the same key you use for API request signing.

Headers

The event type, timestamp and IDs all live in the body — never in headers.
You cannot verify against the raw bytes. sortedCompactJson means: sort the fields at every level of the payload by field name, then serialise compactly with no whitespace. You must re-serialise the same way before comparing, otherwise the signature will never match.

Verification example

Discard and alert on a failed verification; never process it as business data.

3. Delivery, retries and ordering

The retry window is only about 3 minutes. A receiver that is down longer than that will miss events, so you must reconcile through the query endpoints — do not rely on webhooks alone.

Next steps