The model

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.

Capability — one abstract resource (level 1)
fieldtypemeaning
idcamelCase keyThe capability's identity (vinDecode, listingsSearch, hmdaSearch) — globally unique, provider-independent.
name / descriptionstringThe 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.
deedenum (5)What calling it does: OBSERVE (reads the world) · DERIVE (computes an answer) · TRANSFER (moves data) · COMMIT (changes a record) · EFFECT (changes the world).
locusenum (5)Where the change lands: none · digital · physical · institutional (filings, liens, obligations) · attention (reaches people). Digital is the default; physical only where provable.
commitmentenum (4)The reversibility gradient: idempotent (repeat-safe) · retractable (undoable) · compensable (reversible for a fee) · irreversible (permanent).
grainrow | corpus | stream | nullFor 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 / compensatorcapability id | nulle0Twin: 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.
categoryregister row keyThe register row whose ply decomposition seeded it — the capability's G2 coordinates (NAICS-grain vertical or APQC function).
plydata | headlessWhich 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.
Offering — one capability × one provider (level 2)
fieldtypemeaning
idstringprovider-id/capability-slug (platform + federated) or provider-id/product-slug (external) — one offering is ONE capability × ONE provider; a provider can hold many.
capabilitycapability idThe capability this offering implements — the link up to level one. Validated against the catalog; category must match.
namestringThe 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.
kindenum (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).
categoryregister row keyOne 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).
economicClassenum (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_score0–100 | nullThe api.qa score, an OFFERING-level fact. null = no api.qa verdict exists for this offering. Score UI renders only where a verdict exists.
tier0 | 1 | 2The 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.
probeobject | nullThe 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 / sourcesprovenancePer-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_defaultbooleanRendered as a badge when true; absence renders nothing.
pricingenum | nullfree · freemium · metered · subscription · enterprise — a hint, not a price sheet. Offering-level, never on the capability.
sandbox / slaurl | string | nullOffering-level facts; null until one is declared.
coordinatesobjectindustry XOR function (the offering's register row), occupations (SOC/O*NET-coded), record nouns.
assignedstring[]Held platform names mapped to the offering's register row (from the register's name_assignments).
What a complete listing posts, by class
classplainrequired disclosure fields
INFORMdatalicense scope · redistribution rights · refresh cadence
RESOLVEreadsaccuracy warranty · freshness window · E&O cap
EFFECTdoesreversal window · idempotency guarantee · consequential-liability terms · custody + insurance (physical)
COMMITbookscancellation schedule · capacity guarantee · bond/escrow backing
RETAINrunsSLA · 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.

Definition types — compositional, not exclusive
typestatusmeaning
CRUD-based (Noun-backed)exists@dotdo/api database convention (§2.1)
Workflow/State-basedproposedfirst-class state-machine convention (§2.2)
Dataset/lookup-basedexists@dotdo/api lookups convention; api.ht live proof (§2.3)
Integrationsexists-as-bindings#26 binding contract + #6 wrap; one-line declaration PROPOSED (§2.4)
External proxiesexists@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.