Integration GuideAPI Reference
Integration Guide
❗️

This integration method is DEPRECATED and should not be used for new integrations

Please follow the new simplified flow described on the page where we simplified the 3DS processing and less steps involved


Overview

The BankCardKZ payment method uses 3DS version 2 (3DSv2) for cardholder authentication.

To help you test different authentication and authorisation flows in the sandbox, we’ve introduced the concept of a “written destiny” for each transaction.

A written destiny lets you define exactly how a transaction will behave at each stage of the 3DSv2 flow - from intent creation to capture - without changing any other parameters.

This approach simplifies automated testing and enables deterministic emulation of success, failure, and edge-case scenarios.


Reference Diagram

The entire process is illustrated in the flow diagram below.

As you can see, there are several possible paths a transaction can follow - depending on iframe requirements, challenge outcomes, authorisation results, and post-authorisation actions.

Download the image in high resolution


Defining the Transaction Destiny

The destiny is set via the description field in the Intent creation request body.

⚠️

Important:

There are two description fields in the API structure - one in the intent, and another in payments[].description. Use only the intent-level field. The one inside payments[] will be ignored for testing purposes.

  • Each destiny consists of a chain of keywords corresponding to specific flow outcomes.
  • These keywords are grouped by flow sections, and only one keyword can be chosen per section.
  • Join your selected keywords with the | (pipe) symbol to form a single string.
  • If the platform detects that the actual transaction behaviour does not match the destiny you provided, it will return an ERROR and stop processing.

Example

For example, to simulate this sequence:

StepKeyword
3DS challengeChallenge-Success
Authorisation is successfulAuthSuccess
A capture request is sentInitCapture
The payment transaction is captured successfullyCapture-Success

You should define the destiny as follows: "description": "Challenge-Success|AuthSuccess|InnitCapture|Capture-Success"


{
  "clientReferenceId": "12355884566454255875454157",
  "description": "Iframe-Success|Challenge-Success|AuthSuccess|InitCapture|Capture-Success",

    "payments": [
        {
            "payer": {
                "firstname": "Megan",
                "lastname": "Fox",
                "phone": "+6228128011",
                "email": "[email protected]",
                "countryIsoCode": "KZ",
                "locale": "de-DE",
                "taxIdentification": "7852",
                "merchantPayerReference": "12357"
            },
            "paymentInstrument": {
                "paymentMethodName": "BankCardKZ",
                "incomingDetails": {
                    "number": "4111111111111111",
                    "cvv": "123",
                    "holderName": "Will Rush",
                    "expiryMonth": "12",
                    "expiryYear": "2035"
                }
            },
            "submittedAmount": {
                "value": 200.1,
                "currency": "KZT"
            },
            "authCurrencyCode": "KZT",
            "threeDSContext": {
                "merchantLocalDateTime": "01.02.2012 18:34:58",
                "browserAcceptHeader": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
                "browserIp": "147.30.44.72",
                "browserLanguage": "ru",
                "browserUserAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36",
                "browserJavaEnabled": false,
                "browserColorDepth": "24",
                "browserScreenHeight": "864",
                "browserScreenWidth": "1536",
                "browserTZ": "-360",
                "browserJsEnabled": false,
                "notificationUrl": "https://secure.examplepay.com/3ds/complete",
                "requestorUrl": "https://www.merchantshop.com"
            },
            "webhookUrl": "https://google.requestcatcher.com/"
        }
    ]
}

List of Supported Cases

Download the image in high resolution


List of Cases in text

CaseDescription
CASE1Frictionless|AuthSuccess|InitCapture|Capture-Success
CASE2Frictionless|AuthSuccess|InitCapture|Capture-Error
CASE3Frictionless|AuthSuccess|InitCancellation|Cancellation-Success
CASE4Frictionless|AuthSuccess|InitCancellation|Cancellation-Error
CASE5Frictionless|AuthDecline
CASE6Challenge|AuthSuccess|InitCapture|Capture-Success
CASE7Challenge|AuthSuccess|InitCapture|Capture-Error
CASE8Challenge|AuthSuccess|InitCancellation|Cancellation-Success
CASE9Challenge|AuthSuccess|InitCancellation|Cancellation-Error
CASE10Challenge|AuthDecline
CASE11Challenge|AuthExpired