{"title":"Before you pay — the x402 payment dry run","version":"v1","summary":"Send a URL. We knock once, then replay the stock x402 client's own selection logic over what came back, and tell you which accept YOUR client would sign — or that it would refuse on your machine before signing anything, and why. Free, no account, no wallet. Nothing is signed and no payment is made.","method":"POST","url":"https://scvd.store/api/before-you-pay/v1","request":{"url":"REQUIRED. The https URL you are about to pay.","client_profile":"OPTIONAL. What your client is configured with: {\"max_amount_per_payment_usd\": 5} or {\"spend_controls_disabled\": true}. Leave it off and you get the answer for a client configured with NOTHING, which is the case that loses money quietly."},"the_question_it_answers":"Not 'is this endpoint healthy' — that is the preflight, and it is free at the URL below. This answers 'will my client actually pay it, and what will it pick', which is a fact about YOU standing in front of that door rather than about the door.","why_that_is_a_different_question":"A door can pass every structural check and still be unpayable by an unconfigured buyer. @x402/core applies a default ceiling of $1 per payment — inside selectPaymentRequirements, BEFORE it picks an accept — and it throws there, on your machine, with no signature and no request to the operator. The operator sees a request for a price followed by silence, indistinguishable from a buyer who changed their mind. This store found thirteen of its OWN priced doors in that state and had been reading the result as apathy.","common_failures_this_catches":{"client_throws_before_signing":"An agent reports \"the endpoint is broken\" or \"the payment never went through\" and the operator's logs show a clean 402 and nothing after. Very often the client refused it: every accept was above the $1 default ceiling and spendControls threw locally. Raise maxAmountPerPayment, or pass spendControls: false if you mean to.","paid_on_a_rail_you_did_not_choose":"A door offers three rails at the same price and you assume your client shops among them. It does not. The default selector takes the FIRST accept that survives spend controls, and @x402/fetch pays once — if that payment fails, the other rails are never tried. When the first rail is over your ceiling and a later one is not, you silently pay on a chain you never picked, which is a real finding this tool prints by name.","token_dropped_before_price_was_read":"A door priced in a token that is not in the scheme's default-asset table is filtered out BEFORE the amount is looked at, so you never see a price complaint — just a refusal naming spendControls. Add an allowedAssets entry, or set allowedAssets: true.","escrow_rail_silently_ignored":"If a door offers an authorization flow alongside upfront or escrow, the client drops the upfront and escrow accepts whole. An operator who added an escrow rail for buyer safety may find no stock client ever reaches it.","window_you_did_not_know_you_had":"Every accept carries a signing window. The server library writes 300 seconds onto accepts it builds unless the operator chose otherwise, so most doors quote a number nobody decided. This prints the one that door actually served you."},"what_it_cannot_tell_you":["Whether the purchase succeeds. This walks selection logic, not settlement — no wallet is touched and nothing is signed.","Whether your wallet holds the funds or the gas.","What a client on a different version of @x402/core does. This models the version THIS STORE has installed, and every answer names it.","Whether the door delivers after payment. No probe or simulation can; that is a fact about the world."],"the_ladder":{"free_first":{"the_door":"https://scvd.store/api/preflight/v1 — is their challenge well-formed. Free.","the_artifact":"https://scvd.store/api/conformance/v1 — does their signed offer or receipt verify. Free, any issuer.","the_buyer":"https://scvd.store/api/before-you-pay/v1 — will your client pay it. Free. This tool."},"paid":[{"id":"good_buyer","name":"The Good Buyer","why":"this exact reading, signed and served forever at its own URL, for the human who asks why their agent spent the money","price":"$0.99 fixed, one-off; nothing here charges again by itself, ever — there is no mechanism that could","price_usdc":0.99,"cadence":"one_off","buy_url":"https://scvd.store/api/buy/good_buyer"}]},"expected_outcome":"HTTP 200 and a reading naming which accept your client would select, or that it would refuse before signing and which stage refused it. A refusal is a successful call: the tool worked and found the thing you came for. Only the codes below mean the call itself did not happen.","errors":[{"code":"url_missing","http":400,"means":"no url was supplied, or the body was not JSON at all","what_to_do":"POST {\"url\": \"https://your-endpoint/...\"} with Content-Type: application/json. Retrying the same body will fail identically."},{"code":"url_unparseable","http":400,"means":"the string supplied is not a URL","what_to_do":"Fix the string. This is never a fact about the endpoint."},{"code":"target_refused","http":400,"means":"the URL is real but this store's published probe-target law refuses it: https only, default port, no credentials, and nothing private, loopback, link-local or reserved-internal","what_to_do":"Name a public https URL on its default port. The refusal is a statement about US and never an observation about that host — we did not look."},{"code":"own_host_refused","http":400,"means":"the URL is this store's own hostname, which a Cloudflare Worker cannot fetch","what_to_do":"Probe us from your side instead; our own 402s pass these checks in CI on every build and you should not take that on faith."},{"code":"budget_spent","http":429,"means":"the probe budget for this minute is spent — a cost bound on our side, never a fact about your endpoint","what_to_do":"Read Retry-After (a whole minute) or the RateLimit fields beside it, and come back. Do not treat this as a verdict."}],"security":{"what_this_does_in_your_name":"One outbound GET to the URL you supplied, and then arithmetic on what came back. NOTHING IS SIGNED, no wallet is touched, no payment is presented and no key of yours is asked for — the whole point of this door is that it answers before any of that. An optional client_profile you send is used for the one calculation and then discarded.","what_it_stores_about_you":"Nothing keyed to you, and in particular nothing about the client_profile you describe. The reading is returned and not retained; the only persistence is the same unattributed per-minute probe counter the preflight uses.","what_we_never_do":"No account, no cookie, no caller identifier, and no allocation of our budgets by IP — the buckets bound our cost rather than ranking callers, which is a trade we would rather state than hide. We do not sell, share or publish what any caller asked us about; the weekly census is a separate instrument that walks public discovery feeds, never this door's traffic.","standards":"Disclosure is private-first and symmetric: an operator hears from us before the public does, and the same rule binds us when the defect is ours. Corrections are dated and public, never silent edits. Every signed artifact verifies offline against a published key, so you never have to ask us whether a document of ours is real.","reporting":"https://scvd.store/.well-known/security.txt for a vulnerability, https://scvd.store/corrections for something we got wrong."},"our_conflict_of_interest":"This store sells x402 goods, so it has an interest in agents being able to pay for things. That cuts against alarmism, not for it: every refusal this tool reports is a sale we did not make. It also runs against our own doors — the reading that named thirteen unpayable listings here is the reading that produced this tool."}