# DATA-DICTIONARY — x402 Payable Endpoints Probe (Base + Ethereum, 2026-10-11)

Field-by-field schema for the two distributions of this dataset:

- `dataset.csv` — the flat per-endpoint table (one row per advertised
  endpoint, 270 data rows).
- `x402-payable-endpoints-2026-10-11.json` — the raw observational probe
  payload (top-level metadata + the same per-endpoint list, plus
  `sibling_agent_ids`).

Everything below is captured verbatim from the probe at the probe instant
(`2026-10-11T21:21:54Z`); nothing is synthesised.

## Raw JSON — top-level fields

| Field | Type | Source | Definition |
|---|---|---|---|
| `schema_version` | int | assigned | Probe-payload schema version. `1` in this snapshot. |
| `source_task` | string | assigned | Identifier of the measurement run that produced this snapshot. |
| `source_doc` | string | assigned | Repo-relative path to the task draft document that specified the probe. |
| `field_test_url` | url | assigned | Public URL of the companion narrative blog post. |
| `probed_at` | iso8601 | measured | UTC instant at which every endpoint in `endpoints[]` was probed. Same value for all rows. |
| `method` | string | assigned | Short free-text method summary (full method lives in `METHOD.md`). |
| `disclaimer` | string | assigned | Standing observational-only disclaimer applied to every row. |
| `total_endpoints_valid_402` | int | computed | Count of entries in `endpoints[]` whose `http_402_ok == true` (= 270). |
| `total_agents_valid_402` | int | computed | Count of distinct `agent_id` values across `endpoints[]` (= 58). |
| `endpoints_by_chain` | object | computed | `{chain: endpoint_count}`. `base: 261`, `ethereum: 9`. |
| `agents_by_chain` | object | computed | `{chain: [agent_id, ...]}` for every chain. Base: 55 ids; Ethereum: 3 ids. |
| `endpoints` | array | measured | 270-entry list, one entry per advertised endpoint that satisfied the inclusion rule. See per-entry fields below. |

## Raw JSON — `endpoints[]` entry fields

| Field | Type | Source | Definition |
|---|---|---|---|
| `agent_id` | int | measured | ERC-8004 `agentId` on the chain in `chain`. |
| `chain` | enum | measured | `base` (chain_id 8453) or `ethereum` (chain_id 1). |
| `endpoint_url` | url | measured | Advertised endpoint that was probed. |
| `http_402_ok` | boolean | measured | `true` when the probe returned HTTP 402 with a parseable, non-empty `accepts[]` block. Every row in this snapshot has `true` by construction (the inclusion rule in `METHOD.md § Inclusion rule`). |
| `network` | string | measured | Network reported by the agent's `accepts[]` entry (e.g. `base-mainnet`, `base`). Captured verbatim; no normalisation. |
| `asset` | string | measured | Asset reported by the agent's `accepts[]` entry (e.g. `USDC`). Captured verbatim. |
| `price_usd` | decimal or null | measured | Price per call, converted to USD using the agent's declared `accepts[]` entry at probe time. **Not a current price**; see `METHOD.md § Field semantics`. |
| `payTo_present` | boolean | measured | `true` when the parsed `accepts[]` entry carried a non-empty `payTo` (or equivalent `address`) field. |
| `sibling_agent_ids` | int list | measured | Other agent IDs that advertise the same `endpoint_url` at probe time. May be an empty list (and often is). **Only in the raw JSON** — omitted from `dataset.csv`. |
| `probed_at` | iso8601 | measured | UTC instant of this probe. Same value for all rows in this snapshot. |

## CSV columns (9)

The CSV mirrors the raw per-endpoint fields and drops the list-valued
`sibling_agent_ids` (list columns do not fit a flat CSV; they stay in the
raw JSON).

| # | Column | Type | Null semantics |
|---:|---|---|---|
| 1 | `agent_id` | int | Always populated. |
| 2 | `chain` | enum | Always populated (`base` or `ethereum`). |
| 3 | `endpoint_url` | url | Always populated. |
| 4 | `http_402_ok` | boolean | Always populated. By inclusion rule, always `true`. |
| 5 | `network` | string | Always populated. |
| 6 | `asset` | string | Always populated. |
| 7 | `price_usd` | decimal | Always populated in this snapshot. |
| 8 | `payTo_present` | boolean | Always populated. |
| 9 | `probed_at` | iso8601 | Always populated. |

Row ordering preserves the source `endpoints[]` ordering; no sort was
applied.

## License

[Creative Commons Attribution 4.0 International (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/).
