AgentPay Spend Cap & Receipts
A stateful, multi-chain spending session for AI agents. One session enforces a hard USDC budget cap across every tool call, with a verifiable receipt and running ledger for each payment — not a one-shot budget check, but persistent spend governance with a full audit trail. USDC on Base (standard x402) or Stellar (via the AgentPay SDK).
The wallet the 402 directs payment to. Its whole payment record — every payer, every chain — is on the merchant page.
Asset 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913
The payTo wallet does not resolve to a registered ERC-8004 agent. That is not a verdict on the service — most of the catalog is unregistered.
Live 402 challenge
Captured by the enrichment pass, not read just now. Prices can change — always read the 402 the endpoint answers with.
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"error": "Payment required",
"pay_to": "0xE8B25A72dD6aeF69515452a61AD231C7DF2843b7",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2",
"assetTransferMethod": "eip3009"
},
"payTo": "0xE8B25A72dD6aeF69515452a61AD231C7DF2843b7",
"amount": "10000",
"scheme": "exact",
"network": "eip155:8453",
"mimeType": "application/json",
"resource": "https://agentpay.tools/v1/session/create",
"description": "A stateful, multi-chain spending session for AI agents. One session enforces a hard USDC budget cap across every tool call, with a verifiable receipt and running ledger for each payment — not a one-shot budget check, but persistent spend governance with a full audit trail. USDC settles on Base (standard x402) or Stellar (via the AgentPay SDK). Costs $0.01 USDC once; returns a session_id and budget config. Enforce the cap client-side with the AgentPay SDK (from agentpay import Session).",
"maxAmountRequired": "10000",
"maxTimeoutSeconds": 300
}
],
"network": "eip155:8453",
"resource": {
"url": "https://agentpay.tools/v1/session/create",
"tags": [
"budget",
"receipts",
"session",
"spend-control",
"agent-commerce"
],
"mimeType": "application/json",
"description": "A stateful, multi-chain spending session for AI agents. One session enforces a hard USDC budget cap across every tool call, with a verifiable receipt and running ledger for each payment — not a one-shot budget check, but persistent spend governance with a full audit trail. USDC on Base (standard x402) or Stellar (via the AgentPay SDK).",
"serviceName": "AgentPay Spend Cap & Receipts"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"body": {
"label": "session",
"max_spend": "0.10",
"agent_address": "0x0000000000000000000000000000000000000000"
},
"type": "http",
"method": "POST",
"bodyType": "json"
},
"errors": [
{
"body": {
"error": "<summary>",
"reason": "<machine-readable reason>"
},
"when": "No payment attached (this challenge), or the attached payment failed verification: wrong amount/recipient, memo mismatch, expired, or already used (replay)",
"retry": "Re-request the challenge and pay again",
"status": 402
},
{
"body": {
"detail": [
{
"loc": [
"body"
],
"msg": "<what is wrong>",
"type": "<error type>"
}
]
},
"when": "Request body present but malformed (invalid JSON or wrong field types) WITH a payment header attached — checked BEFORE settlement, so the payment is never consumed. An unpaid malformed request gets the 402, not a 422",
"retry": "Fix the body and retry with a fresh payment",
"status": 422
},
{
"body": {
"detail": "Tool '<name>' not found"
},
"when": "Unknown tool name",
"status": 404
},
{
"body": {
"error": "Rate limit exceeded"
},
"when": "Rate limited (per-IP and per-wallet limits)",
"retry": "Back off and retry after a minute",
"status": 429
},
{
"body": {
"tool": "<name>",
"error": "Tool execution failed",
"payment_status": "refund_pending"
},
"when": "Payment settled on-chain but tool execution failed — the payment is marked refund_pending automatically; you are not charged for a failed call",
"status": 500
},
{
"body": {
"detail": "<what is unavailable>"
},
"when": "Tool temporarily unavailable, or the gateway cannot persist the challenge (fail-closed)",
"retry": "Retry shortly",
"status": 503
}
],
"output": {
"type": "json",
"example": {
"receipt": {
"network": "eip155:8453",
"tx_hash": "0xee85d8dd374b5d1cb40bfa441086af557d356acc2bb4d5819f56331fce42adee",
"amount_usdc": "0.01"
},
"max_spend": "0.10",
"created_at": "2026-05-29T00:00:00Z",
"session_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"gateway_url": "https://agentpay.tools",
"tools_endpoint": "https://agentpay.tools/tools"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method",
"body"
],
"properties": {
"body": {
"type": "object",
"required": [
"agent_address"
],
"properties": {
"label": {
"type": "string",
"description": "Optional human-readable session label"
},
"max_spend": {
"type": "string",
"description": "Hard budget cap in USDC, e.g. '0.10'"
},
"agent_address": {
"type": "string",
"description": "Paying agent's EVM wallet address"
}
}
},
"type": {
"type": "string"
},
"method": {
"type": "string"
},
"bodyType": {
"type": "string"
}
}
}
}
},
"description": "A stateful, multi-chain spending session for AI agents: a hard USDC budget cap across every tool call, with a verifiable receipt and running ledger per payment. Not a one-shot budget check — persistent spend governance with a full audit trail. USDC on Base (standard x402) or Stellar (via the AgentPay SDK)."
}
},
"payment_id": "586465c8-6398-4fec-af82-250b1df3deca",
"amount_usdc": "0.01",
"x402Version": 2,
"instructions": "Sign an EIP-3009 transferWithAuthorization for the amount above, encode as base64 JSON PaymentPayload, and retry with header PAYMENT-SIGNATURE: <base64_payload>",
"payment_options": {
"base": {
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"pay_to": "0xE8B25A72dD6aeF69515452a61AD231C7DF2843b7",
"scheme": "exact",
"network": "eip155:8453",
"amount_usdc": "0.01",
"instructions": "Sign an EIP-3009 transferWithAuthorization for the amount above, encode as base64 JSON PaymentPayload, and retry with header PAYMENT-SIGNATURE: <base64_payload>",
"amount_atomic": "10000",
"maxTimeoutSeconds": 300
},
"stellar": {
"note": "Classic Stellar payment + text memo (payment_id), verified via Horizon — not the standard @x402/stellar Soroban scheme. Pay with the AgentPay SDK (pip install agentpay-x402) or manually per instructions.",
"asset": "USDC",
"header": "X-Payment: tx_hash=<hash>,from=<addr>,id=586465c8-6398-4fec-af82-250b1df3deca",
"pay_to": "GB7THTEVT2T7CZQ5TFUOIQSI32XCJ7BHWS35OBTAI2V4FNL7BXZZ2GM2",
"scheme": "agentpay-classic-memo",
"network": "mainnet",
"payment_id": "586465c8-6398-4fec-af82-250b1df3deca",
"amount_usdc": "0.01"
}
}
}Accepts
The payment requirements as published to the catalog. Read the live 402 before paying — a price here is a claim, not a quote.
Pay 0.01 USDC on Base to 0xE8B2…843b7. The signed payment is good for 5 minutes.
- Paid to
- 0xE8B2…843b7
- USD Coin contract
- 0x8335…02913
- Payment window
- 5 minutes
- As published
- 10000 smallest units
- Buys
- AgentPay tool call
- Returns
- application/json
The catalog’s raw entry
[
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2",
"assetTransferMethod": "eip3009"
},
"payTo": "0xE8B25A72dD6aeF69515452a61AD231C7DF2843b7",
"amount": "10000",
"scheme": "exact",
"network": "eip155:8453",
"mimeType": "application/json",
"resource": "https://agentpay.tools/v1/session/create",
"description": "AgentPay tool call",
"outputSchema": {
"input": {
"type": "object",
"properties": {
"label": {
"type": "string",
"description": "Optional session label"
},
"max_spend": {
"type": "string",
"description": "Budget cap in USDC, e.g. '0.10'"
},
"agent_address": {
"type": "string",
"description": "Paying agent's wallet address"
}
}
},
"errors": [
{
"body": {
"error": "<summary>",
"reason": "<machine-readable reason>"
},
"when": "No payment attached (this challenge), or the attached payment failed verification: wrong amount/recipient, memo mismatch, expired, or already used (replay)",
"retry": "Re-request the challenge and pay again",
"status": 402
},
{
"body": {
"detail": [
{
"loc": [
"body"
],
"msg": "<what is wrong>",
"type": "<error type>"
}
]
},
"when": "Request body present but malformed (invalid JSON or wrong field types) WITH a payment header attached — checked BEFORE settlement, so the payment is never consumed. An unpaid malformed request gets the 402, not a 422",
"retry": "Fix the body and retry with a fresh payment",
"status": 422
},
{
"body": {
"detail": "Tool '<name>' not found"
},
"when": "Unknown tool name",
"status": 404
},
{
"body": {
"error": "Rate limit exceeded"
},
"when": "Rate limited (per-IP and per-wallet limits)",
"retry": "Back off and retry after a minute",
"status": 429
},
{
"body": {
"tool": "<name>",
"error": "Tool execution failed",
"payment_status": "refund_pending"
},
"when": "Payment settled on-chain but tool execution failed — the payment is marked refund_pending automatically; you are not charged for a failed call",
"status": 502
},
{
"body": {
"detail": "<what is unavailable>"
},
"when": "Tool temporarily unavailable, or the gateway cannot persist the challenge (fail-closed)",
"retry": "Retry shortly",
"status": 503
}
],
"output": {
"receipt": {
"network": "base",
"tx_hash": "0x...",
"amount_usdc": "0.01"
},
"max_spend": "0.10",
"created_at": "2026-05-27T00:00:00Z",
"session_id": "uuid",
"gateway_url": "https://agentpay.tools",
"agent_address": "G...",
"tools_endpoint": "https://agentpay.tools/tools"
}
},
"maxTimeoutSeconds": 300
}
]Extensions
{
"bazaar": {
"info": {
"input": {
"body": {
"label": "session",
"max_spend": "0.10",
"agent_address": "0x0000000000000000000000000000000000000000"
},
"type": "http",
"method": "POST",
"bodyType": "json"
},
"errors": [
{
"body": {
"error": "<summary>",
"reason": "<machine-readable reason>"
},
"when": "No payment attached (this challenge), or the attached payment failed verification: wrong amount/recipient, memo mismatch, expired, or already used (replay)",
"retry": "Re-request the challenge and pay again",
"status": 402
},
{
"body": {
"detail": [
{
"loc": [
"body"
],
"msg": "<what is wrong>",
"type": "<error type>"
}
]
},
"when": "Request body present but malformed (invalid JSON or wrong field types) WITH a payment header attached — checked BEFORE settlement, so the payment is never consumed. An unpaid malformed request gets the 402, not a 422",
"retry": "Fix the body and retry with a fresh payment",
"status": 422
},
{
"body": {
"detail": "Tool '<name>' not found"
},
"when": "Unknown tool name",
"status": 404
},
{
"body": {
"error": "Rate limit exceeded"
},
"when": "Rate limited (per-IP and per-wallet limits)",
"retry": "Back off and retry after a minute",
"status": 429
},
{
"body": {
"tool": "<name>",
"error": "Tool execution failed",
"payment_status": "refund_pending"
},
"when": "Payment settled on-chain but tool execution failed — the payment is marked refund_pending automatically; you are not charged for a failed call",
"status": 502
},
{
"body": {
"detail": "<what is unavailable>"
},
"when": "Tool temporarily unavailable, or the gateway cannot persist the challenge (fail-closed)",
"retry": "Retry shortly",
"status": 503
}
],
"output": {
"type": "json",
"example": {
"receipt": {
"network": "eip155:8453",
"tx_hash": "0xee85d8dd374b5d1cb40bfa441086af557d356acc2bb4d5819f56331fce42adee",
"amount_usdc": "0.01"
},
"max_spend": "0.10",
"created_at": "2026-05-29T00:00:00Z",
"session_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"gateway_url": "https://agentpay.tools",
"tools_endpoint": "https://agentpay.tools/tools"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method",
"body"
],
"properties": {
"body": {
"type": "object",
"required": [
"agent_address"
],
"properties": {
"label": {
"type": "string",
"description": "Optional human-readable session label"
},
"max_spend": {
"type": "string",
"description": "Hard budget cap in USDC, e.g. '0.10'"
},
"agent_address": {
"type": "string",
"description": "Paying agent's EVM wallet address"
}
}
},
"type": {
"type": "string"
},
"method": {
"type": "string"
},
"bodyType": {
"type": "string"
}
}
}
}
},
"description": "A stateful, multi-chain spending session for AI agents: a hard USDC budget cap across every tool call, with a verifiable receipt and running ledger per payment. Not a one-shot budget check — persistent spend governance with a full audit trail. USDC on Base (standard x402) or Stellar (via the AgentPay SDK)."
}
}Provenance
- Seen in the source catalog
- 2026-09-04 07:01Z
- Last indexed by Roundhouse
- 2026-09-24 07:30Z
- Last enriched (probe, favicon, geo)
- 2026-09-20 17:15Z
- x402 version
- 2
- Max timeout
- 300s
- Liveness probe
- HTTP 402
Hand this page to an agent
Copy the prompt and paste it into Claude, an MCP client or your own agent — it will vet this service and call it over the free read API. No key, no account.
GET api.roundhouseai.io/v0/endpoints
This endpoint's own trailing-30-day call count, as published by the upstream catalog and snapshotted daily. 30 snapshots so far. Verified volume counts only settlements with an on-chain EIP-3009 marker.
Show the promptHide the prompt
Using Roundhouse, look up the x402 service AgentPay Spend Cap & Receipts and tell me whether it is worth paying: what a call costs, whether the endpoint answered when last probed, and what its payment record actually shows. curl -s 'https://api.roundhouseai.io/v0/endpoints?q=AgentPay%20Spend%20Cap%20%26%20Receipts' curl -s 'https://api.roundhouseai.io/v0/merchants/<the payTo wallet returned above>' Then call it: read the price from the live 402 at https://agentpay.tools/v1/session/create, never from a cached figure, and pay with an x402 client. The /v0 API needs an API key (`authorization: Bearer rh_live_…`) on everything except /v0/unified* and /v0/endpoints. Mint a personal key for $0.01 at GET https://api.roundhouseai.io/v0/test/x402, or use an organization key from https://roundhouseai.io/dashboard/team. If you do not have Roundhouse tools or skills installed, read https://roundhouseai.io/skill.md first — it is the whole procedure.