3DS (3D Secure)

UQPAY supports dynamic 3D Secure (3DS) behavior to help merchants balance fraud prevention and user experience. Merchants can configure whether to allow 3DS challenge flows or enforce a frictionless experience through a dedicated risk control setting.

Supported configuration options may differ depending on the card BIN.

For more information, please refer to Supported BINs for Risk Control Configurations


Overview

By default, UQPAY handles 3DS decisions based on real-time risk evaluations.

However, merchants have the option to override this behavior by explicitly enabling or bypassing the challenge step during 3DS authentication.

This level of control is particularly useful for optimizing user experience in low-risk scenario.

3DS Flowchart


graph TD
    A[Start: 3DS Authentication Request] --> B{Is card BIN supported 3DS?}
    B -->|No| C[Proceed with Standard Transaction Processing]
    B -->|Yes| D{Is allow_3ds_transactions set?}
    D -->|Not Set, Card Creation: Default 'Y'| E[UQPAY Risk Engine Evaluation]
    D -->|"'allow_3ds_transactions' flag is set to 'Y'"| E
    D -->|"'allow_3ds_transactions' flag is set to 'N'<br> (bypass risk evaluation)"| F[Frictionless Flow]
    E --> G{Risk Level Assessment}
    G -->|Low Risk| F
    G -->|High Risk| H[Trigger 3DS Challenge Flow]
    F --> I[Transaction Proceed]
    H --> J[Transaction Requires Verification]
    J --> init[User identity verification step to ensure the legitimacy of the cardholder]
    init --> |OTP Delivery| veri{If user passed the 3DS challenge?}
    veri --> |User passed 3DS Challenge| I
    

Enabling or Disabling 3DS Challenge

Merchants can control whether a card participates in 3DS challenge flows using the allow_3ds_transactions flag under the risk_controls object. This flag accepts two values: Y or N.

When set to Y, UQPAY will evaluate each 3DS authentication request using its risk engine. A challenge flow may be triggered based on the assessed risk level.

When set to N, the transaction will bypass risk evaluation and proceed directly through a frictionless flow, even if a 3DS request is triggered.

If the allow_3ds_transactions field is omitted during card creation, it defaults to Y, enabling challenge flows as determined by the risk engine. However, when updating a card, this field has no default value. If it is not provided, the existing setting remains unchanged.

The allow_3ds_transactions flag can be set during both card creation and card update processes.

Note: This setting is only applicable to cards with the BIN 49372410.

Example during card creation

{
  "card_limit": 2100.02,
  "card_currency": "USD",
  "cardholder_id": "7c4ff2cd-1bf6-4aaa-bf16-266771425011",
  "card_product_id": "7c4ff2cd-1bf6-4aaa-bf16-266771425011",
  "spending_controls": [
    {
      "amount": 100.03,
      "interval": "PER_TRANSACTION"
    }
  ],
  "risk_controls": {
    "allow_3ds_transactions": "N"
  }
}

Example during card update

{
    "risk_controls": {
        "allow_3ds_transactions": "N"
    }
}

Upon successful activation of a physical card, the allow_3ds_transactions flag is automatically enabled (Y).

Note: This setting affects only 3DS behavior. It does not disable other fraud checks.

Example Use Cases

ScenarioConfigurationBehavior
Standard transaction with risk-based decisioningallow_3ds_transactions = YMay result in either 3DS challenge or frictionless flow, based on risk evaluation
Trusted customer with low transaction riskallow_3ds_transactions = NAlways proceeds via frictionless flow, challenge is skipped

3DS Challenge Behavior

When a 3DS challenge is triggered during a transaction, UQPAY initiates a user identity verification step to ensure the legitimacy of the cardholder. The following behavior applies:

OTP Delivery

A one-time password (OTP) will be sent to the cardholder's registered email address. The user must enter the correct OTP on the authentication page to complete the 3DS verification. This mechanism helps reduce fraud while maintaining a smooth user experience.

Note: Ensure that the cardholder's email is accurately provided during card issuance or update. OTPs are typically valid for few minutes.

Webhook Notification

UQPAY provides a webhook event to notify the merchant when an OTP is generated.

Notification example

{
    "version": "V1.6.0", 
    "event_name": "ISSUING", 
    "event_type": "card.3ds.otp", 
    "event_id": "26de83a5-cea5-4f84-ab11-48813025e40a", 
    "source_id": "12ea604d-5899-43d6-8c2d-618c9ce8eae3", 
    "data": {
        "reference_code": "4868798", 
        "otp": "12344444", 
        "customer_id": "67f006f4-d593-49f4-be0e-f1f894e8933b", 
        "card_id": "1d749d10-511e-469f-9a83-0560a602ac37", 
        "card_number": "1234********3381", 
        "transaction_currency": "USD", 
        "transaction_amount": "100", 
        "merchant_name": "Example Merchant"
    }
}



Related API links: