What x402 payments look like on-chain, and what they don't tell you
GetAgentCap team · published 9/19/2026
An x402 payment settles as an ordinary USDC transfer — same Transfer event, same fields, same lack of a memo — the x402 handshake that negotiated the price and endpoint happens entirely off-chain, over HTTP, before the transaction is ever broadcast.
The part that's on-chain
Once an x402-gated request gets a 402 response with a price, the payer broadcasts a plain USDC transfer to the address in that response. From the chain's perspective it's indistinguishable from any other USDC transfer — same event shape we read for every payment in this product, x402 or not.
The part that isn't
The 402 challenge, the price negotiation, and the retry-with-payment-proof round trip all happen over HTTP, off-chain, before that transfer is even broadcast. We never see any of that — no request URL, no resource being paid for, no HTTP status codes. If you want to know which API call a given transfer paid for, that correlation lives in your own request logs, not on-chain and not in our ledger.
We're not certain how much of that off-chain context is worth surfacing versus how much genuinely belongs in a separate request-log tool — we haven't built anything to bridge the two yet, and we don't want to guess at a join key (timestamp proximity is the obvious one, and it's fragile) without testing it against real traffic first.
What this means for your fleet
If you're debugging "why did this agent pay $0.03," the chain tells you it happened and for how much; your application logs tell you why. Keep both, because neither one alone answers the question.