Skip to main content
Languages: every operation supports cURL, Node.js (TypeScript), Python, Go, Ruby, and PHP. The first 15 operations on this page show all six languages; the remaining 37 show cURL and TypeScript — the two most-used.

Commerce API

Commerce endpoints exposed by the Devotel CPaaS API Base path: /api/v1/commerce Endpoint count: 52

title: “Errors worth branching on” description: “Per-endpoint failure templates matching the envelope — what actually fires, what to retry, what to surface to the operator.”

Errors worth branching on

These five failures cover the charge create (POST /api/v1/commerce/charges), which one-tap checkout fires per order. Each block below is a full { error, meta } envelope as the API returns it, and the matrix at the bottom answers retry vs surface for the same five classes. For the platform-wide decision table these branches plug into, see the error handling guide.

401 — Unauthorized

A 401 on this page is the bearer key failing before the route ran — it never means the resource is wrong. Rotate the key or re-mint the scoped token; retrying the same request changes nothing.

403 — Forbidden

A 403 means the key authenticated but the operation is gated by scope — check the key’s scopes on the developer page; a 403 is never a data-not-found shape.

422 — Schema

A 422 means the payload did not match the request schema — branch on error.details.field and resend with the full mandate id instead of blind-retrying the same body.

429 — Rate

The Retry-After header and error.details.retry_after are both set on every 429 — resend the SAME request after the lower of the two.

409 — Conflict

Treat as idempotent-replay protection — return the original receipt instead of re-charging.

60-second retry matrix


Read the stored public ACP storefront config

GET /api/v1/commerce/agentic/storefront
Read this tenant’s STORED, agent-facing ACP storefront config (merchant name, currency, categories, catalog, and the publish switch) that the public edge serves at /public/commerce/acp/:storefrontId/..., plus the public storefront URL a merchant hands to a shopping agent. config is null when no storefront has been configured.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.

Issue an agent payment mandate

POST /api/v1/commerce/agent-mandate
Issue a fresh scoped, revocable, spend-capped payment mandate for an agent.
string
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the Idempotency-Replay: true response header.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.
string
required
—
string
required
—
string
required
—
number
required
—
number
required
—
string
required
—
array | null
—
array | null
—
integer | null
—

Dry-run authorize a charge against a mandate

POST /api/v1/commerce/agent-mandate/authorize
Dry-run a charge against a mandate and return the decision WITHOUT advancing spend.
string
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the Idempotency-Replay: true response header.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.
object
required
Serializable AP2-style payment mandate snapshot. Carries a SHA-256 consent digest re-verified before every spend.
object
required
—

Authorize and commit a charge

POST /api/v1/commerce/agent-mandate/charge
Authorize AND commit a charge, returning the advanced mandate plus the authorization. A charge outside the mandate is rejected with VALIDATION_ERROR.
string
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the Idempotency-Replay: true response header.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.
object
required
Serializable AP2-style payment mandate snapshot. Carries a SHA-256 consent digest re-verified before every spend.
object
required
—

Mint a card-network agent payment token or trusted-agent credential

POST /api/v1/commerce/agent-mandate/network-token
Present an authorized mandate charge to a card network’s agentic-payment program (Mastercard Agent Pay pilot, Visa Trusted Agent Protocol) and mint a network-issued, scoped agent payment token — or, for Visa TAP, a cryptographic trusted-agent credential the agent attaches to its merchant request — IN PLACE OF a hosted PaymentRequest. Returns 503 NETWORK_TOKEN_NOT_CONFIGURED when the requested provider’s program is not provisioned for this deployment — fall back to /agent-mandate/charge + the hosted-link rail.
string
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the Idempotency-Replay: true response header.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.
object
required
Serializable AP2-style payment mandate snapshot. Carries a SHA-256 consent digest re-verified before every spend.
object
required
—
string (enum: mastercard_agent_pay|visa_trusted_agent_protocol)
—

Revoke a mandate

POST /api/v1/commerce/agent-mandate/revoke
Withdraw consent, moving the mandate to the terminal revoked status. Re-revoking is a VALIDATION_ERROR.
string
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the Idempotency-Replay: true response header.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.
object
required
Serializable AP2-style payment mandate snapshot. Carries a SHA-256 consent digest re-verified before every spend.

Verify mandate integrity

POST /api/v1/commerce/agent-mandate/verify
Recompute the consent digest and report whether the mandate’s scope is intact (tamper-evidence for auditors).
string
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the Idempotency-Replay: true response header.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.
object
required
Serializable AP2-style payment mandate snapshot. Carries a SHA-256 consent digest re-verified before every spend.

Open an ACP checkout session

POST /api/v1/commerce/agentic/checkout
Open an ACP checkout session, pricing the agent’s requested items SERVER-SIDE against the merchant catalog. Unknown / out-of-stock / wrong-currency lines are surfaced as blocking messages and keep the session not_ready_for_payment.
string
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the Idempotency-Replay: true response header.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.
string
required
—
string
required
—
object[]
required
—
object[]
required
—
string | null
—
string | null
—

Complete an ACP checkout under a signed mandate

POST /api/v1/commerce/agentic/checkout/complete
Complete a ready_for_payment session under an AP2 payment mandate. The session is re-priced SERVER-SIDE against the supplied catalog first (the incoming total is never trusted), then that re-priced total is charged against the mandate (consent digest + spend caps re-verified); a charge outside the mandate is rejected with VALIDATION_ERROR so an agent can never spend past signed consent. Mandate-only by default — no money moves and nothing is sent (invariant #45). When X402_ENABLED=1, the re-priced, mandate-authorized total is ALSO settled on-chain in USDC via the P1 x402 facilitator (requires an X-PAYMENT header — a missing/invalid header returns a 402 x402 challenge); the mandate spend is committed / the session moved to completed ONLY after settlement succeeds, otherwise the completion is rejected with a clean 402 SETTLEMENT_FAILED and the mandate is left untouched.
string
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the Idempotency-Replay: true response header.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.
object
required
Serializable ACP checkout-session snapshot. Totals are re-derived server-side from the catalog and never trusted from the wire. Amounts are in MAJOR currency units.
object[]
required
—
object
required
Serializable AP2-style payment mandate snapshot. Carries a SHA-256 consent digest re-verified before every spend.

Re-price an ACP checkout session

POST /api/v1/commerce/agentic/checkout/update
Re-price a checkout session for a new requested-item set (replace-items semantics) and re-derive its status. A completed / canceled session is immutable and rejected with VALIDATION_ERROR.
string
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the Idempotency-Replay: true response header.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.
object
required
Serializable ACP checkout-session snapshot. Totals are re-derived server-side from the catalog and never trusted from the wire. Amounts are in MAJOR currency units.
object[]
required
—
object[]
required
—

Build the ACP product feed

POST /api/v1/commerce/agentic/feed
Normalize a merchant catalog into the ACP product feed a shopping agent browses to discover what’s for sale (prices in MAJOR currency units; availability defaults to in_stock).
string
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the Idempotency-Replay: true response header.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.
object[]
required
—

Build the ACP storefront manifest

POST /api/v1/commerce/agentic/manifest
Build the Agentic Commerce Protocol discovery manifest a merchant publishes for third-party AI shopping agents: protocol version, capabilities, accepted payment methods, and endpoint paths.
string
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the Idempotency-Replay: true response header.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.
string
required
—
string
required
—
string
required
https origin the merchant’s ACP endpoints are served from.
string
required
—
array | null
—

Resolve an in-thread Apple Messages for Business checkout

POST /api/v1/commerce/amb-checkout
Resolve native Apple Pay (where the tenant’s AMB agent is capability-enabled) or the hosted pay link, both anchored to one PaymentRequest snapshot.
string
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the Idempotency-Replay: true response header.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.
object
required
—
object
required
—

Create cart

POST /api/v1/commerce/cart
Create a fresh, empty omnichannel cart in the browsing state.
string
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the Idempotency-Replay: true response header.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.
string
required
Caller-supplied opaque cart id, stable across channels.

Check whether the cart is abandoned

POST /api/v1/commerce/cart/abandonment-check
True when the cart has gone quiet past idleThresholdMs while holding items in a recoverable, pre-payment state.
string
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the Idempotency-Replay: true response header.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.
object
required
Serializable omnichannel cart snapshot. Derived fields (subtotal, itemCount, …) are re-computed server-side and never trusted.
integer
Idle threshold in ms. Defaults to 30 minutes; capped at 30 days.

Select checkout-channel preference order

POST /api/v1/commerce/cart/checkout-channel
Ordered checkout-channel preference for the cart, restricted to the tenant’s capable channels. An empty array signals fall back to a hosted payment link.
string
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the Idempotency-Replay: true response header.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.
object
required
Serializable omnichannel cart snapshot. Derived fields (subtotal, itemCount, …) are re-computed server-side and never trusted.
string (enum: whatsapp|rcs|amb|instagram)[]
required
—

Merge a channel contribution into the cart

POST /api/v1/commerce/cart/merge
Fold a per-channel order contribution into the cart and re-derive totals server-side.
string
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the Idempotency-Replay: true response header.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.
object
required
Serializable omnichannel cart snapshot. Derived fields (subtotal, itemCount, …) are re-computed server-side and never trusted.
object
required
—
string (enum: whatsapp|rcs|amb|instagram)
required
Conversational-commerce channel a cart contribution came from.

Reconcile a cross-channel payment against the cart

POST /api/v1/commerce/cart/reconcile-payment
Match a payment captured on ANY channel against the cart subtotal (totals re-derived server-side first).
string
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the Idempotency-Replay: true response header.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.
object
required
Serializable omnichannel cart snapshot. Derived fields (subtotal, itemCount, …) are re-computed server-side and never trusted.
object
required
—

Advance the checkout state machine

POST /api/v1/commerce/cart/transition
Apply one checkout event to the cart. An illegal transition is rejected with VALIDATION_ERROR.
string
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the Idempotency-Replay: true response header.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.
object
required
Serializable omnichannel cart snapshot. Derived fields (subtotal, itemCount, …) are re-computed server-side and never trusted.
string (enum: ADD_ITEM|REMOVE_ITEM|INITIATE_CHECKOUT|REQUEST_PAYMENT|PAYMENT_CONFIRMED|FULFILL|…)
required
—

Initiate a DCB charge

POST /api/v1/commerce/dcb/charge
Validate a charge against the merchant’s coverage + per-transaction cap and return an initiated charge snapshot. The operator dip is submitted separately via the carrier-billing route.
string
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the Idempotency-Replay: true response header.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.
object
required
Serializable DCB merchant config — settlement currency, per-transaction cap, and tenant-level operator coverage map.
object
required
—

Capture a DCB charge

POST /api/v1/commerce/dcb/charge/capture
Mark an initiated charge captured once the operator confirms billing. capturedAmount defaults to the initiated amount and may not exceed it (partial capture honoured).
string
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the Idempotency-Replay: true response header.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.
object
required
Serializable DCB charge snapshot. The buyer MSISDN is stored masked; the operator dip rides the carrier-billing route.
number
—

Record a DCB chargeback

POST /api/v1/commerce/dcb/charge/chargeback
Record an operator-initiated chargeback, reversing the full net captured value and moving the charge to the terminal charged_back status.
string
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the Idempotency-Replay: true response header.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.
object
required
Serializable DCB charge snapshot. The buyer MSISDN is stored masked; the operator dip rides the carrier-billing route.

Fail a DCB charge

POST /api/v1/commerce/dcb/charge/fail
Mark an initiated charge failed (operator declined). Terminal.
string
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the Idempotency-Replay: true response header.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.
object
required
Serializable DCB charge snapshot. The buyer MSISDN is stored masked; the operator dip rides the carrier-billing route.

Refund a DCB charge

POST /api/v1/commerce/dcb/charge/refund
Refund part or all of a captured charge. A full-headroom refund moves the charge to refunded, a partial one to partially_refunded. Rejects a refund above the refundable headroom.
string
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the Idempotency-Replay: true response header.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.
object
required
Serializable DCB charge snapshot. The buyer MSISDN is stored masked; the operator dip rides the carrier-billing route.
number
required
—

Configure a DCB merchant

POST /api/v1/commerce/dcb/merchant
Onboard / reconfigure a Direct Carrier Billing merchant: settlement currency, digital-goods category, per-transaction cap, and the tenant-level operator coverage map.
string
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the Idempotency-Replay: true response header.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.
string
required
—
string
required
—
string
required
—
string
required
—
number
required
—
object[]
—

Build the carrier-billing operator request

POST /api/v1/commerce/dcb/operator-request
Shape the /network-apis/carrier-billing:charge request body for an initiated charge + the raw buyer MSISDN (never stored on the snapshot). The caller submits the returned body to that route, which owns the cost cap + metering.
string
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the Idempotency-Replay: true response header.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.
object
required
Serializable DCB charge snapshot. The buyer MSISDN is stored masked; the operator dip rides the carrier-billing route.
string
required
—

Reconcile a DCB settlement

POST /api/v1/commerce/dcb/reconcile
Reconcile a batch of charges against operator settlement records. Each captured (or partially-refunded) charge is expected to settle for its net value; the report flags amount/currency mismatches, missing settlements, and unexpected lines, all derived server-side.
string
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the Idempotency-Replay: true response header.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.
object[]
required
—
object[]
required
—

Open an MPP pre-authorized session

POST /api/v1/commerce/mpp-session
Open a fresh MPP (Machine Payments Protocol) session: a spend cap + REQUIRED future expiry an agent pre-authorizes ONCE, then streams metered micropayments against.
string
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the Idempotency-Replay: true response header.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.
string
required
—
string
required
—
string
required
—
number
required
—
number
required
—
string
required
—
integer
required
—

Meter and settle one call streamed against an MPP session

POST /api/v1/commerce/mpp-session/call
Meter one agent-tool-call / API request against an MPP session’s remaining cap and settle it via the x402 facilitator. Returns 503 MPP_SETTLEMENT_NOT_ENABLED unless X402_ENABLED=1. A declined call responds 200 with settlement: null. An authorized call with no/invalid X-PAYMENT header responds 402 with an x402 challenge; session spend is committed only once the facilitator reports settlement success.
string
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the Idempotency-Replay: true response header.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.
object
required
Serializable MPP (Machine Payments Protocol) pre-authorized session snapshot — a spend cap + REQUIRED expiry an agent opens ONCE, then streams metered micropayments against. Carries a SHA-256 consent digest re-verified before every metered call.
object
required
—
string
required
—
string
required
—
string
required
—
string
required
The call’s price in ATOMIC units of asset, base-10 string.

Dry-run meter a call against an MPP session

POST /api/v1/commerce/mpp-session/meter
Dry-run one metered agent-tool-call / API request against an MPP session and return the decision WITHOUT advancing spend.
string
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the Idempotency-Replay: true response header.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.
object
required
Serializable MPP (Machine Payments Protocol) pre-authorized session snapshot — a spend cap + REQUIRED expiry an agent opens ONCE, then streams metered micropayments against. Carries a SHA-256 consent digest re-verified before every metered call.
object
required
—

Revoke an MPP session

POST /api/v1/commerce/mpp-session/revoke
Withdraw a session’s pre-authorization, moving it to the terminal revoked status. Re-revoking is a VALIDATION_ERROR.
string
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the Idempotency-Replay: true response header.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.
object
required
Serializable MPP (Machine Payments Protocol) pre-authorized session snapshot — a spend cap + REQUIRED expiry an agent opens ONCE, then streams metered micropayments against. Carries a SHA-256 consent digest re-verified before every metered call.

Verify MPP session integrity

POST /api/v1/commerce/mpp-session/verify
Recompute the consent digest and report whether the session’s scope is intact (tamper-evidence for auditors).
string
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the Idempotency-Replay: true response header.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.
object
required
Serializable MPP (Machine Payments Protocol) pre-authorized session snapshot — a spend cap + REQUIRED expiry an agent opens ONCE, then streams metered micropayments against. Carries a SHA-256 consent digest re-verified before every metered call.

POST /api/v1/commerce/payment-request
Mint a fresh channel-agnostic hosted PSP-checkout link (PaymentRequest).
string
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the Idempotency-Replay: true response header.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.
string
required
—
number
required
—
string
required
—
string
required
—
string | null
—
string | null
—
integer | null
—

Reconcile a captured PSP payment

POST /api/v1/commerce/payment-request/reconcile
Match a captured PSP payment against the request. On an exact amount+currency match the request advances to paid.
string
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the Idempotency-Replay: true response header.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.
object
required
Serializable channel-agnostic hosted pay-by-link snapshot. The caller round-trips it in each request body.
object
required
—

POST /api/v1/commerce/payment-request/render
Render the hosted link for a single channel; the caller hands the result to the existing per-channel send infra.
string
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the Idempotency-Replay: true response header.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.
object
required
Serializable channel-agnostic hosted pay-by-link snapshot. The caller round-trips it in each request body.
string (enum: whatsapp|rcs|sms|email|telegram|viber|…)
required
—

POST /api/v1/commerce/payment-request/transition
Apply one lifecycle event to the payment request. An illegal transition is rejected with VALIDATION_ERROR.
string
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the Idempotency-Replay: true response header.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.
object
required
Serializable channel-agnostic hosted pay-by-link snapshot. The caller round-trips it in each request body.
string (enum: MARK_VIEWED|MARK_PAID|EXPIRE|CANCEL)
required
—

Resolve an in-thread RCS checkout

POST /api/v1/commerce/rcs-checkout
Turn a captured RCS catalog order into the hosted pay link (RCS has no native wallet), anchored to one PaymentRequest snapshot the reconcile route closes out.
string
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the Idempotency-Replay: true response header.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.
object
required
—
object
required
—

Bind an in-call PCI capture to a commerce charge

POST /api/v1/commerce/secure-payment/charge
Bind a live-call masked-DTMF card capture (a completed voice secure-payment session) to the priced PaymentRequest as ONE commerce charge. The proof is derived SERVER-SIDE from the call’s persisted secure_payment_sessions metadata — caller capture fields (call_id + optional session_id/card_last4/card_brand/psp_token_ref) are consistency hints only and any mismatch with the stored masked summary fails closed; only a COMPLETE (non-cancelled, tokenized) capture session can bind. The PSP settles the opaque token out-of-band; the capture webhook closes the request out through /commerce/payment-request/reconcile with the same providerReference. The full PAN/CVV never reach this endpoint.
string
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the Idempotency-Replay: true response header.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.
string
required
—
number
required
—
string
required
—
string | null
—
string | null
—
string | null
—
object
required
—
object[]
Charges already recorded by the caller, for the server-side double-charge guard (snapshot round-trip, mirrors omni-cart/PaymentRequest).

Start a recurring subscription

POST /api/v1/commerce/subscriptions
Start a recurring subscription off an existing cart/order, authorized against an already-issued payment mandate. Schedules the first renewal one interval out.
string
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the Idempotency-Replay: true response header.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.
string
required
—
string
required
—
string
required
—
string
required
—
string (enum: whatsapp|rcs)
required
—
object[]
required
—
string
required
—
string (enum: weekly|biweekly|monthly|quarterly)
required
—

Cancel a subscription

POST /api/v1/commerce/subscriptions/cancel
Cancel a subscription — terminal; no further renewal is ever due. Re-canceling an already-canceled subscription is a VALIDATION_ERROR.
string
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the Idempotency-Replay: true response header.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.
object
required
Serializable recurring subscription schedule snapshot. The renewal reuses the stored agent-payment-mandate authorization; the caller round-trips this snapshot in each request body.

Annotate + sort a set of subscriptions

POST /api/v1/commerce/subscriptions/list
Annotate caller-supplied subscription snapshots with their renewal-due state and sort by next-charge date (soonest first).
string
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the Idempotency-Replay: true response header.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.
object[]
required
—

Pause a subscription

POST /api/v1/commerce/subscriptions/pause
Pause an active subscription; the renewal executor refuses to charge it until resumed.
string
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the Idempotency-Replay: true response header.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.
object
required
Serializable recurring subscription schedule snapshot. The renewal reuses the stored agent-payment-mandate authorization; the caller round-trips this snapshot in each request body.

Fire a due subscription renewal cycle

POST /api/v1/commerce/subscriptions/renew
Authorize+commit the cycle’s charge against the stored payment mandate (no new consent collected), mint the reorder’s RCS/WhatsApp checkout, and advance the schedule. Rejected with VALIDATION_ERROR when the subscription isn’t active/due, or when the mandate declines the charge.
string
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the Idempotency-Replay: true response header.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.
object
required
Serializable recurring subscription schedule snapshot. The renewal reuses the stored agent-payment-mandate authorization; the caller round-trips this snapshot in each request body.
object
required
Serializable AP2-style payment mandate snapshot. Carries a SHA-256 consent digest re-verified before every spend.
object
required
—

Resume a paused subscription

POST /api/v1/commerce/subscriptions/resume
Resume a paused subscription. A next-charge date that fell in the past while paused is re-anchored one interval from now, so resuming never fires an immediate backlog of missed cycles.
string
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the Idempotency-Replay: true response header.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.
object
required
Serializable recurring subscription schedule snapshot. The renewal reuses the stored agent-payment-mandate authorization; the caller round-trips this snapshot in each request body.

Open a UCP cart session

POST /api/v1/commerce/ucp/cart
Open a UCP cart session, pricing the agent’s requested items SERVER-SIDE against the merchant catalog. Unknown / out-of-stock / wrong-currency lines are surfaced as blocking messages and keep the cart not_ready_for_payment. Design-partner pilot — gated behind a per-tenant flag.
string
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the Idempotency-Replay: true response header.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.
string
required
—
string
required
—
object[]
required
—
object[]
required
—
string | null
—
string | null
—

Complete a UCP cart under a signed mandate

POST /api/v1/commerce/ucp/cart/complete
Complete a ready_for_payment UCP cart session under an AP2 payment mandate. The session is re-priced SERVER-SIDE against the supplied catalog first (the incoming total is never trusted), then that re-priced total is charged against the mandate (consent digest + spend caps re-verified); a charge outside the mandate is rejected with VALIDATION_ERROR so an agent can never spend past signed consent. Authorizes the buy only — no money moves and nothing is sent (invariant #45). Design-partner pilot — gated behind a per-tenant flag.
string
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the Idempotency-Replay: true response header.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.
object
required
Serializable ACP checkout-session snapshot. Totals are re-derived server-side from the catalog and never trusted from the wire. Amounts are in MAJOR currency units.
object[]
required
—
object
required
Serializable AP2-style payment mandate snapshot. Carries a SHA-256 consent digest re-verified before every spend.

Re-price a UCP cart session

POST /api/v1/commerce/ucp/cart/update
Re-price a UCP cart session for a new requested-item set (replace-items semantics) and re-derive its status. A completed / canceled session is immutable and rejected with VALIDATION_ERROR. Design-partner pilot — gated behind a per-tenant flag.
string
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the Idempotency-Replay: true response header.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.
object
required
Serializable ACP checkout-session snapshot. Totals are re-derived server-side from the catalog and never trusted from the wire. Amounts are in MAJOR currency units.
object[]
required
—
object[]
required
—

Build the UCP product catalog

POST /api/v1/commerce/ucp/catalog
Normalize a merchant catalog into the UCP product catalog a shopping agent browses to discover what’s for sale (prices in MAJOR currency units; availability defaults to in_stock). Design-partner pilot — gated behind a per-tenant flag.
string
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the Idempotency-Replay: true response header.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.
object[]
required
—

Build the UCP storefront manifest

POST /api/v1/commerce/ucp/manifest
Build the UCP (Universal Commerce Protocol) discovery manifest a merchant publishes for UCP-native shopping agents: protocol version, capabilities, accepted payment methods, and endpoint paths. Design-partner pilot — gated behind a per-tenant flag.
string
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the Idempotency-Replay: true response header.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.
string
required
—
string
required
—
string
required
https origin the merchant’s UCP endpoints are served from.
string
required
—
array | null
—

Resolve an in-conversation web-chat checkout

POST /api/v1/commerce/webchat-checkout
Resolve a PCI-safe embedded tokenized checkout (where the tenant has configured client-side tokenization) or the hosted pay link, both anchored to one PaymentRequest snapshot.
string
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the Idempotency-Replay: true response header.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.
object
required
—
object
required
—

Resolve an in-thread WhatsApp checkout

POST /api/v1/commerce/whatsapp-checkout
Resolve native WhatsApp Pay (where Meta supports it) or the hosted pay link, both anchored to one PaymentRequest snapshot.
string
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the Idempotency-Replay: true response header.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.
object
required
—
object
required
—

Publish/replace the public ACP storefront config

PUT /api/v1/commerce/agentic/storefront
Create or replace this tenant’s STORED, agent-facing ACP storefront config so a third-party AI shopping agent (ChatGPT Instant Checkout / Perplexity / AP2) can discover and drive it with no Orbit credential. Once enabled, the public edge serves the discovery manifest + product feed at the returned publicUrl and prices checkouts SERVER-SIDE against the stored catalog. The catalog is bounded (max 250 products). No money moves and nothing is sent (invariant #45).
string
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the Idempotency-Replay: true response header.
string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.
boolean
—
string
required
—
string
required
—
string[]
—
object[]
—