📄 Guide
Whether you are an exchange, a wallet or a platform, you can let the SMS, email or in-app notification channels you already run carry the online payment verification (3DS) of your cardholders, so that the last mile of delivering a passcode goes back to the channel you know best. As a licensed issuer, DCS handles the 3DS protocol exchange with the card network, generates and validates the passcode, and forwards whatever the verification needs to the partner securely. 3DS (3D Secure) is the security protocol for online payments: it adds one extra identity check on the cardholder during a transaction to reduce fraud losses. Under Partner-Managed, DCS offers three forms of 3DS verification, and the partner is free to choose how much of the cardholder experience it wants to own.The three modes at a glance
Which mode applies is set by your card program configuration. Configuring the 3DS mode: DCS. Building the integration: the partner. To change modes, contact the DCS team.
The overall 3DS forwarding flow
The diagram below shows the full round trip of a 3DS verification request between the parties: DCS receives the request from the card network and forwards it to the partner, the partner completes verification in whichever mode applies and returns the outcome back along the same path, and DCS then sends a webhook with the challenge status update. Who sends the passcode and who decides the outcome differ by mode, as detailed below.Mode 1: DCS sends the passcode
DCS sends the SMS or email passcode to the cardholder and validates it. In this mode the partner has nothing extra to build: DCS handles generating, sending and validating the passcode, and sends no 3DS webhook. Suitable for partners that have not built their own messaging channels yet and want the fastest possible launch.Mode 2: the partner sends the passcode (OTP_DELEGATE)
The partner delivers the passcode to the cardholder over its own channel and DCS validates it. In this mode the partner must expose a webhook to receive the OTP that DCS pushes, decrypt it and forward it to the user.Webhook fields (3DS challenge notification)
3DS webhooks carry the typeAUTHORISATION_3DS_CHALLENGE, and flowsType distinguishes the mode. In mode 2, flowsType=OTP_DELEGATE.
For webhook delivery, the outer envelope and signature verification in general, see Webhook events and schema.
Decrypting the OTP (partner)
otpPasscode, phoneNumber and email are encrypted in AES-GCM mode with the partner’s secretKey, and the webhook carries the iv alongside them. On receipt, the partner decrypts with secretKey and iv.
- Algorithm: AES-128-GCM (NoPadding)
- Key: the partner’s
secretKey, Base64-encoded - IV: the
ivfield of the webhook, Base64-encoded, 12 bytes - Auth tag: 128 bits, appended to the ciphertext
- Ciphertext format: Base64-encoded, decoding to
ciphertext + authTag
In mode 2 DCS still does the validating: the partner is only responsible for getting the decrypted passcode to the user and does not return a verification result. The final outcome arrives in a webhook carryingstatus=APPROVEDorstatus=REJECTED.
Mode 3: the partner verifies the user (OOB)
With OOB (out-of-band authentication), the partner takes the cardholder through authentication inside its own app or another channel, using biometrics, in-app confirmation or similar. The partner decides whether the check passed and returns the outcome to DCS. In this mode the webhook carriesflowsType=OOB and challengeMethodType=DELEGATE_SCA_V1, and does not include otpPasscode, phoneNumber, email or iv.
Returning the authentication result (partner)
Once the partner has decided, callPOST /open-api/3ds-challenge/v1/authenticate to return the outcome to DCS.
Minimal request:
Response: every
/open-api/ endpoint shares the same response envelope, { code, message, messageDetail, data }. On success, data echoes the current state of the challenge:
About the envelope: judge success or failure bycodealone (for example an echoedSYS_SUCCESS; for the error code conventions see Authorization declines and error codes).messageis a short developer-facing string, andmessageDetailis an optional display object (withmessage/title/type/icon/action/linkTitle/linkUrl) meant for front-end guidance only, never as the basis for deciding the outcome.
Integration notes
- Content-Type: set
Content-Type: application/jsonexplicitly on every/open-api/request. - Authentication: calling
/open-api/3ds-challenge/v1/authenticateand verifying the signature on inbound webhooks both follow the Authentication guide. - Webhook endpoint: modes 2 and 3 both require the partner to configure, in advance, a webhook address able to receive
AUTHORISATION_3DS_CHALLENGE. The partner supplies that address to DCS. - Mode 3 deadline: the result must be returned before the
expiryTimeissued by the provider; an overdue challenge is set toREJECTED. - When delegated OTP fails: in mode 2, DCS waits synchronously for the partner webhook for at most 7 seconds. On timeout, a failure response, a decryption failure or a delivery failure, there is no resend and no fallback to DCS sending the passcode: the current challenge goes straight to
REJECTED. The partner must decrypt, deliver and returnphoneNumberTailoremailsynchronously within those 7 seconds.

