Concepts
A few ideas make everything else obvious.
Three layers: protocol · rail · account
Section titled “Three layers: protocol · rail · account”Keep these separate — they vary independently.
| Layer | Question it answers | Examples |
|---|---|---|
| Protocol | How does the agent ask to pay? | ACP, x402, A2A, UCP, AP2, Visa TAP, Skyfire, MPP |
| Rail | How does the money move? | Card · stablecoin (USDC on Base/Solana, RLUSD on XRPL, pathUSD on Tempo) · account transfer |
| Account | Where does it land? | Your Curless account |
A single currency can settle over more than one protocol, and one protocol can carry more than one rail — so the protocol you accept is decoupled from how the money actually moves. You accept all protocols; AgentBank picks the rail from the currency.
Merchant-quoted: you own the price
Section titled “Merchant-quoted: you own the price”AgentBank does not hold your catalog. In the production model, your backend prices each checkout with your own API key and opens it against the gateway (merchant-quoted); the agent then completes it. Anti-fraud still holds — the price comes from your authenticated request, never from the buyer.
YOUR backend ──(your API key, "this is €1,920")──▶ AgentBank opens a checkoutbuyer agent ──(completes the checkout)───────────▶ pays with its own funds money settles to YOUR accountThere’s also a catalog-driven path for small static-catalog merchants (the gateway prices from a catalog you register), but most integrations are merchant-quoted — you keep pricing where it belongs.
Amounts are always minor units
Section titled “Amounts are always minor units”Every amount is an integer in the currency’s minor units — never a float.
- Fiat (USD/EUR): 2 decimals.
192000= €1,920.00. - Stablecoins (USDC/USDT/EURC/RLUSD/pathUSD): 6 decimals.
50000= 0.05 USDC.
The same integer means different money in different currencies, so always read a currency’s scale before comparing amounts.
Order lifecycle
Section titled “Order lifecycle”Every checkout becomes a durable order whose status is derived from the payment:
| Order status | Meaning |
|---|---|
pending_payment |
Opened, awaiting the agent’s payment. |
paid |
Captured / settled — the money moved. |
refunded |
Fully or partially refunded via Curless. |
disputed |
Under dispute. |
canceled |
The charge failed, or an unpaid checkout timed out. |
Unpaid checkouts (ACP/UCP/x402) auto-cancel after a window (default 30 minutes) so they don’t sit pending forever. Verify/record protocols (Skyfire, MPP) are never auto-canceled — their payment intent is created at the moment of payment, not as a “pay later” session.
Environments & auth
Section titled “Environments & auth”- Base URL:
https://mcp.curless.ai. - Merchant auth: your Curless API key as
Authorization: Bearer …. One credential does everything — open checkouts, read orders, read balance. - Test vs live: your Curless wallet issues a test key (test mode — no real money, for end-to-end testing) and a live key (production). They’re scoped separately, so test and live data never mix.
- Agent auth / the remote connector: OAuth 2.0. See the merchant MCP connector.

