← Back to datasets

Dataset · CC BY 4.0

x402 Client-Compatibility Census — 2026-10-12

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.