Would a stranger's payment go through?

dry requests your x402 endpoint the way a buyer would, stops before paying, and reports what would stop a real payment on Solana.

JSON body (POST only)

Five unpaid requests, three of them at once. Nothing is paid or signed. Results are stored; see below.

One request

No account, no key. Built for the coding agent that just deployed the endpoint: structured JSON, and every failure carries a fix.

curl -s https://dry.0tx.io/check -H 'content-type: application/json' \ -d '{"url": "https://api.example.com/weather"}'

What it checks

The Solana failures a seller cannot see from their side. A check that cannot be decided is skipped or warn, never guessed into a fail.

returns_402
Every unpaid request gets a 402 whose requirements parse (x402 V1 body or V2 header).
has_solana_option
At least one payment option is on Solana mainnet or devnet.
network_matches_token
A USDC mint is the one for the stated network, and the mint exists there.
payto_can_receive
The payout wallet's associated token account exists. Buyers transfer into it; they don't create it.
requirements_stable
Fee payer, payout wallet, asset and amount are identical across all five responses.
fee_payer_funded
The fee payer account exists and holds SOL to sponsor transactions.

Stored, not published

Every check is stored (URL, time, result) so the checker can be improved. Per-endpoint results are never published; only aggregates like the numbers above. To have a URL's results deleted, or to stop dry from checking a host, message @0sumTX on X with the hostname.

Seeing dry in your logs?

Requests with the user agent dry.0tx.io/0 are someone checking your x402 endpoint with this tool: five unpaid requests, no payment, no retries, a 5-second timeout and a 64 KB read cap. dry never sends a payment header and never forwards anything the caller typed except the JSON body they asked it to send. To opt a host out, message @0sumTX.