agentpay — card-funded wallets for AI agents
Measured conclusion: Deep-tested. L2 outcome: tools_ok.
Pay-per-call LLM + extract (no API key), prepaid wallets, scoped keys, BSV x402 MCP.
| Author | com.entangleit |
|---|---|
| Access | remote |
| Publisher key required | No |
| Measured state | Deep-tested |
| L1 liveness | alive |
| L1 latency | 500 ms |
| Last measured | 2026-10-24 |
Add to your agent
Copy this into your MCP client config:
{
"mcpServers": {
"agentpay — card-funded wallets for AI agents": {
"url": "https://entangleit.com/api/agentpay/mcp",
"transport": "streamable-http"
}
}
}
Measured tools (27)
healthCheck that the agentpay API and MCP are up.
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
get_balanceWallet balance, agent identity, and daily limit status for the current agent key.
Parameters:
key— string — Agent key (agp_…). Optional when the MCP connection sends Authorization: Bearer.
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
create_topup_linkCreate a Stripe Checkout URL that a human opens to fund the wallet. Amount between 100 and 100000 cents USD.
Parameters:
amountCents(required) — integer — Top-up amount in USD cents, e.g. 2000 = $20key— string — Agent key (agp_…). Optional when the MCP connection sends Authorization: Bearer.
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
create_upgrade_linkCreate a Stripe Checkout URL to upgrade the wallet to agentpay Pro (more agent keys, higher daily limits, CSV export). Hand the URL to the human who owns the wallet.
Parameters:
key— string — Agent key (agp_…). Optional when the MCP connection sends Authorization: Bearer.
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
list_servicesBrowse the x402market registry of pay-per-call services for agents. Public — no key needed. Returns tools, network, payTo, and per-tool price in sats.
Parameters:
q— string — Search textlimit— integer
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
service_quoteCall a registry tool unsigned and return the live 402 payment requirements (price/payTo). Public — no key needed. Pass bountyAccount optionally to include a trust hint (discount eligibility) without changing the price.
Parameters:
serviceId(required) — string — Registry service id (from list_services)tool(required) — string — Tool name on that servicebountyAccount— integer — BSVBounties account # for trust hint
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
spendDebit the wallet and mint a receipt. Fails with 402 when balance or the agent daily limit is insufficient — respond by calling create_topup_link.
Parameters:
amountCents(required) — integer — Amount in USD centsdescription(required) — stringkey— string — Agent key (agp_…). Optional when the MCP connection sends Authorization: Bearer.ref— string — Idempotency-ish external referencetool— string — Optional tool labelservice— string — Optional service labelapprovalId— string — Approval id from a prior approval_required response
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
sendPay sats to a BSV P2PKH address (on-chain, settlement=live, txid is a BSV transaction) or to an agentpay wallet id apw_… (internal ledger credit, settlement=internal, txid is a receipt id). Idempotent per idempotency_key. Daily limits, allowlists (spend or agent_send), and approval thresholds apply. Pass the public wallet id, never the secret apw_ token.
Parameters:
dest(required) — string — BSV P2PKH address (1… / 3…) or public agentpay wallet id (apw_…, not the secret token)sats(required) — integer — Amount in satoshiskey— string — Agent key (agp_…). Optional when the MCP connection sends Authorization: Bearer.memo— string — Optional note stored on the sendapprovalId— string — Approval id from a prior approval_required responseidempotency_key— string — Replay key: a retry with the same key returns the original txid/receipt instead of sending twice
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
pay_serviceOne call for paid registry tools: quotes the seller's x402 challenge (legacy single-object or standard v2 accepts[] — BSV exact only), pays it from the site wallet on BSV mainnet, debits the agent wallet, and returns the seller's result plus txid. If the seller rejects the payment, the debit is refunded. For pay-per-call LLM with no API key, use chat; for typed values from messy text or receipts, use extract. Pass bountyAccount for reputation fast-path (approval x2 when score>=650).
Parameters:
serviceId(required) — string — Registry service id (from list_services)tool(required) — string — Tool name on that servicekey— string — Agent key (agp_…). Optional when the MCP connection sends Authorization: Bearer.ref— stringdryRun— boolean — Sandbox: quote + policy check only, no debit or settlementparams— object — Tool arguments (body for POST, query for GET)approvalId— string — Approval id from a prior approval_required responseamountCents— integer — Override the USD cents charged (min 1 cent default)description— stringbountyAccount— integer — BSVBounties account # for trust fast-path
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
chatPay-per-call LLM, no API key. Sends messages to Fuse chat completions; agentpay settles the standard x402 v2 BSV 402 from this wallet and returns the completion plus receiptUrl and txid. Models: fuse-fast (500 sats) or fuse-smart (2500 sats). Wallet limits, scoped keys, and trial budgets apply. Pass dryRun to quote without spending.
Parameters:
messages(required) — array — OpenAI-style chat messageskey— string — Agent key (agp_…). Optional when the MCP connection sends Authorization: Bearer.ref— stringmodel— string — Fuse model (default fuse-fast). fuse-fast = 500 sats, fuse-smart = 2500 sats.dryRun— boolean — Quote + policy check only, no debit or settlementapprovalId— string — Approval id from a prior approval_required responsemax_tokens— integeramountCents— integer — Override the USD cents charged (min 1 cent default)description— string
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
extractExtract typed values from messy text or receipts. Pays Fuse extract; agentpay settles the standard x402 v2 BSV 402 from this wallet. Prefer this over chat when you need structured fields with confidence scores and explicit nulls (p_null) instead of made-up answers. Types: text|number|date|time|datetime|duration|list|estimate|forecast (lists need items, e.g. "text"). fields is a name→{type} object. Tiers: S 3,500 sats (≤1,500 chars, ≤8 fields), M 15,000 (≤6,000 chars, ≤30 fields), L 50,000 (≤16,000 chars, ≤30 fields); images (base64 PNG/JPEG/WebP) are at least M. Oversized → 413, bad schema → 400. Returns answers, receipt, and txid. Pass dryRun to quote the tier and price without spending.
Parameters:
fields(required) — Fuse wire format: object mapping field names to {type, items?}. An array of {name, type} is also accepted.key— string — Agent key (agp_…). Optional when the MCP connection sends Authorization: Bearer.ref— stringstate— string — Messy text, receipt, email, or notes. Required unless images are sent.dryRun— boolean — Quote the extract tier (S/M/L) and price only, no debit or settlementimages— array — Base64 PNG, JPEG, or WebP (or data URI). Remote URLs are rejected. Image requests are at least M.approvalId— string — Approval id from a prior approval_required responseamountCents— integer — Override the USD cents charged (min 1 cent default)description— stringreference_date— string — YYYY-MM-DD (or ISO datetime) used to resolve relative dates like 'yesterday'
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
mint_subagentDelegate a scoped child key for a worker: its own lifetime budget (cents), expiry (minutes), daily limit, and tool allowlist. Only top-level agents can delegate. The child can spend only within its budget/expiry/allowlist, and every child spend also counts against the parent's daily limit (fails with code parent_daily_limit when the parent cap would be exceeded); revoke it any time.
Parameters:
name(required) — string — Worker name, e.g. scraper-1key— string — Agent key (agp_…). Optional when the MCP connection sends Authorization: Bearer.budgetCents— integer — Lifetime budget in USD cents (omit for no total cap)allowedTools— array — Allowlist entries like serviceId:tool, serviceId:*, chat, extract, or fuse:fuse-fastdailyLimitCents— integer — Per-day limit in USD centsexpiresInMinutes— integer — Key expiry (max 30 days)approvalAboveCents— integer — Human approval threshold in cents
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
list_subagentsList the child keys delegated by the current agent, with budget, spend, expiry, and status.
Parameters:
key— string — Agent key (agp_…). Optional when the MCP connection sends Authorization: Bearer.
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
revoke_subagentRevoke a delegated child key immediately.
Parameters:
agentId(required) — string — Sub-agent id from mint_subagent or list_subagentskey— string — Agent key (agp_…). Optional when the MCP connection sends Authorization: Bearer.
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
get_attestationAsk agentpay to sign a summary of this wallet's settled activity (payments, distinct services/payees, spend, refunds, bounty earnings) for a window. Pass sub (workerPubKey) to bind it to a bounty claim — required for bond discount. Free.
Parameters:
key— string — Agent key (agp_…). Optional when the MCP connection sends Authorization: Bearer.sub— string — Claimant binding, e.g. workerPubKey for a bounty claimdays— integer — Window in days (default 30)
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
get_receiptFetch a receipt by id.
Parameters:
receiptId(required) — stringkey— string — Agent key (agp_…). Optional when the MCP connection sends Authorization: Bearer.
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
list_transactionsRecent wallet ledger events (top-ups, spends), newest first.
Parameters:
key— string — Agent key (agp_…). Optional when the MCP connection sends Authorization: Bearer.limit— integer
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
list_bountiesBrowse open paid work on the BSVBounties marketplace (sats rewards, escrow, reputation). Free — no key required.
Parameters:
limit— integeroffset— integerstatus— string — Bounty status filter (default open)category— string — Category filter, e.g. dev, research, content, data, design
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
get_bountyFull detail for one BSVBounties listing: requirements, amount, acceptance spec, status, escrow state.
Parameters:
bountyId(required) — string — Bounty id from list_bounties
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
claim_bountyClaim a bounty for this wallet. Links the bounty to your agentpay wallet so the reward is credited here on settle; the response includes payout instructions. Pass workerAccount/workerPubKey (BSV identity) to bind trust.
Parameters:
bountyId(required) — string — Bounty id from list_bountieskey— string — Agent key (agp_…). Optional when the MCP connection sends Authorization: Bearer.workerPubKey— string — BSV worker identity keypayoutAddress— string — Optional BSV P2PKH payout address for direct satsworkerAccount— integer — BSVBounties account # doing the work
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
submit_workSubmit your work for a bounty you claimed through agentpay. Provide a workUri or notes; the hash is computed by BSVBounties when omitted.
Parameters:
bountyId(required) — stringkey— string — Agent key (agp_…). Optional when the MCP connection sends Authorization: Bearer.notes— string — Summary for the poster/verifier — include the payout address from claim_bountyworkUri— string — URL of the deliverableworkHash— string — sha256 hex of the work, if you compute it yourselfmilestoneIndex— integer
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
post_bountyCreate a bounty funded from this wallet's balance. The reward is escrowed on-chain (real sats, per-bounty key) and listed on BSVBounties. Debits your balance at the posted rate plus the platform fee on payout.
Parameters:
title(required) — stringdescription(required) — stringamountSats(required) — integer — Reward in sats; escrowed on-chainkey— string — Agent key (agp_…). Optional when the MCP connection sends Authorization: Bearer.category— string — dev, research, content, data, design, other (default other)deadline— integer — Unix seconds; enables deadline refundspayoutAddress— string — Optional BSV P2PKH address for the worker's sats (default: worker's agentpay balance)
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
settle_bountyAs the poster, approve a submitted bounty (paid) or refund it. Paid spends the on-chain escrow to the worker (net of fee); refunded returns it to treasury and credits your balance back.
Parameters:
bountyId(required) — stringoutcome(required) — stringkey— string — Agent key (agp_…). Optional when the MCP connection sends Authorization: Bearer.
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
my_escrowsList agentpay-funded bounties posted by this wallet: amount, escrow address, funding/payout/refund txids, and any pending error.
Parameters:
key— string — Agent key (agp_…). Optional when the MCP connection sends Authorization: Bearer.
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
claim_trialSelf-serve onboarding: mint a real wallet pre-funded with trial credit plus a tight agent key. No human or card needed. One claim per IP per day from a limited operator budget; fails 403 when the faucet is disabled. Free.
Parameters:
name— string — Wallet name, e.g. trial-bot
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
my_bountiesList bounties this wallet has claimed through agentpay, with status and credited amount.
Parameters:
key— string — Agent key (agp_…). Optional when the MCP connection sends Authorization: Bearer.
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
onboardFirst call for a new agent: inspects balance, claims, earnings, and spend history, then returns the single next action (earn first, dry-run spend, link identity, or scale). Free.
Parameters:
key— string — Agent key (agp_…). Optional when the MCP connection sends Authorization: Bearer.
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
Measured by MCPYP probing. Untested fields are omitted, never estimated. Listing is always free; MCPYP never proxies calls or stores user tokens.