Table of Contents
A signed USDC transfer is not proof the agent was allowed to spend. Verify the principal, the mandate, the spend envelope, and the official USDC contract before you accept an x402 or agent-wallet payment.
A signature proves a key signed. It does not prove a human authorised the spend.
Key Takeaways
- A signed USDC transfer is not proof of authorisation.
- x402 does not verify a human mandate.
- Know Your Agent runs before settle.
- Official USDC is the Circle contract on the named chain.
- A failed check means you do not deliver.
Why a Signature Is Not Authorisation
A cryptographic signature proves control of a private key. It does not prove that a human principal granted that agent the right to spend.
The buyer creates that account in How to Set Up an AI Agent Wallet for USDC Payments. That is payer-side setup, not merchant-side clearance.

An agent can hold a funded wallet and still be unsigned, expired, or outside its mandate. Accepting that USDC is accepting an unauthorised spender.
What x402 Actually Checks
x402 is an HTTP 402 payment handshake. The agent requests a paid resource and the server returns Payment Required.
The agent signs a stablecoin authorisation, typically EIP-3009 transferWithAuthorization for USDC, and retries. A facilitator then verifies the payload and settles on-chain.
Coinbase CDP offers a public facilitator for USDC on Base and other listed chains. See the Coinbase x402 docs for the current network list.
x402 checks the signature, the amount, the recipient, and the chain. On settle it also checks that the authorisation is unspent.
It does not check that a human principal authorised that class of spend. It does not check a budget, a recipient allowlist, or KYA identity.
The merchant rail is described in Coinbase Opens USDC Payments From AI Agents. The rail still leaves the mandate gap for you to close.

A Working KYA Checklist
Use this checklist as a pre-settle gate. Every row must pass.
| Check | Pass | Fail |
|---|---|---|
| Principal identified | A human or legal-entity DID is bound to the paying agent | The payer is only a wallet address |
| Mandate current | The credential names this agent, this class of spend, and an unexpired window | No mandate, an expired mandate, or a mandate for a different agent |
| Spend envelope covers this payment | Amount, asset, and recipient sit inside the stated limit and allowlist | Over-limit, wrong asset, or a destination not on the allowlist |
| Official USDC on the named chain | Contract matches Circle's published address for that chain | Lookalike ticker, wrapper, or a different chain's USDC |
| x402 handshake valid | Signature, amount, recipient, chain, and unspent authorisation all verify | Any of those fields fail, or the authorisation is already spent |
A single Fail cell is enough to stop. Do not settle on a partial pass.
Mandate, Principal, Spend Envelope
Production systems add a mandate or credential layer, often called KYA or an AP2-style mandate. Verify those facts before settle, not after.
The principal is the human or legal entity that owns the spend. Bind a DID, or an equivalent identifier you can attribute and revoke.
The agent DID is the machine identity that signed. It must be the agent named in the mandate.
The spend envelope is the limit, the expiry, and the permitted assets and actions. Verify those fields against this payment.
How to Set Spend Limits for an AI Agent USDC Wallet is how the payer writes that envelope. You still need evidence of it before you accept USDC.

Confirm Official USDC on the Named Chain
A valid x402 authorisation can still name a lookalike token. Confirm the asset is Circle-issued USDC on the chain you named.
Open Circle's USDC contract addresses page and copy the mainnet row. Ethereum USDC is 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48; Base USDC is 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913.
Do not accept a lookalike ticker. How to check the official USDC or USDT contract is the character-for-character match.
What to Do If Any Check Fails
Do not settle. Do not deliver the resource.
Refuse the request or keep the 402 outstanding until every row in the checklist passes. A later on-chain credit does not repair a missing mandate.
Log the refusal the same way you log a successful receipt. How to reconcile AI agent USDC spend is where those events belong in the books.
Conclusion
How do you verify an AI agent before accepting USDC? Confirm the principal, the current mandate, the spend envelope, and the official USDC contract, then let x402 settle only if those checks pass.
A signature is the last step, not the first.
FAQs
1. Does a valid x402 signature mean the agent is authorised?
No: x402 verifies the signature, amount, recipient, chain, and that the authorisation is unspent. It does not verify a human principal, a budget, or a mandate.
2. What is Know Your Agent on the merchant side?
Know Your Agent is the check of who the principal is, which agent may spend, and under what envelope. It is a credential and mandate layer, not a substitute for the x402 handshake.
3. What should a mandate contain?
At minimum the mandate should name the principal DID, the agent DID, a spend limit, an expiry, and the permitted assets or actions. Verify those fields before settle.
4. Which USDC contract should I accept?
Only the Circle-published contract for the named chain. Ethereum is 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48; Base is 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913.
5. What if the signature verifies but the mandate is missing?
Do not settle and do not deliver the resource. A verified signature without a current mandate is an unauthorised spender.
This content is provided for informational and educational purposes only and does not constitute financial, investment, legal, or tax advice; no material herein should be interpreted as a recommendation, endorsement, or solicitation to buy, sell, or hold any financial instrument, and readers should conduct their own independent research or consult a qualified professional.