3DS v2: Workflow descirption
This page describes how to integrate 3‑D Secure v2 (3DS2) with 8B PSP. It explains how 3DS v2 differs from v1, outlines the full sequence model we use, and lists the API calls, request/response fields, and webhook behaviour you need to implement.
3DS v1 vs 3DS v2 – what’s different
- Frictionless-first: 3DS2 allows issuers to authenticate silently when they have sufficient data. The cardholder is challenged only when necessary.
- Richer data model: 3DS2 relies on device/browser metadata and risk indicators supplied by the merchant to improve approval rates.
- Modern UX: In 3DS2, the challenge renders in an in‑page iframe or an app view rather than legacy page redirects.
- Versioning: 8B supports 3DS 2.x. The protocol version is returned to you together with 3DS method parameters when applicable.
Practical outcome: you must be ready to collect browser metadata and, when instructed, post a hidden iframe to the issuer’s 3DS Method URL before starting authentication.
Roles & Terminology
Term | Description |
---|---|
Frictionless Flow (FF) | Issuer authenticates without a visible challenge |
Challenge Flow (CF) | Issuer requires a cardholder challenge (OTP, app confirm, etc.). |
Method URL / 3DS Method | A lightweight background call in a hidden iframe that helps the issuer collect device data. |
cReq / cRes: | Challenge request/response payloads exchanged with the issuer’s ACS during CF. |
End‑to‑end Sequence Overview

Download in high resolution
Statuses
All challenge-related actions will be carried out during the "AUTHORIZATION_REQUESTED" status.

Magic numbers
TBC
Steps Description
Pre-Authorization Stage

Step | Name | Extra Details |
---|---|---|
[1.1] | Initiate payment - input Bank Card Details | -- |
[1.2] | Submit the order and card details | -- |
[1.3] | Create a New Intent with payment |
|
[1.4] | Create new Intent Create separate payments |
|
[1.5] | Verify whether collecting data via a hidden iframe is necessary |
|
[1.6] | Return the decision about gathering the data via the hidden iframe |
|
[1.7] | [NO IFRAME] Return the response on 1.3 step request without/without the hidden iframe parameters |
|
[1.8] | Transfer the hidden iframe details to the store |
|
[1.9] | Create a hidden iframe. Gather the required metadata |
|
[1.10] | Send a POST request to MethodUrl with the "threeDsMethodData": "base64-encoded-string" |
|
[1.11] | Record the result of result of the iframe loading and gather the metadata |
|
[1.12] | Return the result of the iframe loading and the gathered metadata |
|
[1.13] | Return the result of the iframe loading and the gathered metadata |
|
Authorization Stage

Step | Name | Extra Details |
---|---|---|
[FF:2.1] | Initiate the payment authorisation |
|
[FF:2.2] | The issuer has enough payer's data and they do not need to challenge them. The issuer authorizes the transaction |
|
[FF:2.3] | Return the latest 8B Payment Authorisation Status via Webhook |
|
CHALLENGE FLOW | ||
[CF:2.1] | Initiate the payment authorisation | We initiate the funds authorization |
[CF:2.2] | The issuer doesn't have enough payer's data and they need to challenge them. Return the 3DS form data (including cReq) |
|
[CF:2.3] | Transfer 3DS information via Webhook (including cReq) |
|
[CF:2.4] | Transfer 3DS information (including cReq) |
|
[CF:2.5] | Render an iframe and auto-POST
|
|
[CF:2.6] | Conduct the Authentication |
|
[CF:2.7] | Submit the Authentication form with the user's data |
|
[CF:2.8] | Return of the cRes |
|
[CF:2.9] | Resend the cRes to 8B |
|
[CF:2.10] | Resend the cRes to 8B
|
|
[CF:2.11] | Complete 3DS providing the completion confirmation (including cRes) |
|
[CF:2.12] | Return the 3DS completeness result and the authorization status |
|
[CF:2.13] | Return the latest 8B Payment Authorisation Status via Webhook |
|
Updated 4 days ago