The unit of the register is the economic act: a capability is a verb applied to a noun — decode × VIN, book × Freight tender — provider-independent. An offering is capability × provider: what is sold (its class), at what price, under what terms. An interface is how one offering is reached — REST, MCP, SDK — one offering, many interfaces. A provider stands behind offerings. Two indexes cross the ladder: the noun pages (everything that acts on a thing) and the act pages (everything a verb applies to).
The site is a projection of the full-economy property register (2026-08-23): its 53 category rows (40 NAICS-grain verticals + 13 APQC functions, 17 unclaimed) become the board and the category facets. Derivation: each row decomposes into a data ply (the typed-record corpus) and a headless ply (the system of record); the curated seeds in data/capability-seeds.json parse those decompositions into the curated capability catalog — camelCase ids, one row each, every row seeded. Each claimed row's ruled primary name then explodes into one platform offering per capability on its row; the register's name assignments become each rail's held names. Only public-safe parsed fields cross the adapter.
| field | type | meaning |
|---|---|---|
| id | camelCase key | The capability's identity (vinDecode, listingsSearch, hmdaSearch) — globally unique, provider-independent. |
| name / description | string | The abstract resource, named and described in public-safe prose freshly written for the catalog. |
| act | { verb, patient } | The capability as an economic act: a verb applied to a noun (decode × VIN, book × Freight tender). The verb indexes the act pages; the patient noun indexes the noun pages. |
| deed | enum (5) | What calling it does: OBSERVE (reads the world) · DERIVE (computes an answer) · TRANSFER (moves data) · COMMIT (changes a record) · EFFECT (changes the world). |
| locus | enum (5) | Where the change lands: none · digital · physical · institutional (filings, liens, obligations) · attention (reaches people). Digital is the default; physical only where provable. |
| commitment | enum (4) | The reversibility gradient: idempotent (repeat-safe) · retractable (undoable) · compensable (reversible for a fee) · irreversible (permanent). |
| grain | row | corpus | stream | null | For reads: one record per call, the whole corpus, or a stream. A dataset is the corpus-grain expression of the same capability whose row-grain expression is a lookup. |
| e0Twin / compensator | capability id | null | e0Twin: the pure-read twin of a committing act (quote before tender) — try it without changing anything. compensator: the capability that undoes this one, with its own price and cutoff. Pointers into the catalog, never booleans. |
| category | register row key | The register row whose ply decomposition seeded it — the capability's G2 coordinates (NAICS-grain vertical or APQC function). |
| ply | data | headless | Which ply of the row seeded it: data = the row's typed-record corpus addressable as data; headless = the row's system of record operable as an API. |
| field | type | meaning |
|---|---|---|
| id | string | provider-id/capability-slug (platform + federated) or provider-id/product-slug (external) — one offering is ONE capability × ONE provider; a provider can hold many. |
| capability | capability id | The capability this offering implements — the link up to level one. Validated against the catalog; category must match. |
| name | string | The offering's name. Platform and federated offerings are named by their capability; externals by their product. |
| provider | { id, name, platform } | Who serves it. platform (the diamond mark) marks platform providers — operated by the same family as this directory; every other provider is independent. |
| kind | enum (7) | data · headless-saas · integration · cloud-infra · ai · services · commerce. Closed set; an unknown kind fails the build. Platform and federated offerings derive kind from the capability's ply (data → data, headless → headless-saas). |
| category | register row key | One of the property register's 53 categories: a NAICS-grain vertical or an APQC function horizontal (two-rooted tree — an offering sits on exactly one root). |
| economicClass | enum (5) | What is being sold: INFORM (license on an information good) · RESOLVE (a warranted answer per query) · EFFECT (a performative act) · COMMIT (an option on future capacity) · RETAIN (a relational, operated service). Required on every offering; economicClassInferred + economicClassBasis record where the class was classified mechanically rather than declared. Rendered plainly: data / reads / does / books / runs. |
| interfaces | [{ transport, kind }] | The interface rung: HOW the offering is reached (rest · mcp · sdk), separate from WHAT it does. One offering, many interfaces — transport is never offering identity. Only declared facts appear; the offering-level kind remains as a derived browse facet. |
| qa_score | 0–100 | null | The api.qa score, an OFFERING-level fact. null = no api.qa verdict exists for this offering. Score UI renders only where a verdict exists. |
| tier | 0 | 1 | 2 | The quality ladder (QUALITY-TIERS.md): 0 = listed; 1 = probed — mechanical checks ran and the results are recorded; 2 = api.qa-verified with a public verdict URL. |
| probe | object | null | The tier-1 probe block, verbatim: probedAt, probeVersion, reachable, docsLive, specFound, machineFace, authDocumented, cors, timeouts, errors, probeScore 0–6. A re-probe replaces the block. |
| source / sources | provenance | Per-record source provenance, passed through verbatim (apis.io, apis.guru, github.com/public-apis, apitracker.io, …). externalScores carries a source's own published scores, attributed to that source. |
| agent_default | boolean | Rendered as a badge when true; absence renders nothing. |
| pricing | enum | null | free · freemium · metered · subscription · enterprise — a hint, not a price sheet. Offering-level, never on the capability. |
| sandbox / sla | url | string | null | Offering-level facts; null until one is declared. |
| coordinates | object | industry XOR function (the offering's register row), occupations (SOC/O*NET-coded), record nouns. |
| assigned | string[] | Held platform names mapped to the offering's register row (from the register's name_assignments). |
| class | plain | required disclosure fields |
|---|---|---|
| INFORM | data | license scope · redistribution rights · refresh cadence |
| RESOLVE | reads | accuracy warranty · freshness window · E&O cap |
| EFFECT | does | reversal window · idempotency guarantee · consequential-liability terms · custody + insurance (physical) |
| COMMIT | books | cancellation schedule · capacity guarantee · bond/escrow backing |
| RETAIN | runs | SLA · termination terms · data/state ownership on exit |
No offering has declared these terms yet; the fields ship on the schema now and the completeness bar applies when declarations begin. The effect badges on rows (reads · does — undoable / permanent / physical / official) are computed from deed × locus × commitment at render; they are never stored fields.
| type | status | meaning |
|---|---|---|
| CRUD-based (Noun-backed) | exists | @dotdo/api database convention (§2.1) |
| Workflow/State-based | proposed | first-class state-machine convention (§2.2) |
| Dataset/lookup-based | exists | @dotdo/api lookups convention; api.ht live proof (§2.3) |
| Integrations | exists-as-bindings | #26 binding contract + #6 wrap; one-line declaration PROPOSED (§2.4) |
| External proxies | exists | @dotdo/api proxies convention + enrichment mechanic (§2.5, §3) |
Compositional, not exclusive — one definition freely mixes types; 'which type is this API' is a projection question, not a schema question [PROPOSED — STAKE, §2.6].
Providers (level 3) are the distinct provider values across offerings — each with a page listing its offerings. Machine faces: index.json (the whole register: axes with claim status + capabilities + all offerings), /capability/{capability}.json (one capability with its offerings), /apis/{provider}/{product}.json (one offering), agents.json, llms.txt. Full AXP conformance (openapi + typed outcomes + content negotiation) is the follow-on.