credentials; agent callers receive an encrypted_payload (credentials encrypted to the agent’s public key).
POST /v1/mandates/{id}/charge · Authenticated with your secret key (merchants) or Ed25519 signature (agents).
Path parameters
string
required
The mandate id (from List Mandates).
Body
string
required
Charge amount as a decimal string with up to 2 decimals, e.g.
"40.00". The per-charge cap is enforced by the card network — an over-cap charge is declined (THRESHOLD_EXCEEDED).string
Idempotency key (max 255). The same mandate id +
reference returns the original charge (deduplicated: true) instead of minting again. Omit it and every call is a distinct charge. A failed charge clears its key, so a retry after failure is not deduplicated.object[]
Optional per-charge product details (exactly one entry, same shape as Create Session). Omit to reuse the mandate’s setup context. Currency always comes from the mandate, never the charge.
Response
string
string
string
Pass this to Report a Mandate Charge.
string
string
awaiting_result or failed.string
SUCCESS or FAILURE.object
Merchant callers:
{ token, dynamicCvv, expiryMonth, expiryYear }.object
Agent callers:
{ ephemeral_public_key, iv, auth_tag, data }, decrypted client-side.string
string
e.g.
THRESHOLD_EXCEEDED on an over-cap decline.boolean
True when a prior charge with the same
reference was returned.Notes
- The mandate must be
active. Charging a non-active mandate returns409 MANDATE_NOT_ACTIVE. - An over-cap charge is a normal outcome:
status: "failed"with anerrorMessagesuch asTHRESHOLD_EXCEEDED. The amount cap is enforced at the card-network level. - A charge outside a
listedmandate’s merchant returns403 MANDATE_MERCHANT_NOT_ALLOWED. - After checkout, settle the outcome with Report a Mandate Charge.