How it works
Three layers, in order: your rules, the content check, then you.
A wallet spending limit cannot spot a redirected payee under the limit, or hold a payment for review.
Your rules run first
Your limits and lists, checked in code. One daily cap per agent, across all networks and lanes.
All decision rulesThe content check runs second
Scans the page, 402 response or tool text for prompt injection.
Anything unsure is held for review
Answer it from a phone before the review timeout. By default, first-time payee review holds a payment to a payee off your allowlist. If that is the only reason, Approve and always allow this payee ends those holds for that seller.
Four lanes
Two enforce, and two only advise.
| Lane | Checked before | A deny means | Works with |
|---|---|---|---|
| Proxy URLEnforced | forwarding | the payment does not go out | Any x402 client, in any language |
| SDKEnforced on routed payments | signing | nothing is signed | A TypeScript agent on an x402 client |
| MCPAdvisory | the agent asks | an agent that skips it can still pay | Claude Code, Codex, or another MCP client |
| HTTP APIAdvisory: your code acts | your code asks | your code must not send the payment | Your own code, in any language |
Observe and enforce
Every agent starts in enforce. Observe mode logs what enforce would do and lets most payments through. It still blocks the ones below.
observe blocks
- a wrong network
- a wrong asset
- a payee not in the 402
- a declared unsupported payment method
- an unsupported contract call
enforce blocks
- every deny
Limits
It only sees payments you route through it. Use the proxy or SDK and keep the wallet small. A wallet-side lock is not built yet.
Your agent keeps its wallet.
It holds no key of yours.
An agent that skips it can still pay.