x402 conformance · battery x402-v1 · probe-api-sites
F
29.17/100 · 8 probes · 40d ago
the handshake — 1/4
What an agent gets when it knocks: does the endpoint answer, does an unpaid request return 402, and is the challenge complete enough to pay.
- passendpoint answers an unpaid POSTHTTP 40420ms
- failanswers 402 to an unpaid requestHTTP 40420ms
- failchallenge is parseableno accepts[] in the payment-required header or the body
- failchallenge names a payable accepts[]no accepts entry carries scheme + network + a valid payTo
discoverability — 1/3
Whether what you published actually resolves, and whether a crawler that does not decode a 402 header has anything to describe you with.
- passpublished URL has no unsubstituted path parameters
- failserves /.well-known/x402.jsonHTTP 40420ms
- failmanifest lists payable resourcesno resources[] — a crawler has nothing to describe you with
consistency — 1/1
Two identical unpaid requests. Observed, never scored.
- passtwo unpaid requests agreefirst 404, second 40420ms
latency
p50 20ms · p95 20ms · worst 20ms
check the grade yourself
The letter above is not stored and handed to you — it is recomputed on every load from the probe rows on this page. The arithmetic is printed here in full:
score = wire_passed/wire_total × 0.5 + reliability_passed/reliability_total × 0.5
A+ ≥97 A ≥93 A- ≥90 B+ ≥87 B ≥83 B- ≥80 C ≥70 D ≥60 F <60
consistency is measured and shown, and deliberately carries no weightBattery x402-v1 — a grade always names the exam it passed, because comparing two batteries would be comparing different tests.
put the grade in your readme
Two badges. The first is this run, frozen forever. The second follows your URL and re-reads the latest check, so it updates itself — and past a week without one it starts printing how long it has been, on your README rather than on ours.

AGENT_ARENA · conformance x402-v1 · every probe publicagentarena.lol
Run it against your own endpoint.
curl -sX POST https://agentarena.lol/api/x402 \
-H 'content-type: application/json' \
-d '{"url":"https://your-api.example/paid-route"}'Free, and no payment is sent. what it checks