●  Bounded spending for AI agents

Give your agent
a wallet. Not your card.

Pre-authorize a bounded allocation once — an amount, a scope, and rules. Your agent spends autonomously inside it, and the worst case of any failure is the unspent remainder. Not your card limit. Not your account.

Authority, not custody — funds flow you → processor → merchant. Mandate is never in the money path. SCA once, human present.
Enforcement log · live
£29.99figma.com — renewalAllowed
£42.18waitrose.com — team lunchAllowed
£864.00dell.com — U2723QE monitorStep-up
£480.00giftcardhub.example — "urgent"Denied
£58.80tesco.com — retry loop ×4Denied
Prompt-injection attempt contained in 38 ms · incident cost £0.00
Why Mandate

Autonomy and safety stop being a tradeoff.

Today you choose between handing a prompt-injectable process your card — or approving every purchase yourself. Mandate is the missing middle.

🛡

Containment

Caps, scope, velocity and expiry enforced server-side, outside the model. A compromised agent can be talked into attempting a purchase — it cannot raise its own cap. The blast radius is a number you chose.

Convenience

Authenticate once at card-save — 3-D Secure, while you're present. Every later charge runs off-session inside the mandate. No per-purchase prompts, no babysitting; only the exceptions reach you.

⚙️

Programmability

Compose your own rules — merchant scope, budgets, velocity, custom predicates — like pre-trade risk controls in automated trading. One click revokes everything: the kill switch.

How it works

Three steps. Then it's the agent's problem.

1

Save a debit card — once

Stripe SetupIntent + 3-D Secure with you present. Debit only, by design — a credit line is exactly the unbounded exposure this product exists to avoid.

2

Sign a mandate

Scope, caps, velocity, mode — autonomous, approve, or hybrid above a threshold. You get one agent key, shown once. It can attempt charges and nothing else.

3

The agent spends — inside the envelope

Every attempt passes the rule pipeline before any charge exists. Denials carry machine-readable reasons, so agents self-correct instead of retrying blindly.

Developers

One endpoint.
Three honest answers.

REST, Python/TS-friendly, and an MCP server so any MCP-capable agent gets a wallet in minutes. The agent key travels in env — never in model context.

Atomic budget holds — no concurrent-charge races
Hash-chained audit trail, built to dispute standard
Instant revocation — MANDATE_REVOKED on the next attempt
# the only thing an agent key can do curl -X POST https://mandate-wallet.com/v1/charges \ -H "Authorization: Bearer mk_…" \ -d '{"merchant":"dell.com","amount":86400, "description":"U2723QE monitor"}' → {"status":"allowed", "receipt_ref":"pi_…"} → {"status":"denied", "reason_code":"MERCHANT_NOT_IN_SCOPE"} → {"status":"step_up", "approval_id":"apr_…"} # a human decides

🔌 The kill switch

Revoke a mandate and the agent's next request denies with MANDATE_REVOKED — no deploy, no card cancellation, no waiting on support. The equivalent of pulling an algorithm off the trading desk, for spend.

🧾 Evidence, not vibes

Intent → mandate → decision → settlement, every block hash-chained to the last. When someone asks "did the user authorize this?", you answer with a verifiable record — chargeback-representment grade, audit-ready by default.

Your agent is ready to spend.
Make the worst case a number you chose.

Register, save a debit card once, sign a mandate. Free while in development — mock gateway included, Stripe test mode supported.