{"openapi":"3.1.0","info":{"title":"Skerry","version":"1.0.0","description":"Every call but `/` sends `Authorization: Bearer sk_test_…` or `sk_live_…`. The environment is in the key, not in a header, so the same code runs against sandbox and live by swapping one value. Where the deployment is configured with an authorisation server, a short-lived access token issued for this API is accepted in place of a key; `/.well-known/oauth-protected-resource` says whether and from whom.\n\nSend `Idempotency-Key` on every POST. A repeat returns the first response rather than acting twice; a repeat with a different body is refused. This is how a retry after a timeout stays safe. Calls that move money require it, `POST /payouts` included.\n\nFailures are `{ error: { code, message, detail, request_id } }`. Branch on `code`, never on `message` — messages are written for people and will change.\n\nEvery response carries `x-request-id`. Keep it on anything you log: it is what lets us find one call out of millions.\n\nList endpoints return newest first and take `?limit=` and `?cursor=`. A response carrying `next_cursor` has more.\n\nEvery amount is one of two forms, and the reference says which. Integer minor units: a whole number of the currency's smallest unit (cents for USD and EUR, six places for a stablecoin) beside a lowercase `currency`. Payments, refunds, settlements, conversions, ledger entries, budgets and every field named `*_minor` use this. Decimal strings: `\"12.50\"`, used by `amount` and `fee` on payouts and by wallet balances, which predate the rule. Wherever a decimal string is returned, the same amount is returned beside it as `amount_minor` (or `fee_minor`) with `currency`; `POST /payouts` and `POST /payouts/quote` accept `amount_minor` in place of `amount`. A rate is a ratio, not an amount, and stays a decimal string. Limits on a spend policy are integer minor units of the unit its `scope` names.\n\nA `sk_test_` key reaches only sandbox data and test money; a `sk_live_` key only live. Nothing is shared between them, ids from one are not found in the other, and sandbox-only helpers refuse a live key.\n\nReads are limited to 600 and writes to 120 per minute per key. Past that, 429 `rate_limited` with `Retry-After`. Every response carries `RateLimit-Limit` and `RateLimit-Remaining`.\n\nRegister agents with `POST /agents` and give each its own key with `POST /agents/{id}/keys`: that key is the agent, and it can only move money under a spend policy. On a shared key, send `Skerry-Agent: <agent id>` so the agent's policies apply and the audit trail names it; where a policy is bound to an agent, a money-moving call that names no agent is refused with `agent_required`. Once any agent is registered the header must name a registered, active one.\n\nSend `external_ref` (up to 200 characters) with `external_kind` (invoice, bill, order, booking or other) on a checkout session, payment link, payment, refund, payout, conversion or subscription to name the document it belongs to in your own system. Skerry stores it, returns it on the object, on every event about it and on the ledger entry, and lists by it (`?external_ref=`). On a bank payout it is also what the payee's bank shows, cut to what the rail carries.\n\nEvery movement has a receipt at `GET /receipts/{id}`, and the `movement.pending`, `movement.posted` and `movement.reversed` events carry it. A receipt is signed with Ed25519 over its canonical JSON (keys sorted, no whitespace) without the `signature` field; verify it with the key named by `signature.key_id` at `/.well-known/skerry-receipt-keys`.\n\nAn agent may sign requests with a registered Ed25519 key using HTTP Message Signatures (RFC 9421): `Signature-Input` and `Signature`, covering `@method`, `@target-uri` and, when there is a body, `content-digest` (RFC 9530), with `created`, `expires` (at most 300 seconds later), `keyid` (the key's JWK thumbprint) and `tag=\"skerry-agent\"`. The API key still identifies the account; a valid signature proves which agent sent the request.\n\n`scope` is required when a policy is created: nothing reads an amount in a unit the caller did not name. A spend policy's limits bound a unit family when it says `scope: \"family\"`: USD together with USDC, USDT, USDB, OUSD and PYUSD; EUR together with EURC. Amounts are converted to the family's fiat minor unit, rounded up, before they are compared or counted, so `daily_max: 5000` is 50.00 USD however it is spent. `scope: \"currency\"` keeps each currency apart, with limits in that currency's own smallest unit. Policies created before family scope existed keep `scope: \"currency\"`. A reservation against a limit is released when the operation fails, and also later, when a payout is returned, cancelled, undeliverable or fails to return, or a refund or conversion fails.\n\nA spend policy with its purpose, limits and consent is a mandate; `mandate_id` on any object is the policy id. `summary` states the rule in sentences generated from it. Consent evidence (`evidence` on create, or `POST /spend-policies/{id}/consent`) is stored with the SHA-256 of the mandate's canonical text (its rule as JSON, keys sorted, no whitespace). Every transaction row records the mandate, the consent attached to it at the time, the approval that released it, and the key and agent that asked, and returns them as `authorisation`.\n\nA held operation answers 202 with `approval_id`, `reason` and `reason_code` (amount, operation, new_payee or risk). It can be decided by another key, by a person through a link from `POST /approvals/{id}/links`, or by a signed-in member in the console. An agent can never approve. A mandate may ask for two approvers, who must be different keys, members or approver references, and for passkey evidence. When approver emails are set for the customer and outbound mail is configured, each approver is emailed their own links.\n\nSend `Skerry-Dry-Run: true` (or `dry_run: true` in the body) on a money-moving call to check it without doing it: payouts, batches, conversions, refunds, off-session charges, settlements, subscriptions, checkout sessions and payment links. Validation, ownership, the freeze, policies, budgets, the customer's risk rules and payee rules are evaluated, and for payouts and conversions the provider's own dry run is asked. The answer is 200 with `dry_run: true`, `next` (run, hold or refuse), `checks` (each check and its result), `object` (what would be created, where the operation can state it) and, for hold or refuse, why. Nothing is reserved, sent or created. With the header, no Idempotency-Key is needed and no idempotency record is kept.\n\nTo wait for an outcome inside a request, add `?wait=<seconds>` (up to 30) to `GET /payouts/{id}`, `GET /payments/{id}`, `GET /conversions/{id}` or `GET /approvals/{id}`. The request returns when the object reaches a final state, or the state named with `?until=` (for a payout: paid, returned or canceled), or when the wait ends, with the object as it stands; check its status. `GET /events?after=<event id>&wait=<seconds>` does the same for new events. Waiting re-reads on an interval inside the request. A key may have 5 requests waiting at once; beyond that the answer is 429 `too_many_waiters`.\n\n`payment_methods` on `GET /capabilities`, and `GET /customers/{id}/payment-methods` for one customer, list every way money moves: cards, wallets, buy now pay later and local methods as the card processor reports them, bank debit, bank transfer in and out by rail, each stablecoin by chain, conversion, issued cards, paying by the call and agent tokens. Each method has a cell per direction (`pay_in`, `pay_out`, `hold_and_capture`, `recurring`, `refund`, `dispute`) with one `status` (`available`, `per_customer`, `preview`, `coming_soon`, `not_offered`), a `reason_code`, and the provider by role (`banking_partner`, `card_processor`). Methods that are not served (push to card, cash, cheque, mobile money, crypto other than stablecoins) are listed as `not_offered`. `settles` says whether a method's outcome is known at once or arrives later: a `delayed` method moves a payment through `processing` to `succeeded` or `failed`, each announced as an event.\n\nA checkout session created with `payment_instructions` carries `payment_instructions[]`: for stablecoin, an address (and memo where the chain uses one) for a named coin on a named chain; for bank transfer, the account's details and a `reference` the payer must quote. They are bound to the session and expire with it. The session completes when the deposit arrives, as one payment with `method`, `rail`, `amount_received`, `fee` and the usual events. Too little leaves the session open with `amount_remaining` until it expires; the payment then fails with `underpaid` and what arrived is refundable. Too much completes it, with the excess as `amount_overpaid`, refundable. A deposit reported twice is credited once. A deposit in the wrong coin, on the wrong chain, without a known reference, or after the expiry is never credited: it becomes an unmatched deposit (`deposit.unmatched`) for a person to assign or send back. A refund of such a payment is a payout back to the sender where the banking partner reports one, otherwise to `destination`; a bank deposit on ACH or FedNow goes back whole.\n\nA customer's agentic checkout endpoint is `/agentic/{customer_id}`, following the Agentic Commerce Protocol (2026-04-17). The agent platform authenticates with the bearer token the customer issued, sends `API-Version`, and sends `Idempotency-Key` on every POST: the same key with the same body returns the first answer with `Idempotent-Replayed: true`, with a different body 422 `idempotency_conflict`, and while the first is running 409 `idempotency_in_flight`. A credential made with `require_signature` also needs `Timestamp` (RFC 3339, within five minutes) and `Signature`: base64url of HMAC-SHA256, with the signing secret, over `<Timestamp>.<canonical JSON of the body>` (keys sorted, no whitespace; nothing after the dot when there is no body). Prices come from the customer's pricing callback: Skerry POSTs `{ type: \"checkout_session.price\", customer_id, checkout_session_id, currency, items, buyer, fulfillment_details, selected_fulfillment_options, discounts, api_version }` signed with `Skerry-Signature`, and expects `{ currency?, line_items: [{ id, quantity?, name?, unit_amount, totals? }], fulfillment_options?, totals: [{ type, display_text, amount }], messages?, links?, ready? }` within a few seconds. Order events (`order_create`, `order_update`) go to the credential's `webhook_url` signed with `Merchant-Signature: t=<unix seconds>,v1=<hex HMAC-SHA256 of '<t>.<raw body>'>`. A session an agent opened is an ordinary checkout session with `source: \"agentic\"`. Error codes on these routes: `unauthorized`, `invalid_signature`, `agent_not_verified`, `missing_api_version`, `unsupported_api_version`, `idempotency_key_required`, `idempotency_conflict`, `idempotency_in_flight`, `missing`, `invalid`, `not_found`, `unsupported`, `requires_3ds`, `pricing_unavailable`, `capability_coming_soon`, `rate_limited`, and on the refunds extension `refunds_not_enabled`, `not_paid`, `outside_window`, `over_limit` and `nothing_to_refund`.\n\nA customer's Universal Commerce Protocol profile is served at `/ucp/{customer_id}/.well-known/ucp` and its operations under `/ucp/{customer_id}`, following the protocol's 2026-08-25 version (read from the specification's repository, branch release/2026-08-25, on 14 Nov 2026); the business serves or redirects its own `/.well-known/ucp` to the profile. It is a second set of shapes over agentic checkout: the same sessions (`source: \"agentic\"`), pricing callback, charge and refunds. The platform sends `UCP-Agent: profile=\"https://...\"`; that profile must be in the customer's `trusted_profiles` (else 403 `profile_not_trusted`), is fetched and kept for a minute, must state `ucp.version` 2026-08-25 (else 422 `version_unsupported`; no older version is published) and must declare `dev.ucp.shopping.checkout` at that version (else 200 with `ucp.status: \"error\"` and the message `capabilities_incompatible`), and the request must be signed per RFC 9421 with a P-256 key the profile publishes, covering `@method`, `@authority`, `@path`, `@query` when there is a query, `ucp-agent`, `idempotency-key` when sent, and `content-digest` and `content-type` when there is a body. The signature is ES256 as raw r||s. In sandbox only, `allow_unsigned` takes requests with no signature. Statuses are `incomplete`, `ready_for_complete`, `complete_in_progress`, `completed` and `canceled`; `requires_escalation` is never answered and `continue_url` never sent, because these sessions have no page to hand a buyer to: what would need the buyer is an `unrecoverable` message. Totals hold one `subtotal` and one `total` and sum. An `Idempotency-Key` is honoured on every POST and PUT (the same key and the same raw body returns the first answer, another body 409 `idempotency_conflict`) and required on complete. Complete takes the `stripe_payments` handler with a `card` and a `stripe_payment_token` only. A checkout or an order that is not there is answered 200 with `{ ucp: { version, status: \"error\" }, messages: [{ type: \"error\", code: \"not_found\", severity: \"unrecoverable\" }] }`. The full order is POSTed to the `config.webhook_url` of the platform's order capability, when the platform declares that capability at this version, when the order is made and when a refund changes it (a refund is an adjustment whose total is negative), signed with the customer's key with `Webhook-Id`, `Webhook-Timestamp` and `Content-Digest`, and retried on the webhook backoff with the same id and timestamp. With `ap2_enabled` and a platform that declares the extension, every checkout carries `ap2.merchant_authorization` and complete needs `ap2.checkout_mandate`; the mandate's own signature is not verified, which the payment's authorisation evidence records. Protocol error codes: `capability_coming_soon`, `not_found`, `invalid_profile_url`, `profile_not_trusted`, `profile_unreachable`, `profile_malformed`, `version_unsupported`, `signature_missing`, `signature_invalid`, `key_not_found`, `digest_mismatch`, `algorithm_unsupported`, `idempotency_key_required`, `idempotency_conflict`, `idempotency_in_flight`, `cart_not_supported`, `missing`, `invalid`, `conflict`, `pricing_unavailable`, `rate_limited`, `mandate_required`, `mandate_expired`, `merchant_authorization_missing`, `merchant_authorization_invalid` and `mandate_scope_mismatch`.\n\nOn the routes agents call, a request signed the Web Bot Auth way (draft-ietf-webbotauth-httpsig-protocol-01: HTTP Message Signatures with `tag=\"web-bot-auth\"` and a `Signature-Agent` header whose member is the HTTPS address of the JWK Set that holds the key) is verified against that key set, fetched as sent from a public address only; Ed25519 keys are verified. Older forms are still read: the bare string, an origin alone (its well-known key directory is read), and the earlier draft's `;type=directory` and `;type=jwks_uri`. A signature in Visa's Trusted Agent Protocol form is recorded and not verified, because its keys are not published where they can be read. The result is stored on the session and the payment as `agent_identity: { verified, method, key_id, operator, signature_agent }`: `signature_agent` is the agent's identifier, the address of its key set without any query, and `operator` is the host only when that address is the host's well-known key directory. A request is never refused for lacking a signature unless the customer has set `require_verified_agent`.\n\nA priced resource is paid by the call in either of two protocols, offered together. x402 (version 2): the 402 carries `PAYMENT-REQUIRED`, the client retries with `PAYMENT-SIGNATURE`, and the paid answer carries `PAYMENT-RESPONSE`. Machine Payments Protocol: the 402 carries one `WWW-Authenticate: Payment` challenge per method, the client retries with `Authorization: Payment <credential>`, and the paid answer carries `Payment-Receipt`. The smallest single payment is 0.01 USD in stablecoin and 0.50 USD with a delegated card token, in whole cents; a smaller price is paid from prepaid credit bought with one payment and drawn down per call (`Skerry-Credit` on the proxy, `credit_token` on verify). The protocol's own session intent is not offered. Each payment is a payment with `method: \"machine\"`, its `protocol`, `resource_id` and the payer's address or token reference in `payer_ref`. Older form, kept: a version 1 x402 client's `X-PAYMENT` header is still read.\n\nEvery checkout session and payment link carries `share_url`, an address at this API. A browser is redirected to the hosted page. A client that sends `Accept: application/json`, or asks for the address with `.json` appended, gets a description: amount, currency, status, methods, payment instructions, `agentic_endpoint` when the business has one, and `how_to_pay_without_a_browser`. The address is public and shows what the hosted page shows."},"servers":[{"url":"https://api.skerry.xyz"}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"sk_test_… | sk_live_…"}}},"tags":[{"name":"Getting started","description":"The two calls worth making first. `/` needs no key and lists what exists; `/whoami` proves the key you were given works and says which environment it is in."},{"name":"Customers","description":"A customer is a business you bring to the platform. It is verified in its own right, and everything else — wallets, accounts, payees — hangs off one."},{"name":"Custody","description":"Where a customer's money sits. A wallet holds stablecoin; an account is fiat at a regulated institution; a card spends from one."},{"name":"Paying out","description":"A payee is somewhere money can go; a payout sends it there. Quote first when the amount matters — a quote fixes the rate for a short window."},{"name":"Standing conversion","description":"A standing order converts on a schedule rather than on a call, so a business can hold one currency and settle in another without writing a cron job."},{"name":"Events and webhooks","description":"Most state changes arrive here rather than in a response, because verification and settlement finish long after the call that started them. Replay is deliberate: a missed delivery is recoverable without asking us."},{"name":"Accepting payments","description":"Take card and wallet payments for a customer. The payer pays on a hosted page, so card details never reach Skerry or you. Amounts are integer minor units next to a currency code. Build orders from `payment.succeeded`, never from the payer's browser returning to your site."},{"name":"Payers, saved methods and subscriptions","description":"A payer is someone who pays your customer. Save a method once, with their agreement, and charge it later or on a schedule. The agreement is the mandate. Card numbers are never returned."},{"name":"Limits, agents and approvals","description":"Constrain what a key, or an agent acting through it, can move. A policy names the business accountable and the person who approved it, caps amounts and counts, restricts destinations, wallets and currencies, and can require one or two people to approve. With its purpose and the evidence that a person agreed to it, a policy is a mandate: `mandate_id` is the policy id. A key that has ever had a policy stays restricted. Amount limits are integer minor units: of the family's fiat currency (cents) under `scope: \"family\"`, where USD is limited together with USDC, USDT, USDB, OUSD and PYUSD, and EUR with EURC; of each currency's own smallest unit under `scope: \"currency\"`."},{"name":"Agents and credentials","description":"Register the agents that act through the API, give each its own key, and stop one without touching the others. A key bound to an agent is that agent on every call and can only move money under a spend policy. An agent can also sign its requests with a registered Ed25519 key (HTTP Message Signatures, RFC 9421), and can delegate a narrower part of its authority to a child agent. Where access tokens are accepted, an OAuth client approved for an agent can obtain tokens that act as it."},{"name":"Controls and audit","description":"Stop money leaving, for one customer or for the whole account, and read back who did what. Every audit entry is chained to the one before it by a hash, so the trail can be checked for edits."},{"name":"Conversion and ledger","description":"Convert a customer's own balance between currencies with a priced, expiring quote, and export the double-entry books for an accountant."},{"name":"Books and receipts","description":"Skerry keeps the money and a signed record of every movement. Invoices, bills, tax, statements, reconciliation and accountant exports are kept in the customer's books: connect the customer's Rivier project once, a person approves it there, and every movement is delivered to it. What Skerry is asked about those subjects it answers with a link into the books, or with 409 `books_not_connected` and the next step."},{"name":"Budgets","description":"Set aside part of a wallet's balance for one mandate or one agent. A budget is an earmark kept by Skerry: nothing moves at the provider. An operation under a budgeted mandate, or by a budgeted agent, may only spend from its budget, and every other caller may only spend what is not set aside. Amounts are integer minor units of the budget's currency."},{"name":"Customer controls","description":"Controls set on one customer that apply to every caller, whatever its mandate: holding the first payout to a destination the customer has never paid, a cooling-off period, velocity and anomaly rules, a withdrawal allow-list, and the people who approve held operations by email. Every control is off until it is set, and an agent's own credential cannot change one."},{"name":"Wallet controls","description":"A wallet with a purpose: a label, a purpose, the agent it is for and a floor, kept by Skerry beside the provider's wallet. Sweep rules keep a balance in range by moving the difference on a schedule; each run is an ordinary payout made as the key that created the rule, under that key's mandates. To confine an agent to named wallets, set `wallet_allow_list` on its mandate."},{"name":"Scheduled payouts and waiting","description":"A payout can run later instead of now: send `POST /payouts` with `execute_at` (a future time), `schedule` (`{ every, unit: day | week | month, end_at? | count? }`) or `release_on` (`{ event, object_id }`, or `\"approval\"` for a person). It needs an Idempotency-Key and answers with a scheduled payout. Each run is an ordinary payout made as the key that scheduled it, under that key's mandate as it stands when it runs; a frozen customer, a revoked or expired key, a revoked agent or a revoked mandate cancels the schedule with the reason. A payout with `release_on` sets its amount aside in the source wallet until it is released, cancelled or lapses at `expires_at` (7 days by default, 90 at most). `travel_rule` cannot be scheduled. `amount_minor` on a scheduled payout is integer minor units of `currency`; `amount` is the same as a decimal string. To wait for an outcome without a webhook, add `?wait=` to a read."},{"name":"Authorisation evidence","description":"What authorised a transaction. Payments, payouts, refunds, conversions, settlements, subscriptions, checkout sessions and payment links carry an `authorisation` block: `mandate_id` (the policy id), `policy_id`, `agent_id`, `key_id`, `consent_id` and `approval_id`. The routes here return the whole record behind those ids for a dispute."},{"name":"Sandbox","description":"Helpers that exist only with a test key, so an integration can be built and exercised without a browser or a bank."},{"name":"Agentic checkout: what a customer sets","description":"Let agent platforms buy from a customer through the Agentic Commerce Protocol. The customer issues each platform a bearer token, registers where its own system is asked for line items, totals, tax and fulfilment, and says what agents may do. Skerry holds no catalogue and computes no tax. A preview: sessions can be opened and priced, and completing one needs delegated payment tokens to be switched on for the customer."},{"name":"Agentic Commerce Protocol","description":"Called by an agent platform, not by a partner. Authentication is the bearer token the customer issued (`POST /customers/{id}/agentic/credentials`), not an API key. Every call sends `API-Version` (2026-04-17, or an earlier published version) and every POST sends `Idempotency-Key`. Paths, fields, statuses and messages follow the protocol's specification; errors are the protocol's `{ type, code, message, param }`, not Skerry's envelope. The refunds call is a Skerry extension and says so."},{"name":"Universal Commerce Protocol: what a customer sets","description":"Let platforms buy from a customer through the Universal Commerce Protocol, over the same checkout sessions, pricing callback, charging and refunds as agentic checkout. The customer lists the platforms it accepts by the address of their profile and says what its profile publishes; Skerry makes and keeps its signing key. A preview, off by default: every call answers 409 `capability_coming_soon` until it is switched on for the platform, and completing a checkout also needs delegated payment tokens."},{"name":"Universal Commerce Protocol","description":"Called by a platform, not by a partner, and not with an API key. The platform names its profile in `UCP-Agent` and signs each request (RFC 9421, ES256) with a key that profile publishes; the customer must have listed that profile. Paths, fields, statuses and messages follow the protocol's 2026-08-25 version, the only one spoken. What the business decides about a checkout is a 200 with `messages`; a checkout or order that is not there is a 200 with `ucp.status: \"error\"` and `messages`; protocol errors are `{ code, content }`, not Skerry's envelope. A preview, off by default."},{"name":"Paying by the call","description":"Price a resource and let automated clients pay for each call. Skerry builds the 402 for the customer's server in both x402 and the Machine Payments Protocol, checks the payment the client sends back, and settles it on the customer's own merchant account. Skerry runs no facilitator and holds no keys. A preview: every call answers 409 `capability_coming_soon` until it is switched on for the customer."},{"name":"Hosted addresses and the pay-by-the-call proxy","description":"Public addresses, with no key: the id in the address is the credential, as it is on a hosted checkout page. A checkout session's and a payment link's `share_url` send a browser on to the hosted page and answer a client that asks for JSON (`Accept: application/json`, or the address ending `.json`) with a description it can act on. `/pay/{resource_id}` fronts a priced resource: 402 until paid, then the request is forwarded to the address the business registered. Errors are `{ error: { code, message } }`, or the paying protocol's own on a 402."},{"name":"Agents paying","description":"A registered agent pays another merchant. The agent's request is sent to the merchant; when it answers 402, one offer is paid and the request is sent once more. Two ways of paying are built: x402 version 2, the `exact` scheme, in USDC from a wallet whose key the wallet provider holds and whose policy lets it sign that one kind of message; and the Machine Payments Protocol's `stripe` method, with a delegated payment token issued for the challenge's amount and expiry. The payment is decided before anything is signed, as a payout is: freeze, withdrawal allow-list, first payment to a new destination, risk rules, the agent's mandates and budgets, approval. The merchant's host is the payee. A preview: every call answers 409 `capability_coming_soon` until agents paying is switched on and the wallet provider is connected."},{"name":"Rewards and reporting","description":"What the platform pays on balances, and what this project has consumed against its plan."}],"paths":{"/":{"get":{"tags":["Getting started"],"summary":"The index. Public, so a new developer can look before they have a key.","operationId":"index.get","security":[],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"none","x-moves-money":false,"x-idempotency":"none"}},"/openapi.json":{"get":{"tags":["Getting started"],"summary":"This same reference as an OpenAPI 3.1 document, for Postman, a generator or an agent. Public.","operationId":"openapi_json.get","security":[],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"none","x-moves-money":false,"x-idempotency":"none"}},"/whoami":{"get":{"tags":["Getting started"],"summary":"The partner, project, mode and scopes behind the key you sent.","operationId":"whoami.get","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"*","x-moves-money":false,"x-idempotency":"none"}},"/llms.txt":{"get":{"tags":["Getting started"],"summary":"The API described for a model, as plain Markdown: authentication, the order of calls for the common jobs, idempotency, approvals, every error with what to do next, and every operation. Generated from this reference. Public.","operationId":"llms_txt.get","security":[],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"none","x-moves-money":false,"x-idempotency":"none"}},"/agents.md":{"get":{"tags":["Getting started"],"summary":"The same description addressed to an agent that is about to act. Public.","operationId":"agents_md.get","security":[],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"none","x-moves-money":false,"x-idempotency":"none","x-untrusted":["name","operator","description","authorised_by"]}},"/developer.json":{"get":{"tags":["Getting started"],"summary":"The product described for a developer platform, in the common form: name, status, version, hosts, where the OpenAPI document, the guides and the agent tools are, the key prefixes and scopes, and the limits. Generated from this reference and the deployment's settings. Public.","operationId":"developer_json.get","security":[],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"none","x-moves-money":false,"x-idempotency":"none"}},"/guides/{name}":{"get":{"tags":["Getting started"],"summary":"One guide as plain Markdown. `{name}` is the guide's name followed by `.md`, as `/developer.json` lists it under `guides`: `/guides/quickstart.md` is the first. Public.","operationId":"guides.get","security":[],"parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"none","x-moves-money":false,"x-idempotency":"none"}},"/capabilities":{"get":{"tags":["Getting started"],"summary":"What this project may do right now, and what is merely coming: capabilities, bank rails (and which are enabled customer by customer), the chains and coins the API accepts, `custody` (who holds the money, by name), and `payment_methods`: every way money moves, method by method and direction by direction, each with one status and a reason code. A capability with `test_mode_only: true` works in the sandbox only for now.","operationId":"capabilities.get","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"*","x-moves-money":false,"x-idempotency":"none"}},"/terms":{"post":{"tags":["Getting started"],"summary":"Accept the terms a customer must agree to before they can be verified.","operationId":"terms.accept","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ customer_id }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"customers:write","x-moves-money":false,"x-idempotency":"none"}},"/customers":{"post":{"tags":["Customers"],"summary":"Onboard a business, or a person with `type: \"individual\"` (hosted verification only; identity details and documents are refused for a person). `reliance` carries your own verification results and is accepted only from an account approved for it.","operationId":"customers.create","security":[{"bearerAuth":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ legal_name, email, country, external_id?, type?, ownership_threshold?, reliance?: { kyc_screen, ofac_screen, verified_database_at?, verified_govid_at?, verified_proof_of_address_at? } }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"customers:write","x-moves-money":false,"x-idempotency":"optional","x-untrusted":["legal_name","email","external_id"]},"get":{"tags":["Customers"],"summary":"The businesses this project has onboarded.","operationId":"customers.list","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"customers:read","x-moves-money":false,"x-idempotency":"none","x-untrusted":["legal_name","email","external_id"]}},"/customers/{id}":{"get":{"tags":["Customers"],"summary":"One customer, with its verification state, the bank rails it is enabled for (`rails`), what it can be paid with (`card_acceptance.methods`) and everything still owed to either side as one list: `requirements[]` of `{ capability, provider, status, items[], due_by }`.","operationId":"customers.get","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"customers:read","x-moves-money":false,"x-idempotency":"none","x-untrusted":["legal_name","email","external_id"]},"patch":{"tags":["Customers"],"summary":"Correct details on a business.","operationId":"customers.update","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ legal_name?, address?, external_id? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"customers:write","x-moves-money":false,"x-idempotency":"none","x-untrusted":["legal_name","email","external_id"]}},"/customers/{id}/verification":{"post":{"tags":["Customers"],"summary":"Start or re-run verification.","operationId":"customers_verification.start","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"customers:write","x-moves-money":false,"x-idempotency":"none"},"get":{"tags":["Customers"],"summary":"Where verification has got to.","operationId":"customers_verification.get","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"customers:read","x-moves-money":false,"x-idempotency":"none"}},"/customers/{id}/onboarding-link":{"post":{"tags":["Customers"],"summary":"A link the business owner opens to finish verification (and card-acceptance setup) on hosted pages. You send no people, birth dates or documents.","operationId":"customers.onboarding_link","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ return_url, refresh_url?, steps? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"customers:write","x-moves-money":false,"x-idempotency":"optional"}},"/onboard/{token}":{"get":{"tags":["Customers"],"summary":"The page behind an onboarding link. Public: the token is the credential. Redirects to the next hosted step, then back to your return_url.","operationId":"onboard.get","security":[],"parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"none","x-moves-money":false,"x-idempotency":"none"}},"/customers/{id}/payment-methods":{"get":{"tags":["Customers"],"summary":"The payment-method matrix for one customer: every method and direction, each cell marked `enabled` from what the card processor reports active on its merchant account and what the banking partner enabled at verification.","operationId":"customers_payment_methods.get","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"customers:read","x-moves-money":false,"x-idempotency":"none"}},"/customers/{id}/people":{"get":{"tags":["Customers"],"summary":"The owners, controllers and signers of a business customer, as the banking partner holds them: `{ id, first_name, last_name, email, title, owns, controls, signs, is_director, ownership_percent }`. Names and roles only; nothing from a person's documents is returned.","operationId":"customers_people.list","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"customers:read","x-moves-money":false,"x-idempotency":"none","x-untrusted":["first_name","last_name","email","title"]},"post":{"tags":["Customers"],"summary":"Name another owner, controller or signer of a business customer, in the form `POST /customers` takes in `people[]`. At least one of `owns`, `controls` and `signs` is true; `address.country` is ISO 3166-1 alpha-3. Identity documents and files are passed on to the banking partner and never stored by Skerry. `reliance` is accepted only from an account approved for it. For example `{\"first_name\": \"Ada\", \"last_name\": \"Lovelace\", \"email\": \"ada@example.com\", \"date_of_birth\": \"1985-12-10\", \"address\": {\"line1\": \"1 Main Street\", \"city\": \"Berlin\", \"postal_code\": \"10115\", \"country\": \"DEU\"}, \"owns\": true, \"ownership_percent\": 40}`.","operationId":"customers_people.create","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ first_name, last_name, email, date_of_birth, address: { line1, line2?, city, region?, postal_code?, country }, owns?, controls?, signs?, is_director?, ownership_percent?, title?, identity_documents?: [{ type, issuing_country, number?, expires?, front?, back? }], documents?: [{ purpose, file }], reliance? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"customers:write","x-moves-money":false,"x-idempotency":"optional","x-untrusted":["first_name","last_name","email","title"]}},"/customers/{id}/people/{person_id}":{"delete":{"tags":["Customers"],"summary":"Remove a person from a business customer at the banking partner.","operationId":"customers_people.delete","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"person_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"customers:write","x-moves-money":false,"x-idempotency":"optional"}},"/eligibility":{"get":{"tags":["Customers"],"summary":"Whether a business like this can be served, from where, for what, with machine-readable reasons. `?country=&business_type=&currency=&industry=`","operationId":"eligibility.get","security":[{"bearerAuth":[]}],"parameters":[{"name":"country","in":"query","required":false,"schema":{"type":"string"}},{"name":"business_type","in":"query","required":false,"schema":{"type":"string"}},{"name":"currency","in":"query","required":false,"schema":{"type":"string"}},{"name":"industry","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"eligibility:read","x-moves-money":false,"x-idempotency":"none"}},"/customers/{id}/wallets":{"post":{"tags":["Custody"],"summary":"Create a stablecoin wallet, optionally with a label, a purpose and the agent it is for. Covered by mandates as `wallet.create`.","operationId":"customers_wallets.create","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ chain, label?, purpose?, agent_id? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"wallets:write","x-moves-money":false,"x-idempotency":"optional","x-untrusted":["label","purpose"]},"get":{"tags":["Custody"],"summary":"The customer's wallets and balances. Each balance carries the decimal `amount` and `amount_minor`, the same amount in integer minor units of `currency`; each wallet its `label`, `purpose`, `agent_id` and `floor`.","operationId":"customers_wallets.list","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"wallets:read","x-moves-money":false,"x-idempotency":"none","x-untrusted":["label","purpose"]}},"/customers/{id}/wallets/{wallet_id}/history":{"get":{"tags":["Custody"],"summary":"What has moved in and out of one wallet, newest first. `?limit=`","operationId":"customers_wallets_history.get","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"wallet_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"How many to return, 1 to 100.","schema":{"type":"integer","minimum":1}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"wallets:read","x-moves-money":false,"x-idempotency":"none","x-untrusted":["data"]}},"/customers/{id}/accounts":{"post":{"tags":["Custody"],"summary":"Open an account payers pay into. `currency` is what the payer sends (usd or eur); `wallet_id` is the customer's wallet the money lands in, converted to the stablecoin named in `delivers` (usdc for usd and eurc for eur unless named). For example `{\"currency\": \"usd\", \"wallet_id\": \"<wallet id>\", \"delivers\": \"usdc\"}`. The answer carries the account's `deposit_instructions`.","operationId":"customers_accounts.create","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ currency, wallet_id, delivers? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"accounts:write","x-moves-money":false,"x-idempotency":"optional"},"get":{"tags":["Custody"],"summary":"The customer's fiat accounts.","operationId":"customers_accounts.list","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"accounts:read","x-moves-money":false,"x-idempotency":"none"}},"/customers/{id}/accounts/{account_id}/deactivate":{"post":{"tags":["Custody"],"summary":"Stop an account accepting deposits. It keeps its details, money already received is not affected, and it can be reopened.","operationId":"customers_accounts.deactivate","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"account_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"accounts:write","x-moves-money":false,"x-idempotency":"optional"}},"/customers/{id}/accounts/{account_id}/reactivate":{"post":{"tags":["Custody"],"summary":"Let a deactivated account accept deposits again, with the same details.","operationId":"customers_accounts.reactivate","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"account_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"accounts:write","x-moves-money":false,"x-idempotency":"optional"}},"/customers/{id}/bank-link":{"post":{"tags":["Custody"],"summary":"Start connecting a US bank by logging into it, instead of typing its numbers. Answers `{ link_token, expires_at }` for the bank login page; credentials never reach Skerry. Finish with `POST /customers/{id}/bank-link/exchange`.","operationId":"customers.bank_link","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"payees:write","x-moves-money":false,"x-idempotency":"none"}},"/customers/{id}/bank-link/exchange":{"post":{"tags":["Custody"],"summary":"Finish a bank login: send the `public_token` the bank login page returned, with the `link_token` it was started with. The link token must be one started for this customer, and is finished once (409 `bank_link_finished`, or `bank_link_expired` after its expiry). The answer is `{ data: [payee] }`, the payees the connection added, each announced as `payee.created`. Covered by mandates as `payee.create`; if it is held, send the same request again with `Skerry-Approval` once a person has approved it. Neither token is stored.","operationId":"customers_bank_link.exchange","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ link_token, public_token }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"payees:write","x-moves-money":false,"x-idempotency":"optional","x-untrusted":["data.name","data.name_check"]}},"/customers/{id}/cards":{"post":{"tags":["Custody"],"summary":"Issue a card against an account.","operationId":"customers_cards.create","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ account_id }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"cards:write","x-moves-money":false,"x-idempotency":"none"},"get":{"tags":["Custody"],"summary":"The customer's cards.","operationId":"customers_cards.list","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"cards:read","x-moves-money":false,"x-idempotency":"none"}},"/customers/{id}/memos":{"post":{"tags":["Custody"],"summary":"A deposit memo, for chains where one shared address serves everybody. `wallet_id` is the customer's wallet the deposit is delivered to, and fixes the chain; `delivers` is the coin that arrives (usdc unless named) and `currency` what the payer sends (usd unless named).","operationId":"customers_memos.create","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ wallet_id, delivers?, currency? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"accounts:write","x-moves-money":false,"x-idempotency":"optional","x-untrusted":["deposit_instructions"]},"get":{"tags":["Custody"],"summary":"The customer's deposit memos. A payer who omits the memo cannot be attributed.","operationId":"customers_memos.list","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"accounts:read","x-moves-money":false,"x-idempotency":"none","x-untrusted":["deposit_instructions"]}},"/customers/{id}/payees":{"post":{"tags":["Paying out"],"summary":"Add a bank account as a destination for money. The body is the banking partner's external-account fields, passed on as sent: `currency`, `account_type` (`us`, `iban` or `gb`), `account_owner_name` as the bank holds it, `account_owner_type` (business or individual) with `business_name` for a business, `bank_name`, `address` (`street_line_1`, `street_line_2`, `city`, `state`, `postal_code`, and `country` as ISO 3166-1 alpha-3), and the account itself: `account: { routing_number, account_number, checking_or_savings }` for `us`, `iban: { account_number, bic, country }` for `iban`, `account: { sort_code, account_number }` for `gb`. For example `{\"currency\": \"eur\", \"account_type\": \"iban\", \"account_owner_name\": \"Example GmbH\", \"account_owner_type\": \"business\", \"business_name\": \"Example GmbH\", \"address\": {\"street_line_1\": \"1 Hauptstrasse\", \"city\": \"Berlin\", \"postal_code\": \"10115\", \"country\": \"DEU\"}, \"iban\": {\"account_number\": \"DE89370400440532013000\", \"country\": \"DEU\"}}`. Under a mandate that covers `payee.create` the operation allow-list and approval rules apply; if it is held, send the same request again with `Skerry-Approval` once a person has approved it.","operationId":"customers_payees.create","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ currency, account_type, account_owner_name, account_owner_type, business_name?, bank_name?, address: { street_line_1, street_line_2?, city, state?, postal_code?, country }, account?: { routing_number, account_number, checking_or_savings } | { sort_code, account_number }, iban?: { account_number, bic?, country } }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"payees:write","x-moves-money":false,"x-idempotency":"optional","x-untrusted":["name","name_check"]},"get":{"tags":["Paying out"],"summary":"The customer's payees, each with the receiving bank's name check (`name_check`) where the rail has one.","operationId":"customers_payees.list","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"payees:read","x-moves-money":false,"x-idempotency":"none","x-untrusted":["name","name_check"]}},"/customers/{id}/payees/{payee_id}":{"get":{"tags":["Paying out"],"summary":"One payee, with the name check as it stands now.","operationId":"customers_payees.get","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"payee_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"payees:read","x-moves-money":false,"x-idempotency":"none","x-untrusted":["name","name_check"]},"delete":{"tags":["Paying out"],"summary":"Remove a payee.","operationId":"customers_payees.delete","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"payee_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"payees:write","x-moves-money":false,"x-idempotency":"none","x-untrusted":["name","name_check"]}},"/customers/{id}/payees/{payee_id}/pause":{"post":{"tags":["Paying out"],"summary":"Stop paying a payee for now without removing it. It reads `active: false` until resumed. Announced as `payee.updated`.","operationId":"customers_payees.pause","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"payee_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"payees:write","x-moves-money":false,"x-idempotency":"optional","x-untrusted":["name","name_check"]}},"/customers/{id}/payees/{payee_id}/resume":{"post":{"tags":["Paying out"],"summary":"Pay a paused payee again. Refused with `customer_frozen` while the customer is frozen. Announced as `payee.updated`.","operationId":"customers_payees.resume","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"payee_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"payees:write","x-moves-money":false,"x-idempotency":"optional","x-untrusted":["name","name_check"]}},"/customers/{id}/payees/{payee_id}/check":{"post":{"tags":["Paying out"],"summary":"Ask the receiving bank again whether the name on the account matches, and return the payee with the answer as `name_check`. Often `pending` at first; a later read or the `payee.updated` event carries the bank's answer.","operationId":"customers_payees.check","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"payee_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"payees:write","x-moves-money":false,"x-idempotency":"optional","x-untrusted":["name","name_check"]}},"/payouts/quote":{"post":{"tags":["Paying out"],"summary":"What a payout would cost, as a quote that binds the instruction. The answer carries `quote_id` and `valid_until` (120 seconds by default); `POST /payouts` with that `quote_id` executes exactly the quoted customer, amount, source, destination and rail, once. For a bank payout it says which rail it would leave on and why (`rail`, `rail_reason`) and carries the name check on the payee (`payee_check`). `fee`, `rate` and the receive amount are what the provider's dry run reported when the quote was made; the provider is not asked to hold them, so this is not a guaranteed rate. `amount` is a decimal string and `amount_minor` the same in integer minor units of the source currency; send either. `fee_minor` is in minor units of `fee_currency`, `receive_amount_minor` of `receive_currency`.","operationId":"payouts.quote","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["customer_id","from","to"],"properties":{"customer_id":{"type":"string","maxLength":200},"amount":{"type":"string","pattern":"^\\d{1,18}(\\.\\d{1,10})?$","description":"The amount as a decimal string in `from.currency`. Send this or `amount_minor`."},"amount_minor":{"type":"integer","minimum":1,"description":"The same amount in integer minor units of `from.currency`."},"from":{"type":"object","required":["currency","wallet_id"],"properties":{"currency":{"type":"string","description":"A lowercase currency code or stablecoin ticker."},"wallet_id":{"type":"string","maxLength":200}}},"to":{"type":"object","required":["currency"],"properties":{"currency":{"type":"string","description":"A lowercase currency code or stablecoin ticker."},"payee_id":{"type":"string","maxLength":200},"wallet_id":{"type":"string","maxLength":200},"address":{"type":"string","maxLength":200},"chain":{"type":"string","maxLength":40}},"description":"Exactly one of `payee_id`, `wallet_id` or `address`."},"rail":{"type":"string","maxLength":40},"speed":{"type":"string","enum":["fastest","cheapest","standard"]}}},"example":"{ customer_id, amount | amount_minor, from, to, rail?, speed? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"payouts:write","x-moves-money":false,"x-idempotency":"none","x-untrusted":["payee_check"]}},"/payouts":{"post":{"tags":["Paying out"],"summary":"Send money to a payee, a wallet or an address. Needs an Idempotency-Key. `amount` is a decimal string in `from.currency`; `amount_minor` is the same amount as integer minor units, and either may be sent. A bank payout may name a `rail` or a `speed` (fastest, cheapest, standard); otherwise the rail is chosen and returned with the reason. `quote_id` executes exactly what was quoted. `execute_at`, `schedule` or `release_on` create a scheduled payout instead of sending now. An outside address is checked for its chain's format and for the coin being on that chain (Base when no chain is named). `travel_rule` carries originator and beneficiary details for an outside address; it is passed on and not kept. The answer carries `amount_minor`, `fee_minor` and `authorisation`.","operationId":"payouts.create","security":[{"bearerAuth":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["customer_id","from","to"],"properties":{"customer_id":{"type":"string","maxLength":200},"amount":{"type":"string","pattern":"^\\d{1,18}(\\.\\d{1,10})?$","description":"The amount as a decimal string in `from.currency`. Send this or `amount_minor`."},"amount_minor":{"type":"integer","minimum":1,"description":"The same amount in integer minor units of `from.currency`."},"from":{"type":"object","required":["currency","wallet_id"],"properties":{"currency":{"type":"string","description":"A lowercase currency code or stablecoin ticker."},"wallet_id":{"type":"string","maxLength":200}}},"to":{"type":"object","required":["currency"],"properties":{"currency":{"type":"string","description":"A lowercase currency code or stablecoin ticker."},"payee_id":{"type":"string","maxLength":200},"wallet_id":{"type":"string","maxLength":200},"address":{"type":"string","maxLength":200},"chain":{"type":"string","maxLength":40}},"description":"Exactly one of `payee_id`, `wallet_id` or `address`."},"rail":{"type":"string","maxLength":40},"speed":{"type":"string","enum":["fastest","cheapest","standard"]},"quote_id":{"type":"string","maxLength":200,"description":"Executes exactly what was quoted, once."},"execute_at":{"type":"string","format":"date-time"},"schedule":{"type":"object","required":["every","unit"],"properties":{"every":{"type":"integer","minimum":1},"unit":{"type":"string","enum":["day","week","month"]},"end_at":{"type":"string","format":"date-time"},"count":{"type":"integer","minimum":1}}},"release_on":{"oneOf":[{"type":"string","enum":["approval"]},{"type":"object","required":["event","object_id"],"properties":{"event":{"type":"string","maxLength":200},"object_id":{"type":"string","maxLength":200}}}]},"expires_at":{"type":"string","format":"date-time"},"travel_rule":{"type":"object","properties":{"originator":{"type":"object"},"beneficiary":{"type":"object"}}},"reference":{"type":"string","maxLength":500},"external_ref":{"type":"string","maxLength":200,"description":"The document this belongs to in your own system."},"external_kind":{"type":"string","enum":["invoice","bill","order","booking","other"]},"remittance":{"type":"object","properties":{"invoice_number":{"type":"string","maxLength":200},"amount":{"type":"string","maxLength":40},"date":{"type":"string","maxLength":40}}},"dry_run":{"type":"boolean","description":"Check the request and report what would happen, without doing it."}}},"example":"{ customer_id, amount | amount_minor, from: { currency, wallet_id }, to: { currency, payee_id | wallet_id | address, chain? }, rail?, speed?, quote_id?, execute_at? | schedule?: { every, unit: day|week|month, end_at? | count? } | release_on?: { event, object_id } | \"approval\", expires_at?, travel_rule?: { originator, beneficiary }, reference?, external_ref?, external_kind?, remittance?: { invoice_number?, amount?, date? }, dry_run? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"payouts:write","x-moves-money":true,"x-idempotency":"required","x-untrusted":["reference","external_ref","remittance","hold.reason"]},"get":{"tags":["Paying out"],"summary":"Payouts this project has made, with the reference each was given. Each carries `amount` (decimal string) and `amount_minor` (integer minor units of `currency`). `?customer_id=&external_ref=`","operationId":"payouts.list","security":[{"bearerAuth":[]}],"parameters":[{"name":"customer_id","in":"query","required":true,"description":"The customer, by any of its ids.","schema":{"type":"string"}},{"name":"external_ref","in":"query","required":false,"description":"The reference the object was given in your own system.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"payouts:read","x-moves-money":false,"x-idempotency":"none","x-untrusted":["reference","external_ref","remittance","hold.reason"]}},"/payouts/batches":{"post":{"tags":["Paying out"],"summary":"Up to 50 payouts in one call. All are checked first, and the batch's total per customer and currency is checked against the caller's daily and monthly limits before anything is sent; each then runs as its own payout and reports its own outcome. Needs an Idempotency-Key. A dry run checks every item and the totals and sends nothing.","operationId":"payouts_batches.create","security":[{"bearerAuth":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["payouts"],"properties":{"payouts":{"type":"array","minItems":1,"maxItems":50,"items":{"type":"object","required":["customer_id","from","to"],"properties":{"customer_id":{"type":"string","maxLength":200},"amount":{"type":"string","pattern":"^\\d{1,18}(\\.\\d{1,10})?$","description":"The amount as a decimal string in `from.currency`. Send this or `amount_minor`."},"amount_minor":{"type":"integer","minimum":1,"description":"The same amount in integer minor units of `from.currency`."},"from":{"type":"object","required":["currency","wallet_id"],"properties":{"currency":{"type":"string","description":"A lowercase currency code or stablecoin ticker."},"wallet_id":{"type":"string","maxLength":200}}},"to":{"type":"object","required":["currency"],"properties":{"currency":{"type":"string","description":"A lowercase currency code or stablecoin ticker."},"payee_id":{"type":"string","maxLength":200},"wallet_id":{"type":"string","maxLength":200},"address":{"type":"string","maxLength":200},"chain":{"type":"string","maxLength":40}},"description":"Exactly one of `payee_id`, `wallet_id` or `address`."},"rail":{"type":"string","maxLength":40},"speed":{"type":"string","enum":["fastest","cheapest","standard"]},"quote_id":{"type":"string","maxLength":200,"description":"Executes exactly what was quoted, once."},"execute_at":{"type":"string","format":"date-time"},"schedule":{"type":"object","required":["every","unit"],"properties":{"every":{"type":"integer","minimum":1},"unit":{"type":"string","enum":["day","week","month"]},"end_at":{"type":"string","format":"date-time"},"count":{"type":"integer","minimum":1}}},"release_on":{"oneOf":[{"type":"string","enum":["approval"]},{"type":"object","required":["event","object_id"],"properties":{"event":{"type":"string","maxLength":200},"object_id":{"type":"string","maxLength":200}}}]},"expires_at":{"type":"string","format":"date-time"},"travel_rule":{"type":"object","properties":{"originator":{"type":"object"},"beneficiary":{"type":"object"}}},"reference":{"type":"string","maxLength":500},"external_ref":{"type":"string","maxLength":200,"description":"The document this belongs to in your own system."},"external_kind":{"type":"string","enum":["invoice","bill","order","booking","other"]},"remittance":{"type":"object","properties":{"invoice_number":{"type":"string","maxLength":200},"amount":{"type":"string","maxLength":40},"date":{"type":"string","maxLength":40}}},"dry_run":{"type":"boolean","description":"Check the request and report what would happen, without doing it."}}}},"reference":{"type":"string","maxLength":500},"dry_run":{"type":"boolean","description":"Check the request and report what would happen, without doing it."}}},"example":"{ payouts: [ ...as POST /payouts ], reference?, dry_run? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"payouts:write","x-moves-money":true,"x-idempotency":"required","x-untrusted":["reference","payouts.reference"]},"get":{"tags":["Paying out"],"summary":"Batches, newest first, each with the outcome of each payout in it. `?customer_id=` keeps the batches that hold a payout for that customer.","operationId":"payouts_batches.list","security":[{"bearerAuth":[]}],"parameters":[{"name":"customer_id","in":"query","required":false,"description":"The customer, by any of its ids.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"How many to return, 1 to 100.","schema":{"type":"integer","minimum":1}},{"name":"cursor","in":"query","required":false,"description":"The `next_cursor` of the previous page.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"payouts:read","x-moves-money":false,"x-idempotency":"none","x-untrusted":["reference","payouts.reference"]}},"/payouts/batches/{id}":{"get":{"tags":["Paying out"],"summary":"One batch, with the outcome of each payout in it.","operationId":"payouts_batches.get","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"payouts:read","x-moves-money":false,"x-idempotency":"none","x-untrusted":["reference","payouts.reference"]}},"/customers/{id}/payout-fees":{"get":{"tags":["Paying out"],"summary":"Who bears the cost of a bank payout, per currency and rail: `fees.usd.wire` and the like, as the banking partner states them. It decides whether a payee receives the amount sent or that amount less a fee.","operationId":"customers_payout_fees.get","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"payouts:read","x-moves-money":false,"x-idempotency":"none"},"patch":{"tags":["Paying out"],"summary":"Change who bears the cost of a bank payout. Only the entries sent change. An agent's own credential cannot change it.","operationId":"customers_payout_fees.update","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ fees: { usd: { wire } } }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"customers:write","x-moves-money":false,"x-idempotency":"none"}},"/customers/{id}/batch-settlement-schedules":{"post":{"tags":["Paying out"],"summary":"Collapse the customer's bank payouts on one currency and rail into a single settlement instead of one bank movement per payout. Kept by the banking partner; answers with the schedule's id. An agent's own credential cannot create one.","operationId":"customers.batch_settlement_schedules","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ currency, rail }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"payouts:write","x-moves-money":false,"x-idempotency":"optional"}},"/payouts/{id}":{"get":{"tags":["Paying out"],"summary":"One payout and where it has got to, with `amount_minor`, `fee_minor` and `authorisation`. While it is paused `status` is `on_hold` and `hold` gives `reason_code`, the reason in plain words and the deadline when there is one. `?wait=<seconds up to 30>&until=<state>` holds the answer until the payout is paid, returned, canceled, undeliverable or return_failed, or reaches the state named, or the wait ends.","operationId":"payouts.get","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"wait","in":"query","required":false,"description":"Seconds to hold the request, up to 30.","schema":{"type":"integer","minimum":1}},{"name":"until","in":"query","required":false,"description":"The state to wait for.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"payouts:read","x-moves-money":false,"x-idempotency":"none","x-untrusted":["reference","external_ref","remittance","hold.reason"]},"patch":{"tags":["Paying out"],"summary":"Change the amount of a payout that is still `awaiting_funds`; once its funds have arrived it is refused with 409 `payout_not_amendable`. Needs an Idempotency-Key. A higher amount is checked as the payout was, for the difference: the freeze, risk rules, mandate limits, budget and approval; if it is held, send the same request again with `Skerry-Approval` once a person has approved it. A lower amount is not checked, and what was already counted against a limit stays counted. The stored record takes the new amount and the difference is booked in the payout's movement. `amount` is a decimal string in the payout's currency; `amount_minor` may be sent instead.","operationId":"payouts.update","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":true,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"amount":{"type":"string","pattern":"^\\d{1,18}(\\.\\d{1,10})?$","description":"The new amount, a decimal string in the payout's currency. Send this or `amount_minor`."},"amount_minor":{"type":"integer","minimum":1,"description":"The new amount in integer minor units of the payout's currency."},"dry_run":{"type":"boolean","description":"Check the request and report what would happen, without doing it."}}},"example":"{ amount | amount_minor }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"payouts:write","x-moves-money":true,"x-idempotency":"required","x-untrusted":["reference","external_ref","remittance","hold.reason"]},"delete":{"tags":["Paying out"],"summary":"Cancel a payout that has not left yet. Its entries in the books are reversed and what it counted against a spend limit or budget is given back.","operationId":"payouts.delete","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"payouts:write","x-moves-money":false,"x-idempotency":"none","x-untrusted":["reference","external_ref","remittance","hold.reason"]}},"/rates":{"get":{"tags":["Paying out"],"summary":"The rate between two currencies. `?from=&to=`","operationId":"rates.get","security":[{"bearerAuth":[]}],"parameters":[{"name":"from","in":"query","required":true,"description":"Start of the period, or the currency converted from.","schema":{"type":"string"}},{"name":"to","in":"query","required":true,"description":"End of the period, or the currency converted to.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"*","x-moves-money":false,"x-idempotency":"none"}},"/customers/{id}/standing-orders":{"post":{"tags":["Standing conversion"],"summary":"An address that converts and pays out whatever arrives. `return_instructions` says where a deposit that cannot be converted goes back to. Under a mandate that covers `standing_order.create` the operation allow-list and approval rules apply.","operationId":"customers_standing_orders.create","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ chain, currency, delivers_to: { payee_id | wallet_id, currency?, rail? }, reference?, return_instructions?: { address, memo? } }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"standing_orders:write","x-moves-money":true,"x-idempotency":"optional","x-untrusted":["reference"]},"get":{"tags":["Standing conversion"],"summary":"The customer's standing orders.","operationId":"customers_standing_orders.list","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"standing_orders:read","x-moves-money":false,"x-idempotency":"none","x-untrusted":["reference"]}},"/customers/{id}/standing-orders/{standing_order_id}/conversions":{"get":{"tags":["Standing conversion"],"summary":"What one standing order has converted, newest first, as the banking partner reports it: each `{ id, amount, currency, status, standing_order_id, occurred_at }`.","operationId":"customers_standing_orders_conversions.list","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"standing_order_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"How many to return, 1 to 100.","schema":{"type":"integer","minimum":1}},{"name":"cursor","in":"query","required":false,"description":"The `next_cursor` of the previous page.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"standing_orders:read","x-moves-money":false,"x-idempotency":"none"}},"/events":{"get":{"tags":["Events and webhooks"],"summary":"What has happened, newest first. `?limit=&type=&types=a,b`. With `?after=<event id>` the order changes: the events recorded after that one, oldest first, with `next_after` to pass as the next `after`; `&wait=<seconds up to 30>` then holds the request until there is a new event or the wait ends.","operationId":"events.list","security":[{"bearerAuth":[]}],"parameters":[{"name":"limit","in":"query","required":false,"description":"How many to return, 1 to 100.","schema":{"type":"integer","minimum":1}},{"name":"type","in":"query","required":false,"schema":{"type":"string"}},{"name":"types","in":"query","required":false,"schema":{"type":"string"}},{"name":"after","in":"query","required":false,"description":"Continue after this id.","schema":{"type":"string"}},{"name":"wait","in":"query","required":false,"description":"Seconds to hold the request, up to 30.","schema":{"type":"integer","minimum":1}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"events:read","x-moves-money":false,"x-idempotency":"none","x-untrusted":["data"]}},"/events/{id}/replay":{"post":{"tags":["Events and webhooks"],"summary":"Deliver an event again, to every endpoint that wanted it.","operationId":"events.replay","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"webhooks:write","x-moves-money":false,"x-idempotency":"none","x-untrusted":["data"]}},"/events/types":{"get":{"tags":["Events and webhooks"],"summary":"The catalogue of event types: every type this API sends, the object it is about and when it is sent. `event_types` on an endpoint are checked against it.","operationId":"events_types.get","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"events:read","x-moves-money":false,"x-idempotency":"none","x-untrusted":["data"]}},"/webhooks":{"post":{"tags":["Events and webhooks"],"summary":"Register an endpoint. `url` must be https. `event_types` left out, empty or `*` means every event; a type the catalogue does not have is refused. The endpoint belongs to the project of the credential that registers it and counts against that project's plan.","operationId":"webhooks.create","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ url, event_types? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"webhooks:write","x-moves-money":false,"x-idempotency":"none"},"get":{"tags":["Events and webhooks"],"summary":"The endpoints registered in this environment, each with the `project_id` it belongs to.","operationId":"webhooks.list","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"webhooks:read","x-moves-money":false,"x-idempotency":"none"}},"/webhooks/{id}":{"patch":{"tags":["Events and webhooks"],"summary":"Change an endpoint's URL, events or status, held to the same checks as a new endpoint.","operationId":"webhooks.update","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ url?, event_types?, status? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"webhooks:write","x-moves-money":false,"x-idempotency":"none"},"delete":{"tags":["Events and webhooks"],"summary":"Remove an endpoint.","operationId":"webhooks.delete","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"webhooks:write","x-moves-money":false,"x-idempotency":"none"}},"/webhooks/{id}/roll-secret":{"post":{"tags":["Events and webhooks"],"summary":"Replace an endpoint's signing secret. Deliveries carry a signature for both secrets (`v1=…,v1=…`) during the overlap.","operationId":"webhooks.roll_secret","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ overlap_hours? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"webhooks:write","x-moves-money":false,"x-idempotency":"none"}},"/checkout-sessions":{"post":{"tags":["Accepting payments"],"summary":"Start a hosted checkout for a payer. `payment_instructions` adds stablecoin and bank transfer: the session then carries a deposit address and bank details with a reference to quote, and completes when the money arrives. A customer without card acceptance can open a session that has instructions only.","operationId":"checkout_sessions.create","security":[{"bearerAuth":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["customer_id","currency"],"properties":{"customer_id":{"type":"string","maxLength":200},"amount":{"type":"integer","minimum":1,"description":"Integer minor units of `currency`. Send this or `line_items`."},"line_items":{"type":"array","minItems":1,"maxItems":50,"items":{"type":"object","required":["name","amount"],"properties":{"name":{"type":"string","maxLength":200},"amount":{"type":"integer","minimum":1,"description":"Integer minor units of `currency`, for one unit."},"quantity":{"type":"integer","minimum":1,"maximum":10000},"description":{"type":"string","maxLength":500}}}},"currency":{"type":"string","pattern":"^[A-Za-z]{3}$"},"success_url":{"type":"string","format":"uri","description":"Required for a hosted card checkout."},"cancel_url":{"type":"string","format":"uri"},"methods":{"type":"array","items":{"type":"string"}},"payment_instructions":{"type":"object","required":["methods","wallet_id"],"properties":{"methods":{"type":"array","items":{"type":"string","enum":["stablecoin","bank_transfer"]}},"wallet_id":{"type":"string","maxLength":200},"chain":{"type":"string","maxLength":40},"coin":{"type":"string","maxLength":10}}},"authentication":{"type":"string","maxLength":40},"capture":{"type":"string","maxLength":40},"save_method":{"type":"boolean"},"payer_id":{"type":"string","maxLength":200},"payer":{"type":"object"},"expires_at":{"type":"string","format":"date-time"},"reference":{"type":"string","maxLength":200},"external_ref":{"type":"string","maxLength":200,"description":"The document this belongs to in your own system."},"external_kind":{"type":"string","enum":["invoice","bill","order","booking","other"]},"metadata":{"type":"object","maxProperties":20,"additionalProperties":{"type":"string","maxLength":500},"description":"Up to 20 keys of at most 40 characters, with string values of at most 500."},"ui":{"type":"string","enum":["hosted","embedded"]},"dry_run":{"type":"boolean","description":"Check the request and report what would happen, without doing it."}}},"example":"{ customer_id, amount | line_items, currency, success_url, cancel_url?, methods?, payment_instructions?: { methods: [stablecoin | bank_transfer], wallet_id, chain?, coin? }, authentication?, capture?, save_method?, payer_id? | payer?, expires_at?, reference?, external_ref?, external_kind?, metadata?, ui?, dry_run? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"payments:write","x-moves-money":true,"x-idempotency":"optional","x-untrusted":["reference","external_ref","metadata"]},"get":{"tags":["Accepting payments"],"summary":"Checkout sessions, newest first. `?customer_id=&status=&external_ref=`","operationId":"checkout_sessions.list","security":[{"bearerAuth":[]}],"parameters":[{"name":"customer_id","in":"query","required":false,"description":"The customer, by any of its ids.","schema":{"type":"string"}},{"name":"status","in":"query","required":false,"description":"Only objects in this state.","schema":{"type":"string"}},{"name":"external_ref","in":"query","required":false,"description":"The reference the object was given in your own system.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"How many to return, 1 to 100.","schema":{"type":"integer","minimum":1}},{"name":"cursor","in":"query","required":false,"description":"The `next_cursor` of the previous page.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"payments:read","x-moves-money":false,"x-idempotency":"none","x-untrusted":["reference","external_ref","metadata"]}},"/checkout-sessions/{id}":{"get":{"tags":["Accepting payments"],"summary":"One session. While open, this also asks the processor so a missed webhook cannot mislead. A session with payment instructions carries them, with `amount_received`, `amount_remaining` and `amount_overpaid`.","operationId":"checkout_sessions.get","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"payments:read","x-moves-money":false,"x-idempotency":"none","x-untrusted":["reference","external_ref","metadata"]}},"/checkout-sessions/{id}/expire":{"post":{"tags":["Accepting payments"],"summary":"Close an open session so it can no longer be paid.","operationId":"checkout_sessions.expire","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"payments:write","x-moves-money":false,"x-idempotency":"optional","x-untrusted":["reference","external_ref","metadata"]}},"/payment-links":{"post":{"tags":["Accepting payments"],"summary":"A reusable or single-use link to a hosted checkout for a fixed amount.","operationId":"payment_links.create","security":[{"bearerAuth":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["customer_id","amount","currency"],"properties":{"customer_id":{"type":"string","maxLength":200},"amount":{"type":"integer","minimum":1,"description":"Integer minor units of `currency`."},"currency":{"type":"string","pattern":"^[A-Za-z]{3}$"},"description":{"type":"string","maxLength":500},"reusable":{"type":"boolean"},"max_uses":{"type":"integer","minimum":1},"expires_at":{"type":"string","format":"date-time"},"reference":{"type":"string","maxLength":500},"external_ref":{"type":"string","maxLength":200,"description":"The document this belongs to in your own system."},"external_kind":{"type":"string","enum":["invoice","bill","order","booking","other"]},"success_url":{"type":"string","format":"uri"},"dry_run":{"type":"boolean","description":"Check the request and report what would happen, without doing it."}}},"example":"{ customer_id, amount, currency, description?, reusable?, max_uses?, expires_at?, reference?, external_ref?, external_kind?, success_url?, dry_run? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"payments:write","x-moves-money":true,"x-idempotency":"optional","x-untrusted":["description","reference","external_ref","metadata"]},"get":{"tags":["Accepting payments"],"summary":"Payment links, newest first. `?customer_id=&external_ref=`","operationId":"payment_links.list","security":[{"bearerAuth":[]}],"parameters":[{"name":"customer_id","in":"query","required":false,"description":"The customer, by any of its ids.","schema":{"type":"string"}},{"name":"external_ref","in":"query","required":false,"description":"The reference the object was given in your own system.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"How many to return, 1 to 100.","schema":{"type":"integer","minimum":1}},{"name":"cursor","in":"query","required":false,"description":"The `next_cursor` of the previous page.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"payments:read","x-moves-money":false,"x-idempotency":"none","x-untrusted":["description","reference","external_ref","metadata"]}},"/payment-links/{id}":{"get":{"tags":["Accepting payments"],"summary":"One payment link, with how many times it has been used.","operationId":"payment_links.get","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"payments:read","x-moves-money":false,"x-idempotency":"none","x-untrusted":["description","reference","external_ref","metadata"]},"patch":{"tags":["Accepting payments"],"summary":"Pause, resume or disable a link.","operationId":"payment_links.update","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ status }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"payments:write","x-moves-money":false,"x-idempotency":"none","x-untrusted":["description","reference","external_ref","metadata"]}},"/payments":{"get":{"tags":["Accepting payments"],"summary":"Payments, newest first. `?customer_id=&status=&reference=&external_ref=&payer_id=`","operationId":"payments.list","security":[{"bearerAuth":[]}],"parameters":[{"name":"customer_id","in":"query","required":false,"description":"The customer, by any of its ids.","schema":{"type":"string"}},{"name":"status","in":"query","required":false,"description":"Only objects in this state.","schema":{"type":"string"}},{"name":"reference","in":"query","required":false,"schema":{"type":"string"}},{"name":"external_ref","in":"query","required":false,"description":"The reference the object was given in your own system.","schema":{"type":"string"}},{"name":"payer_id","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"How many to return, 1 to 100.","schema":{"type":"integer","minimum":1}},{"name":"cursor","in":"query","required":false,"description":"The `next_cursor` of the previous page.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"payments:read","x-moves-money":false,"x-idempotency":"none","x-untrusted":["reference","external_ref","description","metadata"]},"post":{"tags":["Accepting payments"],"summary":"Charge a saved method with the payer absent, under the mandate they gave; or, with `payment_token`, charge a delegated payment token an agent holds for its buyer (a preview: 409 `capability_coming_soon` until it is switched on for the customer). Needs an Idempotency-Key.","operationId":"payments.create","security":[{"bearerAuth":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["customer_id","payer_id","payment_method_id","amount","currency","off_session"],"properties":{"customer_id":{"type":"string","maxLength":200},"payer_id":{"type":"string","maxLength":200},"payment_method_id":{"type":"string","maxLength":200},"amount":{"type":"integer","minimum":1,"description":"Integer minor units of `currency`."},"currency":{"type":"string","pattern":"^[A-Za-z]{3}$"},"off_session":{"type":"boolean","enum":[true]},"authentication":{"type":"string","maxLength":40},"capture":{"type":"string","maxLength":40},"reference":{"type":"string","maxLength":500},"external_ref":{"type":"string","maxLength":200,"description":"The document this belongs to in your own system."},"external_kind":{"type":"string","enum":["invoice","bill","order","booking","other"]},"description":{"type":"string","maxLength":500},"metadata":{"type":"object","maxProperties":20,"additionalProperties":{"type":"string","maxLength":500},"description":"Up to 20 keys of at most 40 characters, with string values of at most 500."},"dry_run":{"type":"boolean","description":"Check the request and report what would happen, without doing it."}}},"example":"{ customer_id, payer_id, payment_method_id, amount, currency, off_session: true, authentication?, capture?, reference?, external_ref?, external_kind?, description?, metadata? } | { customer_id, amount, currency, payment_token: { type: \"shared_payment_token\", id }, reference?, external_ref?, external_kind?, description?, metadata? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"payments:write","x-moves-money":true,"x-idempotency":"required","x-untrusted":["reference","external_ref","description","metadata"]}},"/payments/{id}":{"get":{"tags":["Accepting payments"],"summary":"One payment: status, fee, amounts received and refunded, and `risk` (level, score and how the payer's authentication ended) where the processor reports them. A payment that did not come by card also carries `method` (stablecoin, bank_transfer or machine), `payer_ref` and `amount_overpaid`; one an agent made carries `agent: { initiated, token_id, platform, token_limits, indicators }` and `agent_identity`. `?wait=<seconds up to 30>&until=<state>` holds the request until the payment succeeds, fails, is cancelled, refunded or disputed, or reaches the named state.","operationId":"payments.get","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"wait","in":"query","required":false,"description":"Seconds to hold the request, up to 30.","schema":{"type":"integer","minimum":1}},{"name":"until","in":"query","required":false,"description":"The state to wait for.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"payments:read","x-moves-money":false,"x-idempotency":"none","x-untrusted":["reference","external_ref","description","metadata"]}},"/payments/{id}/capture":{"post":{"tags":["Accepting payments"],"summary":"Collect funds that were held. May capture less than the hold.","operationId":"payments.capture","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"amount":{"type":"integer","minimum":1,"description":"Integer minor units of the payment's currency. Left out, the whole hold is captured."}}},"example":"{ amount? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"payments:write","x-moves-money":true,"x-idempotency":"optional","x-untrusted":["reference","external_ref","description","metadata"]}},"/payments/{id}/cancel":{"post":{"tags":["Accepting payments"],"summary":"Release a hold, or abandon a payment that has not succeeded.","operationId":"payments.cancel","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"payments:write","x-moves-money":false,"x-idempotency":"optional","x-untrusted":["reference","external_ref","description","metadata"]}},"/payments/{id}/refunds":{"post":{"tags":["Accepting payments"],"summary":"Refund all or part of a payment. A payment made by stablecoin or bank transfer goes back to where it came from when that is on record, otherwise to `destination`. Needs an Idempotency-Key.","operationId":"payments_refunds.create","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":true,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"amount":{"type":"integer","minimum":1,"description":"Integer minor units of the payment's currency. Left out, the whole payment is refunded."},"reason":{"type":"string","maxLength":500},"external_ref":{"type":"string","maxLength":200,"description":"The document this belongs to in your own system."},"external_kind":{"type":"string","enum":["invoice","bill","order","booking","other"]},"dry_run":{"type":"boolean","description":"Check the request and report what would happen, without doing it."}}},"example":"{ amount?, reason?, destination?: { address, chain? } | { payee_id }, external_ref?, external_kind? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"refunds:write","x-moves-money":true,"x-idempotency":"required","x-untrusted":["reason","external_ref"]},"get":{"tags":["Accepting payments"],"summary":"Refunds made against a payment.","operationId":"payments_refunds.list","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"payments:read","x-moves-money":false,"x-idempotency":"none","x-untrusted":["reason","external_ref"]}},"/disputes":{"get":{"tags":["Accepting payments"],"summary":"Disputes against payments, newest first. `?customer_id=&status=`","operationId":"disputes.list","security":[{"bearerAuth":[]}],"parameters":[{"name":"customer_id","in":"query","required":false,"description":"The customer, by any of its ids.","schema":{"type":"string"}},{"name":"status","in":"query","required":false,"description":"Only objects in this state.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"How many to return, 1 to 100.","schema":{"type":"integer","minimum":1}},{"name":"cursor","in":"query","required":false,"description":"The `next_cursor` of the previous page.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"payments:read","x-moves-money":false,"x-idempotency":"none","x-untrusted":["reason"]}},"/disputes/{id}":{"get":{"tags":["Accepting payments"],"summary":"One dispute, with the date evidence is due.","operationId":"disputes.get","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"payments:read","x-moves-money":false,"x-idempotency":"none","x-untrusted":["reason"]}},"/disputes/{id}/evidence":{"post":{"tags":["Accepting payments"],"summary":"Send evidence, and submit it when complete: text fields, file fields (the id of an uploaded file) and `enhanced_evidence`.","operationId":"disputes.evidence","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ evidence: { ... }, submit? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"payments:write","x-moves-money":false,"x-idempotency":"optional","x-untrusted":["reason"]}},"/disputes/{id}/files":{"post":{"tags":["Accepting payments"],"summary":"Upload a file to use as evidence: PDF, JPEG or PNG, up to 5 MB, base64-encoded.","operationId":"disputes_files.create","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ filename, content_type, data }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"payments:write","x-moves-money":false,"x-idempotency":"optional","x-untrusted":["filename"]},"get":{"tags":["Accepting payments"],"summary":"Files uploaded for a dispute, newest first.","operationId":"disputes_files.list","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"How many to return, 1 to 100.","schema":{"type":"integer","minimum":1}},{"name":"cursor","in":"query","required":false,"description":"The `next_cursor` of the previous page.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"payments:read","x-moves-money":false,"x-idempotency":"none","x-untrusted":["filename"]}},"/disputes/{id}/suggested-evidence":{"get":{"tags":["Accepting payments"],"summary":"A draft of the text evidence from what is on record: the session, what was bought, the delegated token and its limits, how the calling agent identified itself, and the times. For a person to review and send; nothing is submitted.","operationId":"disputes_suggested_evidence.get","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"payments:read","x-moves-money":false,"x-idempotency":"none","x-untrusted":["reason"]}},"/customers/{id}/unmatched-deposits":{"get":{"tags":["Accepting payments"],"summary":"Deposits that could not be credited to a checkout session (wrong coin or chain, no reference, an unknown reference, or late), waiting for a person. `?status=`","operationId":"customers_unmatched_deposits.list","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"status","in":"query","required":false,"description":"Only objects in this state.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"payments:read","x-moves-money":false,"x-idempotency":"none"}},"/customers/{id}/unmatched-deposits/{deposit_id}/assign":{"post":{"tags":["Accepting payments"],"summary":"Credit a deposit that was set aside to the checkout session it was meant for.","operationId":"customers_unmatched_deposits.assign","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"deposit_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ checkout_session_id }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"payments:write","x-moves-money":false,"x-idempotency":"optional"}},"/customers/{id}/unmatched-deposits/{deposit_id}/refund":{"post":{"tags":["Accepting payments"],"summary":"Send a deposit that was set aside back, whole: to where it came from when that is on record, otherwise to `destination`. Needs an Idempotency-Key.","operationId":"customers_unmatched_deposits.refund","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"deposit_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":true,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ destination?: { address, chain? } | { payee_id } }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"refunds:write","x-moves-money":true,"x-idempotency":"required"}},"/settlements":{"get":{"tags":["Accepting payments"],"summary":"Card proceeds on their way to the business's bank, newest first. `?customer_id=`","operationId":"settlements.list","security":[{"bearerAuth":[]}],"parameters":[{"name":"customer_id","in":"query","required":false,"description":"The customer, by any of its ids.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"How many to return, 1 to 100.","schema":{"type":"integer","minimum":1}},{"name":"cursor","in":"query","required":false,"description":"The `next_cursor` of the previous page.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"settlements:read","x-moves-money":false,"x-idempotency":"none"},"post":{"tags":["Accepting payments"],"summary":"Send proceeds to the business's bank now. Needs an Idempotency-Key.","operationId":"settlements.create","security":[{"bearerAuth":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["customer_id","amount","currency"],"properties":{"customer_id":{"type":"string","maxLength":200},"amount":{"type":"integer","minimum":1,"description":"Integer minor units of `currency`."},"currency":{"type":"string","pattern":"^[A-Za-z]{3}$"},"dry_run":{"type":"boolean","description":"Check the request and report what would happen, without doing it."}}},"example":"{ customer_id, amount, currency }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"settlements:write","x-moves-money":true,"x-idempotency":"required"}},"/settlements/{id}":{"get":{"tags":["Accepting payments"],"summary":"One settlement.","operationId":"settlements.get","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"settlements:read","x-moves-money":false,"x-idempotency":"none"}},"/customers/{id}/balances":{"get":{"tags":["Accepting payments"],"summary":"What the customer holds per currency: card proceeds (available, pending) and stablecoin.","operationId":"customers_balances.get","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"customers:read","x-moves-money":false,"x-idempotency":"none"}},"/payers":{"post":{"tags":["Payers, saved methods and subscriptions"],"summary":"Record someone who pays a customer.","operationId":"payers.create","security":[{"bearerAuth":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ customer_id, email?, name?, external_id? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"payments:write","x-moves-money":false,"x-idempotency":"optional","x-untrusted":["name","email"]},"get":{"tags":["Payers, saved methods and subscriptions"],"summary":"Payers, newest first. `?customer_id=`","operationId":"payers.list","security":[{"bearerAuth":[]}],"parameters":[{"name":"customer_id","in":"query","required":false,"description":"The customer, by any of its ids.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"How many to return, 1 to 100.","schema":{"type":"integer","minimum":1}},{"name":"cursor","in":"query","required":false,"description":"The `next_cursor` of the previous page.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"payments:read","x-moves-money":false,"x-idempotency":"none","x-untrusted":["name","email"]}},"/payers/{id}":{"get":{"tags":["Payers, saved methods and subscriptions"],"summary":"One payer.","operationId":"payers.get","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"payments:read","x-moves-money":false,"x-idempotency":"none","x-untrusted":["name","email"]}},"/payers/{id}/payment-methods":{"get":{"tags":["Payers, saved methods and subscriptions"],"summary":"Methods the payer saved: brand, last four, expiry, and the mandate.","operationId":"payers_payment_methods.list","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"payments:read","x-moves-money":false,"x-idempotency":"none","x-untrusted":["name","email"]}},"/payers/{id}/payment-methods/{method_id}":{"delete":{"tags":["Payers, saved methods and subscriptions"],"summary":"Forget a saved method and revoke its mandate.","operationId":"payers_payment_methods.delete","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"method_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"payments:write","x-moves-money":false,"x-idempotency":"none","x-untrusted":["name","email"]}},"/customers/{id}/payment-method-setups":{"post":{"tags":["Payers, saved methods and subscriptions"],"summary":"A hosted page where a payer saves a method for later, without paying now.","operationId":"customers.payment_method_setups","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ payer_id | payer, success_url, cancel_url }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"payments:write","x-moves-money":false,"x-idempotency":"optional"}},"/subscriptions":{"post":{"tags":["Payers, saved methods and subscriptions"],"summary":"Charge a payer on a schedule from a saved method. Needs an Idempotency-Key. Under a mandate that covers `subscription.create`, the amount of one period (integer minor units) is checked against the mandate and counted once.","operationId":"subscriptions.create","security":[{"bearerAuth":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["customer_id","payer_id","payment_method_id","currency","interval","items"],"properties":{"customer_id":{"type":"string","maxLength":200},"payer_id":{"type":"string","maxLength":200},"payment_method_id":{"type":"string","maxLength":200},"currency":{"type":"string","pattern":"^[A-Za-z]{3}$"},"interval":{"type":"string","maxLength":40},"interval_count":{"type":"integer","minimum":1},"items":{"type":"array","minItems":1,"items":{"type":"object","required":["name","amount"],"properties":{"name":{"type":"string","maxLength":500},"amount":{"type":"integer","minimum":1,"description":"Integer minor units of `currency`, for one unit."},"quantity":{"type":"integer","minimum":1}}}},"trial_days":{"type":"integer","minimum":0},"reference":{"type":"string","maxLength":500},"external_ref":{"type":"string","maxLength":200,"description":"The document this belongs to in your own system."},"external_kind":{"type":"string","enum":["invoice","bill","order","booking","other"]},"dry_run":{"type":"boolean","description":"Check the request and report what would happen, without doing it."}}},"example":"{ customer_id, payer_id, payment_method_id, currency, interval, interval_count?, items: [{ name, amount, quantity? }], trial_days?, reference?, external_ref?, external_kind?, dry_run? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"payments:write","x-moves-money":true,"x-idempotency":"required","x-untrusted":["reference","external_ref","metadata"]},"get":{"tags":["Payers, saved methods and subscriptions"],"summary":"Subscriptions, newest first. `?customer_id=&status=&payer_id=`","operationId":"subscriptions.list","security":[{"bearerAuth":[]}],"parameters":[{"name":"customer_id","in":"query","required":false,"description":"The customer, by any of its ids.","schema":{"type":"string"}},{"name":"status","in":"query","required":false,"description":"Only objects in this state.","schema":{"type":"string"}},{"name":"payer_id","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"How many to return, 1 to 100.","schema":{"type":"integer","minimum":1}},{"name":"cursor","in":"query","required":false,"description":"The `next_cursor` of the previous page.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"payments:read","x-moves-money":false,"x-idempotency":"none","x-untrusted":["reference","external_ref","metadata"]}},"/subscriptions/{id}":{"get":{"tags":["Payers, saved methods and subscriptions"],"summary":"One subscription.","operationId":"subscriptions.get","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"payments:read","x-moves-money":false,"x-idempotency":"none","x-untrusted":["reference","external_ref","metadata"]}},"/subscriptions/{id}/cancel":{"post":{"tags":["Payers, saved methods and subscriptions"],"summary":"End a subscription now or at the end of the paid period.","operationId":"subscriptions.cancel","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ at_period_end? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"payments:write","x-moves-money":false,"x-idempotency":"optional","x-untrusted":["reference","external_ref","metadata"]}},"/meters":{"post":{"tags":["Payers, saved methods and subscriptions"],"summary":"A usage meter on a customer's merchant account, for billing by use. Switched on account by account.","operationId":"meters.create","security":[{"bearerAuth":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ customer_id, name, event_name, aggregation? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"payments:write","x-moves-money":false,"x-idempotency":"optional"},"get":{"tags":["Payers, saved methods and subscriptions"],"summary":"Meters, newest first. `?customer_id=`","operationId":"meters.list","security":[{"bearerAuth":[]}],"parameters":[{"name":"customer_id","in":"query","required":false,"description":"The customer, by any of its ids.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"How many to return, 1 to 100.","schema":{"type":"integer","minimum":1}},{"name":"cursor","in":"query","required":false,"description":"The `next_cursor` of the previous page.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"payments:read","x-moves-money":false,"x-idempotency":"none"}},"/meters/{id}/events":{"post":{"tags":["Payers, saved methods and subscriptions"],"summary":"Record usage by a payer against a meter. `identifier` makes a retry count once.","operationId":"meters_events.create","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ payer_id, value, identifier?, timestamp? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"payments:write","x-moves-money":false,"x-idempotency":"optional"}},"/meters/{id}/summary":{"get":{"tags":["Payers, saved methods and subscriptions"],"summary":"What a payer has used over a period. `?payer_id=&from=&to=&group_by=hour|day`","operationId":"meters_summary.get","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"payer_id","in":"query","required":true,"schema":{"type":"string"}},{"name":"from","in":"query","required":false,"description":"Start of the period, or the currency converted from.","schema":{"type":"string"}},{"name":"to","in":"query","required":false,"description":"End of the period, or the currency converted to.","schema":{"type":"string"}},{"name":"group_by","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"payments:read","x-moves-money":false,"x-idempotency":"none"}},"/spend-policies":{"post":{"tags":["Limits, agents and approvals"],"summary":"Limit a key or an agent: a mandate. `scope` is required, `family` or `currency`, and decides the unit of every amount limit (see the group note); a request without it is refused with `invalid_request` naming `scope`. `operations` may name payment.charge, refund.create, payout.create, conversion.create, settlement.create, checkout.create, payment_link.create, subscription.create, standing_order.create, payee.create and wallet.create. `max_count` caps operations per `count_window` (day or month, rolling). `approve_operations` always wait for a person. `checkout_above` is the amount above which checkout sessions and payment links are checked. `merchant_allow_list` applies to operations that name a merchant; `wallet_allow_list` to the wallet money leaves. `evidence` records consent; with `consent_required` the mandate is inactive until verified evidence exists. The answer carries `mandate_id`, `summary` (the rule in sentences, generated from it) and `active`.","operationId":"spend_policies.create","security":[{"bearerAuth":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ customer_id, approved_by, scope: family | currency, key_id? | agent_id?, purpose?, max_amount?, daily_max?, monthly_max?, max_count?, count_window?, approval_above?, second_approval_above?, approvers_required?: 1 | 2, approval_evidence?: none | passkey, approval_expires_minutes?, approve_operations?, checkout_above?, currencies?, operations?, payee_allow_list?, merchant_allow_list?, wallet_allow_list?, valid_from?, expires_at?, consent_required?, evidence?: { method, subject, at, assertion?, attestation? } }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"policies:write","x-moves-money":false,"x-idempotency":"optional","x-untrusted":["name","purpose","approved_by","summary","revoked_reason"]},"get":{"tags":["Limits, agents and approvals"],"summary":"Policies, newest first, each with `usage`: what it has let through in the last 24 hours and 30 days and what remains, per currency family or currency, and how many operations. `?customer_id=&key_id=&status=`","operationId":"spend_policies.list","security":[{"bearerAuth":[]}],"parameters":[{"name":"customer_id","in":"query","required":false,"description":"The customer, by any of its ids.","schema":{"type":"string"}},{"name":"key_id","in":"query","required":false,"schema":{"type":"string"}},{"name":"status","in":"query","required":false,"description":"Only objects in this state.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"How many to return, 1 to 100.","schema":{"type":"integer","minimum":1}},{"name":"cursor","in":"query","required":false,"description":"The `next_cursor` of the previous page.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"policies:read","x-moves-money":false,"x-idempotency":"none","x-untrusted":["name","purpose","approved_by","summary","revoked_reason"]}},"/spend-policies/{id}":{"get":{"tags":["Limits, agents and approvals"],"summary":"One policy, with `summary`, `consent` (the evidence attached to the rule as it stands) and `active`.","operationId":"spend_policies.get","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"policies:read","x-moves-money":false,"x-idempotency":"none","x-untrusted":["name","purpose","approved_by","summary","revoked_reason"]},"patch":{"tags":["Limits, agents and approvals"],"summary":"Change a policy's amounts, counts, approval rules, purpose or dates. Who it binds and its allow-lists cannot change. Changing the rule detaches the consent evidence recorded for it. Changing `scope` changes the unit of every amount, so each amount limit the policy has must be sent again in the same request.","operationId":"spend_policies.update","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ max_amount?, daily_max?, monthly_max?, max_count?, count_window?, approval_above?, second_approval_above?, approvers_required?, approval_evidence?, approval_expires_minutes?, checkout_above?, purpose?, scope?, consent_required?, valid_from?, expires_at?, name? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"policies:write","x-moves-money":false,"x-idempotency":"none","x-untrusted":["name","purpose","approved_by","summary","revoked_reason"]}},"/spend-policies/{id}/revoke":{"post":{"tags":["Limits, agents and approvals"],"summary":"Revoke a policy, immediately.","operationId":"spend_policies.revoke","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ reason? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"policies:write","x-moves-money":false,"x-idempotency":"none","x-untrusted":["name","purpose","approved_by","summary","revoked_reason"]}},"/spend-policies/{id}/consent":{"post":{"tags":["Limits, agents and approvals"],"summary":"Record that a person agreed to the mandate as it stands. The evidence is stored with the mandate's canonical text and its SHA-256. `partner_attested` is taken on your word; `passkey` and `oauth` are `verified` only with an `attestation` signed by the configured identity provider naming the subject and the mandate hash, and are `unverified` when no identity provider is configured; `console_session` from a partner key is `unverified`. Refuses an agent's own credential.","operationId":"spend_policies_consent.create","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ method: console_session | passkey | oauth | partner_attested, subject, at, assertion?, attestation? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"policies:write","x-moves-money":false,"x-idempotency":"optional","x-untrusted":["name","purpose","approved_by","summary","revoked_reason"]},"get":{"tags":["Limits, agents and approvals"],"summary":"The evidence recorded for a mandate, newest first, each with the text it was about and whether it is the one attached now.","operationId":"spend_policies_consent.list","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"policies:read","x-moves-money":false,"x-idempotency":"none","x-untrusted":["name","purpose","approved_by","summary","revoked_reason"]}},"/spend-policies/{id}/usage":{"get":{"tags":["Limits, agents and approvals"],"summary":"The operations counted under a mandate, newest first: `op`, `amount` (integer minor units of `currency`; 0 for an operation that is checked and never counted, such as a checkout session), `payee_display` (the destination as the operation named it: a payee, payer or wallet id, an address, or `own_bank`), `produced` (`{ type, id }` of the object it created, where that is on record), `counted` (false once the operation failed, was cancelled or was returned, so it no longer counts against the limits) and `created_at`.","operationId":"spend_policies_usage.list","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"How many to return, 1 to 100.","schema":{"type":"integer","minimum":1}},{"name":"cursor","in":"query","required":false,"description":"The `next_cursor` of the previous page.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"policies:read","x-moves-money":false,"x-idempotency":"none","x-untrusted":["payee_display"]}},"/mandates":{"get":{"tags":["Limits, agents and approvals"],"summary":"A customer's spend policies as mandates (`object: \"mandate\"`, same ids), each with `usage`: per currency family or currency, what was spent in the last 24 hours and 30 days and what remains, in integer minor units of the unit named, and how many operations were let through. `?customer_id=` (required) `&status=`","operationId":"mandates.list","security":[{"bearerAuth":[]}],"parameters":[{"name":"customer_id","in":"query","required":true,"description":"The customer, by any of its ids.","schema":{"type":"string"}},{"name":"status","in":"query","required":false,"description":"Only objects in this state.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"How many to return, 1 to 100.","schema":{"type":"integer","minimum":1}},{"name":"cursor","in":"query","required":false,"description":"The `next_cursor` of the previous page.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"policies:read","x-moves-money":false,"x-idempotency":"none","x-untrusted":["name","purpose","approved_by","summary","revoked_reason"]}},"/approvals":{"get":{"tags":["Limits, agents and approvals"],"summary":"Operations held for a person to approve, newest first, each with `payee_display`: the destination as a person would recognise it, where there is one, and `decisions`: each decision recorded so far, oldest first, as `{ decision, actor_type, actor_ref, note, created_at }`. `actor_ref` is a key's id, a member's id or the reference an approver's links were made for; never a secret or a token. `?customer_id=&status=pending`","operationId":"approvals.list","security":[{"bearerAuth":[]}],"parameters":[{"name":"customer_id","in":"query","required":false,"description":"The customer, by any of its ids.","schema":{"type":"string"}},{"name":"status","in":"query","required":false,"description":"Only objects in this state.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"How many to return, 1 to 100.","schema":{"type":"integer","minimum":1}},{"name":"cursor","in":"query","required":false,"description":"The `next_cursor` of the previous page.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"approvals:read","x-moves-money":false,"x-idempotency":"none","x-untrusted":["reason","request","payee_display","decision_note","result","decisions.note"]}},"/approvals/{id}":{"get":{"tags":["Limits, agents and approvals"],"summary":"One held operation, as it was asked, with its `decisions`. `?wait=<seconds up to 30>&until=<state>` holds the request until it is approved, denied, executed, failed or expired, or reaches the named state.","operationId":"approvals.get","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"wait","in":"query","required":false,"description":"Seconds to hold the request, up to 30.","schema":{"type":"integer","minimum":1}},{"name":"until","in":"query","required":false,"description":"The state to wait for.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"approvals:read","x-moves-money":false,"x-idempotency":"none","x-untrusted":["reason","request","payee_display","decision_note","result","decisions.note"]}},"/approvals/{id}/approve":{"post":{"tags":["Limits, agents and approvals"],"summary":"Approve a held operation and run it once. The approving key must not be the one that asked and must not be acting as an agent. Where two approvers are needed the first approval leaves it held (`status: pending`). Where the mandate asks for passkey evidence, send it as `evidence`. For an operation the route itself performs (checkout sessions, payment links, subscriptions, standing orders, payees, wallets) approval does not run it: the answer says to send the request again with `Skerry-Approval`.","operationId":"approvals.approve","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ note?, evidence? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"approvals:write","x-moves-money":true,"x-idempotency":"none","x-untrusted":["reason","request","payee_display","decision_note","result","decisions.note"]}},"/approvals/{id}/deny":{"post":{"tags":["Limits, agents and approvals"],"summary":"Refuse a held operation.","operationId":"approvals.deny","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ note? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"approvals:write","x-moves-money":false,"x-idempotency":"none","x-untrusted":["reason","request","payee_display","decision_note","result","decisions.note"]}},"/approvals/{id}/links":{"post":{"tags":["Limits, agents and approvals"],"summary":"Make an approve link and a deny link for one person. Each opens a Skerry page stating what will run, works once and expires (`expires_minutes`, 60 by default, at most 1440). The decision is recorded against `approver`, your reference for that person. Refuses an agent.","operationId":"approvals.links","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ approver, email?, expires_minutes? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"approvals:write","x-moves-money":false,"x-idempotency":"none","x-untrusted":["reason","request","payee_display","decision_note","result","decisions.note"]}},"/approve/{token}":{"get":{"tags":["Limits, agents and approvals"],"summary":"The page behind an approval link. Public: the token is the credential. States the operation, amount, currency, destination, agent, mandate and why it was held. Opening it decides nothing.","operationId":"approve.get","security":[],"parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"none","x-moves-money":false,"x-idempotency":"none"},"post":{"tags":["Limits, agents and approvals"],"summary":"The page's confirm button: uses the link, records the decision against its approver and, when the operation is now approved, runs it. Public: the token is the credential.","operationId":"approve.confirm","security":[],"parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"none","x-moves-money":true,"x-idempotency":"none"}},"/customers/{id}/limits":{"get":{"tags":["Limits, agents and approvals"],"summary":"What a key or an agent may still move, per window. Without a name, the calling credential's own. With `?key_id=` or `?agent_id=`, another key's or agent's of the same account: that needs `policies:read` as well and is refused to an agent's own credential.","operationId":"customers_limits.get","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"key_id","in":"query","required":false,"schema":{"type":"string"}},{"name":"agent_id","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"customers:read","x-moves-money":false,"x-idempotency":"none"}},"/agents":{"post":{"tags":["Agents and credentials"],"summary":"Register an agent: who it is, who operates it, the customer it acts for and who authorised it.","operationId":"agents.create","security":[{"bearerAuth":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ name, authorised_by, customer_id?, operator?, description?, signature_required?, public_keys? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"agents:write","x-moves-money":false,"x-idempotency":"optional","x-untrusted":["name","operator","description","authorised_by"]},"get":{"tags":["Agents and credentials"],"summary":"Agents, newest first. `?customer_id=&status=&parent_agent_id=`","operationId":"agents.list","security":[{"bearerAuth":[]}],"parameters":[{"name":"customer_id","in":"query","required":false,"description":"The customer, by any of its ids.","schema":{"type":"string"}},{"name":"status","in":"query","required":false,"description":"Only objects in this state.","schema":{"type":"string"}},{"name":"parent_agent_id","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"How many to return, 1 to 100.","schema":{"type":"integer","minimum":1}},{"name":"cursor","in":"query","required":false,"description":"The `next_cursor` of the previous page.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"agents:read","x-moves-money":false,"x-idempotency":"none","x-untrusted":["name","operator","description","authorised_by"]}},"/agents/{id}":{"get":{"tags":["Agents and credentials"],"summary":"One agent, with its status and signing keys.","operationId":"agents.get","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"agents:read","x-moves-money":false,"x-idempotency":"none","x-untrusted":["name","operator","description","authorised_by"]},"patch":{"tags":["Agents and credentials"],"summary":"Change an agent's name, operator, description or whether it must sign requests.","operationId":"agents.update","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ name?, operator?, description?, signature_required? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"agents:write","x-moves-money":false,"x-idempotency":"optional","x-untrusted":["name","operator","description","authorised_by"]}},"/agents/{id}/suspend":{"post":{"tags":["Agents and credentials"],"summary":"Suspend an agent. Its keys, tokens, signatures and policies are refused from the next call, and so are the agents it delegated to.","operationId":"agents.suspend","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ reason? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"agents:write","x-moves-money":false,"x-idempotency":"optional","x-untrusted":["name","operator","description","authorised_by"]}},"/agents/{id}/resume":{"post":{"tags":["Agents and credentials"],"summary":"Resume a suspended agent.","operationId":"agents.resume","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ reason? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"agents:write","x-moves-money":false,"x-idempotency":"optional","x-untrusted":["name","operator","description","authorised_by"]}},"/agents/{id}/revoke":{"post":{"tags":["Agents and credentials"],"summary":"Revoke an agent permanently, with every agent it delegated to and all their keys.","operationId":"agents.revoke","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ reason? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"agents:write","x-moves-money":false,"x-idempotency":"optional","x-untrusted":["name","operator","description","authorised_by"]}},"/agents/{id}/keys":{"post":{"tags":["Agents and credentials"],"summary":"Mint a key bound to the agent. The secret is shown once. It may carry only scopes the calling key holds.","operationId":"agents_keys.create","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ scopes, name?, expires_at? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"keys:write","x-moves-money":false,"x-idempotency":"none","x-untrusted":["name","operator","description","authorised_by"]}},"/agents/{id}/public-keys":{"post":{"tags":["Agents and credentials"],"summary":"Register an Ed25519 public key (JWK) the agent signs requests with.","operationId":"agents_public_keys.create","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ jwk, expires_at? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"agents:write","x-moves-money":false,"x-idempotency":"optional","x-untrusted":["name","operator","description","authorised_by"]},"get":{"tags":["Agents and credentials"],"summary":"The agent's signing keys in force.","operationId":"agents_public_keys.list","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"agents:read","x-moves-money":false,"x-idempotency":"none","x-untrusted":["name","operator","description","authorised_by"]}},"/agents/{id}/public-keys/{kid}":{"delete":{"tags":["Agents and credentials"],"summary":"Remove a signing key.","operationId":"agents_public_keys.delete","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"kid","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"agents:write","x-moves-money":false,"x-idempotency":"none","x-untrusted":["name","operator","description","authorised_by"]}},"/agents/{id}/oauth-clients":{"post":{"tags":["Agents and credentials"],"summary":"Approve an OAuth client of the authorisation server to obtain access tokens that act as the agent with no person present. It may be given only scopes the calling key holds, and never `*`.","operationId":"agents_oauth_clients.create","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ client_id, scopes }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"agents:write","x-moves-money":false,"x-idempotency":"optional","x-untrusted":["name","operator","description","authorised_by"]},"get":{"tags":["Agents and credentials"],"summary":"The OAuth clients approved to act as the agent, newest first, as `oauth_clients: [{ client_id, issuer, scopes, created_at }]`. A withdrawn approval is not listed.","operationId":"agents_oauth_clients.list","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"How many to return, 1 to 100.","schema":{"type":"integer","minimum":1}},{"name":"cursor","in":"query","required":false,"description":"The `next_cursor` of the previous page.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"agents:read","x-moves-money":false,"x-idempotency":"none","x-untrusted":["name","operator","description","authorised_by"]},"delete":{"tags":["Agents and credentials"],"summary":"Withdraw an OAuth client's approval. `?client_id=`. The next token it asks for as this agent is refused.","operationId":"agents_oauth_clients.delete","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"client_id","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"agents:write","x-moves-money":false,"x-idempotency":"none","x-untrusted":["name","operator","description","authorised_by"]}},"/agents/{id}/delegations":{"post":{"tags":["Agents and credentials"],"summary":"Called with the agent's own credential: create a child agent with its own key and a narrower policy that expires no later than the parent's.","operationId":"agents_delegations.create","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ name, description?, scopes?, operations?, currencies?, payee_allow_list?, max_amount?, daily_max?, monthly_max?, approval_above?, expires_at? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"agents:write","x-moves-money":false,"x-idempotency":"none","x-untrusted":["name","operator","description","authorised_by"]}},"/keys":{"get":{"tags":["Agents and credentials"],"summary":"Keys in this environment, newest first, never with a secret, each with the `project_id` it belongs to. `?agent_id=&status=`","operationId":"keys.list","security":[{"bearerAuth":[]}],"parameters":[{"name":"agent_id","in":"query","required":false,"schema":{"type":"string"}},{"name":"status","in":"query","required":false,"description":"Only objects in this state.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"How many to return, 1 to 100.","schema":{"type":"integer","minimum":1}},{"name":"cursor","in":"query","required":false,"description":"The `next_cursor` of the previous page.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"keys:read","x-moves-money":false,"x-idempotency":"none","x-untrusted":["name"]}},"/keys/{id}":{"get":{"tags":["Agents and credentials"],"summary":"One key: scopes, bound agent, last use, expiry.","operationId":"keys.get","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"keys:read","x-moves-money":false,"x-idempotency":"none","x-untrusted":["name"]}},"/keys/{id}/roll":{"post":{"tags":["Agents and credentials"],"summary":"A new secret for the same key. The old one keeps working for the overlap (24 hours by default, 0 allowed).","operationId":"keys.roll","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ overlap_hours? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"keys:write","x-moves-money":false,"x-idempotency":"none","x-untrusted":["name"]}},"/keys/{id}/revoke":{"post":{"tags":["Agents and credentials"],"summary":"Revoke a key, immediately.","operationId":"keys.revoke","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ reason? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"keys:write","x-moves-money":false,"x-idempotency":"optional","x-untrusted":["name"]}},"/.well-known/http-message-signatures-directory":{"get":{"tags":["Agents and credentials"],"summary":"Agents' public signing keys as a key directory (a JWK Set). Public. `?agent=<agent id>` or `?partner=<partner id>&mode=live|sandbox`","operationId":"well_known_http_message_signatures_directory.get","security":[],"parameters":[{"name":"agent","in":"query","required":false,"schema":{"type":"string"}},{"name":"partner","in":"query","required":false,"schema":{"type":"string"}},{"name":"mode","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"none","x-moves-money":false,"x-idempotency":"none"}},"/.well-known/oauth-protected-resource":{"get":{"tags":["Agents and credentials"],"summary":"OAuth protected-resource metadata (RFC 9728). Public. 404 when access tokens are not accepted on this deployment.","operationId":"well_known_oauth_protected_resource.get","security":[],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"none","x-moves-money":false,"x-idempotency":"none"}},"/customers/{id}/freeze":{"post":{"tags":["Controls and audit"],"summary":"Freeze a customer: every money-out operation for it is refused with `customer_frozen`.","operationId":"customers.freeze","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ reason? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"controls:write","x-moves-money":false,"x-idempotency":"optional"},"get":{"tags":["Controls and audit"],"summary":"Whether one customer is frozen: `frozen`, `reason`, `frozen_at`, `frozen_by_key`, `frozen_by_agent`, and `account_frozen` when the whole account is frozen in this environment as well.","operationId":"customers_freeze.get","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"controls:read","x-moves-money":false,"x-idempotency":"none"}},"/customers/{id}/unfreeze":{"post":{"tags":["Controls and audit"],"summary":"Lift a customer's freeze.","operationId":"customers.unfreeze","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ reason? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"controls:write","x-moves-money":false,"x-idempotency":"optional"}},"/controls/freeze":{"post":{"tags":["Controls and audit"],"summary":"Freeze the whole account in this environment: every money-out operation is refused with `partner_frozen`.","operationId":"controls.freeze","security":[{"bearerAuth":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ reason? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"controls:write","x-moves-money":false,"x-idempotency":"optional"}},"/controls/unfreeze":{"post":{"tags":["Controls and audit"],"summary":"Lift the account's freeze.","operationId":"controls.unfreeze","security":[{"bearerAuth":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ reason? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"controls:write","x-moves-money":false,"x-idempotency":"optional"}},"/controls":{"get":{"tags":["Controls and audit"],"summary":"What is frozen right now: the account and each frozen customer.","operationId":"controls.get","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"controls:read","x-moves-money":false,"x-idempotency":"none"}},"/audit":{"get":{"tags":["Controls and audit"],"summary":"The audit trail, newest first. `?object_type=&object_id=&action=&agent_id=&key_id=`","operationId":"audit.list","security":[{"bearerAuth":[]}],"parameters":[{"name":"object_type","in":"query","required":false,"schema":{"type":"string"}},{"name":"object_id","in":"query","required":false,"schema":{"type":"string"}},{"name":"action","in":"query","required":false,"schema":{"type":"string"}},{"name":"agent_id","in":"query","required":false,"schema":{"type":"string"}},{"name":"key_id","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"How many to return, 1 to 100.","schema":{"type":"integer","minimum":1}},{"name":"cursor","in":"query","required":false,"description":"The `next_cursor` of the previous page.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"audit:read","x-moves-money":false,"x-idempotency":"none","x-untrusted":["detail"]}},"/audit/verify":{"get":{"tags":["Controls and audit"],"summary":"Walk the audit hash chain and report the first entry that does not fit. `?after=` continues a long walk.","operationId":"audit_verify.get","security":[{"bearerAuth":[]}],"parameters":[{"name":"after","in":"query","required":false,"description":"Continue after this id.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"audit:read","x-moves-money":false,"x-idempotency":"none","x-untrusted":["detail"]}},"/conversions/quote":{"post":{"tags":["Conversion and ledger"],"summary":"A priced offer to convert, valid for a short time and usable once.","operationId":"conversions.quote","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ customer_id, from: { currency, wallet_id }, to: { currency, wallet_id | payee_id }, amount }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"conversions:write","x-moves-money":false,"x-idempotency":"none","x-untrusted":["external_ref"]}},"/conversions":{"post":{"tags":["Conversion and ledger"],"summary":"Execute a quote. Needs an Idempotency-Key.","operationId":"conversions.create","security":[{"bearerAuth":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["quote_id"],"properties":{"quote_id":{"type":"string","maxLength":200},"external_ref":{"type":"string","maxLength":200,"description":"The document this belongs to in your own system."},"external_kind":{"type":"string","enum":["invoice","bill","order","booking","other"]},"dry_run":{"type":"boolean","description":"Check the request and report what would happen, without doing it."}}},"example":"{ quote_id, external_ref?, external_kind? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"conversions:write","x-moves-money":true,"x-idempotency":"required","x-untrusted":["external_ref"]},"get":{"tags":["Conversion and ledger"],"summary":"Conversions, newest first. `?customer_id=`","operationId":"conversions.list","security":[{"bearerAuth":[]}],"parameters":[{"name":"customer_id","in":"query","required":false,"description":"The customer, by any of its ids.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"How many to return, 1 to 100.","schema":{"type":"integer","minimum":1}},{"name":"cursor","in":"query","required":false,"description":"The `next_cursor` of the previous page.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"conversions:read","x-moves-money":false,"x-idempotency":"none","x-untrusted":["external_ref"]}},"/conversions/{id}":{"get":{"tags":["Conversion and ledger"],"summary":"One conversion and whether it has settled. `?wait=<seconds up to 30>&until=<state>` holds the request until it is completed or failed, or reaches the named state.","operationId":"conversions.get","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"wait","in":"query","required":false,"description":"Seconds to hold the request, up to 30.","schema":{"type":"integer","minimum":1}},{"name":"until","in":"query","required":false,"description":"The state to wait for.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"conversions:read","x-moves-money":false,"x-idempotency":"none","x-untrusted":["external_ref"]}},"/customers/{id}/ledger":{"get":{"tags":["Conversion and ledger"],"summary":"Double-entry entries for a period, as JSON or CSV, in booking order; `order=desc` reads newest first. Each JSON entry also carries `side`, `amount_minor`, `status` (pending or posted), `counterparty`, `rail`, `external_ref`, `external_kind`, `movement_id` (the receipt's id) and `reverses`. `?from=&to=&kind=&status=&external_ref=&order=desc&format=csv`","operationId":"customers_ledger.list","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"from","in":"query","required":false,"description":"Start of the period, or the currency converted from.","schema":{"type":"string"}},{"name":"to","in":"query","required":false,"description":"End of the period, or the currency converted to.","schema":{"type":"string"}},{"name":"kind","in":"query","required":false,"schema":{"type":"string"}},{"name":"status","in":"query","required":false,"description":"Only objects in this state.","schema":{"type":"string"}},{"name":"external_ref","in":"query","required":false,"description":"The reference the object was given in your own system.","schema":{"type":"string"}},{"name":"order","in":"query","required":false,"schema":{"type":"string"}},{"name":"format","in":"query","required":false,"description":"`csv` for a file instead of JSON.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"How many to return, 1 to 100.","schema":{"type":"integer","minimum":1}},{"name":"cursor","in":"query","required":false,"description":"The `next_cursor` of the previous page.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"ledger:read","x-moves-money":false,"x-idempotency":"none","x-untrusted":["counterparty","reference","external_ref"]}},"/customers/{id}/books":{"post":{"tags":["Books and receipts"],"summary":"Start connecting a customer's books. Returns `connect_url`, where a signed-in person approves the connection.","operationId":"customers_books.connect","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ provider?, project_id?, return_url? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"books:write","x-moves-money":false,"x-idempotency":"optional"},"get":{"tags":["Books and receipts"],"summary":"Whether the books are connected, to which project, and how delivery is going. `?probe=true` also asks the provider.","operationId":"customers_books.get","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"probe","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"books:read","x-moves-money":false,"x-idempotency":"none"},"delete":{"tags":["Books and receipts"],"summary":"End the connection. Movements stop being delivered.","operationId":"customers_books.disconnect","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"books:write","x-moves-money":false,"x-idempotency":"none"}},"/customers/{id}/books/backfill":{"post":{"tags":["Books and receipts"],"summary":"Send the movements of a period to the books again. Safe to repeat.","operationId":"customers_books.backfill","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ from, to }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"books:write","x-moves-money":false,"x-idempotency":"optional"}},"/customers/{id}/books/deliveries":{"get":{"tags":["Books and receipts"],"summary":"What was sent to the books and how it went, newest first. `?status=`","operationId":"customers_books_deliveries.list","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"status","in":"query","required":false,"description":"Only objects in this state.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"books:read","x-moves-money":false,"x-idempotency":"none"}},"/customers/{id}/books/links":{"get":{"tags":["Books and receipts"],"summary":"Where the statement, invoices, bills, reports and reconciliation are in the customer's books. `?from=&to=&external_ref=&external_kind=`","operationId":"customers_books_links.get","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"from","in":"query","required":false,"description":"Start of the period, or the currency converted from.","schema":{"type":"string"}},{"name":"to","in":"query","required":false,"description":"End of the period, or the currency converted to.","schema":{"type":"string"}},{"name":"external_ref","in":"query","required":false,"description":"The reference the object was given in your own system.","schema":{"type":"string"}},{"name":"external_kind","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"books:read","x-moves-money":false,"x-idempotency":"none"}},"/books/connections":{"post":{"tags":["Books and receipts"],"summary":"Complete a connection. Called by the books provider's server after a person approved; the one-time token is the credential, and the answer carries the feed's signing secret once. Public.","operationId":"books_connections.complete","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ token, project_id, connection_id, feed_url, links: { statement, invoices, bills, reports, reconcile }, scopes? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"none","x-moves-money":false,"x-idempotency":"none"}},"/receipts/{id}":{"get":{"tags":["Books and receipts"],"summary":"The signed receipt of one movement: amounts, fee, rate, the other party, rail, references, and the key, agent and policy that caused it.","operationId":"receipts.get","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"ledger:read","x-moves-money":false,"x-idempotency":"none","x-untrusted":["counterparty","reference","external_ref"]}},"/.well-known/skerry-receipt-keys":{"get":{"tags":["Books and receipts"],"summary":"The public keys receipts are signed with. Public.","operationId":"well_known_skerry_receipt_keys.get","security":[],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"none","x-moves-money":false,"x-idempotency":"none"}},"/customers/{id}/budgets":{"post":{"tags":["Budgets"],"summary":"Set aside an amount of a wallet's balance for a mandate or an agent. `amount` and `low_below` are integer minor units of `currency`. Refused with `insufficient_funds` when the wallet does not hold that much free. Not for an agent's own credential.","operationId":"customers_budgets.create","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ wallet_id, currency, amount, mandate_id | agent_id, name?, low_below? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"budgets:write","x-moves-money":false,"x-idempotency":"optional"},"get":{"tags":["Budgets"],"summary":"The customer's budgets, newest first, each with `amount`, `spent` and `remaining` in minor units of its currency. `?status=active|released`","operationId":"customers_budgets.list","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"status","in":"query","required":false,"description":"Only objects in this state.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"How many to return, 1 to 100.","schema":{"type":"integer","minimum":1}},{"name":"cursor","in":"query","required":false,"description":"The `next_cursor` of the previous page.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"budgets:read","x-moves-money":false,"x-idempotency":"none"}},"/customers/{id}/budgets/{budget_id}":{"get":{"tags":["Budgets"],"summary":"One budget, with what was spent from it and what remains.","operationId":"customers_budgets.get","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"budget_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"budgets:read","x-moves-money":false,"x-idempotency":"none"}},"/customers/{id}/budgets/{budget_id}/top-up":{"post":{"tags":["Budgets"],"summary":"Add to a budget. `amount` is integer minor units of the budget's currency. Re-arms `budget.low` and `budget.exhausted`.","operationId":"customers_budgets.top_up","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"budget_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ amount }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"budgets:write","x-moves-money":false,"x-idempotency":"optional"}},"/customers/{id}/budgets/{budget_id}/release":{"post":{"tags":["Budgets"],"summary":"Release a budget: what was not spent is free for other callers again.","operationId":"customers_budgets.release","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"budget_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"budgets:write","x-moves-money":false,"x-idempotency":"optional"}},"/customers/{id}/payee-controls":{"get":{"tags":["Customer controls"],"summary":"How a new destination is treated: `new_payee_hold`, `payee_cooling_off_minutes` and `cooling_off_max`.","operationId":"customers_payee_controls.get","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"controls:read","x-moves-money":false,"x-idempotency":"none"},"put":{"tags":["Customer controls"],"summary":"Hold the first payout to a payee, wallet or address the customer has never paid (an approval with reason `new_payee`), and limit what a newly trusted destination can be paid during its cooling-off period. `cooling_off_max` is integer minor units of the fiat currency of the payout's unit family (cents); null means nothing.","operationId":"customers_payee_controls.replace","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ new_payee_hold?, payee_cooling_off_minutes?, cooling_off_max? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"controls:write","x-moves-money":false,"x-idempotency":"none"}},"/customers/{id}/trusted-payees":{"post":{"tags":["Customer controls"],"summary":"Trust a destination before it is first paid, so that payout is not held. Its cooling-off period starts now. A person's decision: refused for an agent's own credential.","operationId":"customers_trusted_payees.create","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ payee_id | wallet_id | address, chain? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"payees:write","x-moves-money":false,"x-idempotency":"optional"},"get":{"tags":["Customer controls"],"summary":"Destinations the customer has paid or a person has trusted, newest first, with how each came to be trusted (`source`: paid, pre_approved or approved).","operationId":"customers_trusted_payees.list","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"How many to return, 1 to 100.","schema":{"type":"integer","minimum":1}},{"name":"cursor","in":"query","required":false,"description":"The `next_cursor` of the previous page.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"payees:read","x-moves-money":false,"x-idempotency":"none"}},"/customers/{id}/risk-rules":{"get":{"tags":["Customer controls"],"summary":"The customer's velocity and anomaly rules. A rule that is null is off.","operationId":"customers_risk_rules.get","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"controls:read","x-moves-money":false,"x-idempotency":"none"},"put":{"tags":["Customer controls"],"summary":"Replace the customer's risk rules. Each rule has `action`: `approve` turns an operation that trips it into an approval with the reason, `refuse` refuses it with `risk_refused`. Rules are counted from recorded operations, outside any model.","operationId":"customers_risk_rules.replace","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ rules: { velocity?: { max_count, window_minutes, action }, amount_anomaly?: { factor, min_samples?, action }, first_use?: { dimensions?, action }, lookalike_address?: { max_different?, action } } }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"controls:write","x-moves-money":false,"x-idempotency":"none"}},"/customers/{id}/withdrawal-allow-list":{"get":{"tags":["Customer controls"],"summary":"The destinations this customer's payouts may go to. `destinations: null` means there is no list.","operationId":"customers_withdrawal_allow_list.get","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"controls:read","x-moves-money":false,"x-idempotency":"none"},"put":{"tags":["Customer controls"],"summary":"Replace the withdrawal allow-list: payee ids, wallet ids and addresses, up to 500. While a list is in force every payout by any caller must go to a destination on it (`destination_not_allowed` otherwise), in addition to any mandate's own allow-list. `null` removes the list.","operationId":"customers_withdrawal_allow_list.replace","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ destinations: [ ... ] | null }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"controls:write","x-moves-money":false,"x-idempotency":"none"}},"/customers/{id}/approvers":{"post":{"tags":["Customer controls"],"summary":"Name a person who is emailed an approve link and a deny link when one of this customer's operations is held. `reference` is your identifier for the person. `mail_configured` in the answer says whether this deployment sends mail.","operationId":"customers_approvers.create","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ email, reference, name? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"approvals:write","x-moves-money":false,"x-idempotency":"optional","x-untrusted":["name","email","reference"]},"get":{"tags":["Customer controls"],"summary":"The customer's approvers, and whether this deployment sends mail.","operationId":"customers_approvers.list","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"approvals:read","x-moves-money":false,"x-idempotency":"none","x-untrusted":["name","email","reference"]},"delete":{"tags":["Customer controls"],"summary":"Remove an approver. `?email=`","operationId":"customers_approvers.delete","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"email","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"approvals:write","x-moves-money":false,"x-idempotency":"none","x-untrusted":["name","email","reference"]}},"/customers/{id}/wallets/{wallet_id}":{"get":{"tags":["Wallet controls"],"summary":"One wallet: balances (decimal `amount` and `amount_minor` in integer minor units of `currency`), `label`, `purpose`, `agent_id` and `floor`.","operationId":"customers_wallets.get","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"wallet_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"wallets:read","x-moves-money":false,"x-idempotency":"none","x-untrusted":["label","purpose"]},"patch":{"tags":["Wallet controls"],"summary":"Change a wallet's label, purpose, agent or floor. `floor.amount` is integer minor units of `floor.currency`; `balance.low` is sent when the balance falls under it.","operationId":"customers_wallets.update","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"wallet_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ label?, purpose?, agent_id?, floor?: { amount, currency } | null }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"wallets:write","x-moves-money":false,"x-idempotency":"none","x-untrusted":["label","purpose"]}},"/customers/{id}/sweep-rules":{"post":{"tags":["Wallet controls"],"summary":"Keep at most (`keep_at_most`, with `to`) or at least (`keep_at_least`, with `from`) an amount in a wallet, checked every `every_minutes` (5 or more). `amount` is integer minor units of `currency`. Both currencies must be of one unit family.","operationId":"customers_sweep_rules.create","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ wallet_id, currency, kind, amount, to?: { wallet_id | payee_id, currency }, from?: { wallet_id, currency }, every_minutes }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"sweeps:write","x-moves-money":true,"x-idempotency":"optional"},"get":{"tags":["Wallet controls"],"summary":"The customer's sweep rules, newest first, with how each last ran (`last_result`). `?status=active|canceled`","operationId":"customers_sweep_rules.list","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"status","in":"query","required":false,"description":"Only objects in this state.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"How many to return, 1 to 100.","schema":{"type":"integer","minimum":1}},{"name":"cursor","in":"query","required":false,"description":"The `next_cursor` of the previous page.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"sweeps:read","x-moves-money":false,"x-idempotency":"none"}},"/customers/{id}/sweep-rules/{rule_id}":{"get":{"tags":["Wallet controls"],"summary":"One sweep rule.","operationId":"customers_sweep_rules.get","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"rule_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"sweeps:read","x-moves-money":false,"x-idempotency":"none"},"delete":{"tags":["Wallet controls"],"summary":"Cancel a sweep rule. A payout it already made is not recalled.","operationId":"customers_sweep_rules.delete","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"rule_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"sweeps:write","x-moves-money":false,"x-idempotency":"none"}},"/payouts/scheduled":{"get":{"tags":["Scheduled payouts and waiting"],"summary":"Scheduled payouts, newest first. `?customer_id=&status=scheduled|waiting|running|completed|canceled|failed`","operationId":"payouts_scheduled.list","security":[{"bearerAuth":[]}],"parameters":[{"name":"customer_id","in":"query","required":false,"description":"The customer, by any of its ids.","schema":{"type":"string"}},{"name":"status","in":"query","required":false,"description":"Only objects in this state.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"How many to return, 1 to 100.","schema":{"type":"integer","minimum":1}},{"name":"cursor","in":"query","required":false,"description":"The `next_cursor` of the previous page.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"payouts:read","x-moves-money":false,"x-idempotency":"none","x-untrusted":["reference","external_ref","remittance","hold.reason"]}},"/payouts/scheduled/{id}":{"get":{"tags":["Scheduled payouts and waiting"],"summary":"One scheduled payout: when it runs next, how many times it has run, the last payout it made and how the last run went.","operationId":"payouts_scheduled.get","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"payouts:read","x-moves-money":false,"x-idempotency":"none","x-untrusted":["reference","external_ref","remittance","hold.reason"]},"delete":{"tags":["Scheduled payouts and waiting"],"summary":"Cancel a scheduled payout that has not run, or stop a recurring one. What was set aside is free again. Payouts already made are not recalled.","operationId":"payouts_scheduled.delete","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ reason? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"payouts:write","x-moves-money":false,"x-idempotency":"none","x-untrusted":["reference","external_ref","remittance","hold.reason"]}},"/payouts/{id}/release":{"post":{"tags":["Scheduled payouts and waiting"],"summary":"A person releases a conditional payout (`{id}` is the scheduled payout's id): it runs now, spending what was set aside for it. An agent's own credential is refused.","operationId":"payouts.release","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"payouts:write","x-moves-money":true,"x-idempotency":"optional","x-untrusted":["reference","external_ref","remittance","hold.reason"]}},"/payments/{id}/authorisation":{"get":{"tags":["Authorisation evidence"],"summary":"The evidence for one payment: the mandate's text, hash and summary, the consent evidence, the approval with each decision and who made it, the agent and the agents it was delegated from, how the request was authenticated, and the audit entries about it.","operationId":"payments_authorisation.get","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"audit:read","x-moves-money":false,"x-idempotency":"none","x-untrusted":["mandate.text","mandate.summary","consent.subject","approval.decisions","audit"]}},"/payouts/{id}/authorisation":{"get":{"tags":["Authorisation evidence"],"summary":"The same record for one payout.","operationId":"payouts_authorisation.get","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"audit:read","x-moves-money":false,"x-idempotency":"none","x-untrusted":["mandate.text","mandate.summary","consent.subject","approval.decisions","audit"]}},"/refunds/{id}/authorisation":{"get":{"tags":["Authorisation evidence"],"summary":"The same record for one refund.","operationId":"refunds_authorisation.get","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"audit:read","x-moves-money":false,"x-idempotency":"none","x-untrusted":["mandate.text","mandate.summary","consent.subject","approval.decisions","audit"]}},"/conversions/{id}/authorisation":{"get":{"tags":["Authorisation evidence"],"summary":"The same record for one conversion.","operationId":"conversions_authorisation.get","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"audit:read","x-moves-money":false,"x-idempotency":"none","x-untrusted":["mandate.text","mandate.summary","consent.subject","approval.decisions","audit"]}},"/sandbox/checkout-sessions/{id}/complete":{"post":{"tags":["Sandbox"],"summary":"Act as the payer: succeed, decline, run short of funds, or open a dispute.","operationId":"sandbox_checkout_sessions.complete","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ outcome }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"payments:write","x-moves-money":false,"x-idempotency":"none"}},"/sandbox/approvals/{id}/decide":{"post":{"tags":["Sandbox"],"summary":"Decide a held operation as a person would, without a second key or a link. Where two approvers are needed, call it twice with different `approver` values.","operationId":"sandbox_approvals.decide","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ decision: approve | deny, approver? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"approvals:write","x-moves-money":true,"x-idempotency":"none"}},"/sandbox/payouts/scheduled/{id}/advance":{"post":{"tags":["Sandbox"],"summary":"Run a scheduled payout now instead of at its time, as the worker would. A recurring schedule moves on to its next run.","operationId":"sandbox_payouts_scheduled.advance","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"payouts:write","x-moves-money":true,"x-idempotency":"none"}},"/sandbox/events":{"post":{"tags":["Sandbox"],"summary":"Record a named event about an object, marked `sandbox: true`, so a conditional payout waiting for it is released and a webhook receiver can be exercised.","operationId":"sandbox_events.create","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ type, object_id, customer_id?, payload? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"events:write","x-moves-money":true,"x-idempotency":"none","x-untrusted":["payload"]}},"/sandbox/customers/{id}/risk-rules/trip":{"post":{"tags":["Sandbox"],"summary":"Set one risk rule on a customer, with the history it needs, so that the next matching operation trips it. The answer says what to send.","operationId":"sandbox_customers_risk_rules.trip","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ rule, action? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"controls:write","x-moves-money":false,"x-idempotency":"none"}},"/sandbox/budgets/{id}/exhaust":{"post":{"tags":["Sandbox"],"summary":"Mark what remains of a budget as spent in Skerry's record, so `budget.exhausted` is emitted and the next operation under it is refused. Nothing is sent to a provider.","operationId":"sandbox_budgets.exhaust","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"budgets:write","x-moves-money":false,"x-idempotency":"none"}},"/sandbox/checkout-sessions/{id}/deposit":{"post":{"tags":["Sandbox"],"summary":"Act as the payer on a session's stablecoin or bank-transfer instructions: pay it, underpay, overpay, pay late, or send the wrong coin, chain or reference. `amount` is integer minor units of the session's currency; left out, it is what is still owed.","operationId":"sandbox_checkout_sessions.deposit","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ method?, amount?, coin?, chain?, reference?, state?, at?, deposit_ref? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"payments:write","x-moves-money":false,"x-idempotency":"none"}},"/customers/{id}/agentic/credentials":{"post":{"tags":["Agentic checkout: what a customer sets"],"summary":"Issue a bearer token to an agent platform. The secret, and the signing and webhook secrets when asked for, are shown once. The token is kept as a hash and the signing and webhook secrets sealed; a deployment with no sealing key refuses a credential that needs either with 503 `platform_unavailable`.","operationId":"customers_agentic_credentials.create","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ name, platform?, webhook_url?, require_signature? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"agentic:write","x-moves-money":false,"x-idempotency":"none"},"get":{"tags":["Agentic checkout: what a customer sets"],"summary":"The customer's agent-platform credentials, never with a secret.","operationId":"customers_agentic_credentials.list","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"agentic:read","x-moves-money":false,"x-idempotency":"none"}},"/customers/{id}/agentic/credentials/{credential_id}":{"delete":{"tags":["Agentic checkout: what a customer sets"],"summary":"Revoke a credential.","operationId":"customers_agentic_credentials.delete","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"credential_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"agentic:write","x-moves-money":false,"x-idempotency":"none"}},"/customers/{id}/agentic/pricing-callback":{"post":{"tags":["Agentic checkout: what a customer sets"],"summary":"Register the URL asked for line items, totals, tax and fulfilment each time a session is created or changed. Signed, with a short timeout. `url: null` removes it; without one only fixed-amount payment links can be sold.","operationId":"customers_agentic.pricing_callback","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ url }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"agentic:write","x-moves-money":false,"x-idempotency":"none"}},"/customers/{id}/agentic/settings":{"get":{"tags":["Agentic checkout: what a customer sets"],"summary":"What the customer allows agents, and the address agent platforms call.","operationId":"customers_agentic_settings.get","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"agentic:read","x-moves-money":false,"x-idempotency":"none"},"post":{"tags":["Agentic checkout: what a customer sets"],"summary":"Change what the customer allows agents: verified agents only, the refunds an agent may start, the links a session shows, whether payment links answer automated clients with a challenge, and how long unused credit is refundable.","operationId":"customers_agentic_settings.update","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ require_verified_agent?, refunds?: { window_days?, max_amount?, needs_approval? }, links?, links_pay_by_call?, credit_refund_days? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"agentic:write","x-moves-money":false,"x-idempotency":"none"}},"/customers/{id}/agentic/refund-requests":{"get":{"tags":["Agentic checkout: what a customer sets"],"summary":"Refunds agents have asked for, newest first. `?status=pending`","operationId":"customers_agentic_refund_requests.list","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"status","in":"query","required":false,"description":"Only objects in this state.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"agentic:read","x-moves-money":false,"x-idempotency":"none"}},"/customers/{id}/agentic/refund-requests/{request_id}":{"post":{"tags":["Agentic checkout: what a customer sets"],"summary":"Approve or deny a refund an agent asked for. Approving runs it as a refund under the deciding key's policies.","operationId":"customers_agentic_refund_requests.decide","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"request_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ decision: approve | deny, note? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"refunds:write","x-moves-money":true,"x-idempotency":"optional"}},"/customers/{id}/agentic/orders/{session_id}":{"post":{"tags":["Agentic checkout: what a customer sets"],"summary":"Say where an order has got to; the agent platform is told with a signed order event. The event is recorded before it is sent; one that fails is tried again on the webhook backoff, and `webhook` says how the first attempt went.","operationId":"customers_agentic_orders.update","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"session_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ status, estimated_delivery? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"agentic:write","x-moves-money":false,"x-idempotency":"optional"},"get":{"tags":["Agentic checkout: what a customer sets"],"summary":"Where an order stands: the order as the agent platform was last told it, `session_status`, and `webhook`: how the last order event went (`status` pending, delivered or exhausted, with `attempts`, or `reason: no_webhook`).","operationId":"customers_agentic_orders.get","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"session_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"agentic:read","x-moves-money":false,"x-idempotency":"none"}},"/agentic/{customer_id}/checkout_sessions":{"post":{"tags":["Agentic Commerce Protocol"],"summary":"Create a checkout session. Answers 201 with the session.","operationId":"agentic_checkout_sessions.create","security":[{"bearerAuth":[]}],"parameters":[{"name":"customer_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ line_items: [{ id, quantity? }], currency, capabilities?, buyer?, fulfillment_details?, discounts? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"agent_credential","x-moves-money":false,"x-idempotency":"none"}},"/agentic/{customer_id}/checkout_sessions/{checkout_session_id}":{"get":{"tags":["Agentic Commerce Protocol"],"summary":"Retrieve a checkout session.","operationId":"agentic_checkout_sessions.get","security":[{"bearerAuth":[]}],"parameters":[{"name":"customer_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"checkout_session_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"agent_credential","x-moves-money":false,"x-idempotency":"none"},"post":{"tags":["Agentic Commerce Protocol"],"summary":"Update a checkout session: items, buyer, fulfilment details, the fulfilment option chosen. It comes back re-priced.","operationId":"agentic_checkout_sessions.update","security":[{"bearerAuth":[]}],"parameters":[{"name":"customer_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"checkout_session_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ line_items?, buyer?, fulfillment_details?, selected_fulfillment_options?, discounts? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"agent_credential","x-moves-money":false,"x-idempotency":"none"}},"/agentic/{customer_id}/checkout_sessions/{checkout_session_id}/complete":{"post":{"tags":["Agentic Commerce Protocol"],"summary":"Complete with a delegated payment token. A decline leaves the session payable with a message; a bank that wants the buyer to authenticate makes it `authentication_required`.","operationId":"agentic_checkout_sessions.complete","security":[{"bearerAuth":[]}],"parameters":[{"name":"customer_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"checkout_session_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ payment_data: { handler_id, instrument: { type, credential: { type, token } } }, buyer?, authentication_result? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"agent_credential","x-moves-money":true,"x-idempotency":"none"}},"/agentic/{customer_id}/checkout_sessions/{checkout_session_id}/cancel":{"post":{"tags":["Agentic Commerce Protocol"],"summary":"Cancel a session that has not completed. 405 afterwards.","operationId":"agentic_checkout_sessions.cancel","security":[{"bearerAuth":[]}],"parameters":[{"name":"customer_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"checkout_session_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ intent_trace? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"agent_credential","x-moves-money":false,"x-idempotency":"none"}},"/agentic/{customer_id}/checkout_sessions/{checkout_session_id}/refunds":{"post":{"tags":["Agentic Commerce Protocol"],"summary":"A Skerry extension (`xyz.skerry.refunds`), not part of the protocol: ask for a refund of a completed session, within what the business allows agents. 202 when a person must approve, 201 when it was made.","operationId":"agentic_checkout_sessions.refunds","security":[{"bearerAuth":[]}],"parameters":[{"name":"customer_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"checkout_session_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ amount?, reason? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"agent_credential","x-moves-money":true,"x-idempotency":"none","x-untrusted":["reason","external_ref"]}},"/customers/{id}/ucp/settings":{"get":{"tags":["Universal Commerce Protocol: what a customer sets"],"summary":"What the customer has set for the Universal Commerce Protocol, with `profile_url` (where its business profile is served), `endpoint`, and `signing_key`: the public half of its signing key, never the private half.","operationId":"customers_ucp_settings.get","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"agentic:read","x-moves-money":false,"x-idempotency":"none"},"put":{"tags":["Universal Commerce Protocol: what a customer sets"],"summary":"Replace the customer's settings: the platforms it accepts, its profile id at the card processor, the card brands and links it publishes, which wording the handler's environment uses, whether the AP2 mandates extension is on, and (sandbox only) whether unsigned requests are taken. A member left out goes back to its default. The signing key is made on the first save and kept sealed; a deployment with no sealing key answers 503 `platform_unavailable`.","operationId":"customers_ucp_settings.replace","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ trusted_profiles?: [url], business_profile?, card_brands?, links?: [{ type, url }], environment_words?: handler | seller_guide, ap2_enabled?, allow_unsigned? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"agentic:write","x-moves-money":false,"x-idempotency":"none"}},"/ucp/{customer_id}/.well-known/ucp":{"get":{"tags":["Universal Commerce Protocol"],"summary":"The customer's business profile: version, the shopping service and its endpoint, capabilities, the card processor's payment handler, and the customer's public signing key. Public, cacheable for a minute. The business serves or redirects its own `/.well-known/ucp` here.","operationId":"ucp_well_known_ucp.get","security":[],"parameters":[{"name":"customer_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"none","x-moves-money":false,"x-idempotency":"none"}},"/ucp/{customer_id}/checkout-sessions":{"post":{"tags":["Universal Commerce Protocol"],"summary":"Create a checkout. Answers 201 with the checkout, priced.","operationId":"ucp_checkout_sessions.create","security":[{"bearerAuth":[]}],"parameters":[{"name":"customer_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ line_items: [{ item: { id }, quantity }], currency?, buyer?: { email, first_name, last_name } }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"ucp_signature","x-moves-money":false,"x-idempotency":"none"}},"/ucp/{customer_id}/checkout-sessions/{id}":{"get":{"tags":["Universal Commerce Protocol"],"summary":"Read a checkout. Only the platform that opened it finds it.","operationId":"ucp_checkout_sessions.get","security":[{"bearerAuth":[]}],"parameters":[{"name":"customer_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"ucp_signature","x-moves-money":false,"x-idempotency":"none"},"put":{"tags":["Universal Commerce Protocol"],"summary":"Replace a checkout: the body is the whole of what the platform sets. It comes back priced again; one that is being completed or is over comes back unchanged with a message.","operationId":"ucp_checkout_sessions.replace","security":[{"bearerAuth":[]}],"parameters":[{"name":"customer_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ line_items: [{ item: { id }, quantity }], buyer? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"ucp_signature","x-moves-money":false,"x-idempotency":"none"}},"/ucp/{customer_id}/checkout-sessions/{id}/complete":{"post":{"tags":["Universal Commerce Protocol"],"summary":"Complete with the card processor's payment token, for the checkout's exact total. A decline leaves the checkout `ready_for_complete` with a recoverable message; another handler or credential type is a recoverable `payment_failed`. Must carry the protocol's `Idempotency-Key`, and `ap2.checkout_mandate` under the AP2 mandates extension.","operationId":"ucp_checkout_sessions.complete","security":[{"bearerAuth":[]}],"parameters":[{"name":"customer_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ payment: { instruments: [{ id, handler_id: \"stripe_payments\", type: \"card\", selected: true, credential: { type: \"stripe_payment_token\", token } }] }, signals?, ap2?: { checkout_mandate } }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"ucp_signature","x-moves-money":true,"x-idempotency":"none"}},"/ucp/{customer_id}/checkout-sessions/{id}/cancel":{"post":{"tags":["Universal Commerce Protocol"],"summary":"Cancel a checkout that is neither completed nor canceled.","operationId":"ucp_checkout_sessions.cancel","security":[{"bearerAuth":[]}],"parameters":[{"name":"customer_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"ucp_signature","x-moves-money":false,"x-idempotency":"none"}},"/ucp/{customer_id}/orders/{id}":{"get":{"tags":["Universal Commerce Protocol"],"summary":"The order of a completed checkout, as its webhook carries it, for the platform that placed it.","operationId":"ucp_orders.get","security":[{"bearerAuth":[]}],"parameters":[{"name":"customer_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"ucp_signature","x-moves-money":false,"x-idempotency":"none"}},"/customers/{id}/priced-resources":{"post":{"tags":["Paying by the call"],"summary":"Price a resource. A price below a method's minimum, or with a part of a cent, needs `credit_only`.","operationId":"customers_priced_resources.create","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ url_pattern, price, currency?, description?, methods?: [stablecoin | agent_token], credit_only?, upstream_url? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"machine:write","x-moves-money":false,"x-idempotency":"optional"},"get":{"tags":["Paying by the call"],"summary":"The customer's priced resources, with the minimum single payment per method.","operationId":"customers_priced_resources.list","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"machine:read","x-moves-money":false,"x-idempotency":"none"}},"/customers/{id}/priced-resources/{resource_id}":{"delete":{"tags":["Paying by the call"],"summary":"Stop charging for a resource.","operationId":"customers_priced_resources.delete","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"resource_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"machine:write","x-moves-money":false,"x-idempotency":"none"}},"/machine-payments/challenge":{"post":{"tags":["Paying by the call"],"summary":"The 402 to send an unpaid request: status, headers and body, in both protocols.","operationId":"machine_payments.challenge","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ resource_id, url?, credit?: { amount } }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"machine:write","x-moves-money":false,"x-idempotency":"none"}},"/machine-payments/verify":{"post":{"tags":["Paying by the call"],"summary":"Check and settle the payment a client sent, or draw the call from its credit. Returns whether it is paid and the headers to answer with.","operationId":"machine_payments.verify","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ resource_id, headers: { \"PAYMENT-SIGNATURE\"? | \"Authorization\"? }, url? } | { resource_id, credit_token, idempotency_key }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"machine:write","x-moves-money":true,"x-idempotency":"none"}},"/machine-payments/credits":{"post":{"tags":["Paying by the call"],"summary":"Buy prepaid credit for a resource with one payment. Without payment headers, the 402 for that amount; with them, the credit and its token, once.","operationId":"machine_payments_credits.create","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ resource_id, amount?, headers? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"machine:write","x-moves-money":true,"x-idempotency":"none"},"get":{"tags":["Paying by the call"],"summary":"A customer's credits, newest first: bought, balance, refunded, expiry. Never a token. `?customer_id=&resource_id=`","operationId":"machine_payments_credits.list","security":[{"bearerAuth":[]}],"parameters":[{"name":"customer_id","in":"query","required":true,"description":"The customer, by any of its ids.","schema":{"type":"string"}},{"name":"resource_id","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"How many to return, 1 to 100.","schema":{"type":"integer","minimum":1}},{"name":"cursor","in":"query","required":false,"description":"The `next_cursor` of the previous page.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"machine:read","x-moves-money":false,"x-idempotency":"none"}},"/machine-payments/credits/{id}":{"get":{"tags":["Paying by the call"],"summary":"One credit: bought, balance, expiry.","operationId":"machine_payments_credits.get","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"machine:read","x-moves-money":false,"x-idempotency":"none"}},"/machine-payments/credits/{id}/refund":{"post":{"tags":["Paying by the call"],"summary":"Send back the unused part of a credit, within the customer's policy. Needs an Idempotency-Key.","operationId":"machine_payments_credits.refund","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":true,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"refunds:write","x-moves-money":true,"x-idempotency":"required"}},"/checkout/{id}":{"get":{"tags":["Hosted addresses and the pay-by-the-call proxy"],"summary":"A checkout session's own address: a redirect for a browser; for a client asking for JSON, the amount, currency, methods, payment instructions, the agentic endpoint when the business has one, and how to pay without a browser.","operationId":"checkout.get","security":[],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"none","x-moves-money":false,"x-idempotency":"none"}},"/pay-link/{id}":{"get":{"tags":["Hosted addresses and the pay-by-the-call proxy"],"summary":"A payment link's own address: a redirect for a browser; for an automated client, 402 with the pay-by-the-call challenge when the business has switched that on, otherwise 200 with a description.","operationId":"pay_link.get","security":[],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"none","x-moves-money":false,"x-idempotency":"none"}},"/pay/{resource_id}":{"get":{"tags":["Hosted addresses and the pay-by-the-call proxy"],"summary":"The proxy in front of a priced resource: 402 until the request carries a payment or a credit token, then forwarded to the registered address.","operationId":"pay.get","security":[],"parameters":[{"name":"resource_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"none","x-moves-money":true,"x-idempotency":"none"},"post":{"tags":["Hosted addresses and the pay-by-the-call proxy"],"summary":"The same, for a request with a body.","operationId":"pay.post","security":[],"parameters":[{"name":"resource_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"none","x-moves-money":true,"x-idempotency":"none"}},"/agents/{id}/wallets":{"post":{"tags":["Agents paying"],"summary":"Create a wallet the agent signs payments from. The key is held by the wallet provider and never returned; a policy there lets it sign typed data for USDC on the wallet's network and nothing else. Sandbox takes `base-sepolia` only, live `base` only. Fund it by sending USDC to its address.","operationId":"agents_wallets.create","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ network: base | base-sepolia, label? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"agents:write","x-moves-money":false,"x-idempotency":"optional","x-untrusted":["label","purpose"]},"get":{"tags":["Agents paying"],"summary":"The agent's wallets, active and retired, with their addresses.","operationId":"agents_wallets.list","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"agents:read","x-moves-money":false,"x-idempotency":"none","x-untrusted":["label","purpose"]}},"/agents/{id}/wallets/{wallet_id}":{"get":{"tags":["Agents paying"],"summary":"One wallet: network, address, state and what its key may sign.","operationId":"agents_wallets.get","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"wallet_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"agents:read","x-moves-money":false,"x-idempotency":"none","x-untrusted":["label","purpose"]},"delete":{"tags":["Agents paying"],"summary":"Retire a wallet: nothing is signed with it again. USDC left at its address is not moved, by this or any other operation.","operationId":"agents_wallets.delete","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"wallet_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"agents:write","x-moves-money":false,"x-idempotency":"none","x-untrusted":["label","purpose"]}},"/agent-payments":{"post":{"tags":["Agents paying"],"summary":"Send the agent's request to a merchant and, when it answers 402, pay one offer and send the request once more. Returns the merchant's status, an excerpt of its body and what was paid. `max_amount` is a ceiling in US cents; the merchant's exact amount is what is paid. Under the agent's mandates and the customer's controls: it may be refused, or held for approval (202). Pays at most once per key. Needs an Idempotency-Key.","operationId":"agent_payments.create","security":[{"bearerAuth":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["agent_id","url","max_amount","currency"],"properties":{"agent_id":{"type":"string","maxLength":100,"description":"The registered agent that pays."},"wallet_id":{"type":"string","maxLength":100,"description":"The agent's wallet to sign from. Left out, its newest active wallet is used."},"url":{"type":"string","format":"uri","maxLength":2000,"description":"The merchant's address: public, https, a host name."},"method":{"type":"string","enum":["GET","POST","PUT","PATCH","DELETE"]},"headers":{"type":"object","maxProperties":20,"additionalProperties":{"type":"string","maxLength":2000},"description":"Headers sent to the merchant. The ones a payment is carried in may not be set."},"body":{"oneOf":[{"type":"string"},{"type":"object"}],"description":"Sent to the merchant as it is; an object is sent as JSON. Up to 64 KB."},"max_amount":{"type":"integer","minimum":1,"description":"The most that may be paid, in US cents. What is paid is the merchant's exact amount."},"currency":{"type":"string","enum":["usd"]},"payment_method_id":{"type":"string","maxLength":200,"description":"A saved payment method a delegated payment token is issued on, for a merchant that takes one."},"external_ref":{"type":"string","maxLength":200,"description":"The document this belongs to in your own system."},"external_kind":{"type":"string","enum":["invoice","bill","order","booking","other"]},"dry_run":{"type":"boolean","description":"Check the request and report what would happen, without doing it."}}},"example":"{ agent_id, wallet_id?, url, method?, headers?, body?, max_amount, currency: usd, payment_method_id?, external_ref?, external_kind? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"agent-payments:write","x-moves-money":true,"x-idempotency":"required","x-untrusted":["response.body","reason","merchant.url","external_ref"]},"get":{"tags":["Agents paying"],"summary":"Attempts to pay merchants, whatever became of them: paid, failed, refused or held. `?agent_id=&status=&external_ref=&limit=`","operationId":"agent_payments.list","security":[{"bearerAuth":[]}],"parameters":[{"name":"agent_id","in":"query","required":false,"schema":{"type":"string"}},{"name":"status","in":"query","required":false,"description":"Only objects in this state.","schema":{"type":"string"}},{"name":"external_ref","in":"query","required":false,"description":"The reference the object was given in your own system.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"How many to return, 1 to 100.","schema":{"type":"integer","minimum":1}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"agent-payments:read","x-moves-money":false,"x-idempotency":"none","x-untrusted":["response.body","reason","merchant.url","external_ref"]}},"/agent-payments/{id}":{"get":{"tags":["Agents paying"],"summary":"One attempt: the merchant, the protocol and network, the amount, the reference, and the authorisation it ran under.","operationId":"agent_payments.get","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"agent-payments:read","x-moves-money":false,"x-idempotency":"none","x-untrusted":["response.body","reason","merchant.url","external_ref"]}},"/coins":{"get":{"tags":["Rewards and reporting"],"summary":"The stablecoins this project can hold.","operationId":"coins.list","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"*","x-moves-money":false,"x-idempotency":"none"},"post":{"tags":["Rewards and reporting"],"summary":"Ask for a stablecoin of your own. This records the request and nothing more: no coin is created or minted by it.","operationId":"coins.create","security":[{"bearerAuth":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"A repeat with the same key and body returns the first answer instead of acting twice.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":"{ ticker, name, chains?, loop_type?, note? }"}}},"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"*","x-moves-money":false,"x-idempotency":"optional"}},"/coins/{currency}/rewards":{"get":{"tags":["Rewards and reporting"],"summary":"What a balance in this coin earns.","operationId":"coins_rewards.get","security":[{"bearerAuth":[]}],"parameters":[{"name":"currency","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"*","x-moves-money":false,"x-idempotency":"none"}},"/customers/{id}/rewards/{currency}":{"get":{"tags":["Rewards and reporting"],"summary":"What one customer's balance in a coin earned: `balance`, `earned` and `as_of`. Answers 404 where the coin earns nothing for this customer. Figures run two business days behind.","operationId":"customers_rewards.get","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"currency","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"customers:read","x-moves-money":false,"x-idempotency":"none"}},"/usage":{"get":{"tags":["Rewards and reporting"],"summary":"Usage against the plan's limits — the same count a call is refused against.","operationId":"usage.get","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"*","x-moves-money":false,"x-idempotency":"none"}},"/compliance-requests":{"get":{"tags":["Rewards and reporting"],"summary":"Requests for information about a customer or a payment, with the deadline. `?customer_id=&status=`. Answers 409 `capability_coming_soon` until the platform has been granted them.","operationId":"compliance_requests.list","security":[{"bearerAuth":[]}],"parameters":[{"name":"customer_id","in":"query","required":false,"description":"The customer, by any of its ids.","schema":{"type":"string"}},{"name":"status","in":"query","required":false,"description":"Only objects in this state.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"How many to return, 1 to 100.","schema":{"type":"integer","minimum":1}},{"name":"cursor","in":"query","required":false,"description":"The `next_cursor` of the previous page.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"compliance:read","x-moves-money":false,"x-idempotency":"none","x-untrusted":["items"]}},"/compliance-requests/{id}":{"get":{"tags":["Rewards and reporting"],"summary":"One request for information: what was asked, the deadline, and what it holds.","operationId":"compliance_requests.get","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success."},"202":{"description":"requires_approval — Not an error: the operation is held for a person. The body names the approval."},"400":{"description":"price_below_minimum — The price is below the smallest single payment for a method (`detail.method`, `detail.minimum`), or has a part of a cent. Set `credit_only`, raise the price, or drop the method."},"401":{"description":"dpop_invalid — The token is bound to a key and the DPoP proof was missing, wrong for this request, or already used."},"402":{"description":"payment_failed — The payer's bank or card refused. `detail.reason` says why in plain terms."},"403":{"description":"agent_payment_over_max — The merchant asks for more than `max_amount`. Nothing was signed. `detail.asked_minor` is the lowest price asked, in US cents."},"404":{"description":"not_found — No such object in this project — including one that belongs to somebody else."},"409":{"description":"token_not_issued — A delegated payment token could not be issued ready to use, for instance because the payer would have to act. Nothing was sent to the merchant."},"429":{"description":"too_many_waiters — This key already has as many requests waiting (`?wait=`) as it may. Let one finish, or read without wait."},"500":{"description":"internal_error — Ours. Quote the `request_id` and we can find the call."},"502":{"description":"platform_error — A provider failed. Safe to retry with the same Idempotency-Key."},"503":{"description":"oauth_unavailable — The authorisation server's keys could not be read, so tokens cannot be checked. API keys still work."}},"x-scope":"compliance:read","x-moves-money":false,"x-idempotency":"none","x-untrusted":["items"]}}},"webhooks":{"customer.updated":{"post":{"tags":["Events and webhooks"],"operationId":"event.customer.updated","summary":"Verification status, requirements or any can-flag changed.","description":"Concerns a customer. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"customer.verified":{"post":{"tags":["Events and webhooks"],"operationId":"event.customer.verified","summary":"Business verification completed.","description":"Concerns a customer. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"customer.rejected":{"post":{"tags":["Events and webhooks"],"operationId":"event.customer.rejected","summary":"Business verification was declined.","description":"Concerns a customer. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"checkout_session.completed":{"post":{"tags":["Events and webhooks"],"operationId":"event.checkout_session.completed","summary":"A payer finished a checkout session.","description":"Concerns a checkout_session. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"checkout_session.expired":{"post":{"tags":["Events and webhooks"],"operationId":"event.checkout_session.expired","summary":"A checkout session expired unpaid.","description":"Concerns a checkout_session. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"payment.requires_action":{"post":{"tags":["Events and webhooks"],"operationId":"event.payment.requires_action","summary":"The payer must authenticate before the payment can proceed.","description":"Concerns a payment. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"payment.processing":{"post":{"tags":["Events and webhooks"],"operationId":"event.payment.processing","summary":"The payer has paid by a method that settles later, such as a bank debit. Wait for payment.succeeded or payment.failed.","description":"Concerns a payment. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"payment.authorized":{"post":{"tags":["Events and webhooks"],"operationId":"event.payment.authorized","summary":"Funds are held and waiting to be captured.","description":"Concerns a payment. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"payment.succeeded":{"post":{"tags":["Events and webhooks"],"operationId":"event.payment.succeeded","summary":"Funds were collected.","description":"Concerns a payment. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"payment.failed":{"post":{"tags":["Events and webhooks"],"operationId":"event.payment.failed","summary":"The payment was declined or failed.","description":"Concerns a payment. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"payment.canceled":{"post":{"tags":["Events and webhooks"],"operationId":"event.payment.canceled","summary":"An authorisation was released before capture.","description":"Concerns a payment. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"payment.refunded":{"post":{"tags":["Events and webhooks"],"operationId":"event.payment.refunded","summary":"A payment was refunded, wholly or in part. Read `data.status` to tell which: `refunded` or `partially_refunded`.","description":"Concerns a payment. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"payment.disputed":{"post":{"tags":["Events and webhooks"],"operationId":"event.payment.disputed","summary":"The payer's bank opened a dispute.","description":"Concerns a dispute. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"dispute.updated":{"post":{"tags":["Events and webhooks"],"operationId":"event.dispute.updated","summary":"A dispute moved: evidence due, under review, won or lost.","description":"Concerns a dispute. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"refund.updated":{"post":{"tags":["Events and webhooks"],"operationId":"event.refund.updated","summary":"A refund changed state.","description":"Concerns a refund. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"payment_method.saved":{"post":{"tags":["Events and webhooks"],"operationId":"event.payment_method.saved","summary":"A payer saved a method for later charges.","description":"Concerns a payment_method. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"settlement.created":{"post":{"tags":["Events and webhooks"],"operationId":"event.settlement.created","summary":"Card proceeds were sent towards the business's bank.","description":"Concerns a settlement. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"settlement.paid":{"post":{"tags":["Events and webhooks"],"operationId":"event.settlement.paid","summary":"A settlement arrived.","description":"Concerns a settlement. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"settlement.failed":{"post":{"tags":["Events and webhooks"],"operationId":"event.settlement.failed","summary":"A settlement failed.","description":"Concerns a settlement. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"subscription.updated":{"post":{"tags":["Events and webhooks"],"operationId":"event.subscription.updated","summary":"A subscription was created or changed.","description":"Concerns a subscription. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"subscription.canceled":{"post":{"tags":["Events and webhooks"],"operationId":"event.subscription.canceled","summary":"A subscription ended.","description":"Concerns a subscription. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"subscription.payment_succeeded":{"post":{"tags":["Events and webhooks"],"operationId":"event.subscription.payment_succeeded","summary":"A recurring charge collected.","description":"Concerns a subscription. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"subscription.payment_failed":{"post":{"tags":["Events and webhooks"],"operationId":"event.subscription.payment_failed","summary":"A recurring charge failed.","description":"Concerns a subscription. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"payout.created":{"post":{"tags":["Events and webhooks"],"operationId":"event.payout.created","summary":"A payout was created.","description":"Concerns a payout. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"payout.processing":{"post":{"tags":["Events and webhooks"],"operationId":"event.payout.processing","summary":"A payout's funds were received and it is on its way.","description":"Concerns a payout. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"payout.on_hold":{"post":{"tags":["Events and webhooks"],"operationId":"event.payout.on_hold","summary":"A payout is paused: it is being checked, or information has been asked for.","description":"Concerns a payout. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"payout.canceled":{"post":{"tags":["Events and webhooks"],"operationId":"event.payout.canceled","summary":"A payout was canceled before it left.","description":"Concerns a payout. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"payout.updated":{"post":{"tags":["Events and webhooks"],"operationId":"event.payout.updated","summary":"A payout changed state.","description":"Concerns a payout. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"payout.paid":{"post":{"tags":["Events and webhooks"],"operationId":"event.payout.paid","summary":"A payout reached its destination.","description":"Concerns a payout. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"payout.returned":{"post":{"tags":["Events and webhooks"],"operationId":"event.payout.returned","summary":"A payout came back.","description":"Concerns a payout. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"account.credited":{"post":{"tags":["Events and webhooks"],"operationId":"event.account.credited","summary":"Money arrived in a customer's account.","description":"Concerns a account. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"conversion.completed":{"post":{"tags":["Events and webhooks"],"operationId":"event.conversion.completed","summary":"A conversion settled.","description":"Concerns a conversion. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"wallet.created":{"post":{"tags":["Events and webhooks"],"operationId":"event.wallet.created","summary":"A wallet was created for a customer.","description":"Concerns a wallet. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"payee.created":{"post":{"tags":["Events and webhooks"],"operationId":"event.payee.created","summary":"A payee was added.","description":"Concerns a payee. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"payee.updated":{"post":{"tags":["Events and webhooks"],"operationId":"event.payee.updated","summary":"A payee changed: paused, resumed, or its name check came back.","description":"Concerns a payee. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"payee.removed":{"post":{"tags":["Events and webhooks"],"operationId":"event.payee.removed","summary":"A payee was removed.","description":"Concerns a payee. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"standing_order.created":{"post":{"tags":["Events and webhooks"],"operationId":"event.standing_order.created","summary":"A standing conversion was created.","description":"Concerns a standing_order. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"standing_order.updated":{"post":{"tags":["Events and webhooks"],"operationId":"event.standing_order.updated","summary":"A standing conversion changed state.","description":"Concerns a standing_order. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"standing_order.drained":{"post":{"tags":["Events and webhooks"],"operationId":"event.standing_order.drained","summary":"Money that arrived at a standing conversion's address was converted and sent on.","description":"Concerns a standing_order. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"compliance_request.created":{"post":{"tags":["Events and webhooks"],"operationId":"event.compliance_request.created","summary":"Information was asked for about a customer or a payment, with a deadline.","description":"Concerns a compliance_request. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"compliance_request.updated":{"post":{"tags":["Events and webhooks"],"operationId":"event.compliance_request.updated","summary":"A compliance request changed: answered, under review, or closed.","description":"Concerns a compliance_request. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"deposit.unmatched":{"post":{"tags":["Events and webhooks"],"operationId":"event.deposit.unmatched","summary":"Money arrived that could not be credited to a checkout session: the wrong coin or chain, no known reference, or after the session expired. A person assigns it or sends it back.","description":"Concerns a unmatched_deposit. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"deposit.resolved":{"post":{"tags":["Events and webhooks"],"operationId":"event.deposit.resolved","summary":"An unmatched deposit was assigned to a session, or sent back.","description":"Concerns a unmatched_deposit. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"agentic.refund_requested":{"post":{"tags":["Events and webhooks"],"operationId":"event.agentic.refund_requested","summary":"An agent asked for a refund that a person must approve.","description":"Concerns a agent_refund_request. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"approval.requested":{"post":{"tags":["Events and webhooks"],"operationId":"event.approval.requested","summary":"An operation is held for a person to approve.","description":"Concerns a approval. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"approval.decided":{"post":{"tags":["Events and webhooks"],"operationId":"event.approval.decided","summary":"A held operation was approved or denied.","description":"Concerns a approval. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"spend_policy.revoked":{"post":{"tags":["Events and webhooks"],"operationId":"event.spend_policy.revoked","summary":"A spend policy was revoked.","description":"Concerns a spend_policy. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"budget.low":{"post":{"tags":["Events and webhooks"],"operationId":"event.budget.low","summary":"A budget fell under its `low_below` mark. Sent once until the budget is topped up.","description":"Concerns a budget. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"budget.exhausted":{"post":{"tags":["Events and webhooks"],"operationId":"event.budget.exhausted","summary":"Nothing remains of a budget. Sent once until the budget is topped up.","description":"Concerns a budget. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"balance.low":{"post":{"tags":["Events and webhooks"],"operationId":"event.balance.low","summary":"A wallet's balance fell under its floor. Sent once until the balance has been back at or above it.","description":"Concerns a wallet. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"payout.scheduled":{"post":{"tags":["Events and webhooks"],"operationId":"event.payout.scheduled","summary":"A payout was set to run later: at a time, on an interval, or when an event arrives or a person releases it.","description":"Concerns a scheduled_payout. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"payout.released":{"post":{"tags":["Events and webhooks"],"operationId":"event.payout.released","summary":"A conditional payout was released, by the event it waited for or by a person, and runs now.","description":"Concerns a scheduled_payout. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"payout.schedule_canceled":{"post":{"tags":["Events and webhooks"],"operationId":"event.payout.schedule_canceled","summary":"A scheduled payout was cancelled: by request, because it lapsed, or because the key, agent, mandate or customer behind it may no longer send money. Carries the reason.","description":"Concerns a scheduled_payout. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"movement.pending":{"post":{"tags":["Events and webhooks"],"operationId":"event.movement.pending","summary":"Money is in flight: a payout, a conversion or a deposit has started and not yet settled. Carries the receipt.","description":"Concerns a receipt. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"movement.posted":{"post":{"tags":["Events and webhooks"],"operationId":"event.movement.posted","summary":"A movement settled in the customer's books. Carries the signed receipt.","description":"Concerns a receipt. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"movement.reversed":{"post":{"tags":["Events and webhooks"],"operationId":"event.movement.reversed","summary":"A movement failed or came back. Carries the receipt of the reversal, which names the movement it undoes.","description":"Concerns a receipt. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"agent.created":{"post":{"tags":["Events and webhooks"],"operationId":"event.agent.created","summary":"An agent was registered, directly or by delegation.","description":"Concerns a agent. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"agent.updated":{"post":{"tags":["Events and webhooks"],"operationId":"event.agent.updated","summary":"An agent's details or signing keys changed, or a suspended agent was resumed.","description":"Concerns a agent. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"agent.suspended":{"post":{"tags":["Events and webhooks"],"operationId":"event.agent.suspended","summary":"An agent was suspended: its keys, tokens and policies stop working until it is resumed.","description":"Concerns a agent. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"agent.revoked":{"post":{"tags":["Events and webhooks"],"operationId":"event.agent.revoked","summary":"An agent was revoked, permanently, together with every agent it delegated to.","description":"Concerns a agent. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"agent_wallet.created":{"post":{"tags":["Events and webhooks"],"operationId":"event.agent_wallet.created","summary":"A wallet was created for an agent to sign payments from.","description":"Concerns a agent_wallet. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"agent_wallet.retired":{"post":{"tags":["Events and webhooks"],"operationId":"event.agent_wallet.retired","summary":"An agent's wallet was retired: nothing is signed with it again. Funds at its address are not moved.","description":"Concerns a agent_wallet. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"agent_payment.created":{"post":{"tags":["Events and webhooks"],"operationId":"event.agent_payment.created","summary":"An agent's payment to a merchant passed every check and is being paid.","description":"Concerns a agent_payment. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"agent_payment.paid":{"post":{"tags":["Events and webhooks"],"operationId":"event.agent_payment.paid","summary":"A merchant accepted an agent's payment.","description":"Concerns a agent_payment. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"agent_payment.failed":{"post":{"tags":["Events and webhooks"],"operationId":"event.agent_payment.failed","summary":"An agent's payment was decided and not completed: the signing failed, or the merchant did not answer the paid request with success. `signed` says whether a signature or token was produced.","description":"Concerns a agent_payment. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"agent_payment.refused":{"post":{"tags":["Events and webhooks"],"operationId":"event.agent_payment.refused","summary":"An agent's payment was refused before anything was signed: by a control, a mandate, or because the merchant asked for more than the ceiling or for something that cannot be paid.","description":"Concerns a agent_payment. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"agent_payment.held":{"post":{"tags":["Events and webhooks"],"operationId":"event.agent_payment.held","summary":"An agent's payment is waiting for a person to approve it. An `approval.requested` event carries the approval.","description":"Concerns a agent_payment. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"customer.frozen":{"post":{"tags":["Events and webhooks"],"operationId":"event.customer.frozen","summary":"Money movement was frozen for a customer.","description":"Concerns a customer. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"customer.unfrozen":{"post":{"tags":["Events and webhooks"],"operationId":"event.customer.unfrozen","summary":"A customer's freeze was lifted.","description":"Concerns a customer. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"partner.frozen":{"post":{"tags":["Events and webhooks"],"operationId":"event.partner.frozen","summary":"Money movement was frozen for the whole account in this environment.","description":"Concerns a partner. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}},"partner.unfrozen":{"post":{"tags":["Events and webhooks"],"operationId":"event.partner.unfrozen","summary":"The account's freeze was lifted.","description":"Concerns a partner. Delivered to every endpoint subscribed to this type or to *. Retried with backoff; replay with POST /events/{id}/replay.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","created_at","data"]}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}}}}