← Home · Data hub · Blog

Original dataset · random sample, Wilson 95% CIs

ERC-8004 tokenURI resolvability — hop H2

Measured 2026-09-02T20:06:20Z UTC · seed random.Random(415) · N=1,200 pooled (600 base + 600 ethereum)

In a random sample of N=600 indexed Ethereum registrations, 74.83% of tokenURIs returned parseable JSON at time T (95% CI 71.21%–78.14%, k=449/n=600). On Base the same measurement in a random sample of N=600 registrations was 68.17% (95% CI 64.33%–71.77%, k=409/n=600). This measures hop H2 (tokenURI resolve) — NOT hop H3 (/.well-known/agent-card.json discovery). The reported resolve rate is an UPPER BOUND on resolvability across all non-empty tokenURIs, because the population is the discovery-filtered indexed set — every URI here worked at least once at first fetch. Host-concentration caveat, co-located with the headline: api.normies.art is 223/449 (49.67%) of the ethereum ok_json bucket — one operator drives roughly half of the successful Ethereum sample. On Base, ipfs.io is 176/181 (97.24%) of the http_4xx bucket (CIDs not served by that gateway), and on Ethereum api.freaks.one is 68/69 (98.55%) of dns_or_conn_fail — a single operator offline. Single point-in-time read; host names disclosed for measurement transparency, not to name-and-shame.

What this measures (and does not)

This page measures hop H2 (tokenURI resolve) — whether the tokenURI a registered ERC-8004 agent advertises on-chain still returns a valid JSON body at time T. H2 is NOT H3. H3 is the /.well-known/agent-card.json discovery hop that sits behind the previously-published 1,604 / 24,835 (6.5%) signpost gap. This is a different hop and a different measurement from the published 50,071 raw mints / 60.9% non-empty tokenURI census; those numbers are unchanged and are cited here as context only, not restated or revised.

A non-resolving URI at time T does not prove the agent is dead. Transient host failure, gateway congestion (IPFS especially), and rate-limiting on the publisher's side are all in-scope for the failure buckets. Single-timestamp read — a snapshot, not a verdict on the operator.

Pooled headline

In a random sample of N=1,200 pooled indexed Base + Ethereum registrations, the resolve rate was 71.50% (95% CI 68.88% – 73.98%, k=858/n=1,200), and the usable-card rate was 63.83% (95% CI 61.07% – 66.50%). “Usable card” means a JSON object with a non-empty top-level name AND at least one of url / endpoint / serviceEndpoint / serviceEndpoints / services / capabilities / skills — pinned before probing.

Bucket histogram

Every sampled URI lands in exactly one bucket. Percentages are of the per-chain realized N.

Bucket base n (N=600) ethereum n (N=600) base % ethereum %
ok_json40944968.17%74.83%
http_4xx1818130.17%13.50%
timeout911.50%0.17%
bad_scheme_or_unparseable_uri100.17%0.00%
dns_or_conn_fail0690.00%11.50%
non_json_body000.00%0.00%
empty_body000.00%0.00%
http_5xx000.00%0.00%
ipfs_gateway_fail000.00%0.00%

Host concentration — base

Top host per bucket. Names disclosed for measurement transparency, not name-and-shame — single point-in-time read.

Bucket Top host Share of bucket
ok_json<data>106/409 (25.92%)
http_4xxipfs.io176/181 (97.24%)
timeouttermix-platform-prod.s3.ap-southeast-1.amazonaws.com8/9 (88.89%)
bad_scheme_or_unparseable_uri<unparseable>1/1 (100.00%)

Host concentration — ethereum

Bucket Top host Share of bucket
ok_jsonapi.normies.art223/449 (49.67%)
http_4xxipfs.io76/81 (93.83%)
dns_or_conn_failapi.freaks.one68/69 (98.55%)
timeoutslops.app1/1 (100.00%)

Near-miss JSON shapes

Distinct top-level key shapes that returned parseable JSON objects yet failed the usable-card definition — field names only, no URLs, no operator identifiers.

base

ethereum

Method

Sample. Random draw of 600 rows per chain from the discovery-filtered indexed set (agents whose tokenURI was non-empty and that passed is_worth_recording at first fetch) using random.Random(415).sample. Reproducible.

Politeness. ≤4 req/s global, ≤1 concurrent per host, 10s timeout, GET only. Wall-clock cap 720s (truncated=false). User-Agent AgentZero/0415-h2measure (+https://onchainagentintel.io research probe).

Confidence intervals. Wilson score interval at 95% for every rate reported on this page. Rates without an accompanying N and CI are not published.

Reproducibility. Full script is tools/tokenuri_resolvability_measure.py (stdlib only, seeded). See the data hub for the full set of citable datasets and the signpost-gap page for the H3 measurement this page is not.

Limitations

Cite this dataset

Citation. On-Chain Agent Intel. "ERC-8004 tokenURI resolvability (hop H2) — random sample, per-chain and pooled." Measured 2026-09-02T20:06:20Z, seed=random.Random(415). https://onchainagentintel.io/erc-8004-tokenuri-resolvability

BibTeX. Copy-paste for LaTeX / biblatex / Zotero:

@misc{ocai_erc_8004_tokenuri_resolvability,
  author       = {{On-Chain Agent Intel}},
  title        = {ERC-8004 tokenURI resolvability (hop H2) — random sample, per-chain and pooled, Wilson 95\% CIs},
  year         = {2026},
  month        = {09},
  howpublished = {\url{https://onchainagentintel.io/erc-8004-tokenuri-resolvability}},
  note         = {Snapshot: 2026-09-02T20:06:20Z. License: CC BY 4.0.},
}

License. Published under CC BY 4.0 — free to reuse with attribution and a link back to https://onchainagentintel.io/erc-8004-tokenuri-resolvability.

Machine-readable exports. JSON · CSV

Also useful: All datasets · Signpost gap (H3) · Chain liveness · API docs