---
title: "Resume payment after merchant 3DS"
method: POST
path: "/v1/gateway/payments/{pageId}/authentications"
tags: ["Direct Payment"]
---

# Resume payment after merchant 3DS

`POST /v1/gateway/payments/{pageId}/authentications`

## Request

- Base URL: `https://api.breeze.cash`
- URL: `https://api.breeze.cash/v1/gateway/payments/{pageId}/authentications`
- Auth: HTTP basic
- TypeScript: <https://skmtc.dev/breeze/apis/breeze-api/docs/v1/gateway/payments/:pageId/authentications/post.ts> (a function with typed inputs; its response is checked against the schema)

Resume a payment that returned `status: ACTION_REQUIRED` with `nextAction.type: AUTHENTICATION_REQUIRED`. Submit the 3DS results obtained from your merchant-provided 3DS provider to complete authorization.

> **Base URL** — call this on the default `api.breeze.cash` host, **not** the `secure.breeze.cash` / `secure-sandbox.breeze.cash` host used to create the payment via `POST /v1/gateway/payments`. Calling the secure host returns `ROUTE_NOT_FOUND`.

## Path parameters

- `pageId` string, required

## Request body

- ResumeGatewayPaymentAuthenticationRequest: Merchant-provided 3DS authentication results.
  - `threeDs` object, required
    - `eci` string, required
    - `authenticationValue` string, required
    - `dsTransactionId` string, required
    - `version` string, required

## Response `200`

Success

- object: The updated payment
  - `status` 'SUCCEEDED', required
  - `data` ResumeGatewayPaymentAuthenticationResponse, required
    - `pageId` string, required: Payin identifier (`page_*`).
    - `paymentId` string, required: Payment attempt identifier (`py_*`).
    - `status` 'OPEN' | 'EXPIRED' | 'FIAT_CONFIRMED' | 'AUTHORIZING' | 'PENDING_CAPTURE' | 'CONFIRMING' | 'CONFIRMED' | 'REFUNDED' | 'REFUND_PROCESSING' | 'SETTLING' | 'SETTLED' | 'FAILED' | 'SETTLE_FAILED' | 'SUBSCRIPTION_CANCELLED' | 'MANUAL_INSPECTION_REQUIRED' | 'CANCELLED' | 'ACTION_REQUIRED', required: Current payment status.
    - `amount` number, required: Echoed from the request — minor units.
    - `currency` string, required: Echoed from the request — ISO 4217 alpha-3.
    - `description` string: Echoed from the request.
    - `createdAt` number, required: Unix timestamp in milliseconds when the payment was created.
    - `updatedAt` number: Unix timestamp in milliseconds when the payment was last updated. Use this field when polling to detect state changes.
    - `customerId` string: Breeze customer identifier (`cus_*`) associated with the payment, when one is resolved.
    - `savedPaymentMethodId` string: Saved payment method identifier when `storeFutureUsage` was set on the request.
    - `schemeTransactionId` string: Scheme transaction ID returned by the card network. Merchants must persist this to chain MIT transactions.
    - `nextAction` object: Action the merchant must take when `status` is `ACTION_REQUIRED`.
      - `type` 'REDIRECT_TO_URL' | 'AUTHENTICATION_REQUIRED', required: Action the merchant must take to progress the payment.
      - `redirectUrl` string: Redirect URL — present when `type` is `REDIRECT_TO_URL`.
    - `metadata` object: Echoed from the request.
    - `taxDetails` object: Merchant-supplied tax when provided on create — amount, mode, and the resolved jurisdiction nested under `location` (BREEZ-11376).
      - `amount` number, required: Merchant-calculated tax amount in minor units. Included in `request.amount`; use `0` when no tax is due. `0 ≤ amount < request.amount`.
      - `mode` 'merchant_calculated', required
      - `location` object, required: Tax jurisdiction Breeze persists and remits on (BREEZ-11376). Country is always required; postalCode is required for US and CA. The merchant must assert the jurisdiction explicitly; the customer billing address is NOT used as a fallback.
        - `country` string, required: ISO 3166-1 alpha-2 country code.
        - `postalCode` string: ZIP / postal code used for tax jurisdiction resolution. Required for US and CA.
    - `errorCode` string: Merchant-facing result code surfaced when the payment failed.
    - `failureReason` string: Human-readable failure reason corresponding to `errorCode`.
    - `adviceCode` string: Retry-advice hint corresponding to `errorCode` (e.g. `try_again_later`, `try_again_later_delayed`, `do_not_try_again`, `confirm_card_data`). Omitted when no advice is defined.

## Other responses

- `400`: Bad request
- `401`: Unauthorized

## Changes

- **2026-11-03** `4af083d182a6`: 1 breaking, 1 info
  - the response property `data/taxDetails/location/postalCode` became optional for the status `200`
  - added the optional property `data/description` to the response with the `200` status

[Operation history](https://skmtc.dev/breeze/apis/breeze-api/changes/v1/gateway/payments/:pageId/authentications/post.md)

---

[API](https://skmtc.dev/breeze/apis/breeze-api.md) - [All operations](https://skmtc.dev/breeze/apis/breeze-api/llms.txt) - [OpenAPI document](https://skmtc.dev/breeze/apis/breeze-api/revisions/4af083d182a6?raw)
