Skip to main content
Use this page when a card payment returns three_ds_required.

What triggers 3DS

3D Secure is exposed through next_action on the transaction response.

Example transaction response

{
  "success": true,
  "requestId": "req_4004",
  "data": {
    "id": "tr_2001",
    "status": "three_ds_required",
    "next_action": {
      "type": "three_ds_challenge",
      "challenge_session_id": "3ds_1001",
      "client_secret": "sec_1001",
      "expires_at": "2026-03-16T14:20:00.000Z"
    }
  }
}

Handling rule

  • Let elements.submit(...) continue the flow automatically when supported.
  • If the browser session is interrupted, retrieve the transaction before asking the customer to retry.
  • Do not treat three_ds_required as a failed payment.

Why this matters

A customer may complete the challenge after your first browser callback. Webhooks and reconciliation keep checkout, fulfillment, and support workflows aligned with the actual final state.