01 · A good payment
One curl. A real PASS.
This is a canonical x402 payment request: 0.01 USDC on Base mainnet, a known payee, a known resource. Paste it as-is.
POST /preflight · free
curl -sS -X POST https://verify402.onrender.com/preflight \ -H "content-type: application/json" \ -d '{ "kind": "payment", "payment": { "scheme": "exact", "network": "eip155:8453", "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", "amount": "10000", "payTo": "0xAeEF086DD4e436c69d6d0F684b4c9F43392df9cb", "resource": "https://verify402.onrender.com/verify", "maxTimeoutSeconds": 60 }, "policy": { "maxAmountUsd": 0.25 } }'
amount is in raw units: 10000 = 0.01 USDC (6 decimals). Free hosting sleeps: the first call after a pause can take ~30 seconds.
Response · abbreviated
{
"verdict": "PASS",
"sign_allowed": true,
"requires_ack": false,
"reasons": [],
"checked": ["scheme", "network", "asset", "amount", "payee", "resource", "timeout", "block_freshness"],
"notChecked": ["recipient reputation", "sanctions screening", "payment signature / signed payload", "facilitator settlement", "off-chain promises", "counterparty identity / tool metadata", "prompt injection / hidden Unicode in tool output", "payer_balance"],
"block": { "number": 52814257, "ageSeconds": 0 },
"receipt": { "id": "pf_…", "expiresAt": "…", "signature": "…" }
}
Your block number will differ. sign_allowed is simply verdict !== "BLOCK"; a CAUTION still needs a decision.