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.
What the first sweep found
Public Solana x402 endpoints from the facilitator catalogs, checked once. Aggregates only; no endpoint is named.
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.