Skip to main content
Settlement trigger used by the customer checkout page. Calling it attempts to settle a payment that is currently in a payable state. The route holds the real settlement API key server-side — no secret is ever exposed to the browser — and forwards the request to the internal settlement engine using the caller’s reference. This endpoint is public — no authentication is required — and is rate-limited to 30 requests per minute under the payments bucket. Only payments in PENDING or SETTLEMENT_ERROR status can be triggered this way.

Endpoint

Request

Headers

Body Parameters

string
required
The payment reference to settle (e.g. arc_ref_k7x2m9lp4d8f1q2z). The payment must exist and be in PENDING or SETTLEMENT_ERROR status.

Response

The response mirrors what the internal settlement engine returns. The success shape depends on the settlement path taken.
boolean
true when the payment settled successfully.
string
Which settlement path ran:
  • "ONCHAIN_SCA_TRANSFER" — USDC moved from the payer’s Circle wallet directly to the merchant on Arc.
  • "CCTP_BRIDGE" — USDC was settled cross-chain via CCTP.
object
The updated payment record from the ledger after settlement.
string
The Arc Mainnet transaction hash for the on-chain transfer or redemption.
string
Present only for "ONCHAIN_SCA_TRANSFER" settlements — the Circle developer-controlled wallet transaction ID that performed the transfer.

Examples

Success Response — On-chain SCA Transfer

Success Response — CCTP Bridge

Error Responses

Notes

Only payments in PENDING or SETTLEMENT_ERROR status are accepted. A payment that is already processing, settled, or failed is rejected with HTTP 409 and its current status is echoed back in the response body.
This route never exposes the settlement API key to the browser — it is held server-side and attached only to the internal call. Treat this endpoint as a browser-safe trigger; all ownership, expiry, and idempotency checks are enforced by the settlement engine.
If a settlement returns an error, the payment is marked SETTLEMENT_ERROR and remains payable — retry the same POST /api/checkout/pay call with the same reference to resume it.