Is an HTTP 402 challenge proof of payment?

No — a 402 challenge is only the price tag. The PAYMENT-RESPONSE header after settlement is the receipt. A challenge carries no buyer signature. It moves no funds. It costs nothing to issue. ScriptMasterLabs captured the live challenge below today. It used one unauthenticated Verdict Protocol request. It sent no wallet and no payment header. Zero funds moved.

Proof sits in the settlement layer. It is a transaction hash on the payment network. The hash must confirm successful on-chain. A facilitator settlement receipt must reference it. A challenge tells you what a server charges. Only a settlement tells you what anyone paid.

Four states that get conflated

StateWhat it isWhat it proves
ChallengeThe 402 response is a JSON body. In x402 v2, a base64 PAYMENT-REQUIRED header carries it too. It names network, asset, amount and payTo.Only that a server quoted a price. Unsigned, unauthenticated, free to issue, copyable.
AuthorizationThe buyer signs an EIP-3009 transfer authorization and resends it (Verdict accepts it in the PAYMENT-SIGNATURE header).That a buyer permitted a transfer. No funds have moved yet — and settlement can still fail downstream.
SettlementA facilitator broadcasts the authorized transfer and it lands on-chain.The payment itself. This is the first state that produces a transaction hash.
ReceiptThe facilitator's settlement response and the service's payment receipt referencing that transaction.The paperwork tying the on-chain transfer to the specific purchase — amount, asset, payTo, transaction.

Every "paid" claim in x402 should be graded against this ladder. Anything below settlement is a quote, a permission, or a promise — not a payment.

Exhibit A: a real 402 challenge, captured live — nothing paid

On October 14, 2026 at 22:01 UTC, we sent POST https://verdict.scriptmasterlabs.com/decide. We sent an empty JSON body. We sent no payment header of any kind. The server answered HTTP 402 Payment Required with this body. The same payload arrived base64-encoded in the PAYMENT-REQUIRED header.

{
  "x402Version": 2,
  "resource": {
    "url": "https://verdict.scriptmasterlabs.com/decide",
    "description": "SML Verdict Protocol decision receipt",
    "mimeType": "application/json"
  },
  "accepts": [
    {
      "scheme": "exact",
      "network": "eip155:8453",
      "amount": "250000",
      "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
      "payTo": "0x5bbd32e0478e49a7540ef2d760e0b0f9aa6328b2",
      "maxTimeoutSeconds": 120,
      "extra": { "name": "USD Coin", "version": "2" }
    }
  ]
}

Read what is not in it. It has no buyer and no signature. It has no transaction and no payment timestamp. It is a menu, not a meal receipt. The amount is in atomic units. 250000 is $0.25 of USDC, at six decimals. The asset is the USDC contract on Base. eip155:8453 is Base mainnet. payTo is where a real payment would go. Anyone online can retrieve this exact JSON now. Possessing it proves exactly one thing. Verdict Protocol charges $0.25 for a decision receipt.

Exhibit B: what proof actually looks like — settlement transactions

These are Verdict Protocol's confirmed settlements on Base. They come from its October 12, 2026 launch. Each has one thing a challenge never has. Each has a transaction hash. We re-read each receipt today, October 14, 2026. We used eth_getTransactionReceipt against Base RPC.

PaymentSettlement transaction (Base)On-chain receipt, re-verified Oct 14, 2026
Verdict tier, $0.25 USDC — decision receipt a987aba4-d322-4087-9d09-161e9965940a0xfa3ec31ff345167a474c682cec4e2eac505cfdd570e158961a233187be5f6f1cStatus 0x1 (success), block 52522538
Seal tier, $0.01 USDC — receipt 05ffd866-b535-406b-9523-b5dbc96832b10x5bce2363ae8818fbb0ea5c6229ba8325c6c70792880d4939f324f96d35f7a1b7Status 0x1 (success), block 52522552
Facilitator field-test probe, $0.25 USDC via PayAI0x7867c4ddaba0cc2a74c6bffb2c470810422e6b1040022079e7eae5d971ed0acaStatus 0x1 (success), block 52522353
Facilitator field-test probe, $0.01 USDC via PayAI0x8760e76aee314e71ae2cd96f6631c3018e0f1f33fc35c6e67c10f660693d36b5Status 0x1 (success), block 52522312

The four transactions above were owner proof-wallet self-tests. They came from the launch run. They are real on-chain settlements of real USDC. They were never customer purchases. We label them that way everywhere. They prove the settlement rail works. They show what settlement evidence looks like. They do not prove demand.

Quotable: “ScriptMasterLabs captured a live 402 challenge on October 14, 2026. It came from its own Verdict Protocol. It used no wallet and no payment. The challenge cost nothing and moved nothing. Its proof is Base transaction 0xfa3ec31ff345167a474c682cec4e2eac505cfdd570e158961a233187be5f6f1c. That settlement paid $0.25 USDC on October 12, 2026. Its on-chain status is 0x1.”

Why a 402 challenge proves nothing

How to verify a claimed x402 payment: the 6-step check

  1. Ask for the transaction hash. Not a screenshot. Not the 402 response body. Not a "payment sent" UI state. Not a verify response. No hash means no proof. The conversation ends there.
  2. Look the hash up yourself. Paste it into a block explorer. For Base, use basescan.org. Or query eth_getTransactionReceipt against the network RPC. We used that method for every receipt here.
  3. Confirm the receipt status is success. On EVM chains, the receipt status must be 0x1. A failed hash is not a payment. A missing hash is not a payment.
  4. Match the money to the quote. The recipient must equal the payTo from the challenge. The asset must be the challenge's token contract. For Verdict above, that is USDC on Base. Its contract is 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913. The amount must equal the quoted amount.
  5. Match the paperwork. The facilitator settlement response should reference the same transaction. The service payment receipt should reference it too. Verdict receipts carry their settlement transaction. Replaying an identical payment returns the same receipt. It returns the same transaction too. Paperwork and chain must agree. Otherwise something is wrong.
  6. If any step cannot be checked, treat the payment as unproven. Unverifiable is unpaid, for delivery purposes. Check first; deliver after.

For sellers: never deliver on a challenge

If you sell through x402, the challenge is yours. It is your price quote. A buyer may present it back as purchase proof. That presents your own menu as a receipt. Deliver only on settlement confirmation. Match the on-chain receipt to your payTo, asset, and amount. Do not stop at the signature either. A verified, signed payload can still fail at settlement. It can move zero funds while failing. That exact failure mode appears in our facilitator settle-reliability field test. Verifies stayed green while settles kept failing. Nothing was broadcast. Signature is a promise. Settlement is the payment. The receipt is the proof.

Reading product pages through an agent works the same way. ScriptMasterLabs' page-reading API for agents answers unpaid calls with a 402 quote. Its paid reads settle before delivery. Only the settlement proves a read was bought.

Claim Receipts

Relevant SML products

All four URLs returned HTTP 200 on October 14, 2026, before linking.

Do it yourself: grade any "paid" claim in two minutes

  1. Reproduce the challenge. Run curl -i -X POST <endpoint> with no headers. If a 402 comes back — it will — you manufactured it free. You manufactured the artifact shown as "proof."
  2. Demand the hash. Ask whoever claims payment for the settlement transaction hash and the facilitator settlement response.
  3. Read the receipt on-chain. Explorer or eth_getTransactionReceipt: status 0x1, correct network, plausible block time.
  4. Match all four fields against the original challenge. Check payTo, asset contract, and amount. Also check the service receipt's transaction reference.
  5. Write down the verdict in the claim's own file. Challenge, authorization, settlement, or receipt — name which state the evidence actually reaches. Most "paid" claims in this ecosystem are challenges wearing a settlement's clothes.

Honest caveats

Frequently Asked Questions

Q: Is an HTTP 402 challenge proof of payment?

A: No — a 402 challenge is only the price tag. The PAYMENT-RESPONSE header after settlement is the receipt. A challenge contains no buyer signature. It moves no funds. Anyone can fetch one for free. ScriptMasterLabs captured a live challenge on October 14, 2026. It used POST /decide with no wallet. It sent no payment header. The capture cost nothing and settled nothing. Proof is a settled on-chain transaction. Its hash must confirm successful on the network. A facilitator settlement receipt must reference it. Verdict's confirmed Base settlements include transaction 0xfa3ec31ff345167a474c682cec4e2eac505cfdd570e158961a233187be5f6f1c. That settlement paid $0.25 USDC on October 12, 2026. Its on-chain status is 0x1.

Q: What counts as proof of payment in x402?

A: A settled on-chain transaction plus the settlement receipt. Its hash sits on the payment network. For Verdict Protocol, that network is Base. Its receipt must show status success, 0x1. Its transfer must match the quoted payTo. It must also match asset and amount. The facilitator settlement response must reference that transaction. The service payment receipt may reference it instead. A 402 challenge is an earlier stage. A screenshot of one is too. A successful verify response is too. Even a signed payment payload is earlier. None of them is settlement.

Q: Can an HTTP 402 challenge be faked or copied?

A: Trivially. A 402 challenge is a static JSON response. Any server can emit one in a few lines. Anyone can copy a real one from an endpoint. They can then re-present it as evidence. ScriptMasterLabs retrieved this page's challenge on October 14, 2026. It used one unauthenticated POST. It used no wallet, signature, or funds. A screenshot challenge is the seller's price quote returned. It evidences a price, never a payment.

Q: Is a signed x402 payment payload proof of payment?

A: No. A signed payload is an authorization. It is permission for a transfer, not the transfer. The transfer happens only at settlement. A facilitator must broadcast it on-chain first. Settlement can fail after a clean verify. ScriptMasterLabs tested facilitators on October 12, 2026. MeshGateway verifies succeeded while its settles failed repeatedly. Zero funds moved in those failures. The same signed payloads later settled via PayAI. Treat a signature as a promise to pay. Treat the on-chain receipt as the only proof.

Q: What should a seller check before delivering against a claimed x402 payment?

A: Use six checks before delivering. (1) Get the transaction hash, not a screenshot. Never accept the 402 body as proof. (2) Look it up on a block explorer. Or query eth_getTransactionReceipt on the network RPC. (3) Confirm the receipt status is success, 0x1. (4) Match the transfer to the quote. Its recipient must equal your published payTo. Its asset must be the challenge token contract. Its amount must equal the quoted amount. (5) Match the paperwork to the transaction. The facilitator settlement response should reference it. The service receipt should reference it too. (6) If any step cannot be checked, withhold delivery. Treat the payment as unproven. ScriptMasterLabs ran checks 2–4 on October 14, 2026. It checked its own four settlement transactions. All four returned status 0x1 on Base.

SCRIPTMASTERLABS · READ · EXPLORE · VERIFY · EARN

Books, free tools, sources & affiliate opportunities