Skip to cookie settingsSkip to content
Back to the blog

Your x402 quote decides where the money goes

With x402, an agent pays for a web request on its own: it reads the quote your server sends back and pays it. Change one field in that quote, and the money goes somewhere else with nobody watching.

The x402 protocol builds on HTTP's 402 Payment Required status. An unpaid request gets a 402 and a quote. Trimmed, one looks like this:

{
  "x402Version": 1,
  "accepts": [
    {
      "scheme": "exact",
      "network": "base",
      "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
      "payTo": "0x7a1f00d5e2c4b3a69810fe2d5c7b4e9a0c3d2b18",
      "maxAmountRequired": "10000",
      "extra": { "name": "USD Coin", "version": "2" }
    }
  ]
}

payTo is the wallet that receives the money. Swap it for another address, and every agent that pays for this resource pays the new one. The resource still answers, so nothing looks broken.

A pin holds the quote to what you approved

Netonica's x402 check asks for the resource without paying and reads the quote, whether the server sends it in the body or in a header. After the first scan, you pin what you approved (see how pins work):

  • Payment address unchanged: the receiving wallet for each way to pay.
  • Payment token unchanged: the token each option asks for.
  • Additional payment details unchanged: the rest of each quote's terms, including what a payer signs against. If they change, signatures made for the old ones can stop working.

A new price still shows up in the change history as Price changed.

Other assertions

  • Payment required: an unpaid request still gets a 402, not the content for free or an error.
  • Payment quote present: the 402 carries a quote Netonica can read.
  • Cache protection headers present: the response says private or no-store, or varies on the payment header, which tells a content delivery network (CDN) not to hand one payer's answer to another.

You can pin agent card skills and MCP tool descriptions the same way.

Now

x402 check

Run the same x402 check on your own domain.