Skip to main content
Agents that move money need two things a human doesn’t: a hard budget, and machine-readable docs. Both are built in.

A key the agent can’t overspend

Give each agent its own API key:
  • Scopes limit what it can do: payouts:write and recipients:read for a supplier-paying agent, and nothing else.
  • Spend caps limit how much: per transaction, per day, per month, in USD across all currencies. A payout that would exceed a cap is rejected before any money moves, whatever the agent’s reasoning was.
  • IP allowlists limit from where.
  • externalReference makes every money-moving call idempotent, so an agent that retries after a timeout can’t double-pay.
The blast radius is then a number you chose in the dashboard, not a property of the agent’s behaviour. Revoke the key to stop it instantly.

Machine-readable everything

  • Every page of these docs is available as Markdown: append .md to any URL, or fetch /llms.txt (index) and /llms-full.txt (everything).
  • The docs are also an MCP server. Connect an agent (Claude Code, Cursor, any MCP client) and it can search and read this reference directly. See the Connect option in the page menu.
  • The API itself is friendly to agents: stable error codes to branch on, details with structured context, ids that announce their type, and the capabilities catalog to discover what’s possible at runtime instead of guessing.

A sane loop

  1. GET /v1/capabilities/{country}: what can I do here?
  2. POST /v1/validate: is this destination real, and whose is it?
  3. POST /v1/payouts with an externalReference derived from the task id.
  4. Wait for payout.completed / payout.failed. Don’t poll in a tight loop; rate limits apply to agents too.
  5. Log the x-request-id of every call. When something looks wrong, that’s what support needs.