# Skerry: reference

255 operations in 27 groups. OpenAPI document: https://api.skerry.xyz/openapi.json

## Getting started

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.

- [The index. Public, so a new developer can look before they have a key](https://platform.praecise.com/skerry/reference/getting-started/index-get.md): `GET /`
- [Openapi json get](https://platform.praecise.com/skerry/reference/getting-started/openapi-json-get.md): `GET /openapi.json`
- [The partner, project, mode and scopes behind the key you sent](https://platform.praecise.com/skerry/reference/getting-started/whoami-get.md): `GET /whoami`
- [The API described for a model, as plain Markdown](https://platform.praecise.com/skerry/reference/getting-started/llms-txt-get.md): `GET /llms.txt`
- [The same description addressed to an agent that is about to act. Public](https://platform.praecise.com/skerry/reference/getting-started/agents-md-get.md): `GET /agents.md`
- [What this project may do right now, and what is merely coming](https://platform.praecise.com/skerry/reference/getting-started/capabilities-get.md): `GET /capabilities`
- [Accept the terms a customer must agree to before they can be verified](https://platform.praecise.com/skerry/reference/getting-started/terms-accept.md): `POST /terms`

## Customers

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.

- [The businesses this project has onboarded](https://platform.praecise.com/skerry/reference/customers/customers-list.md): `GET /customers`
- [Onboard a business, or a person with `type](https://platform.praecise.com/skerry/reference/customers/customers-create.md): `POST /customers`
- [Customers get](https://platform.praecise.com/skerry/reference/customers/customers-get.md): `GET /customers/{id}`
- [Correct details on a business](https://platform.praecise.com/skerry/reference/customers/customers-update.md): `PATCH /customers/{id}`
- [Where verification has got to](https://platform.praecise.com/skerry/reference/customers/customers-verification-get.md): `GET /customers/{id}/verification`
- [Start or re-run verification](https://platform.praecise.com/skerry/reference/customers/customers-verification-start.md): `POST /customers/{id}/verification`
- [Customers onboarding link](https://platform.praecise.com/skerry/reference/customers/customers-onboarding-link.md): `POST /customers/{id}/onboarding-link`
- [The page behind an onboarding link](https://platform.praecise.com/skerry/reference/customers/onboard-get.md): `GET /onboard/{token}`
- [The payment-method matrix for one customer](https://platform.praecise.com/skerry/reference/customers/customers-payment-methods-get.md): `GET /customers/{id}/payment-methods`
- [Customers people list](https://platform.praecise.com/skerry/reference/customers/customers-people-list.md): `GET /customers/{id}/people`
- [Customers people create](https://platform.praecise.com/skerry/reference/customers/customers-people-create.md): `POST /customers/{id}/people`
- [Remove a person from a business customer at the banking partner](https://platform.praecise.com/skerry/reference/customers/customers-people-delete.md): `DELETE /customers/{id}/people/{person_id}`
- [Eligibility get](https://platform.praecise.com/skerry/reference/customers/eligibility-get.md): `GET /eligibility`

## Custody

Where a customer's money sits. A wallet holds stablecoin; an account is fiat at a regulated institution; a card spends from one.

- [The customer's wallets and balances](https://platform.praecise.com/skerry/reference/custody/customers-wallets-list.md): `GET /customers/{id}/wallets`
- [Customers wallets create](https://platform.praecise.com/skerry/reference/custody/customers-wallets-create.md): `POST /customers/{id}/wallets`
- [What has moved in and out of one wallet, newest first. `?limit=`](https://platform.praecise.com/skerry/reference/custody/customers-wallets-history-get.md): `GET /customers/{id}/wallets/{wallet_id}/history`
- [The customer's fiat accounts](https://platform.praecise.com/skerry/reference/custody/customers-accounts-list.md): `GET /customers/{id}/accounts`
- [Open an account payers pay into](https://platform.praecise.com/skerry/reference/custody/customers-accounts-create.md): `POST /customers/{id}/accounts`
- [Stop an account accepting deposits](https://platform.praecise.com/skerry/reference/custody/customers-accounts-deactivate.md): `POST /customers/{id}/accounts/{account_id}/deactivate`
- [Let a deactivated account accept deposits again, with the same details](https://platform.praecise.com/skerry/reference/custody/customers-accounts-reactivate.md): `POST /customers/{id}/accounts/{account_id}/reactivate`
- [Start connecting a US bank by logging into it, instead of typing its numbers](https://platform.praecise.com/skerry/reference/custody/customers-bank-link.md): `POST /customers/{id}/bank-link`
- [Finish a bank login](https://platform.praecise.com/skerry/reference/custody/customers-bank-link-exchange.md): `POST /customers/{id}/bank-link/exchange`
- [The customer's cards](https://platform.praecise.com/skerry/reference/custody/customers-cards-list.md): `GET /customers/{id}/cards`
- [Issue a card against an account](https://platform.praecise.com/skerry/reference/custody/customers-cards-create.md): `POST /customers/{id}/cards`
- [The customer's deposit memos. A payer who omits the memo cannot be attributed](https://platform.praecise.com/skerry/reference/custody/customers-memos-list.md): `GET /customers/{id}/memos`
- [A deposit memo, for chains where one shared address serves everybody](https://platform.praecise.com/skerry/reference/custody/customers-memos-create.md): `POST /customers/{id}/memos`

## Paying out

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.

- [Customers payees list](https://platform.praecise.com/skerry/reference/paying-out/customers-payees-list.md): `GET /customers/{id}/payees`
- [Add a bank account as a destination for money](https://platform.praecise.com/skerry/reference/paying-out/customers-payees-create.md): `POST /customers/{id}/payees`
- [One payee, with the name check as it stands now](https://platform.praecise.com/skerry/reference/paying-out/customers-payees-get.md): `GET /customers/{id}/payees/{payee_id}`
- [Remove a payee](https://platform.praecise.com/skerry/reference/paying-out/customers-payees-delete.md): `DELETE /customers/{id}/payees/{payee_id}`
- [Stop paying a payee for now without removing it](https://platform.praecise.com/skerry/reference/paying-out/customers-payees-pause.md): `POST /customers/{id}/payees/{payee_id}/pause`
- [Pay a paused payee again](https://platform.praecise.com/skerry/reference/paying-out/customers-payees-resume.md): `POST /customers/{id}/payees/{payee_id}/resume`
- [Customers payees check](https://platform.praecise.com/skerry/reference/paying-out/customers-payees-check.md): `POST /customers/{id}/payees/{payee_id}/check`
- [What a payout would cost, as a quote that binds the instruction](https://platform.praecise.com/skerry/reference/paying-out/payouts-quote.md): `POST /payouts/quote`
- [Payouts this project has made, with the reference each was given](https://platform.praecise.com/skerry/reference/paying-out/payouts-list.md): `GET /payouts`
- [Send money to a payee, a wallet or an address](https://platform.praecise.com/skerry/reference/paying-out/payouts-create.md): `POST /payouts`
- [Batches, newest first, each with the outcome of each payout in it](https://platform.praecise.com/skerry/reference/paying-out/payouts-batches-list.md): `GET /payouts/batches`
- [Up to 50 payouts in one call](https://platform.praecise.com/skerry/reference/paying-out/payouts-batches-create.md): `POST /payouts/batches`
- [One batch, with the outcome of each payout in it](https://platform.praecise.com/skerry/reference/paying-out/payouts-batches-get.md): `GET /payouts/batches/{id}`
- [Who bears the cost of a bank payout, per currency and rail](https://platform.praecise.com/skerry/reference/paying-out/customers-payout-fees-get.md): `GET /customers/{id}/payout-fees`
- [Change who bears the cost of a bank payout](https://platform.praecise.com/skerry/reference/paying-out/customers-payout-fees-update.md): `PATCH /customers/{id}/payout-fees`
- [Customers batch settlement schedules](https://platform.praecise.com/skerry/reference/paying-out/customers-batch-settlement-schedules.md): `POST /customers/{id}/batch-settlement-schedules`
- [Payouts get](https://platform.praecise.com/skerry/reference/paying-out/payouts-get.md): `GET /payouts/{id}`
- [Change the amount of a payout that is still `awaiting_funds`](https://platform.praecise.com/skerry/reference/paying-out/payouts-update.md): `PATCH /payouts/{id}`
- [Cancel a payout that has not left yet](https://platform.praecise.com/skerry/reference/paying-out/payouts-delete.md): `DELETE /payouts/{id}`
- [The rate between two currencies. `?from=&to=`](https://platform.praecise.com/skerry/reference/paying-out/rates-get.md): `GET /rates`

## Standing conversion

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.

- [The customer's standing orders](https://platform.praecise.com/skerry/reference/standing-conversion/customers-standing-orders-list.md): `GET /customers/{id}/standing-orders`
- [An address that converts and pays out whatever arrives](https://platform.praecise.com/skerry/reference/standing-conversion/customers-standing-orders-create.md): `POST /customers/{id}/standing-orders`
- [Customers standing orders conversions list](https://platform.praecise.com/skerry/reference/standing-conversion/customers-standing-orders-conversions-list.md): `GET /customers/{id}/standing-orders/{standing_order_id}/conversions`

## Events and webhooks

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.

- [What has happened, newest first](https://platform.praecise.com/skerry/reference/events-and-webhooks/events-list.md): `GET /events`
- [Deliver an event again, to every endpoint that wanted it](https://platform.praecise.com/skerry/reference/events-and-webhooks/events-replay.md): `POST /events/{id}/replay`
- [The catalogue of event types](https://platform.praecise.com/skerry/reference/events-and-webhooks/events-types-get.md): `GET /events/types`
- [Webhooks list](https://platform.praecise.com/skerry/reference/events-and-webhooks/webhooks-list.md): `GET /webhooks`
- [Register an endpoint](https://platform.praecise.com/skerry/reference/events-and-webhooks/webhooks-create.md): `POST /webhooks`
- [Webhooks update](https://platform.praecise.com/skerry/reference/events-and-webhooks/webhooks-update.md): `PATCH /webhooks/{id}`
- [Remove an endpoint](https://platform.praecise.com/skerry/reference/events-and-webhooks/webhooks-delete.md): `DELETE /webhooks/{id}`
- [Replace an endpoint's signing secret](https://platform.praecise.com/skerry/reference/events-and-webhooks/webhooks-roll-secret.md): `POST /webhooks/{id}/roll-secret`

## Accepting payments

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.

- [Checkout sessions, newest first. `?customer_id=&status=&external_ref=`](https://platform.praecise.com/skerry/reference/accepting-payments/checkout-sessions-list.md): `GET /checkout-sessions`
- [Start a hosted checkout for a payer](https://platform.praecise.com/skerry/reference/accepting-payments/checkout-sessions-create.md): `POST /checkout-sessions`
- [One session](https://platform.praecise.com/skerry/reference/accepting-payments/checkout-sessions-get.md): `GET /checkout-sessions/{id}`
- [Close an open session so it can no longer be paid](https://platform.praecise.com/skerry/reference/accepting-payments/checkout-sessions-expire.md): `POST /checkout-sessions/{id}/expire`
- [Payment links, newest first. `?customer_id=&external_ref=`](https://platform.praecise.com/skerry/reference/accepting-payments/payment-links-list.md): `GET /payment-links`
- [A reusable or single-use link to a hosted checkout for a fixed amount](https://platform.praecise.com/skerry/reference/accepting-payments/payment-links-create.md): `POST /payment-links`
- [One payment link, with how many times it has been used](https://platform.praecise.com/skerry/reference/accepting-payments/payment-links-get.md): `GET /payment-links/{id}`
- [Pause, resume or disable a link](https://platform.praecise.com/skerry/reference/accepting-payments/payment-links-update.md): `PATCH /payment-links/{id}`
- [Payments, newest first](https://platform.praecise.com/skerry/reference/accepting-payments/payments-list.md): `GET /payments`
- [Charge a saved method with the payer absent, under the mandate they gave](https://platform.praecise.com/skerry/reference/accepting-payments/payments-create.md): `POST /payments`
- [One payment](https://platform.praecise.com/skerry/reference/accepting-payments/payments-get.md): `GET /payments/{id}`
- [Collect funds that were held. May capture less than the hold](https://platform.praecise.com/skerry/reference/accepting-payments/payments-capture.md): `POST /payments/{id}/capture`
- [Release a hold, or abandon a payment that has not succeeded](https://platform.praecise.com/skerry/reference/accepting-payments/payments-cancel.md): `POST /payments/{id}/cancel`
- [Refunds made against a payment](https://platform.praecise.com/skerry/reference/accepting-payments/payments-refunds-list.md): `GET /payments/{id}/refunds`
- [Refund all or part of a payment](https://platform.praecise.com/skerry/reference/accepting-payments/payments-refunds-create.md): `POST /payments/{id}/refunds`
- [Disputes against payments, newest first. `?customer_id=&status=`](https://platform.praecise.com/skerry/reference/accepting-payments/disputes-list.md): `GET /disputes`
- [One dispute, with the date evidence is due](https://platform.praecise.com/skerry/reference/accepting-payments/disputes-get.md): `GET /disputes/{id}`
- [Send evidence, and submit it when complete](https://platform.praecise.com/skerry/reference/accepting-payments/disputes-evidence.md): `POST /disputes/{id}/evidence`
- [Files uploaded for a dispute, newest first](https://platform.praecise.com/skerry/reference/accepting-payments/disputes-files-list.md): `GET /disputes/{id}/files`
- [Upload a file to use as evidence: PDF, JPEG or PNG, up to 5 MB, base64-encoded](https://platform.praecise.com/skerry/reference/accepting-payments/disputes-files-create.md): `POST /disputes/{id}/files`
- [A draft of the text evidence from what is on record](https://platform.praecise.com/skerry/reference/accepting-payments/disputes-suggested-evidence-get.md): `GET /disputes/{id}/suggested-evidence`
- [Customers unmatched deposits list](https://platform.praecise.com/skerry/reference/accepting-payments/customers-unmatched-deposits-list.md): `GET /customers/{id}/unmatched-deposits`
- [Credit a deposit that was set aside to the checkout session it was meant for](https://platform.praecise.com/skerry/reference/accepting-payments/customers-unmatched-deposits-assign.md): `POST /customers/{id}/unmatched-deposits/{deposit_id}/assign`
- [Send a deposit that was set aside back, whole](https://platform.praecise.com/skerry/reference/accepting-payments/customers-unmatched-deposits-refund.md): `POST /customers/{id}/unmatched-deposits/{deposit_id}/refund`
- [Card proceeds on their way to the business's bank, newest first. `?customer_id=`](https://platform.praecise.com/skerry/reference/accepting-payments/settlements-list.md): `GET /settlements`
- [Send proceeds to the business's bank now. Needs an Idempotency-Key](https://platform.praecise.com/skerry/reference/accepting-payments/settlements-create.md): `POST /settlements`
- [One settlement](https://platform.praecise.com/skerry/reference/accepting-payments/settlements-get.md): `GET /settlements/{id}`
- [What the customer holds per currency](https://platform.praecise.com/skerry/reference/accepting-payments/customers-balances-get.md): `GET /customers/{id}/balances`

## Payers, saved methods and subscriptions

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.

- [Payers, newest first. `?customer_id=`](https://platform.praecise.com/skerry/reference/payers-saved-methods-and-subscriptions/payers-list.md): `GET /payers`
- [Record someone who pays a customer](https://platform.praecise.com/skerry/reference/payers-saved-methods-and-subscriptions/payers-create.md): `POST /payers`
- [One payer](https://platform.praecise.com/skerry/reference/payers-saved-methods-and-subscriptions/payers-get.md): `GET /payers/{id}`
- [Methods the payer saved: brand, last four, expiry, and the mandate](https://platform.praecise.com/skerry/reference/payers-saved-methods-and-subscriptions/payers-payment-methods-list.md): `GET /payers/{id}/payment-methods`
- [Forget a saved method and revoke its mandate](https://platform.praecise.com/skerry/reference/payers-saved-methods-and-subscriptions/payers-payment-methods-delete.md): `DELETE /payers/{id}/payment-methods/{method_id}`
- [A hosted page where a payer saves a method for later, without paying now](https://platform.praecise.com/skerry/reference/payers-saved-methods-and-subscriptions/customers-payment-method-setups.md): `POST /customers/{id}/payment-method-setups`
- [Subscriptions, newest first. `?customer_id=&status=&payer_id=`](https://platform.praecise.com/skerry/reference/payers-saved-methods-and-subscriptions/subscriptions-list.md): `GET /subscriptions`
- [Charge a payer on a schedule from a saved method](https://platform.praecise.com/skerry/reference/payers-saved-methods-and-subscriptions/subscriptions-create.md): `POST /subscriptions`
- [One subscription](https://platform.praecise.com/skerry/reference/payers-saved-methods-and-subscriptions/subscriptions-get.md): `GET /subscriptions/{id}`
- [End a subscription now or at the end of the paid period](https://platform.praecise.com/skerry/reference/payers-saved-methods-and-subscriptions/subscriptions-cancel.md): `POST /subscriptions/{id}/cancel`
- [Meters, newest first. `?customer_id=`](https://platform.praecise.com/skerry/reference/payers-saved-methods-and-subscriptions/meters-list.md): `GET /meters`
- [A usage meter on a customer's merchant account, for billing by use](https://platform.praecise.com/skerry/reference/payers-saved-methods-and-subscriptions/meters-create.md): `POST /meters`
- [Record usage by a payer against a meter. `identifier` makes a retry count once](https://platform.praecise.com/skerry/reference/payers-saved-methods-and-subscriptions/meters-events-create.md): `POST /meters/{id}/events`
- [What a payer has used over a period. `?payer_id=&from=&to=&group_by=hour|day`](https://platform.praecise.com/skerry/reference/payers-saved-methods-and-subscriptions/meters-summary-get.md): `GET /meters/{id}/summary`

## Limits, agents and approvals

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"`.

- [Policies, newest first, each with `usage`](https://platform.praecise.com/skerry/reference/limits-agents-and-approvals/spend-policies-list.md): `GET /spend-policies`
- [Limit a key or an agent](https://platform.praecise.com/skerry/reference/limits-agents-and-approvals/spend-policies-create.md): `POST /spend-policies`
- [Spend policies get](https://platform.praecise.com/skerry/reference/limits-agents-and-approvals/spend-policies-get.md): `GET /spend-policies/{id}`
- [Change a policy's amounts, counts, approval rules, purpose or dates](https://platform.praecise.com/skerry/reference/limits-agents-and-approvals/spend-policies-update.md): `PATCH /spend-policies/{id}`
- [Revoke a policy, immediately](https://platform.praecise.com/skerry/reference/limits-agents-and-approvals/spend-policies-revoke.md): `POST /spend-policies/{id}/revoke`
- [Spend policies consent list](https://platform.praecise.com/skerry/reference/limits-agents-and-approvals/spend-policies-consent-list.md): `GET /spend-policies/{id}/consent`
- [Record that a person agreed to the mandate as it stands](https://platform.praecise.com/skerry/reference/limits-agents-and-approvals/spend-policies-consent-create.md): `POST /spend-policies/{id}/consent`
- [The operations counted under a mandate, newest first](https://platform.praecise.com/skerry/reference/limits-agents-and-approvals/spend-policies-usage-list.md): `GET /spend-policies/{id}/usage`
- [A customer's spend policies as mandates (`object](https://platform.praecise.com/skerry/reference/limits-agents-and-approvals/mandates-list.md): `GET /mandates`
- [Operations held for a person to approve, newest first, each with `payee_display`](https://platform.praecise.com/skerry/reference/limits-agents-and-approvals/approvals-list.md): `GET /approvals`
- [One held operation, as it was asked, with its `decisions`](https://platform.praecise.com/skerry/reference/limits-agents-and-approvals/approvals-get.md): `GET /approvals/{id}`
- [Approve a held operation and run it once](https://platform.praecise.com/skerry/reference/limits-agents-and-approvals/approvals-approve.md): `POST /approvals/{id}/approve`
- [Refuse a held operation](https://platform.praecise.com/skerry/reference/limits-agents-and-approvals/approvals-deny.md): `POST /approvals/{id}/deny`
- [Make an approve link and a deny link for one person](https://platform.praecise.com/skerry/reference/limits-agents-and-approvals/approvals-links.md): `POST /approvals/{id}/links`
- [The page behind an approval link](https://platform.praecise.com/skerry/reference/limits-agents-and-approvals/approve-get.md): `GET /approve/{token}`
- [The page's confirm button](https://platform.praecise.com/skerry/reference/limits-agents-and-approvals/approve-confirm.md): `POST /approve/{token}`
- [What a key or an agent may still move, per window](https://platform.praecise.com/skerry/reference/limits-agents-and-approvals/customers-limits-get.md): `GET /customers/{id}/limits`

## Agents and credentials

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.

- [Agents, newest first. `?customer_id=&status=&parent_agent_id=`](https://platform.praecise.com/skerry/reference/agents-and-credentials/agents-list.md): `GET /agents`
- [Register an agent](https://platform.praecise.com/skerry/reference/agents-and-credentials/agents-create.md): `POST /agents`
- [One agent, with its status and signing keys](https://platform.praecise.com/skerry/reference/agents-and-credentials/agents-get.md): `GET /agents/{id}`
- [Change an agent's name, operator, description or whether it must sign requests](https://platform.praecise.com/skerry/reference/agents-and-credentials/agents-update.md): `PATCH /agents/{id}`
- [Suspend an agent](https://platform.praecise.com/skerry/reference/agents-and-credentials/agents-suspend.md): `POST /agents/{id}/suspend`
- [Resume a suspended agent](https://platform.praecise.com/skerry/reference/agents-and-credentials/agents-resume.md): `POST /agents/{id}/resume`
- [Revoke an agent permanently, with every agent it delegated to and all their keys](https://platform.praecise.com/skerry/reference/agents-and-credentials/agents-revoke.md): `POST /agents/{id}/revoke`
- [Mint a key bound to the agent](https://platform.praecise.com/skerry/reference/agents-and-credentials/agents-keys-create.md): `POST /agents/{id}/keys`
- [The agent's signing keys in force](https://platform.praecise.com/skerry/reference/agents-and-credentials/agents-public-keys-list.md): `GET /agents/{id}/public-keys`
- [Register an Ed25519 public key (JWK) the agent signs requests with](https://platform.praecise.com/skerry/reference/agents-and-credentials/agents-public-keys-create.md): `POST /agents/{id}/public-keys`
- [Remove a signing key](https://platform.praecise.com/skerry/reference/agents-and-credentials/agents-public-keys-delete.md): `DELETE /agents/{id}/public-keys/{kid}`
- [The OAuth clients approved to act as the agent, newest first, as `oauth_clients](https://platform.praecise.com/skerry/reference/agents-and-credentials/agents-oauth-clients-list.md): `GET /agents/{id}/oauth-clients`
- [Agents oauth clients create](https://platform.praecise.com/skerry/reference/agents-and-credentials/agents-oauth-clients-create.md): `POST /agents/{id}/oauth-clients`
- [Withdraw an OAuth client's approval](https://platform.praecise.com/skerry/reference/agents-and-credentials/agents-oauth-clients-delete.md): `DELETE /agents/{id}/oauth-clients`
- [Called with the agent's own credential](https://platform.praecise.com/skerry/reference/agents-and-credentials/agents-delegations-create.md): `POST /agents/{id}/delegations`
- [Keys list](https://platform.praecise.com/skerry/reference/agents-and-credentials/keys-list.md): `GET /keys`
- [One key: scopes, bound agent, last use, expiry](https://platform.praecise.com/skerry/reference/agents-and-credentials/keys-get.md): `GET /keys/{id}`
- [A new secret for the same key](https://platform.praecise.com/skerry/reference/agents-and-credentials/keys-roll.md): `POST /keys/{id}/roll`
- [Revoke a key, immediately](https://platform.praecise.com/skerry/reference/agents-and-credentials/keys-revoke.md): `POST /keys/{id}/revoke`
- [Agents' public signing keys as a key directory (a JWK Set)](https://platform.praecise.com/skerry/reference/agents-and-credentials/well-known-http-message-signatures-directory-get.md): `GET /.well-known/http-message-signatures-directory`
- [OAuth protected-resource metadata (RFC 9728)](https://platform.praecise.com/skerry/reference/agents-and-credentials/well-known-oauth-protected-resource-get.md): `GET /.well-known/oauth-protected-resource`

## Controls and audit

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.

- [Whether one customer is frozen](https://platform.praecise.com/skerry/reference/controls-and-audit/customers-freeze-get.md): `GET /customers/{id}/freeze`
- [Freeze a customer](https://platform.praecise.com/skerry/reference/controls-and-audit/customers-freeze.md): `POST /customers/{id}/freeze`
- [Lift a customer's freeze](https://platform.praecise.com/skerry/reference/controls-and-audit/customers-unfreeze.md): `POST /customers/{id}/unfreeze`
- [Freeze the whole account in this environment](https://platform.praecise.com/skerry/reference/controls-and-audit/controls-freeze.md): `POST /controls/freeze`
- [Lift the account's freeze](https://platform.praecise.com/skerry/reference/controls-and-audit/controls-unfreeze.md): `POST /controls/unfreeze`
- [What is frozen right now: the account and each frozen customer](https://platform.praecise.com/skerry/reference/controls-and-audit/controls-get.md): `GET /controls`
- [The audit trail, newest first](https://platform.praecise.com/skerry/reference/controls-and-audit/audit-list.md): `GET /audit`
- [Walk the audit hash chain and report the first entry that does not fit](https://platform.praecise.com/skerry/reference/controls-and-audit/audit-verify-get.md): `GET /audit/verify`

## Conversion and ledger

Convert a customer's own balance between currencies with a priced, expiring quote, and export the double-entry books for an accountant.

- [A priced offer to convert, valid for a short time and usable once](https://platform.praecise.com/skerry/reference/conversion-and-ledger/conversions-quote.md): `POST /conversions/quote`
- [Conversions, newest first. `?customer_id=`](https://platform.praecise.com/skerry/reference/conversion-and-ledger/conversions-list.md): `GET /conversions`
- [Execute a quote. Needs an Idempotency-Key](https://platform.praecise.com/skerry/reference/conversion-and-ledger/conversions-create.md): `POST /conversions`
- [One conversion and whether it has settled](https://platform.praecise.com/skerry/reference/conversion-and-ledger/conversions-get.md): `GET /conversions/{id}`
- [Double-entry entries for a period, as JSON or CSV, in booking order](https://platform.praecise.com/skerry/reference/conversion-and-ledger/customers-ledger-list.md): `GET /customers/{id}/ledger`

## Books and receipts

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.

- [Whether the books are connected, to which project, and how delivery is going](https://platform.praecise.com/skerry/reference/books-and-receipts/customers-books-get.md): `GET /customers/{id}/books`
- [Start connecting a customer's books](https://platform.praecise.com/skerry/reference/books-and-receipts/customers-books-connect.md): `POST /customers/{id}/books`
- [End the connection. Movements stop being delivered](https://platform.praecise.com/skerry/reference/books-and-receipts/customers-books-disconnect.md): `DELETE /customers/{id}/books`
- [Send the movements of a period to the books again. Safe to repeat](https://platform.praecise.com/skerry/reference/books-and-receipts/customers-books-backfill.md): `POST /customers/{id}/books/backfill`
- [What was sent to the books and how it went, newest first. `?status=`](https://platform.praecise.com/skerry/reference/books-and-receipts/customers-books-deliveries-list.md): `GET /customers/{id}/books/deliveries`
- [Customers books links get](https://platform.praecise.com/skerry/reference/books-and-receipts/customers-books-links-get.md): `GET /customers/{id}/books/links`
- [Complete a connection](https://platform.praecise.com/skerry/reference/books-and-receipts/books-connections-complete.md): `POST /books/connections`
- [The signed receipt of one movement](https://platform.praecise.com/skerry/reference/books-and-receipts/receipts-get.md): `GET /receipts/{id}`
- [The public keys receipts are signed with. Public](https://platform.praecise.com/skerry/reference/books-and-receipts/well-known-skerry-receipt-keys-get.md): `GET /.well-known/skerry-receipt-keys`

## Budgets

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.

- [Customers budgets list](https://platform.praecise.com/skerry/reference/budgets/customers-budgets-list.md): `GET /customers/{id}/budgets`
- [Set aside an amount of a wallet's balance for a mandate or an agent](https://platform.praecise.com/skerry/reference/budgets/customers-budgets-create.md): `POST /customers/{id}/budgets`
- [One budget, with what was spent from it and what remains](https://platform.praecise.com/skerry/reference/budgets/customers-budgets-get.md): `GET /customers/{id}/budgets/{budget_id}`
- [Add to a budget](https://platform.praecise.com/skerry/reference/budgets/customers-budgets-top-up.md): `POST /customers/{id}/budgets/{budget_id}/top-up`
- [Release a budget: what was not spent is free for other callers again](https://platform.praecise.com/skerry/reference/budgets/customers-budgets-release.md): `POST /customers/{id}/budgets/{budget_id}/release`

## Customer controls

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.

- [How a new destination is treated](https://platform.praecise.com/skerry/reference/customer-controls/customers-payee-controls-get.md): `GET /customers/{id}/payee-controls`
- [Customers payee controls replace](https://platform.praecise.com/skerry/reference/customer-controls/customers-payee-controls-replace.md): `PUT /customers/{id}/payee-controls`
- [Customers trusted payees list](https://platform.praecise.com/skerry/reference/customer-controls/customers-trusted-payees-list.md): `GET /customers/{id}/trusted-payees`
- [Trust a destination before it is first paid, so that payout is not held](https://platform.praecise.com/skerry/reference/customer-controls/customers-trusted-payees-create.md): `POST /customers/{id}/trusted-payees`
- [The customer's velocity and anomaly rules. A rule that is null is off](https://platform.praecise.com/skerry/reference/customer-controls/customers-risk-rules-get.md): `GET /customers/{id}/risk-rules`
- [Replace the customer's risk rules](https://platform.praecise.com/skerry/reference/customer-controls/customers-risk-rules-replace.md): `PUT /customers/{id}/risk-rules`
- [The destinations this customer's payouts may go to](https://platform.praecise.com/skerry/reference/customer-controls/customers-withdrawal-allow-list-get.md): `GET /customers/{id}/withdrawal-allow-list`
- [Replace the withdrawal allow-list](https://platform.praecise.com/skerry/reference/customer-controls/customers-withdrawal-allow-list-replace.md): `PUT /customers/{id}/withdrawal-allow-list`
- [The customer's approvers, and whether this deployment sends mail](https://platform.praecise.com/skerry/reference/customer-controls/customers-approvers-list.md): `GET /customers/{id}/approvers`
- [Customers approvers create](https://platform.praecise.com/skerry/reference/customer-controls/customers-approvers-create.md): `POST /customers/{id}/approvers`
- [Remove an approver. `?email=`](https://platform.praecise.com/skerry/reference/customer-controls/customers-approvers-delete.md): `DELETE /customers/{id}/approvers`

## Wallet controls

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.

- [One wallet](https://platform.praecise.com/skerry/reference/wallet-controls/customers-wallets-get.md): `GET /customers/{id}/wallets/{wallet_id}`
- [Change a wallet's label, purpose, agent or floor](https://platform.praecise.com/skerry/reference/wallet-controls/customers-wallets-update.md): `PATCH /customers/{id}/wallets/{wallet_id}`
- [The customer's sweep rules, newest first, with how each last ran (`last_result`)](https://platform.praecise.com/skerry/reference/wallet-controls/customers-sweep-rules-list.md): `GET /customers/{id}/sweep-rules`
- [Customers sweep rules create](https://platform.praecise.com/skerry/reference/wallet-controls/customers-sweep-rules-create.md): `POST /customers/{id}/sweep-rules`
- [One sweep rule](https://platform.praecise.com/skerry/reference/wallet-controls/customers-sweep-rules-get.md): `GET /customers/{id}/sweep-rules/{rule_id}`
- [Cancel a sweep rule. A payout it already made is not recalled](https://platform.praecise.com/skerry/reference/wallet-controls/customers-sweep-rules-delete.md): `DELETE /customers/{id}/sweep-rules/{rule_id}`

## Scheduled payouts and waiting

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.

- [Scheduled payouts, newest first](https://platform.praecise.com/skerry/reference/scheduled-payouts-and-waiting/payouts-scheduled-list.md): `GET /payouts/scheduled`
- [One scheduled payout](https://platform.praecise.com/skerry/reference/scheduled-payouts-and-waiting/payouts-scheduled-get.md): `GET /payouts/scheduled/{id}`
- [Cancel a scheduled payout that has not run, or stop a recurring one](https://platform.praecise.com/skerry/reference/scheduled-payouts-and-waiting/payouts-scheduled-delete.md): `DELETE /payouts/scheduled/{id}`
- [A person releases a conditional payout (`{id}` is the scheduled payout's id)](https://platform.praecise.com/skerry/reference/scheduled-payouts-and-waiting/payouts-release.md): `POST /payouts/{id}/release`

## Authorisation evidence

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.

- [The evidence for one payment](https://platform.praecise.com/skerry/reference/authorisation-evidence/payments-authorisation-get.md): `GET /payments/{id}/authorisation`
- [The same record for one payout](https://platform.praecise.com/skerry/reference/authorisation-evidence/payouts-authorisation-get.md): `GET /payouts/{id}/authorisation`
- [The same record for one refund](https://platform.praecise.com/skerry/reference/authorisation-evidence/refunds-authorisation-get.md): `GET /refunds/{id}/authorisation`
- [The same record for one conversion](https://platform.praecise.com/skerry/reference/authorisation-evidence/conversions-authorisation-get.md): `GET /conversions/{id}/authorisation`

## Sandbox

Helpers that exist only with a test key, so an integration can be built and exercised without a browser or a bank.

- [Act as the payer: succeed, decline, run short of funds, or open a dispute](https://platform.praecise.com/skerry/reference/sandbox/sandbox-checkout-sessions-complete.md): `POST /sandbox/checkout-sessions/{id}/complete`
- [Decide a held operation as a person would, without a second key or a link](https://platform.praecise.com/skerry/reference/sandbox/sandbox-approvals-decide.md): `POST /sandbox/approvals/{id}/decide`
- [Run a scheduled payout now instead of at its time, as the worker would](https://platform.praecise.com/skerry/reference/sandbox/sandbox-payouts-scheduled-advance.md): `POST /sandbox/payouts/scheduled/{id}/advance`
- [Record a named event about an object, marked `sandbox](https://platform.praecise.com/skerry/reference/sandbox/sandbox-events-create.md): `POST /sandbox/events`
- [Sandbox customers risk rules trip](https://platform.praecise.com/skerry/reference/sandbox/sandbox-customers-risk-rules-trip.md): `POST /sandbox/customers/{id}/risk-rules/trip`
- [Sandbox budgets exhaust](https://platform.praecise.com/skerry/reference/sandbox/sandbox-budgets-exhaust.md): `POST /sandbox/budgets/{id}/exhaust`
- [Act as the payer on a session's stablecoin or bank-transfer instructions](https://platform.praecise.com/skerry/reference/sandbox/sandbox-checkout-sessions-deposit.md): `POST /sandbox/checkout-sessions/{id}/deposit`

## Agentic checkout: what a customer sets

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.

- [The customer's agent-platform credentials, never with a secret](https://platform.praecise.com/skerry/reference/agentic-checkout-what-a-customer-sets/customers-agentic-credentials-list.md): `GET /customers/{id}/agentic/credentials`
- [Issue a bearer token to an agent platform](https://platform.praecise.com/skerry/reference/agentic-checkout-what-a-customer-sets/customers-agentic-credentials-create.md): `POST /customers/{id}/agentic/credentials`
- [Revoke a credential](https://platform.praecise.com/skerry/reference/agentic-checkout-what-a-customer-sets/customers-agentic-credentials-delete.md): `DELETE /customers/{id}/agentic/credentials/{credential_id}`
- [Customers agentic pricing callback](https://platform.praecise.com/skerry/reference/agentic-checkout-what-a-customer-sets/customers-agentic-pricing-callback.md): `POST /customers/{id}/agentic/pricing-callback`
- [What the customer allows agents, and the address agent platforms call](https://platform.praecise.com/skerry/reference/agentic-checkout-what-a-customer-sets/customers-agentic-settings-get.md): `GET /customers/{id}/agentic/settings`
- [Change what the customer allows agents](https://platform.praecise.com/skerry/reference/agentic-checkout-what-a-customer-sets/customers-agentic-settings-update.md): `POST /customers/{id}/agentic/settings`
- [Refunds agents have asked for, newest first. `?status=pending`](https://platform.praecise.com/skerry/reference/agentic-checkout-what-a-customer-sets/customers-agentic-refund-requests-list.md): `GET /customers/{id}/agentic/refund-requests`
- [Approve or deny a refund an agent asked for](https://platform.praecise.com/skerry/reference/agentic-checkout-what-a-customer-sets/customers-agentic-refund-requests-decide.md): `POST /customers/{id}/agentic/refund-requests/{request_id}`
- [Where an order stands](https://platform.praecise.com/skerry/reference/agentic-checkout-what-a-customer-sets/customers-agentic-orders-get.md): `GET /customers/{id}/agentic/orders/{session_id}`
- [Say where an order has got to](https://platform.praecise.com/skerry/reference/agentic-checkout-what-a-customer-sets/customers-agentic-orders-update.md): `POST /customers/{id}/agentic/orders/{session_id}`

## Agentic Commerce Protocol

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.

- [Create a checkout session. Answers 201 with the session](https://platform.praecise.com/skerry/reference/agentic-commerce-protocol/agentic-checkout-sessions-create.md): `POST /agentic/{customer_id}/checkout_sessions`
- [Retrieve a checkout session](https://platform.praecise.com/skerry/reference/agentic-commerce-protocol/agentic-checkout-sessions-get.md): `GET /agentic/{customer_id}/checkout_sessions/{checkout_session_id}`
- [Update a checkout session](https://platform.praecise.com/skerry/reference/agentic-commerce-protocol/agentic-checkout-sessions-update.md): `POST /agentic/{customer_id}/checkout_sessions/{checkout_session_id}`
- [Complete with a delegated payment token](https://platform.praecise.com/skerry/reference/agentic-commerce-protocol/agentic-checkout-sessions-complete.md): `POST /agentic/{customer_id}/checkout_sessions/{checkout_session_id}/complete`
- [Cancel a session that has not completed. 405 afterwards](https://platform.praecise.com/skerry/reference/agentic-commerce-protocol/agentic-checkout-sessions-cancel.md): `POST /agentic/{customer_id}/checkout_sessions/{checkout_session_id}/cancel`
- [A Skerry extension (`xyz.skerry.refunds`), not part of the protocol](https://platform.praecise.com/skerry/reference/agentic-commerce-protocol/agentic-checkout-sessions-refunds.md): `POST /agentic/{customer_id}/checkout_sessions/{checkout_session_id}/refunds`

## Universal Commerce Protocol: what a customer sets

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.

- [Customers ucp settings get](https://platform.praecise.com/skerry/reference/universal-commerce-protocol-what-a-customer-sets/customers-ucp-settings-get.md): `GET /customers/{id}/ucp/settings`
- [Replace the customer's settings](https://platform.praecise.com/skerry/reference/universal-commerce-protocol-what-a-customer-sets/customers-ucp-settings-replace.md): `PUT /customers/{id}/ucp/settings`

## Universal Commerce Protocol

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.

- [The customer's business profile](https://platform.praecise.com/skerry/reference/universal-commerce-protocol/ucp-well-known-ucp-get.md): `GET /ucp/{customer_id}/.well-known/ucp`
- [Create a checkout. Answers 201 with the checkout, priced](https://platform.praecise.com/skerry/reference/universal-commerce-protocol/ucp-checkout-sessions-create.md): `POST /ucp/{customer_id}/checkout-sessions`
- [Read a checkout. Only the platform that opened it finds it](https://platform.praecise.com/skerry/reference/universal-commerce-protocol/ucp-checkout-sessions-get.md): `GET /ucp/{customer_id}/checkout-sessions/{id}`
- [Replace a checkout](https://platform.praecise.com/skerry/reference/universal-commerce-protocol/ucp-checkout-sessions-replace.md): `PUT /ucp/{customer_id}/checkout-sessions/{id}`
- [Complete with the card processor's payment token, for the checkout's exact total](https://platform.praecise.com/skerry/reference/universal-commerce-protocol/ucp-checkout-sessions-complete.md): `POST /ucp/{customer_id}/checkout-sessions/{id}/complete`
- [Cancel a checkout that is neither completed nor canceled](https://platform.praecise.com/skerry/reference/universal-commerce-protocol/ucp-checkout-sessions-cancel.md): `POST /ucp/{customer_id}/checkout-sessions/{id}/cancel`
- [Ucp orders get](https://platform.praecise.com/skerry/reference/universal-commerce-protocol/ucp-orders-get.md): `GET /ucp/{customer_id}/orders/{id}`

## Paying by the call

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.

- [The customer's priced resources, with the minimum single payment per method](https://platform.praecise.com/skerry/reference/paying-by-the-call/customers-priced-resources-list.md): `GET /customers/{id}/priced-resources`
- [Price a resource](https://platform.praecise.com/skerry/reference/paying-by-the-call/customers-priced-resources-create.md): `POST /customers/{id}/priced-resources`
- [Stop charging for a resource](https://platform.praecise.com/skerry/reference/paying-by-the-call/customers-priced-resources-delete.md): `DELETE /customers/{id}/priced-resources/{resource_id}`
- [The 402 to send an unpaid request: status, headers and body, in both protocols](https://platform.praecise.com/skerry/reference/paying-by-the-call/machine-payments-challenge.md): `POST /machine-payments/challenge`
- [Check and settle the payment a client sent, or draw the call from its credit](https://platform.praecise.com/skerry/reference/paying-by-the-call/machine-payments-verify.md): `POST /machine-payments/verify`
- [A customer's credits, newest first](https://platform.praecise.com/skerry/reference/paying-by-the-call/machine-payments-credits-list.md): `GET /machine-payments/credits`
- [Buy prepaid credit for a resource with one payment](https://platform.praecise.com/skerry/reference/paying-by-the-call/machine-payments-credits-create.md): `POST /machine-payments/credits`
- [One credit: bought, balance, expiry](https://platform.praecise.com/skerry/reference/paying-by-the-call/machine-payments-credits-get.md): `GET /machine-payments/credits/{id}`
- [Send back the unused part of a credit, within the customer's policy](https://platform.praecise.com/skerry/reference/paying-by-the-call/machine-payments-credits-refund.md): `POST /machine-payments/credits/{id}/refund`

## Hosted addresses and the pay-by-the-call proxy

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.

- [A checkout session's own address](https://platform.praecise.com/skerry/reference/hosted-addresses-and-the-pay-by-the-call-proxy/checkout-get.md): `GET /checkout/{id}`
- [A payment link's own address](https://platform.praecise.com/skerry/reference/hosted-addresses-and-the-pay-by-the-call-proxy/pay-link-get.md): `GET /pay-link/{id}`
- [The proxy in front of a priced resource](https://platform.praecise.com/skerry/reference/hosted-addresses-and-the-pay-by-the-call-proxy/pay-get.md): `GET /pay/{resource_id}`
- [The same, for a request with a body](https://platform.praecise.com/skerry/reference/hosted-addresses-and-the-pay-by-the-call-proxy/pay-post.md): `POST /pay/{resource_id}`

## Agents paying

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.

- [The agent's wallets, active and retired, with their addresses](https://platform.praecise.com/skerry/reference/agents-paying/agents-wallets-list.md): `GET /agents/{id}/wallets`
- [Create a wallet the agent signs payments from](https://platform.praecise.com/skerry/reference/agents-paying/agents-wallets-create.md): `POST /agents/{id}/wallets`
- [One wallet: network, address, state and what its key may sign](https://platform.praecise.com/skerry/reference/agents-paying/agents-wallets-get.md): `GET /agents/{id}/wallets/{wallet_id}`
- [Retire a wallet](https://platform.praecise.com/skerry/reference/agents-paying/agents-wallets-delete.md): `DELETE /agents/{id}/wallets/{wallet_id}`
- [Attempts to pay merchants, whatever became of them](https://platform.praecise.com/skerry/reference/agents-paying/agent-payments-list.md): `GET /agent-payments`
- [Agent payments create](https://platform.praecise.com/skerry/reference/agents-paying/agent-payments-create.md): `POST /agent-payments`
- [One attempt](https://platform.praecise.com/skerry/reference/agents-paying/agent-payments-get.md): `GET /agent-payments/{id}`

## Rewards and reporting

What the platform pays on balances, and what this project has consumed against its plan.

- [The stablecoins this project can hold](https://platform.praecise.com/skerry/reference/rewards-and-reporting/coins-list.md): `GET /coins`
- [Ask for a stablecoin of your own](https://platform.praecise.com/skerry/reference/rewards-and-reporting/coins-create.md): `POST /coins`
- [What a balance in this coin earns](https://platform.praecise.com/skerry/reference/rewards-and-reporting/coins-rewards-get.md): `GET /coins/{currency}/rewards`
- [What one customer's balance in a coin earned](https://platform.praecise.com/skerry/reference/rewards-and-reporting/customers-rewards-get.md): `GET /customers/{id}/rewards/{currency}`
- [Usage against the plan's limits — the same count a call is refused against](https://platform.praecise.com/skerry/reference/rewards-and-reporting/usage-get.md): `GET /usage`
- [Requests for information about a customer or a payment, with the deadline](https://platform.praecise.com/skerry/reference/rewards-and-reporting/compliance-requests-list.md): `GET /compliance-requests`
- [One request for information: what was asked, the deadline, and what it holds](https://platform.praecise.com/skerry/reference/rewards-and-reporting/compliance-requests-get.md): `GET /compliance-requests/{id}`
