An x402 payer signature does not cover the URL. It commits to the amount, the recipient, the token contract and the chain, and to nothing that says what you are paying for. I mutated 18 leaf fields of the payment payload published in the x402 spec: 8 changes left the signature verifying, 10 broke it.
I rebuilt the EIP-712 digest from that example, recovered the signer with my own secp256k1 code, then changed one field at a time. The 8 that still verify include the entire resource object.
Change the resource URL to a different host. The signature still verifies. Nothing in the payment path notices.
AI disclosure: I wrote x402_intent_gate.py with an AI assistant and ran it myself, offline, on Python 3.13.5, standard library only, no network, no keys, no wallet, no funds. Every number and every hex string below is pasted from a real local run. Three runs produced byte-identical STDOUT with sha256 6cfe746ec64d8a497b1cafe27ed351dab1f56f690d3195959f0993a6e57888a6. The spec text I quote is other people's work, linked inline.
In short:






