Two Pause States
A payment request can pause at two points during the 3DS flow. Both are indicated by thestatus field in the response.
pending_ddc — Device Data Collection
Device Data Collection (DDC) gathers browser fingerprint data that some processors (such as Cybersource) use to assess transaction risk before initiating the 3DS challenge. If your response has status: "pending_ddc", resolve it by retrying the original purchase or authorization request with the threeDsSetup.sessionId field populated.
pending_ddc is not resolved by POST /payment/resume. Retry the original payment endpoint (/purchase or /authorization) with the session ID.pending_3ds — Challenge Required
If the issuer requires the cardholder to authenticate, the response has status: "pending_3ds" and includes an actionRequired object containing a challengeUrl. Direct the shopper to that URL to complete the challenge (typically a one-time password or biometric from their bank app). Once the shopper completes the challenge, call POST /payment/resume to continue.
Resuming After a 3DS Challenge
CallPOST /payment/resume with the sessionId from the paused response. No API key is required — the sessionId itself acts as the bearer credential for this call. The session expires after 15 minutes, so the shopper must complete the challenge within that window.
PaymentResponse with status: "captured" (for a purchase) or status: "authorized" (for an authorization).
Using the JS SDK for 3DS
If you are collecting card data with the Therius JS SDK, you do not need to handle thepending_3ds pause manually. Call sdk.handleAction(result.actionRequired) and the SDK manages the challenge iframe or popup automatically. It resolves its promise with the final PaymentResponse once the shopper completes authentication.
pending_3ds in your frontend code.
Passing External 3DS Data
If you run 3DS authentication outside of Therius — through your own Merchant Plug-In (MPI) — pass the authentication result directly in the payment request using thethreedsData fields. Therius will use this data to bypass its own 3DS flow and submit the pre-authenticated transaction to the acquirer.
Populate these fields only if your external MPI completed authentication. Do not send partial data — an incomplete
threedsData object may cause the transaction to be declined by the acquirer.
