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; 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.