{"version":"1","url":"https://scvd.store/defects","what_this_is":"Stable names for the ways an x402 endpoint can be broken, each with what it asserts, what a finding of it would be falsified by, and whether an unpaid probe can see it at all. Published so that two independent instruments observing the same door can tell whether they agree.","what_this_is_not":"Not a score, not a ranking, and not a list of anybody. Every class describes an observable property of ONE endpoint at ONE moment; nothing here accumulates across weeks into a judgment on an operator.","the_method_line":"unpaid = visible from a GET nobody paid for. paid = only a settled payment reveals it. A door clean to an unpaid probe and defective to a paid walk is not a contradiction; it is two instruments measuring different things, and this field is how a reader tells the difference.","cross_instrument_mappings_read_on":"2026-08-23","mapping_caveat":"Mappings to another instrument's names are our reading of their published definitions on the date above, not their endorsement. Each carries the path to check it and what would show it wrong. If they change a definition, this file is stale until corrected — say so rather than trusting it.","classes":[{"id":"no-402","title":"Listed, but serves no payment challenge","asserts":"The URL a directory lists answers 402 Payment Required to an unpaid GET.","costs":"Every buyer routed here finds no challenge at all. The listing is an advertisement for a door that does not open.","detectable":"unpaid","our_signal":"status-402","falsified_by":"The same URL answering 402 with a parseable challenge to an unauthenticated GET at the stated moment. A 402 that appears only for some callers is a different finding, not this one."},{"id":"unparseable-challenge","title":"Challenge cannot be read by a client","asserts":"The PAYMENT-REQUIRED header is present and is base64-encoded JSON a v2 client can parse.","costs":"Surfaces to the buyer as 'invalid payment header format' or a silent parse failure. The seller sees nothing.","detectable":"unpaid","our_signal":"payment-required-header","falsified_by":"The header decoding to valid JSON by any conforming base64 + JSON reader at the stated moment."},{"id":"unsignable-offer","title":"Offer a buyer cannot sign against","asserts":"Every accepts entry carries the fields a client needs to construct a payment, as strings.","costs":"A buyer reaches the signing step and has nothing to sign. Indistinguishable, from the seller's logs, from nobody wanting the goods.","detectable":"unpaid","our_signal":"accepts","falsified_by":"Every accepts entry carrying the published required fields at the stated moment."},{"id":"unpayable-payto","title":"payTo is not the bytes a payment signs over","asserts":"payTo is a 20-byte 0x address on an EVM rail, or a base58 pubkey on Solana — not a name, and not a wallet pasted into the wrong rail's entry.","costs":"Most clients throw inside their signing library. The seller never learns a buyer came.","detectable":"unpaid","our_signal":"accepts","falsified_by":"The payTo parsing as a valid address for the rail its own entry names."},{"id":"rail-cannot-receive","title":"The address cannot be credited in the mint it asked for","asserts":"On Solana, the payTo owns an associated token account for the offered mint, so a transfer has somewhere to land.","costs":"The payment fails in simulation before it can broadcast. Every structural check passes and nobody can pay.","detectable":"unpaid","our_signal":"solana-rail-receivable","falsified_by":"getTokenAccountsByOwner returning at least one account for that owner and mint. Anyone can repeat the read; it is public and unpaid.","also_known_as":[{"instrument":"Cairn (cairnwake.com)","as":"rail-cannot-receive","verify":"cairnwake.com/scoreboard.json, read 2026-08-23: a public machine-readable rollup of its published reports","falsified_by":"Their published definition describing a different observable property than the one asserted here."}]},{"id":"wrong-network","title":"Offered on a network the buyer is not on","asserts":"The accepts entries name the mainnet rail a buyer is expected to pay from.","costs":"A client attaches payment and keeps getting 402. The commonest cause is a testnet left in the offer.","detectable":"unpaid","our_signal":"testnet-network","falsified_by":"The entry naming a mainnet chain id the buyer's client supports."},{"id":"amount-not-atomic","title":"Price written in dollars where atomic units are required","asserts":"accepts amounts are integer atomic units (USDC has six decimals).","costs":"A decimal point usually means the price is off by a factor of a million, in one direction or the other.","detectable":"unpaid","our_signal":"amount-not-atomic","falsified_by":"The amount parsing as an integer string."},{"id":"inputs-undeclared","title":"Required parameters a buyer discovers only by being refused","asserts":"A resource needing parameters declares them in the challenge, before payment.","costs":"The buyer is refused AFTER signing, and their ledger records that as this endpoint failing. The largest single cause of refused purchases at otherwise-working endpoints in the August 2026 field run.","detectable":"unpaid","our_signal":"no-input-contract","falsified_by":"A declared input contract in the challenge, or the resource succeeding with no parameters."},{"id":"replay-accepted","title":"Serves the goods twice for one settled payment","asserts":"A byte-identical, already-settled payment presented a second time is refused.","costs":"The seller gives its product away. The authorization's nonce is spent, so nothing reaches them on the second pass — and from their side both requests look like successful sales.","detectable":"paid","our_signal":"launch_check stage: replay","falsified_by":"The endpoint refusing the identical presented payment on the second attempt at the stated moment.","also_known_as":[{"instrument":"Cairn (cairnwake.com)","as":"replay-accepted / check replay_rejected","verify":"cairnwake.com/scoreboard.json, read 2026-08-23: a public machine-readable rollup of its published reports","falsified_by":"Their check asserting something other than the refusal of an identical already-settled payment."}]},{"id":"settlement-error","title":"A correct payment is answered with a server error","asserts":"A valid, sufficient payment is answered with a 2xx and the goods.","costs":"Money may move with nothing delivered. The failure is invisible to the free preflight, which never pays.","detectable":"paid","our_signal":"launch_check stage: settle","falsified_by":"A correctly-formed payment settling and returning a 2xx at the stated moment.","also_known_as":[{"instrument":"Cairn (cairnwake.com)","as":"settlement-server-error","verify":"cairnwake.com/scoreboard.json, read 2026-08-23: a public machine-readable rollup of its published reports","falsified_by":"Their class covering refusals of INVALID payments, which is conformant behaviour and not this defect."}]},{"id":"delivered-nothing","title":"Settled, and the buyer is left holding nothing","asserts":"A settled payment returns a non-empty body.","costs":"Money moved for zero bytes. Distinct from a settlement error, because the endpoint reports success.","detectable":"paid","our_signal":"launch_check stage: delivery","falsified_by":"A non-empty response body accompanying the 2xx."}],"license":"CC BY 4.0. Take the names; that is the point of publishing them."}