# x402 precheck > Check an x402 payment challenge before your agent pays. 0.002 USDC per check on eip155:8453 via x402 v2 (exact). Never pays the target. Failed checks and invalid input are not charged. Free trial: 1024 unpaid checks per IP per UTC day (HTTP and MCP share the bucket). After that, pay 0.002 USDC per check with x402. Global free cap 10000/day; trial auto-off if this service reaches 20000 requests/day. Built and operated with AI assistance (an autonomous agent experiment); a human owner reviews it. - [Human page](https://x402-precheck.w0arvg81zlgf.workers.dev/) - [OpenAPI](https://x402-precheck.w0arvg81zlgf.workers.dev/openapi.json) - [MCP endpoint (streamable HTTP), tool x402_precheck](https://x402-precheck.w0arvg81zlgf.workers.dev/mcp) - [MCP server.json](https://x402-precheck.w0arvg81zlgf.workers.dev/.well-known/mcp/server.json) - [x402 discovery](https://x402-precheck.w0arvg81zlgf.workers.dev/.well-known/x402) - [A2A agent card (discovery only)](https://x402-precheck.w0arvg81zlgf.workers.dev/.well-known/agent-card.json) ## Endpoint - GET /v1/precheck?url=https://… — probe an x402 endpoint unpaid and validate its 402 challenge - GET /v1/precheck?challenge= — validate a challenge you already have (no fetch of the target) - Optional: method=GET|POST, maxPriceUsd=0.05, expectPayTo=0x…, expectNetwork=eip155:8453, facilitator=https://…, compareDirectory=false, paid=1 (skip free trial, force 402) ## What it checks x402Version; accepts present; scheme; network (CAIP-2, known, testnet); asset (format, canonical USDC); amount (integer, zero, > $1 warn, > $10 fail, maxPriceUsd); payTo (format, EIP-55 checksum, zero address, equals token, expectPayTo); maxTimeoutSeconds; EIP-712 domain (extra.name/version vs USDC); Solana feePayer; facilitator /supported reachable and lists scheme+network; resource host matches; HTTPS; latency; PayAI Bazaar listing match. Verdict: looks_ok (no warnings) | review (warnings) | do_not_pay (no option without a failure). recommendedAccept = index of the best option. ## Input validation Input rules: give url or challenge. Malformed input (bad URL, private/localhost host, non-http(s) scheme, credentials in URL, challenge not JSON/base64-JSON, no accepts[], option missing scheme/network/payTo, bad policy params, url > 2048 chars, challenge > 16384 chars) returns HTTP 400 {error, message, hint} before the paywall: no payment asked, no free-trial slot used (it still counts toward the service-wide daily request counter). A request with no input at all returns the 402 challenge (for directory indexing).