---
name: x402-solana-endpoint-check
description: After deploying an x402 endpoint that accepts Solana payments, verify a stranger could actually pay it by calling dry.0tx.io. Free, no account. Returns a verdict and, for every failing check, a fix. Use after every deploy of an x402 endpoint on Solana, before telling anyone it works.
---

# Check an x402 endpoint on Solana with dry.0tx.io

dry requests the endpoint the way a buyer would, stops before paying, and reports what would stop a real payment. It never pays, signs, or holds a key.

1. `POST https://dry.0tx.io/check` with JSON `{"url": "<https endpoint>", "method": "GET"|"POST", "body": <json a buyer would send, POST only>}`. `url` is required; `method` defaults to `GET`.
2. Read `verdict`:
   - `problems_found`: at least one check has `status: "fail"`. Each one has `detail` (what is wrong) and `fix` (what to do). Apply every fix, redeploy, and call dry again. Repeat until the verdict changes.
   - `no_problems_found`: every check passed or warned. Read any `warn` and decide. This is not proof of payability: dry did not pay. Make one real paid call before announcing the endpoint.
   - `not_testable`: no 402 came back, or no Solana mainnet/devnet option was offered. If the endpoint needs a specific method or body to answer 402, pass them and call again.
3. Checks are `returns_402`, `has_solana_option` (endpoint-level) and, per Solana payment option, `network_matches_token`, `payto_can_receive`, `requirements_stable`, `fee_payer_funded`. `skipped` means dry could not decide (RPC down, non-USDC token); it is never a problem by itself.

Example:

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

Common fixes dry will hand you: create the payout wallet's associated token account for the asset (buyers transfer into it, they don't create it); use the USDC mint that matches the advertised network; sync `extra.feePayer` from your facilitator so every instance returns the same fee payer; fund the fee payer.

Limits: `https://` only; private and local addresses are refused; 6 checks per minute per IP (HTTP 429, wait a minute). Every check is stored but never published per endpoint; removal and opt-out: message @0sumTX on X with the hostname. Only `GET /`, `GET /llms.txt`, `GET /SKILL.md`, `GET /openapi.json` and `POST /check` exist on `https://dry.0tx.io`. Full reference: https://dry.0tx.io/llms.txt
