A key the agent can’t overspend
Give each agent its own API key:- Scopes limit what it can do:
payouts:writeandrecipients:readfor 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.
externalReferencemakes every money-moving call idempotent, so an agent that retries after a timeout can’t double-pay.
Machine-readable everything
- Every page of these docs is available as Markdown: append
.mdto 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,
detailswith structured context, ids that announce their type, and the capabilities catalog to discover what’s possible at runtime instead of guessing.
A sane loop
GET /v1/capabilities/{country}: what can I do here?POST /v1/validate: is this destination real, and whose is it?POST /v1/payoutswith anexternalReferencederived from the task id.- Wait for
payout.completed/payout.failed. Don’t poll in a tight loop; rate limits apply to agents too. - Log the
x-request-idof every call. When something looks wrong, that’s what support needs.