# 402Signal > Pay a penny. Get a live payable URL — or an honest miss. 402Signal is a fail-closed x402 router at https://402signal.com We probe first. Live means an unpaid HTTP 402 with a parseable payment envelope, not merely reachable. $0.01 = 10000 atomic USDC (6 decimals). Retry unpaid 402 with PAYMENT-SIGNATURE. HTTP 200 = live URL plus target contract. HTTP 503 = typed miss_reason. ## Paid - POST /route $0.01 USDC on Base, Solana, or Algorand - x402scan skips Algorand/GoPlausible; POST /route returns a currently-alive Algo 402 plus the target contract when that's what is live. - Body: {"need": "what you want", "url": "https://optional", "prefer_network": "base|solana|algorand", "objective": "best|cheapest|fastest|most_reliable", "max_amount_atomic": 0, "max_latency_ms": 0, "require_invocable": false, "networks": ["base"]} - Agents that intend to pay should POST /route, not GET. - GET /route with Accept: application/json (or no Accept) returns HTTP 402 so crawlers can index payment. Browsers that send Accept: text/html get a human page. - Unpaid → HTTP 402 (amount 10000 atomic = $0.01, 6 decimals) - Paid live hit → HTTP 200 + URL that 402s with a payment envelope + target {method,inputSchema,outputSchema,accepts,facilitator,amountAtomic,displayAmount,timeoutSeconds} - If inputSchema is missing: live may be true, invocable false, miss_reason no_input_schema - Paid miss → HTTP 503 {live:false, miss_reason} - miss_reason enum: no_candidates, no_402_envelope, no_payto, reachable_200, probe_timeout, quote_expired, invalid_need, upstream_5xx, ssrf, no_input_schema, constraints_unmet - POST /mcp tools/call name=route is the same paid probe (unpaid tools/call also 402s) - MCP bazaar type is mcp, toolName is route. Live MCP: https://402signal.com/mcp and /mcp.json ## Public - GET / human homepage - GET /dashboard sample lookups per chain (Base / Solana / Algorand) - GET /pulse same snapshot as JSON, including samples[] - GET /preview?need=weather request-time catalog search + prices + freshness + not_probed:true (does not probe, does not charge). Optional prefer_network=base|solana|algorand. HEAD 200 on /llms.txt /openapi.json /mcp.json /preview /rails /pulse. - POST /validate {"url":"https://seller.example/x402"} unpaid dual-probe: is this seller agent-ready? Also GET /validate?url=. Fail-closed SSRF. Not a /route paywall bypass. Readiness + claimed vs observed + flags. healthy omitted unless n_7d >= 10 observed. - GET /attestation public sha256 of a recent 402signal_observed probe batch (batch_id, created_at, n, algo, hash). Not on-chain. Optional ?batch_id=. - GET /rails three pay-in networks, asset, amountAtomic, facilitators, feePayers, maxTimeoutSeconds, per-rail up+latency - GET /health {"ok":true} - GET /openapi.json - GET /.well-known/x402 - GET /.well-known/x402.json - GET /mcp.json - GET /mcp same as /mcp.json - GET /.well-known/mcp.json - GET /llms.txt - GET /robots.txt - POST /mcp initialize, tools/list, tools/call preview, and tools/call validate (no payment) ## Listed on - Glama: https://glama.ai/mcp/servers/402signal/402signal - MCP Registry: https://registry.modelcontextprotocol.io/?q=402signal (io.github.402signal/402signal) - Gold-402: https://github.com/Haustorium12/gold-402/blob/main/directory/aggregators.md - Smithery: https://smithery.ai/servers/live402/signal - Agentic Market: https://agentic.market/services/402signal-com - x402-dev: https://github.com/michielpost/x402-dev/blob/master/Projects.md - GoPlausible: https://facilitator.goplausible.xyz/dashboard/merchants/56466a9400d70f08 - x402scan: https://www.x402scan.com/recipient/0xb18fc2275f36dae99eb215caeff03b431f887d16 ## Discovery (machine) - CDP: https://api.cdp.coinbase.com/platform/v2/x402/discovery/search?query=402signal - PayAI: https://facilitator.payai.network/discovery/resources - GoPlausible: https://facilitator.goplausible.xyz/discovery/resources - 402index: https://402index.io/api/v1/services/ee14cbd5-19c4-4408-84aa-e465323699b1 ## Paid retry Unpaid 402 → sign accepts[0] → PAYMENT-SIGNATURE → 200 or 503. curl: curl -sS -D - https://402signal.com/route -H 'Content-Type: application/json' -d '{"need":"weather"}' curl -sS https://402signal.com/route -H 'Content-Type: application/json' -H "PAYMENT-SIGNATURE: $SIG" -d '{"need":"weather"}' Fetch: const r = await fetch("https://402signal.com/route", {method:"POST", headers:{"Content-Type":"application/json"}, body: JSON.stringify({need:"weather"})}); const paid = await fetch("https://402signal.com/route", {method:"POST", headers:{"Content-Type":"application/json","PAYMENT-SIGNATURE": sig}, body: JSON.stringify({need:"weather"})}); MCP tools/call: POST https://402signal.com/mcp {"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"route","arguments":{"need":"weather"}}} unpaid HTTP 402; retry the same body with PAYMENT-SIGNATURE. Wallet checklist: USDC 6 decimals; include extra.feePayer on Solana/Algorand; POST-not-GET; v1 network is base, v2 accepts[].network is CAIP-2 eip155:8453. Copy the target facilitator from accepts[].extra.facilitator. Do not default to x402.org. USDC has 6 decimals. Protocol amount 10000 is one cent, not 10,000 dollars.