x402 and wallets · October 2026

MetaMask calls almost every x402 payment a "High-risk approval"

Frits Zwager, Fizzl · two x402 payments signed in MetaMask Mobile on 30 October 2026, and 300 x402 payout addresses on Base checked the same day

We bought a bitcoin price for $0.001 through the Fizzl Agent Wallet, the way an AI agent does: the agent asks, the owner signs one x402 payment in their own wallet. MetaMask stopped the signature with a red alert. We tried a second, unrelated seller, and got the same alert. Neither seller's address had a security flag anywhere. The alert is about the kind of signature, not about the seller, and it fires on almost every x402 payment.

2 of 2x402 payments to unrelated sellers flagged as "High-risk approval"
289 of 300sampled x402 payout addresses on Base are plain wallets (EOAs), the case MetaMask flags
$0.001the most either signature could ever move: the price, once
0security flags on either payee (GoPlus, OFAC sanctions list)

What MetaMask showed

MetaMask Mobile: Signature request, High-risk approval: You're giving an address flagged by security partners permission to move your assets.

Under "See details" MetaMask gives one reason: The spender 0x… is untrusted EOA. An EOA is an ordinary wallet address, not a contract. "Untrusted" means it is on no list of known addresses, not that anyone reported it. The request type below the alert is TransferWithAuthorization on USDC, on Base.

What the signature actually does

An x402 payment on Base is an EIP-3009 TransferWithAuthorization, signed off-chain. The facilitator submits it, and USDC's own contract moves the money. These are all its fields:

FieldMeaningIn our payment
fromthe payerthe owner's wallet
tothe payee: the seller's payTo from the 402the seller's wallet
valuethe exact amount, in USDC's 6 decimals1000 = $0.001
validAfter / validBeforethe window in which it can be useda few minutes
noncerandom; USDC refuses the same nonce twiceone use only

There is no allowance in it. The payee can't take more, can't take it twice and can't use it after validBefore. The worst a signature like this can do is pay that amount to that address. That is why x402 uses it: a buyer can pay a stranger without trusting them with more than the price.

Why the alert is wrong here, and where it is right

MetaMask appears to read the payment as an approval, with the payee as "spender". For approvals that rule makes sense. An approve call, an EIP-2612 Permit or a Permit2 signature hands an address an allowance it can draw on later, often for an unlimited amount. Signing one for an unknown wallet is how drainers empty accounts, and those deserve a red alert every time.

A TransferWithAuthorization is a payment, not an allowance. And x402 sellers are almost always paid to a plain wallet. Of 300 payout addresses picked at random from the 2,997 Base payout addresses in the x402 Trust Index, 289 have no contract code. Only 11 are contracts. So nearly every x402 payment signed in MetaMask meets the "untrusted EOA" rule and shows the same red alert as a drainer. An owner who has learned to stop at red stops here too. An owner who learns to click past it is worse off the day a real drainer asks for a Permit.

What is worth checking instead

The real risks of an x402 payment are not the payee's address type. They are these:

presign-guard checks exactly these when it is given the signature and the 402 option being paid. A match is X402_REQUIREMENTS_MATCH. A higher or lower amount, another payee, another token or another network is red (X402_AMOUNT_ABOVE_REQUIRED, X402_RECIPIENT_MISMATCH, X402_ASSET_MISMATCH, X402_NETWORK_MISMATCH). A long validity window is orange (X402_VALIDITY_TOO_LONG). The payee is screened against the sanctions list too.

We ran the second payment through its free quick check, with a two-minute window and the seller's 402 option: green. The same payment with a validity of several months came back orange. So the check flags what matters and passes the ordinary case.

What we changed, and what wallets could change

How we checked

We don't name the two sellers: they did nothing wrong.

Questions

Is it safe to sign an x402 payment when MetaMask says "High-risk approval"?

If the message is a TransferWithAuthorization (EIP-3009) and its to, value, token and validity match the 402 you are paying, it moves exactly that amount once and grants no allowance. Check those four fields in the wallet's message, or let a pre-sign check compare them with the 402 for you. Never sign a Permit, Permit2 or approve call because a payment page asks for it: those do grant an allowance.

Why does MetaMask call the seller "untrusted EOA"?

It reads the payment like a token approval and treats the payee as the spender. x402 sellers are almost always paid to a plain wallet (an EOA) that is on no trusted list, so the warning fires. The address carries no security flag of its own.

What should an agent or wallet check before signing an x402 payment?

That the amount, payee, token and chain in the signature equal the 402's accepted option, that the validity window is minutes rather than months, and that the payee is not on a sanctions list. presign-guard does this in one call and answers green, orange or red with reason codes.

Check a payment before you sign it with presign-guard, check the seller before you pay with x402 Doctor, and let an agent ask while you sign with the Fizzl Agent Wallet.