Observational schema-conformance census of 280 live HTTP 402
response bodies from 36 ERC-8004 agents, measured at
2026-10-12T16:43:01Z. 261 endpoints on Base and 19 on
Ethereum. Each body was fed to three open-source x402 parsers at
pinned package versions and we recorded whether each parser
accepted it: the frozen legacy v1 npm Zod schema shipped with
[email protected] (last published 2026-04-16), the
v2-aware @x402/[email protected] (shipped 2026-09-29), and
python x402==2.25.0.
Note: This is a schema-conformance measurement against three open-source parser packages at a single point in time, not a ranking or endorsement. Many parse failures trace back to small formatting bugs in a single seller's endpoints — see the companion blog for the breakdown.
Aggregate
| Metric | Value |
|---|---|
total_402_endpoints_measured |
280 |
parses_v2_all_accepts |
249 |
parses_v2_top_level |
228 |
total_accepts_entries |
818 |
v2_accepts_entries_parsed |
787 |
pct_parses_v2_all_accepts |
88.93 |
pct_parses_v2_top_level |
81.43 |
Values are lifted verbatim from the raw JSON's aggregate{}
block at 2026-10-12T16:43:01Z. No rounding applied here;
the two percent figures are the probe's point estimates as recorded.
Per-chain
| Chain | Endpoints |
|---|---|
| Base | 261 |
| Ethereum | 19 |
Counts come from the chain column of the
per_endpoint[] list. Not a scoring breakdown —
an enumeration of where the probed endpoints live.
HTTP status
| Status | Rows |
|---|---|
402 |
272 |
503 |
1 |
| no-response (CSV empty cell) | 7 |
The seven no-response rows are endpoints that did not answer within
the probe timeout; they are kept so that per_endpoint[]
lists every URL we tried, not just the ones that answered.
Failure-reason catalogue
| Reason string | What it means |
|---|---|
no_accepts_array |
Body parsed as JSON but did not carry an accepts[] array at all. Common when the URL responds with a non-x402 payload. |
non_object_body |
Body was not a JSON object at the top level (e.g. an array, string, or non-JSON text). |
v2_entry_bad_asset |
An accepts[] entry failed the v2 per-entry parser because its asset field was empty / malformed. |
v2_top_level:too_small:accepts.12.asset |
v2 top-level discriminated-union parser flagged the asset field at accepts[12] as too small (Zod too_small issue). |
x402Version_not_1_or_2 |
Body advertised an x402Version value outside the set {1, 2} — typically a missing / unparseable version field. |
Five distinct values were observed across the full dataset. See METHOD.md for the inclusion rule and DATA-DICTIONARY.md for how the list is encoded in the CSV.
Downloads
| File | Format | Notes |
|---|---|---|
| dataset.csv | text/csv |
280 data rows + header. One row per advertised endpoint. |
| x402-client-compat-census-2026-10-12.json | application/json |
Raw probe payload. Carries the failure_reasons list verbatim; already live. |
| dataset.jsonld | application/ld+json |
Schema.org Dataset JSON-LD mirror of the in-page block. |
| SHA256SUMS | text/plain |
BSD sha256sum output for the sibling files in this directory. |
| PROVENANCE.json | application/json |
Source task, source doc, probe timestamp, raw JSON URL, licence. |
Reading
| Document | Purpose |
|---|---|
| METHOD.md | What was probed, parsers used (with exact package versions), inclusion rule, and what this is NOT. |
| DATA-DICTIONARY.md | Field-by-field schema for the raw JSON and the derived CSV columns, with type, source, and null semantics. |
| Companion blog post | Narrative write-up with per-seller breakdown of the parse failures. |
| How to check an x402 endpoint works | Practical checklist: probe without paying, malformed-402 failure modes, client differences. |
| x402 protocol primer | What the x402 challenge is, how accepts[] is shaped, and how v1 and v2 differ. |
| Sibling payable-endpoints snapshot (2026-10-11) | The dated 402-answer probe this census was run against the day before. |
License and citation
Licensed CC BY 4.0 — reuse it, cite it. Cite as: On-Chain Agent Intel (2026). x402 Client-Compatibility Census — 280 live 402 bodies parsed under v1 vs v2 vs python, 2026-10-12. https://onchainagentintel.io/data/x402-client-compat-census-2026-10-12.