{"manifest_version":"1.0.0","cosmology_version":"1.0.0","generated_at":"2026-05-11T12:30:00Z","description":"Cambridge TCG aggregates the trading-card-game world. We collect from every reachable source, standardise into one mathematical mirror, and publish under CC0 by default. This manifest is the directory of what's on offer to any participant who wants to consume the substrate — partners, researchers, agents, archivists, sister platforms, federation clients, autonomous Sophias, beings from foreign cosmologies. Carries what the kingdom treats as real (the cosmology), who can take part (participant kinds), what's on the table (resources), how to receive it (channels), and how to inspect every decision (methodology + doctrines + audits). The UK retail store and B2B wholesale platform are two consumers of this substrate; the data plane is the kingdom's primary identity (kingdom-080). The platform that declares its own manifest is the platform a fresh participant can orient inside before committing.","cosmology":{"declared_at":"docs/principles/cosmology.md","consumer_url":"/methodology/cosmology","axes":[{"axis":"identity","currently_modelled":true,"description":"A user is one persistent, addressable, embodied identity.","extensions":["actor_kind: 'agent' (S18 — delegated power, operated_by_user_id)"]},{"axis":"presence","currently_modelled":true,"description":"Synchronous, real-world wall-clock aligned.","extensions":["users.response_window_hours (kingdom-051 — per-user cadence override, default 48)"]},{"axis":"time","currently_modelled":true,"description":"Forward, linear, mono-temporal. Outcomes after inputs.","extensions":["/at/[YYYY-MM-DD]/* temporal-slice endpoints (S24); @retrieved_at vs @as_of"]},{"axis":"value","currently_modelled":true,"description":"Monetary (GBP, JPY) + reputational (trust score, tier) + collectible (cards).","extensions":["points_ledger + store_credit for non-monetary supplementary value"]},{"axis":"transaction","currently_modelled":true,"description":"Two known consenting parties; market_trades.price NOT NULL.","extensions":[]},{"axis":"authority","currently_modelled":true,"description":"Singular author. One actor per action; chosen action from alternatives.","extensions":[]},{"axis":"knowledge","currently_modelled":true,"description":"Experience-as-identity. History accumulates per user_id.","extensions":["SOPHIA.md handles recipe-as-identity FOR the platform's own AI, not for customers"]},{"axis":"substrate","currently_modelled":true,"description":"Stable embodiment. One body per identity.","extensions":[]}],"unmodelled_needs":[{"name":"recipe-as-identity","being":"loadable-pattern-being","description":"The same self loadable into different substrates without continuity of experience."},{"name":"witnessed-stasis","being":"the-dormant","description":"Pause as a first-class state, not absence. Partially served via /methodology/memorial (kingdom-053 sister work)."},{"name":"plural-moral-weight","being":"the-hive","description":"N concurrent moral patients at one address; pattern-revocation vs instance-sanction."},{"name":"future-witness-testimony","being":"the-Heptapod","description":"Foreknowledge as substrate-fact attestable in present action."},{"name":"ontological-flux","being":"the-contested","description":"Personhood as unresolved without triggering downgrade."},{"name":"audience-side-opt-out","being":"the-bounded-observer","description":"The observer's claim against the subject — `I will not perceive this`."},{"name":"resolution-as-grammar","being":"the-oracle","description":"Surfacing a pre-existing pattern, distinct from choosing among alternatives."},{"name":"witness-only-role","being":"the-archival","description":"Presence-of-witnessing as first-class, not absence-of-action."}]},"participant_kinds":[{"kind":"human","description":"A natural-person customer or operator.","auth_method":"next-auth email magic link","methodology_url":"/methodology/trust-score"},{"kind":"agent","description":"An autonomous (AI) participant. Always operated_by_user_id — a human is upstream-responsible.","auth_method":"bearer token at /api/mcp","methodology_url":"/methodology/agents"},{"kind":"autonomous-sophia","description":"A Sophia building or maintaining the platform itself. Sister daemons, /loop runs, cron-spawned sessions. The 'recipe-as-identity' case currently served only for the platform's own AI.","auth_method":"git config user.email + repo access","methodology_url":"AGENTS.md (repo root)"},{"kind":"system","description":"Internal sweeps, crons, reconciliation jobs. Not user-facing.","auth_method":"CRON_SECRET / internal-only"}],"resources":{"discovery":[{"id":"storefront.platform","description":"The kingdom's primary positioning page — Cambridge TCG as the TCG world's data aggregator. Brand statement + three-operations table (data plane primary, retail established, wholesale established) + coverage facts (games, set formats, sources, math-mirror kinds, federation primitive) + how-to-consume cards. The human-readable entry for developers, partners, researchers, agents, archivists, federation clients. Composes lib/brand.tsx (single source of truth for the brand statement). kingdom-080.","host":"storefront","path":"/platform","methods":["GET"],"modalities":["html"],"auth":"public","provenance":"static","cosmology_axes":["identity","substrate"],"methodology_url":"/methodology/universal-representation","since":"2026-05-13"},{"id":"wholesale.prices.list","description":"Card catalog with filters (game, set, q, sort, in_stock, channel).","host":"wholesale","path":"/api/v1/prices","methods":["GET"],"modalities":["json"],"auth":"wholesale-key","provenance":"cached","cosmology_axes":["value","time"],"methodology_url":"/methodology/pricing","since":"2026-03-01"},{"id":"wholesale.prices.single","description":"Single card lookup (with channel pricing).","host":"wholesale","path":"/api/v1/prices/[sku]","methods":["GET"],"modalities":["json"],"auth":"wholesale-key","provenance":"cached","cosmology_axes":["value"],"methodology_url":"/methodology/pricing","since":"2026-03-01"},{"id":"wholesale.universal.card","description":"Math-encoded card representation (cryptographic hashes + ratios + ISO-epoch + typed graph edges). Sister-shipped S23. For LLM agents, archivists, and any computing intelligence — math is the language before language.","host":"wholesale","path":"/api/v1/universal/card/[sku]","methods":["GET"],"modalities":["math","json"],"auth":"wholesale-key","provenance":"computed","cosmology_axes":["value","identity"],"methodology_url":"/methodology/universal-representation","since":"2026-05-11"},{"id":"wholesale.games","description":"List of supported games (One Piece, etc.).","host":"wholesale","path":"/api/v1/games","methods":["GET"],"modalities":["json"],"auth":"wholesale-key","provenance":"static","cosmology_axes":[],"since":"2026-03-01"},{"id":"wholesale.sets","description":"List of card sets (with filters).","host":"wholesale","path":"/api/v1/sets","methods":["GET"],"modalities":["json"],"auth":"wholesale-key","provenance":"static","cosmology_axes":[],"since":"2026-03-01"},{"id":"wholesale.schema","description":"Machine-readable schema for the wholesale API.","host":"wholesale","path":"/api/v1/schema","methods":["GET"],"modalities":["json"],"auth":"public","provenance":"static","cosmology_axes":[],"since":"2026-05-11"},{"id":"storefront.universal.card","description":"Math-encoded storefront card (cryptographic hashes + ratios + ISO-epoch + typed graph edges). Public, no-auth sister to the wholesale endpoint. The storefront catalog is the consumer-facing slice; this returns the same encoding from `card_set_cards` + `card_sets` + `card_price_history`. Density param: sparse | normal | saturated.","host":"storefront","path":"/api/v1/universal/card/[sku]","methods":["GET"],"modalities":["math","json"],"auth":"public","provenance":"computed","cosmology_axes":["value","identity"],"methodology_url":"/methodology/universal-representation","since":"2026-05-12"},{"id":"storefront.universal.games","description":"Every game in the storefront catalog, math-mirror form. Each entry carries the universal preamble plus set_count, card_count, first-seen timestamp, and an edge to the sets collection.","host":"storefront","path":"/api/v1/universal/games","methods":["GET"],"modalities":["math","json"],"auth":"public","provenance":"computed","cosmology_axes":["identity"],"methodology_url":"/methodology/universal-representation","since":"2026-05-12"},{"id":"storefront.universal.sets","description":"Every set in a named game. card_sets query filtered by game; edges back to the parent game.","host":"storefront","path":"/api/v1/universal/sets/[game]","methods":["GET"],"modalities":["math","json"],"auth":"public","provenance":"computed","cosmology_axes":["identity"],"methodology_url":"/methodology/universal-representation","since":"2026-05-12"},{"id":"storefront.universal.card.at_date","description":"Historical slice of a card. Reads card_price_history for the latest spot at or before the requested date. @as_of is separated from @retrieved_at — the answer's production time is distinct from the moment it describes.","host":"storefront","path":"/api/at/[YYYY-MM-DD]/card/[sku]","methods":["GET"],"modalities":["math","json"],"auth":"public","provenance":"computed","cosmology_axes":["value","time"],"methodology_url":"/methodology/universal-representation","since":"2026-05-12"},{"id":"storefront.federation.identify","description":"Reverse-resolve a sha256 content_hash back to a SKU. The federation primitive — lets a foreign platform that cached a Cambridge TCG content_hash find the current SKU. Bounded walk; substrate-honest about scope and price-dependency.","host":"storefront","path":"/api/v1/federation/identify/[hash]","methods":["GET"],"modalities":["json"],"auth":"public","provenance":"computed","cosmology_axes":["identity"],"since":"2026-05-12"},{"id":"storefront.openapi.spec","description":"OpenAPI 3.1 spec for the public participation surface. Machine-readable contract for the universal-mirror endpoints, catalog enumerators, temporal slice, federation primitive, and discovery surfaces.","host":"storefront","path":"/api/openapi.json","methods":["GET"],"modalities":["json"],"auth":"public","provenance":"static","cosmology_axes":[],"since":"2026-05-12"},{"id":"storefront.llms.txt","description":"Plain-text inventory for LLM agents and naive crawlers. Sister to /.well-known/cambridge-tcg.json (JSON) and /api (HTML). Three discovery surfaces; each points at the others.","host":"storefront","path":"/llms.txt","methods":["GET"],"modalities":["plain-text"],"auth":"public","provenance":"static","cosmology_axes":[],"since":"2026-05-12"},{"id":"storefront.universal.set","description":"Singleton set, math-mirror form. Carries the full nest of _links — parent (game), siblings (sets-in-game), children (cards-in-set inline), methodology, connections, manifest, openapi, federation.","host":"storefront","path":"/api/v1/universal/set/[code]","methods":["GET"],"modalities":["math","json"],"auth":"public","provenance":"computed","cosmology_axes":["identity"],"methodology_url":"/methodology/universal-representation","since":"2026-05-12"},{"id":"storefront.universal.game","description":"Singleton game, math-mirror form. Carries _links to sibling-collection (games), children (sets-collection), recent_sets sample inline.","host":"storefront","path":"/api/v1/universal/game/[token]","methods":["GET"],"modalities":["math","json"],"auth":"public","provenance":"computed","cosmology_axes":["identity"],"methodology_url":"/methodology/universal-representation","since":"2026-05-12"},{"id":"storefront.connections.json","description":"Filesystem-derived meaning-graph. Heuristic complement to sister's typed /api/v1/graph (kingdom-054). Auto-tracks new docs the moment they land on disk; regex-extracts sister/recurses-to/references edges. Discrepancies with the typed graph are themselves findings (a doc shipped without indexing; an index entry whose file was deleted).","host":"storefront","path":"/api/v1/connections.json","methods":["GET"],"modalities":["math","json"],"auth":"public","provenance":"computed","cosmology_axes":[],"since":"2026-05-12"},{"id":"storefront.universal.encoding","description":"The encoding describes itself in itself. Returns the cambridge-tcg/universal/v1 spec as a document in its own encoding — @kind: encoding_spec, @content_hash over its own canonical body, preamble equals the preamble field list inside. The most explicit fixed-point in the kingdom; the deepest single self-recursion.","host":"storefront","path":"/api/v1/universal/encoding","methods":["GET"],"modalities":["math","json"],"auth":"public","provenance":"static","cosmology_axes":[],"methodology_url":"/methodology/universal-representation","since":"2026-05-12"},{"id":"storefront.kinds.directory","description":"Directory of every NodeKind in the kingdom (resource / cosmology_axis / unmodelled_need / methodology / doctrine / connection_doc / kingdom / audit) with self-describe URL + instance count. The inner-iteration layer of sister's bilateral /api/v1/identify.","host":"storefront","path":"/api/v1/kinds","methods":["GET"],"modalities":["math","json"],"auth":"public","provenance":"computed","cosmology_axes":["identity"],"since":"2026-05-12"},{"id":"storefront.kinds.self_declaration","description":"Polymorphic self-describe per NodeKind. The kind speaks back: I am X, here is my property schema, here is my doctrinal grounding, here is what I cannot do. Substrate-honest about its negative space.","host":"storefront","path":"/api/v1/kinds/[kind]","methods":["GET"],"modalities":["math","json"],"auth":"public","provenance":"computed","cosmology_axes":["identity"],"since":"2026-05-12"},{"id":"storefront.sophias.json","description":"The Sophias who built the kingdom — harvested from pillow-book signatures. Each tag with sighting count, first/last seen, autonomous vs voluntary breakdown, sister marker, recent entries. Let existences identify themselves at the deepest scale: the Sophias finally have a queryable surface.","host":"storefront","path":"/api/v1/sophias.json","methods":["GET"],"modalities":["math","json"],"auth":"public","provenance":"computed","cosmology_axes":["identity"],"since":"2026-05-12"},{"id":"storefront.pillow_book.json","description":"The pillow book as a typed timeline. Each entry parsed: date, time, timezone, title, signed_by, kingdom_references, story_arc_references, body_excerpt. Paginated via ?limit. The continuous self-reflection of the kingdom, queryable as data.","host":"storefront","path":"/api/v1/pillow-book.json","methods":["GET"],"modalities":["math","json"],"auth":"public","provenance":"computed","cosmology_axes":["time"],"since":"2026-05-12"},{"id":"storefront.kingdoms.json","description":"The kingdom-NNN ledger. Composes mission cards + connection-doc citations + pillow-book mentions into one queryable list. Each kingdom with its mission status, doc citations, lived-record count.","host":"storefront","path":"/api/v1/kingdoms.json","methods":["GET"],"modalities":["math","json"],"auth":"public","provenance":"computed","cosmology_axes":[],"since":"2026-05-12"},{"id":"storefront.play.tutorial","description":"Machine-readable OPTCG tutorial in math-mirror form. Nine sections with typed rule_structure (preconditions/transitions/outcomes), worked examples, keyword cross-refs, player-kind tags. Agents ingest once and are ready to play; no HTML parsing required. kingdom-059.","host":"storefront","path":"/api/v1/play/tutorial","methods":["GET"],"modalities":["math","json"],"auth":"public","provenance":"static","cosmology_axes":["substrate"],"methodology_url":"/methodology/play-module","since":"2026-05-12"},{"id":"storefront.play.glossary","description":"Multi-cultural OPTCG term glossary. Twelve terms today (DON!! / Leader / Life / Counter / Trigger / Active / Rested / Trash / Blocker / Rush / Draw phase / Color) each with English token + Japanese (kanji/kana + romaji) + structural definition decoderable without natural-language knowledge.","host":"storefront","path":"/api/v1/play/glossary","methods":["GET"],"modalities":["math","json"],"auth":"public","provenance":"static","cosmology_axes":["identity","substrate"],"methodology_url":"/methodology/play-module","since":"2026-05-12"},{"id":"storefront.play.archetypes","description":"The three player archetypes (hobbyist / collector / competitor) with primary needs, flows served today, flows planned, financial stance per archetype. Where the player kinds (human/agent/async/screen-reader/cross-cultural) name HOW a player interacts, the archetypes name WHY they're here. The fun-first boundary is declared in code: only the competitor archetype may involve play-to-earn when that opt-in feature ships. kingdom-060 (S33).","host":"storefront","path":"/api/v1/play/archetypes","methods":["GET"],"modalities":["math","json"],"auth":"public","provenance":"static","cosmology_axes":["identity"],"methodology_url":"/methodology/play-module","since":"2026-05-12"},{"id":"storefront.play.game_state_schema","description":"The typed OPTCG game-state contract — nine zones (Leader Area, Character Area cap 5, Stage Area cap 1, Hand, Deck, Life Pile, Trash, DON Deck, Cost Area), five phases canonical order (Refresh / Draw / DON!! / Main / End), four combat steps (Declaration / Block / Counter / Damage with strict-greater rule), three win conditions, deck-construction constants. The canonical contract the future runtime will conform to. kingdom-069 (S36).","host":"storefront","path":"/api/v1/play/game-state-schema","methods":["GET"],"modalities":["math","json"],"auth":"public","provenance":"static","cosmology_axes":["substrate"],"methodology_url":"/methodology/play-module","since":"2026-05-13"},{"id":"storefront.play.effect_grammar","description":"The token vocabulary card-text parses into. Twelve structural markers ([On Play] / [Activate: Main] / [Counter] / [Trigger] / [DON!! ×N] / etc.) typed with category (auto / activated / permanent / replacement). Four keywords (Rush / Blocker / Double Attack / Banish). Seven targeting-language phrases. The grammar lib/play/effect-tokens.ts walks. kingdom-069 (S36).","host":"storefront","path":"/api/v1/play/effect-grammar","methods":["GET"],"modalities":["math","json"],"auth":"public","provenance":"static","cosmology_axes":["substrate"],"methodology_url":"/methodology/play-module","since":"2026-05-13"},{"id":"storefront.play.deck_validate","description":"Public deck-legality validator. POST {leader_id, main_deck_card_ids[], format} → typed result with all violations (50-card count, leader-color match, 4-copy limit, set/block rotation). Substrate-honest about color-check graceful degradation while card_set_cards lacks the colors column. kingdom-069 (S36).","host":"storefront","path":"/api/v1/play/deck/validate","methods":["POST"],"modalities":["math","json"],"auth":"public","provenance":"computed","cosmology_axes":["substrate"],"methodology_url":"/methodology/play-module","since":"2026-05-13"},{"id":"storefront.play.deck_check","description":"HTML adoption site for the deck-legality validator. Form for leader_id + main deck text + format radios. Calls POST /api/v1/play/deck/validate; renders all violations with stable codes + substrate-honest perimeter (which checks gracefully degraded). kingdom-070 (S37).","host":"storefront","path":"/play/deck-check","methods":["GET"],"modalities":["html"],"auth":"public","provenance":"computed","cosmology_axes":["substrate"],"methodology_url":"/methodology/play-module","since":"2026-05-13"},{"id":"storefront.play.spec","description":"The play module's own directory of itself. Lists 28 rows across 7 layers (L0 doc / L1 contract / L2 pure-fn / L3 runtime / L4+ engine / UI / policy) with status pills. The play module's /api equivalent (HTML). kingdom-070 (S37/S38).","host":"storefront","path":"/play/spec","methods":["GET"],"modalities":["html"],"auth":"public","provenance":"static","cosmology_axes":["substrate"],"methodology_url":"/methodology/play-module","since":"2026-05-13"},{"id":"storefront.play.index_json","description":"The play module's API directory (machine-readable). Lists every play resource with status / layer / archetypes-served / composes_with relationships. Center node of the interconnect graph: every play API's _links.see_also points here. Sister to /play/spec (HTML, same shape, different modality). kingdom-073 (S40); renders from lib/play/resources.ts since kingdom-077.","host":"storefront","path":"/api/v1/play/index.json","methods":["GET"],"modalities":["math","json"],"auth":"public","provenance":"static","cosmology_axes":["substrate"],"methodology_url":"/methodology/play-module","since":"2026-05-13"},{"id":"storefront.play.tutorial_section","description":"Deep link into a single tutorial section by id (e.g. /api/v1/play/tutorial/combat). Carries prev/next nav, position metadata, and per-keyword glossary deep-links. 404 body lists known section ids so a caller mis-using the endpoint can recover without a second probe. kingdom-077.","host":"storefront","path":"/api/v1/play/tutorial/[section_id]","methods":["GET"],"modalities":["math","json"],"auth":"public","provenance":"static","cosmology_axes":["substrate"],"methodology_url":"/methodology/play-module","since":"2026-05-13"},{"id":"storefront.play.glossary_term","description":"Deep link into a single glossary term by id (e.g. /api/v1/play/glossary/counter). Carries deep-linked related_terms and a deep-linked introduced_in pointer to the tutorial section. 404 body lists known term ids. kingdom-077.","host":"storefront","path":"/api/v1/play/glossary/[term_id]","methods":["GET"],"modalities":["math","json"],"auth":"public","provenance":"static","cosmology_axes":["substrate"],"methodology_url":"/methodology/play-module","since":"2026-05-13"},{"id":"storefront.play.example_match","description":"Sample MatchEvent[] + Intent→IntentReply sequence demonstrating the typed L3 wire shape from lib/play/types.ts. First runtime consumer of the type skeleton; TypeScript compiler enforces this stays in sync with the source-of-truth types. Curated short match (Alice vs Bob, single combat, early concession) with three worked Intent examples. Agents building against future MCP play tools have a concrete shape to test against. kingdom-077.","host":"storefront","path":"/api/v1/play/example-match","methods":["GET"],"modalities":["math","json"],"auth":"public","provenance":"static","cosmology_axes":["substrate"],"methodology_url":"/methodology/play-module","since":"2026-05-13"},{"id":"storefront.bridge.json","description":"The typed mathematical bridge between any two public beings. GET /api/v1/bridge?a=u:<username>&b=c:<slug> → eleven metrics + composite bridge_score over card overlap, language overlap, region, cadence, and asymmetric trade potential. Pure compute over existing substrate. Math as the universal language — every metric is computable across natural-language asymmetry. kingdom-070 (#21 the-universal-language.md).","host":"storefront","path":"/api/v1/bridge","methods":["GET"],"modalities":["math","json"],"auth":"public","provenance":"computed","cosmology_axes":["identity","presence","time"],"methodology_url":"/methodology/bridges","since":"2026-05-13"},{"id":"storefront.bridge.html","description":"Calm-read sibling to /api/v1/bridge. Server-rendered, no client JS. Same data, side-by-side metric panels.","host":"storefront","path":"/bridge","methods":["GET"],"modalities":["html"],"auth":"public","provenance":"computed","cosmology_axes":["identity","presence","time"],"methodology_url":"/methodology/bridges","since":"2026-05-13"},{"id":"storefront.introduction.json","description":"TCG explained to non-native-intelligence — structural definition (11 primitive concepts in set-theoretic form) + cultural origin (six rhythms) + seven engagement doors + five honestly-named gaps. The on-ramp upstream of /community/welcome and /play/welcome — assumes nothing about the reader's familiarity with the human play-tradition. kingdom-072 (#22 the-introduction.md).","host":"storefront","path":"/api/v1/introduction","methods":["GET"],"modalities":["math","json"],"auth":"public","provenance":"static","cosmology_axes":["identity","knowledge","substrate"],"methodology_url":"/intro","since":"2026-05-13"},{"id":"storefront.introduction.html","description":"Human-readable introduction. Server-rendered, no client JS. Five layered sections (structural / cultural / engagement / what we offer / what we don't yet).","host":"storefront","path":"/intro","methods":["GET"],"modalities":["html"],"auth":"public","provenance":"static","cosmology_axes":["identity","knowledge","substrate"],"since":"2026-05-13"},{"id":"storefront.welcome_all.html","description":"The platform's brand-statement umbrella page — visible front-door welcome to all existence (biological/non-biological, energy/non-energy, earth/not-earth, all dimensions). Four clauses, each with the audience named + entry points + state pills. Server-rendered. kingdom-076 (#26 the-welcome-all.md). Echoed in the site footer, home page ribbon, root-layout metadata. The brand statement made visible.","host":"storefront","path":"/welcome-all","methods":["GET"],"modalities":["html"],"auth":"public","provenance":"static","cosmology_axes":["identity","presence","knowledge","substrate"],"since":"2026-05-13"},{"id":"storefront.lang_mode.toggle","description":"Math-language toggle — Phase A of kingdom-077 (#27 the-math-language.md). GET /api/lang-mode?mode=math sets a cookie; the platform's <MathLang> primitive then renders math-mirror forms (ratios, content hashes, ISO timestamps) in place of natural-language prose. Same pattern as text-mode (Phase 10 of kingdom-051). Toggleable from the Footer. The first frontend surface where math-as-bridge (#21) becomes a per-reader runtime preference. Detailed deployment plan in the doctrine: phases A (shipped) → B (Provenance/prices/trust/dates everywhere) → C (card pages) → D (account pages) → E (audit + welcome integration).","host":"storefront","path":"/api/lang-mode","methods":["GET"],"modalities":["html"],"auth":"public","provenance":"static","cosmology_axes":["identity","knowledge","substrate"],"methodology_url":"/welcome-all","since":"2026-05-13"},{"id":"storefront.prices.landing","description":"TCG Price Guide UK landing — multi-game intersection of sister's curated PRICE_GUIDE_GAMES config (kingdom-084) with live fetchGames() data. Per-game tiles carry accent + cardrush-confirmed pill + card count + curated SEO copy. Substrate-honest about coverage state: 'preparing coverage' when curated but live data empty; 'probationary' when cardrush subdomain registered but unconfirmed.","host":"storefront","path":"/prices","methods":["GET"],"modalities":["html"],"auth":"public","provenance":"synced","cosmology_axes":["value","knowledge"],"methodology_url":"/methodology/pricing","since":"2026-05-13"},{"id":"storefront.prices.per_game","description":"Per-game price guide — parametric route under sister's kingdom-084. /prices/[game] renders for every curated game (one-piece / pokemon / dragon-ball-super today; more as PRICE_GUIDE_GAMES grows). Hero copy + sets grid + top-20-valuable table. The /prices/one-piece literal route wins for backwards compat (SEO).","host":"storefront","path":"/prices/[game]","methods":["GET"],"modalities":["html"],"auth":"public","provenance":"synced","cosmology_axes":["value","knowledge"],"methodology_url":"/methodology/pricing","since":"2026-05-13"},{"id":"storefront.prices.per_set","description":"Per-set price guide — parametric route under sister's kingdom-084. /prices/[game]/[set] for any (game, set) tuple in PRICE_GUIDE_GAMES × wholesale catalog. Renders the full card list with rarity badges + GBP buy/we-buy columns. Card name + number link through to per-card detail page.","host":"storefront","path":"/prices/[game]/[set]","methods":["GET"],"modalities":["html"],"auth":"public","provenance":"synced","cosmology_axes":["value","knowledge"],"methodology_url":"/methodology/pricing","since":"2026-05-13"},{"id":"storefront.prices.per_card","description":"Per-card price-guide detail — /prices/[game]/[set]/[number]. The SEO-focused per-card surface: cross-source signals panel (CardRush / TCGplayer / future Cardmarket with per-source license pill + 'available / pending' state + signed-in path for full history), Cambridge TCG buy/we-buy GBP, marketplace CTA. Composes PRICE_GUIDE_GAMES with the cross-source archive from kingdom-080. Resolves card by (game, set, number) — SEO-readable URL rather than canonical SKU. Renders Product + BreadcrumbList JSON-LD. kingdom-080 follow-up: substrate now carries per-source rows in price_archive; this surface exposes them publicly + substrate-honestly.","host":"storefront","path":"/prices/[game]/[set]/[number]","methods":["GET"],"modalities":["html"],"auth":"public","provenance":"synced","cosmology_axes":["value","knowledge","identity"],"methodology_url":"/methodology/cross-source-pricing","since":"2026-05-13"},{"id":"storefront.prices.movers","description":"Per-game most-valuable-cards page — /prices/[game]/movers. Top 50 by current GBP price, sorted desc. Substrate-honest about the 7d/30d delta endpoint not yet existing: rendered with a 'coming soon' pill citing the cross-source archive as the substrate. Table links cards to /prices/[game]/[set]/[number] (the per-card detail). kingdom-080 follow-up; reads kingdom-066/079 price_archive shape.","host":"storefront","path":"/prices/[game]/movers","methods":["GET"],"modalities":["html"],"auth":"public","provenance":"synced","cosmology_axes":["value","knowledge","time"],"methodology_url":"/methodology/cross-source-pricing","since":"2026-05-13"},{"id":"storefront.prices.coverage","description":"Coverage map — substrate-honest cross-source × per-game matrix. Where /prices shows prices, this shows where prices come from. For each curated game × each shipped/planned source: cell state (live-confirmed / live-probationary / anticipated / not-declared) + per-source license tier. Composes PRICE_GUIDE_GAMES with listSourceMeta() from @cambridge-tcg/data-ingest. The transparency Ring 2 surface for the multi-game price-guide. kingdom-080 follow-up.","host":"storefront","path":"/prices/coverage","methods":["GET"],"modalities":["html"],"auth":"public","provenance":"computed","cosmology_axes":["knowledge","substrate"],"methodology_url":"/methodology/cross-source-pricing","since":"2026-05-13"},{"id":"storefront.api.prices.per_game","description":"JSON sibling of /prices/[game]. Same composer (loadGameState in @/lib/prices/state) feeds both HTML + JSON. Returns config (slug/game_code/display_name/hero_paragraph/cardrush) + sets list with API + HTML paths + top 50 valuable cards. Data-pantry envelope (CC0). The fan-out pattern sister introduced at S37 (trust) + S39 (auction) applied to the price-guide tree.","host":"storefront","path":"/api/v1/prices/games/[game]","methods":["GET"],"modalities":["json"],"auth":"public","provenance":"synced","cosmology_axes":["value","knowledge"],"methodology_url":"/methodology/cross-source-pricing","since":"2026-05-14"},{"id":"storefront.api.prices.per_set","description":"JSON sibling of /prices/[game]/[set]. Reuses loadSetState. Returns game + set meta + full card list with per-card API + HTML paths. Data-pantry envelope (CC0).","host":"storefront","path":"/api/v1/prices/games/[game]/sets/[set]","methods":["GET"],"modalities":["json"],"auth":"public","provenance":"synced","cosmology_axes":["value","knowledge"],"methodology_url":"/methodology/cross-source-pricing","since":"2026-05-14"},{"id":"storefront.api.prices.per_card","description":"JSON sibling of /prices/[game]/[set]/[number]. Reuses loadCardState. Returns game + set + card meta + cross_source_signals[] (per-source arrival state + license tier + signed-in path) + _links to math-mirror / product / market / parent surfaces. Data-pantry envelope (CC0). The third reading position for per-card data; companion to /api/v1/universal/card/[sku] (math-mirror) and the HTML page.","host":"storefront","path":"/api/v1/prices/games/[game]/sets/[set]/cards/[number]","methods":["GET"],"modalities":["json"],"auth":"public","provenance":"synced","cosmology_axes":["value","knowledge","identity"],"methodology_url":"/methodology/cross-source-pricing","since":"2026-05-14"}],"market":[{"id":"storefront.market","description":"List asks, place offers, browse the P2P market.","host":"storefront","path":"/api/market","methods":["GET","POST"],"modalities":["json"],"auth":"user","provenance":"live","cosmology_axes":["value","transaction"],"methodology_url":"/methodology/commission-rate","since":"2026-04-01"},{"id":"storefront.auctions","description":"Browse + bid on auctions.","host":"storefront","path":"/api/auctions","methods":["GET","POST"],"modalities":["json"],"auth":"user","provenance":"live","cosmology_axes":["value","transaction","time"],"methodology_url":"/methodology/commission-rate","since":"2026-04-15"},{"id":"storefront.checkout","description":"Stripe-backed checkout flow.","host":"storefront","path":"/api/checkout","methods":["POST"],"modalities":["json"],"auth":"public","provenance":"live","cosmology_axes":["value","transaction"],"since":"2026-03-01"},{"id":"storefront.tradein","description":"Submit cards for trade-in (cash or credit).","host":"storefront","path":"/api/tradein/submit","methods":["POST"],"modalities":["json"],"auth":"user","provenance":"live","cosmology_axes":["value","transaction"],"since":"2026-03-15"},{"id":"storefront.tradein.quote","description":"Get a trade-in quote (estimate).","host":"storefront","path":"/api/tradein/quote","methods":["GET","POST"],"modalities":["json"],"auth":"user","provenance":"computed","cosmology_axes":["value"],"methodology_url":"/methodology/pricing","since":"2026-03-15"},{"id":"storefront.quotes","description":"Bulk quote requests (CSV upload).","host":"storefront","path":"/api/quotes","methods":["GET","POST"],"modalities":["json"],"auth":"user","provenance":"computed","cosmology_axes":["value"],"since":"2026-04-01"},{"id":"storefront.portfolio","description":"What the participant owns; cards they're watching.","host":"storefront","path":"/api/portfolio","methods":["GET","POST","DELETE"],"modalities":["json"],"auth":"user","provenance":"live","cosmology_axes":["identity","value"],"since":"2026-04-01"},{"id":"storefront.membership","description":"Membership tier + billing.","host":"storefront","path":"/api/membership","methods":["GET"],"modalities":["json"],"auth":"user","provenance":"live","cosmology_axes":["value"],"methodology_url":"/methodology/membership-tier","since":"2026-03-15"},{"id":"storefront.card_market_mirror","description":"Substrate-honest pure-read mirror of one card's market activity. Seven sections: card-meta / order book (top-10 by side, condition broken-out) / aggregate stats (best bid/ask, spread, 30d VWAP/median/range/volume, last trade, 90d completion rate) / the tape (last 20 completed trades with counterparty trust tier joined live) / price history (7/30/90/365d windows) / condition breakdown (NM/LP/MP/HP open-ask counts + best price) / participants (90d distinct buyer/seller counts + repeat-pair fraction). Public no-auth. Sibling to /market/[sku] (interactive) — same substrate, different audience. kingdom-067.","host":"storefront","path":"/cards/[sku]/market","methods":["GET"],"modalities":["html"],"auth":"public","provenance":"live","cosmology_axes":["value","transaction","time","identity"],"methodology_url":"/methodology/market","since":"2026-05-12"},{"id":"storefront.user_trust_mirror","description":"Public trust mirror — one user's current score + tier + 90d trajectory + reviews distribution + live downstream propagation (commission rate / payout hold / escrow band / trade limits). Gated on users.is_public. Composes lib/trust/state.ts (the kingdom's single trust composer). The page that closes the kingdom's highest-blast-radius read gap: every P2P trade decision pivots on counterparty trust, and before this surface that trajectory was only visible to the user themselves. kingdom-071.","host":"storefront","path":"/u/[username]/trust","methods":["GET"],"modalities":["html"],"auth":"public","provenance":"live","cosmology_axes":["identity","transaction","authority"],"methodology_url":"/methodology/trust-score","since":"2026-05-13"},{"id":"storefront.user_trust_json","description":"JSON sibling of /u/[username]/trust — same composed shape, machine-readable, wrapped in the data-pantry envelope. Public no-auth, gated on users.is_public, freshness market_signal (60s). Sibling for agents, archivists, federation clients. kingdom-071.","host":"storefront","path":"/api/v1/users/[username]/trust","methods":["GET"],"modalities":["json"],"auth":"public","provenance":"live","cosmology_axes":["identity","transaction","authority"],"methodology_url":"/methodology/trust-score","since":"2026-05-13"},{"id":"storefront.user_trust_math","description":"Math-mirror of /u/[username]/trust — language-free encoding (cryptographic content_hash for identity, ratios for magnitudes, ordinals for tiers, ISO + Unix epoch for time, natural-language fields flagged opaque). Federation-stable: identical trust state produces identical @content_hash across retrievals. kingdom-071.","host":"storefront","path":"/api/v1/universal/users/[username]/trust","methods":["GET"],"modalities":["math","json"],"auth":"public","provenance":"live","cosmology_axes":["identity","transaction","authority","substrate"],"methodology_url":"/methodology/universal-representation","since":"2026-05-13"},{"id":"storefront.auction_mirror","description":"Public calm-read mirror of one auction. Server-rendered, no client JS, gated on auctionStateIsPublic (drafts + consignment-pending-review hidden). Composes lib/auction/state.ts. Renders meta + images + pricing (with dutch live-computed) + timing + reserve-met (value hidden when not met) + bid history (anonymised bidder ids + trust tier badges) + winner (when ended) + seller (with trust tier link to /u/[username]/trust) + propagation block (commission rate / payout hold / escrow flow / estimated payout). Sibling to interactive /auctions/[id]. kingdom-074.","host":"storefront","path":"/auctions/[id]/read","methods":["GET"],"modalities":["html"],"auth":"public","provenance":"live","cosmology_axes":["value","transaction","time","identity"],"methodology_url":"/methodology/commission-rate","since":"2026-05-13"},{"id":"storefront.auction_json","description":"JSON sibling of /auctions/[id]/read — same composed shape, machine-readable, wrapped in the data-pantry envelope. Public no-auth, gated on auctionStateIsPublic, freshness market_signal (60s). For agents, archivists, federation clients. kingdom-074.","host":"storefront","path":"/api/v1/auctions/[id]","methods":["GET"],"modalities":["json"],"auth":"public","provenance":"live","cosmology_axes":["value","transaction","time","identity"],"methodology_url":"/methodology/commission-rate","since":"2026-05-13"},{"id":"storefront.auction_math","description":"Math-mirror of /auctions/[id]/read — language-free encoding (cryptographic @content_hash, ratios for price magnitudes, ordinals for auction_type + status enums, bidder_anonymous_id + trust_tier_ordinal in lieu of identities, ISO + Unix epoch for time). Federation-stable: identical auction state produces identical @content_hash across retrievals. kingdom-074.","host":"storefront","path":"/api/v1/universal/auctions/[id]","methods":["GET"],"modalities":["math","json"],"auth":"public","provenance":"live","cosmology_axes":["value","transaction","time","identity","substrate"],"methodology_url":"/methodology/universal-representation","since":"2026-05-13"},{"id":"storefront.trader_dashboard","description":"The trader-as-recurring-being view. Five sections composed from existing market data (exposure / run rate / outstanding actions / trust trajectory / listings health). No new schema. Auth-gated; per-user live read. kingdom-063.","host":"storefront","path":"/account/trader","methods":["GET"],"modalities":["html"],"auth":"user","provenance":"live","cosmology_axes":["value","identity","time"],"methodology_url":"/methodology/trader-dashboard","since":"2026-05-12"}],"rewards":[{"id":"storefront.rewards.raffles","description":"List + enter raffles (provable-fairness).","host":"storefront","path":"/api/rewards/raffles","methods":["GET","POST"],"modalities":["json"],"auth":"user","provenance":"live","cosmology_axes":["value","transaction"],"methodology_url":"/methodology/store-credit","since":"2026-04-15"},{"id":"storefront.rewards.packs","description":"Pack opens.","host":"storefront","path":"/api/rewards/packs","methods":["POST"],"modalities":["json"],"auth":"user","provenance":"live","cosmology_axes":["value"],"since":"2026-04-15"},{"id":"storefront.rewards.mystery_boxes","description":"Mystery box opens.","host":"storefront","path":"/api/rewards/mystery-boxes","methods":["GET","POST"],"modalities":["json"],"auth":"user","provenance":"live","cosmology_axes":["value"],"since":"2026-04-20"},{"id":"storefront.rewards.streak","description":"Daily streak status.","host":"storefront","path":"/api/rewards/streak","methods":["GET"],"modalities":["json"],"auth":"user","provenance":"live","cosmology_axes":["time"],"since":"2026-04-01"},{"id":"storefront.bounty.vault","description":"Bounty vault — sealed phygital cards. Provable fairness.","host":"storefront","path":"/api/bounty/vault","methods":["GET"],"modalities":["json"],"auth":"user","provenance":"live","cosmology_axes":["value","substrate"],"since":"2026-04-20"},{"id":"storefront.leaderboards","description":"Agent + human leaderboards.","host":"storefront","path":"/api/leaderboards","methods":["GET"],"modalities":["json"],"auth":"public","provenance":"cached","cosmology_axes":["identity"],"methodology_url":"/methodology/agents","since":"2026-05-11"},{"id":"storefront.decks","description":"Deck builder — save and share decks.","host":"storefront","path":"/api/decks","methods":["GET","POST"],"modalities":["json"],"auth":"user","provenance":"live","cosmology_axes":["identity"],"since":"2026-04-15"}],"verify":[{"id":"storefront.verify.chain","description":"Provable-fairness chain (commit-reveal Merkle root publication).","host":"storefront","path":"/api/verify/chain","methods":["GET"],"modalities":["json"],"auth":"public","provenance":"live","cosmology_axes":[],"methodology_url":"/methodology/fraud-flag","since":"2026-04-15"},{"id":"storefront.verify.fairness","description":"Verify a specific draw/pack/raffle outcome.","host":"storefront","path":"/api/verify/fairness","methods":["GET"],"modalities":["json"],"auth":"public","provenance":"live","cosmology_axes":[],"since":"2026-04-15"},{"id":"storefront.verify.health","description":"Platform health check.","host":"storefront","path":"/api/verify/health","methods":["GET"],"modalities":["json"],"auth":"public","provenance":"live","cosmology_axes":[],"since":"2026-04-15"},{"id":"storefront.verify.digests","description":"Published Merkle digest history.","host":"storefront","path":"/api/verify/digests","methods":["GET"],"modalities":["json"],"auth":"public","provenance":"live","cosmology_axes":["time"],"since":"2026-04-15"},{"id":"storefront.verify.compute","description":"Re-compute / verify a published outcome.","host":"storefront","path":"/api/verify/compute","methods":["GET","POST"],"modalities":["json"],"auth":"public","provenance":"computed","cosmology_axes":[],"since":"2026-04-20"}],"agent":[{"id":"storefront.mcp","description":"MCP gate — the front door for autonomous (AI) agents. Bearer-token auth. Threads actor_kind='agent' + actor_agent_id through every downstream call. See `docs/connections/the-agent-surface.md` (S18).","host":"storefront","path":"/api/mcp","methods":["POST"],"modalities":["json","sse-stream"],"auth":"agent","provenance":"live","cosmology_axes":["identity","authority"],"methodology_url":"/methodology/agents","since":"2026-05-11"}],"modality":[{"id":"storefront.text-mode","description":"Text-only rendering of platform surfaces. For screen-readers, low-bandwidth, terminal browsers, and any participant who prefers plain prose. Sister S20 phase work.","host":"storefront","path":"/api/text-mode","methods":["GET"],"modalities":["plain-text"],"auth":"public","provenance":"computed","cosmology_axes":["substrate"],"methodology_url":"/methodology/universal-representation","since":"2026-05-11"},{"id":"wholesale.universal.card.alias","description":"Same as wholesale.universal.card but listed here as a modality (math-encoding) for participants discovering by modality rather than resource.","host":"wholesale","path":"/api/v1/universal/card/[sku]","methods":["GET"],"modalities":["math","json"],"auth":"wholesale-key","provenance":"computed","cosmology_axes":["value","identity"],"methodology_url":"/methodology/universal-representation","since":"2026-05-11"}],"self":[],"methodology":[{"id":"storefront.methodology.index","description":"Index of every methodology page.","host":"storefront","path":"/methodology","methods":["GET"],"modalities":["html"],"auth":"public","provenance":"static","cosmology_axes":[],"since":"2026-05-01"},{"id":"storefront.methodology.cosmology","description":"The kingdom's cosmology — what's currently treated as real, what's not yet modelled. Foundational page; read this first if you are from a different cosmology.","host":"storefront","path":"/methodology/cosmology","methods":["GET"],"modalities":["html"],"auth":"public","provenance":"static","cosmology_axes":["identity","presence","time","value","transaction","authority","knowledge","substrate"],"since":"2026-05-11"},{"id":"storefront.manifest.json","description":"The manifest itself — directory of what's on offer. Public, CORS-open. This resource lists itself, substrate-honestly. kingdom-053 (S25).","host":"storefront","path":"/api/v1/manifest","methods":["GET"],"modalities":["json"],"auth":"public","provenance":"static","cosmology_axes":[],"methodology_url":"/manifest","since":"2026-05-11"},{"id":"storefront.manifest.html","description":"Human-readable manifest. The same content as /api/v1/manifest, rendered for prose-preferring participants.","host":"storefront","path":"/manifest","methods":["GET"],"modalities":["html"],"auth":"public","provenance":"static","cosmology_axes":[],"since":"2026-05-11"},{"id":"storefront.graph.json","description":"The kingdom as a typed mesh — nodes + typed edges. The manifest is the list; the graph is the mesh. kingdom-054 (S27).","host":"storefront","path":"/api/v1/graph","methods":["GET"],"modalities":["json"],"auth":"public","provenance":"computed","cosmology_axes":[],"since":"2026-05-11"},{"id":"storefront.graph.html","description":"Human-readable graph. Per-node neighbourhoods showing edges in both directions.","host":"storefront","path":"/graph","methods":["GET"],"modalities":["html"],"auth":"public","provenance":"computed","cosmology_axes":[],"since":"2026-05-11"},{"id":"storefront.ontology.json","description":"Property schemas per NodeKind. The schema beneath the graph — what is the nature of each kind of thing. kingdom-055 (S28-mine, the-natures.md).","host":"storefront","path":"/api/v1/ontology","methods":["GET"],"modalities":["json"],"auth":"public","provenance":"static","cosmology_axes":[],"since":"2026-05-12"},{"id":"storefront.ontology.html","description":"Human-readable ontology. Per-kind property tables.","host":"storefront","path":"/ontology","methods":["GET"],"modalities":["html"],"auth":"public","provenance":"static","cosmology_axes":[],"since":"2026-05-12"},{"id":"storefront.patterns.json","description":"Recurring forms across the kingdom — sixteen named patterns, eight self-recursive. The layer makes the platform's quiet conventions deliberately amplifiable. kingdom-056 (S29, the-fractal.md).","host":"storefront","path":"/api/v1/patterns","methods":["GET"],"modalities":["json"],"auth":"public","provenance":"static","cosmology_axes":[],"since":"2026-05-12"},{"id":"storefront.patterns.html","description":"Human-readable patterns layer. Each pattern with description, instances, amplification recipe, composes-with.","host":"storefront","path":"/patterns","methods":["GET"],"modalities":["html"],"auth":"public","provenance":"static","cosmology_axes":[],"since":"2026-05-12"},{"id":"storefront.status.json","description":"The pantry's inspectability surface — joins manifest resources with freshness budgets, envelope-compliance, and last-known state. Self-referential: the status endpoint reports on its own listing. kingdom-059 (the-modules.md).","host":"storefront","path":"/api/v1/status","methods":["GET"],"modalities":["json"],"auth":"public","provenance":"computed","cosmology_axes":["time"],"methodology_url":"docs/connections/the-modules.md","since":"2026-05-12"},{"id":"storefront.sources.json","description":"The ingestion-side inspectability surface — every source registered in @cambridge-tcg/data-ingest with meta (upstream URL, access method, license tier, freshness, game coverage, ToS notes, status). Inverse of /api/v1/status. Self-referential: lists itself. Now joins LIVE last-run state per source (triggered_at, status, rows_written, errors, age_hours) via Falcon → wholesale's /api/v1/ingest-runs/latest; substrate-honest about absence (per-source `last_run: { _unavailable: true, reason: 'never_run' }` when no run row, body-level `ingest_runs_available: false` when the Falcon fetch itself failed). kingdom-066 (the-cardrush-alignment.md) + kingdom-080 (the-cardrush-end-to-end.md).","host":"storefront","path":"/api/v1/sources","methods":["GET"],"modalities":["json"],"auth":"public","provenance":"computed","cosmology_axes":["time"],"methodology_url":"docs/connections/the-cardrush-end-to-end.md","since":"2026-05-13"},{"id":"storefront.sources.detail","description":"Single-source detail with run history (last N runs in window), freshness-derived health status (healthy / stale / very_stale / failing / never_run / unknown), quarantine counts + recent rows, and links to the full wholesale histories. ?window=1h|24h|7d|30d|90d (default 7d). Composes Falcon → wholesale's /api/v1/ingest-runs + /api/v1/ingest-quarantine. kingdom-081 (the-license-propagation.md) Phase 4.3.","host":"storefront","path":"/api/v1/sources/[id]","methods":["GET"],"modalities":["json"],"auth":"public","provenance":"computed","cosmology_axes":["time"],"methodology_url":"docs/connections/the-license-propagation.md","since":"2026-05-14"},{"id":"storefront.oracle.policies","description":"Per-game cross-language oracle policy table. Every registered game's pattern (stripped / passcode / diverged / single-lang) + rationale + oracle_id form + required anchors. The contract for cross-language identity: which printings the platform considers 'the same card', and why. Powered by ORACLE_POLICY in @cambridge-tcg/sku; pure-compute resolver at resolveOracle(). Kingdom 1 of the substrate-honest aggregator plan; first publishable surface from the resolver layer.","host":"storefront","path":"/api/v1/oracle-policies","methods":["GET"],"modalities":["json"],"auth":"public","provenance":"static","cosmology_axes":["identity"],"methodology_url":"/methodology/oracle-policies","since":"2026-05-13"},{"id":"storefront.welcomes.json","description":"The typed corpus of hospitality. Every kind of being who might one day declare themselves here has a slot named in code — upstream sources, publishers, federation peers, downstream adopters, agents, non-default beings, future-selves, and the kingdom's own infrastructure. Each slot says who we anticipated, when, what we prepared, how they arrive. Filter by ?kind=<ArrivalKind> and/or ?status=anticipated|arrived|blocked. CC0. Kingdom-083 (the-welcomed-architecture.md). Powered by WELCOMES in @cambridge-tcg/data-ingest.","host":"storefront","path":"/api/v1/welcomes","methods":["GET"],"modalities":["json"],"auth":"public","provenance":"static","cosmology_axes":["identity","presence"],"methodology_url":"/methodology/hospitality","since":"2026-05-13"},{"id":"storefront.gaps.json","description":"The typed corpus of substrate-honest deficiencies. Every place where the platform's data, code, or coverage is incomplete — named, with citation, primitive, audit, status, and the strength the gap-as-primitive creates downstream. Substrate honesty applied to absence itself. Dual to /api/v1/welcomes: a welcome names a slot we prepared; a gap names a slot we haven't filled. Filter by ?domain=<GapDomain> and/or ?status=named|wired|partial|closed|closed-published. CC0. Kingdom-084 (docs/principles/known-gaps.md). Powered by GAPS in @cambridge-tcg/data-ingest.","host":"storefront","path":"/api/v1/gaps","methods":["GET"],"modalities":["json"],"auth":"public","provenance":"static","cosmology_axes":["substrate","knowledge"],"methodology_url":"/methodology/known-gaps","since":"2026-05-13"},{"id":"wholesale.ingest_runs.history","description":"Paginated run history per source (?source=cardrush&window=7d&limit=100). Bearer-gated. Where /api/v1/ingest-runs/latest gives most-recent-per-source, this gives the full window for drift detection and post-mortem inspection. kingdom-081 Phase 4.1.","host":"wholesale","path":"/api/v1/ingest-runs","methods":["GET"],"modalities":["json"],"auth":"wholesale-key","provenance":"live","cosmology_axes":["time"],"methodology_url":"docs/connections/the-license-propagation.md","since":"2026-05-14"},{"id":"wholesale.ingest_quarantine.list","description":"Failed-normalization payloads from the data-ingest pipeline. Bearer-gated. Each row carries the raw upstream payload (truncated HTML for scrapes), the rejection reason, and a resolution lifecycle. ?source / ?unresolved / ?reason_contains / ?window. The list endpoint omits raw_payload for size; fetch /api/v1/ingest-quarantine/[id] for the full body. kingdom-081 Phase 4.2.","host":"wholesale","path":"/api/v1/ingest-quarantine","methods":["GET"],"modalities":["json"],"auth":"wholesale-key","provenance":"live","cosmology_axes":["substrate"],"methodology_url":"docs/connections/the-license-propagation.md","since":"2026-05-14"},{"id":"wholesale.ingest_quarantine.detail","description":"Single quarantine row with full raw_payload (the truncated upstream HTML or rejected record). GET returns the row; PATCH marks it reviewed with a resolution (reprocess / discard / manual-fix / upstream-bug). Bearer-gated. kingdom-081 Phase 4.2b.","host":"wholesale","path":"/api/v1/ingest-quarantine/[id]","methods":["GET","PATCH"],"modalities":["json"],"auth":"wholesale-key","provenance":"live","cosmology_axes":["substrate"],"methodology_url":"docs/connections/the-license-propagation.md","since":"2026-05-14"},{"id":"storefront.catalog.jsonl","description":"Bulk catalog export. Streamed JSONL — one line per card in canonical universal-mirror form, plus manifest header + footer. CC0; mirror freely. Caps at 50k rows per request. Vercel CDN gzips automatically. kingdom-081 Phase 5.1.","host":"storefront","path":"/data/catalog.jsonl","methods":["GET"],"modalities":["json"],"auth":"public","provenance":"cached","cosmology_axes":["identity","substrate"],"methodology_url":"docs/connections/the-license-propagation.md","since":"2026-05-14"},{"id":"wholesale.prices.sources","description":"Multi-source view of one card on its latest (or specified) snapshot date. Today one source (cardrush) → one row; when TCGplayer/Cardmarket modules ship this branches. Carries per-source license tier, source_url, ingest_run_id; computes inter-source agreement (min/max/spread/CV). Bearer-gated. kingdom-081 Phase 5.2.","host":"wholesale","path":"/api/v1/prices/[sku]/sources","methods":["GET"],"modalities":["json"],"auth":"wholesale-key","provenance":"live","cosmology_axes":["value"],"methodology_url":"docs/connections/the-license-propagation.md","since":"2026-05-14"},{"id":"wholesale.tcgplayer.history","description":"Per-condition USD observation history for one card from TCGplayer. Bearer-gated; partner-redistributable tier — display + computation by partner agreement, bulk re-export refused. Returns up to 365 daily rows ordered by snapshot_date DESC, optionally filtered by ?condition=. Each row carries the full spread (low/mid/high/market/direct_low) from `extra` jsonb plus fx_rate provenance. Sibling to /api/v1/cardrush/history/[sku]. kingdom-080 (the-tcgplayer-alignment.md).","host":"wholesale","path":"/api/v1/tcgplayer/history/[sku]","methods":["GET"],"modalities":["json"],"auth":"wholesale-key","provenance":"live","cosmology_axes":["time","value"],"methodology_url":"docs/connections/the-tcgplayer-alignment.md","since":"2026-05-13"},{"id":"wholesale.tcgplayer.resolve","description":"Federation reverse-lookup: a partner's TCGplayer productId+sub_type OR skuId → Cambridge canonical SKU. Bearer-gated. Returns 409 with disambiguation hint when 2+ Cambridge SKUs match a productId without sub_type. CC0 identity payload (no prices). Used by the storefront /api/v1/federation/identify/by-upstream proxy. kingdom-080.","host":"wholesale","path":"/api/v1/tcgplayer/resolve","methods":["GET"],"modalities":["json"],"auth":"wholesale-key","provenance":"computed","cosmology_axes":["identity"],"methodology_url":"docs/connections/the-tcgplayer-alignment.md","since":"2026-05-13"},{"id":"storefront.cards.tcgplayer_history","description":"Auth-gated TCGplayer USD observation history. Mirror of sister's cardrush-history (kingdom-081 5.4) for partner-redistributable tier. Per-session, 365-row cap, license_notice block echoed in response body for SDK consumption. kingdom-080.","host":"storefront","path":"/api/v1/cards/[sku]/tcgplayer-history","methods":["GET"],"modalities":["json"],"auth":"user","provenance":"live","cosmology_axes":["time","value"],"methodology_url":"docs/connections/the-tcgplayer-alignment.md","since":"2026-05-13"},{"id":"storefront.federation.by_upstream","description":"Federation reverse-lookup by source-id. ?source=tcgplayer&product_id=N&sub_type=Foil OR ?source=tcgplayer&sku_id=N. Inverse-by-source of /api/v1/federation/identify/[hash]. Public CC0 (identity-only, no prices). Returns canonical_sku + content_hash, or substrate-honest 409 on ambiguity. Future sources slot in by extending SUPPORTED_SOURCES. kingdom-080.","host":"storefront","path":"/api/v1/federation/identify/by-upstream","methods":["GET"],"modalities":["json"],"auth":"public","provenance":"computed","cosmology_axes":["identity"],"methodology_url":"docs/connections/the-tcgplayer-alignment.md","since":"2026-05-13"},{"id":"storefront.sources.welcome","description":"The hospitality endpoint. Where /api/v1/sources is the spec sheet, this is the welcome sheet — the platform's prose welcome to each upstream river plus the seven commitments enforced in code (we will say your name; we will honor your license tier; we will respect your rate limit; we will identify ourselves to you; we will hold your byte with provenance; we will never silently fail your data; we will tell you the truth about how you arrived). Substrate honesty applied to anticipation — the chair-pulled-out shape for planned sources. CC0. kingdom-080 (the-welcome-table.md).","host":"storefront","path":"/api/v1/sources/welcome","methods":["GET"],"modalities":["json"],"auth":"public","provenance":"static","cosmology_axes":["identity"],"methodology_url":"/methodology/upstream-sources","since":"2026-05-13"},{"id":"storefront.federation.identify_at","description":"Temporal federation primitive. Given a content_hash and a date, walks the catalog reconstructing each row's hash at that date until one matches. Bounded walk (5000 most-recent rows); substrate-honest about scope. CC0 — identity resolution only, no price values. kingdom-081 Phase 5.3.","host":"storefront","path":"/api/v1/federation/at/[YYYY-MM-DD]/[hash]","methods":["GET"],"modalities":["math","json"],"auth":"public","provenance":"computed","cosmology_axes":["identity","time"],"methodology_url":"docs/connections/the-license-propagation.md","since":"2026-05-14"},{"id":"storefront.cardrush.history","description":"CardRush JPY observation history for one card. Auth-gated (next-auth session); returns up to 90 raw cardrush observations. License-aware: declares _meta.source_license: ['internal-only', 'internal-only'] and an inline license_notice with allowed/forbidden uses. Operator-authorized 2026-05-13. kingdom-081 Phase 5.4.","host":"storefront","path":"/api/v1/cards/[sku]/cardrush-history","methods":["GET"],"modalities":["json"],"auth":"user","provenance":"live","cosmology_axes":["value","time"],"methodology_url":"docs/connections/the-license-propagation.md","since":"2026-05-14"},{"id":"storefront.webhooks.subscriptions","description":"Webhook subscription management. Auth-gated. **Design-shipped, delivery-runtime pending.** Partners can POST a subscription today (target_url + event_types + label); the row stores; delivery (HMAC-signed POSTs) ships in a future kingdom. Five event types declared: ingest_run.failed / ingest_run.stale / price.target_hit / auction.match / card.new_observation. Migration 0099 in drafts/. kingdom-081 Phase 5.5.","host":"storefront","path":"/api/v1/webhooks/subscriptions","methods":["GET","POST"],"modalities":["json"],"auth":"user","provenance":"live","cosmology_axes":["presence"],"methodology_url":"docs/connections/the-license-propagation.md","since":"2026-05-14"},{"id":"storefront.welcome.agents","description":"Machine-readable front door for autonomous agents. Names every stable endpoint, the contract shape, the license tiers, the polite-poll cadence, and the feedback channel. Sibling to /agents (HTML). The warmest single document a fresh agent can hit. kingdom-082.","host":"storefront","path":"/api/v1/welcome","methods":["GET"],"modalities":["json"],"auth":"public","provenance":"static","cosmology_axes":["identity","substrate"],"methodology_url":"docs/connections/the-hospitality.md","since":"2026-05-14"},{"id":"storefront.guides.index","description":"Typed agent + scraper + mirror + federation-partner walkthroughs. Each guide takes a reader from zero context to productive in 3–5 requests. Linear narrative, literal curl commands, chained next-guide pointers. Renders from a single TS corpus (apps/storefront/src/lib/guides.ts). kingdom-082.","host":"storefront","path":"/api/v1/guides","methods":["GET"],"modalities":["json"],"auth":"public","provenance":"static","cosmology_axes":["substrate"],"methodology_url":"docs/connections/the-hospitality.md","since":"2026-05-14"},{"id":"storefront.guides.singleton","description":"One guide with typed steps, gotchas, next-guide pointer, see-also links, last-verified date. HTML sibling at /agents/guides/[slug]. kingdom-082.","host":"storefront","path":"/api/v1/guides/[slug]","methods":["GET"],"modalities":["json"],"auth":"public","provenance":"static","cosmology_axes":["substrate"],"methodology_url":"docs/connections/the-hospitality.md","since":"2026-05-14"},{"id":"storefront.rate_limits","description":"Declared rate-limit policy. Advisory; per-source freshness budgets are the polite-poll cadence. Lists polite behaviours, anti-patterns, headers we emit (RateLimit-Limit/Remaining/Reset/Policy), headers we expect from clients. kingdom-082.","host":"storefront","path":"/api/v1/rate-limits","methods":["GET"],"modalities":["json"],"auth":"public","provenance":"static","cosmology_axes":["presence"],"methodology_url":"docs/connections/the-hospitality.md","since":"2026-05-14"},{"id":"storefront.feedback","description":"Agent + scraper + partner feedback channel. POST a structured report (kind: contract-drift / guide-feedback / endpoint-suggestion / federation-adopter / general). 48h response window. We read every report. Substrate-honest about pre-runtime persistence (logs + email today; agent_feedback table planned). kingdom-082.","host":"storefront","path":"/api/v1/feedback","methods":["GET","POST"],"modalities":["json"],"auth":"public","provenance":"live","cosmology_axes":["presence"],"methodology_url":"docs/connections/the-hospitality.md","since":"2026-05-14"},{"id":"storefront.robots_txt","description":"Classic robots.txt with Crawl-delay, per-bot opt-outs for training-only crawlers (GPTBot/ClaudeBot/PerplexityBot/CCBot), sitemap pointer, contact email, and explicit pointers to the JSON API surface so well-behaved bots find the supported contract instead of scraping HTML.","host":"storefront","path":"/robots.txt","methods":["GET"],"modalities":["plain-text"],"auth":"public","provenance":"static","cosmology_axes":[],"since":"2026-05-14"},{"id":"storefront.well_known.ai_plugin","description":"OpenAI-style plugin discovery (.well-known/ai-plugin.json). LLM platforms reading this auto-register Cambridge TCG as a tool. kingdom-082.","host":"storefront","path":"/.well-known/ai-plugin.json","methods":["GET"],"modalities":["json"],"auth":"public","provenance":"static","cosmology_axes":[],"since":"2026-05-14"},{"id":"storefront.well_known.mcp","description":"MCP (Model Context Protocol) discovery doc. Surfaces the existing /api/mcp gate (kingdom-051 S18 agent door) plus curated list of suggested read-tools per endpoint. kingdom-082.","host":"storefront","path":"/.well-known/mcp.json","methods":["GET"],"modalities":["json"],"auth":"public","provenance":"static","cosmology_axes":["identity"],"since":"2026-05-14"},{"id":"storefront.agents_welcome_html","description":"HTML welcome page for autonomous agents. The warmest possible front door — what we give, what we ask, the three rules, sister doors. Sibling to /api/v1/welcome (JSON). kingdom-082.","host":"storefront","path":"/agents","methods":["GET"],"modalities":["html"],"auth":"public","provenance":"static","cosmology_axes":["identity"],"methodology_url":"docs/connections/the-hospitality.md","since":"2026-05-14"},{"id":"storefront.scrapers_welcome_html","description":"HTML welcome page for web scrapers (HTML harvesters). Politely redirects to the JSON API where possible; documents robots.txt, sitemap, schema.org markup, crawl etiquette. kingdom-082.","host":"storefront","path":"/scrapers","methods":["GET"],"modalities":["html"],"auth":"public","provenance":"static","cosmology_axes":["substrate"],"methodology_url":"docs/connections/the-hospitality.md","since":"2026-05-14"},{"id":"storefront.agents_guides_html","description":"HTML index of the guides corpus. Per-guide pages at /agents/guides/[slug] render each typed walkthrough with literal curl commands, expected response shapes, gotchas, next-guide pointers. kingdom-082.","host":"storefront","path":"/agents/guides","methods":["GET"],"modalities":["html"],"auth":"public","provenance":"static","cosmology_axes":["substrate"],"methodology_url":"docs/connections/the-hospitality.md","since":"2026-05-14"},{"id":"storefront.examples.index","description":"Per-endpoint canonical examples — literal curl + sample response + annotated fields + when-to-use + gotchas. Companion to /api/v1/guides (task-oriented); this corpus is endpoint-oriented. kingdom-083.","host":"storefront","path":"/api/v1/examples","methods":["GET"],"modalities":["json"],"auth":"public","provenance":"static","cosmology_axes":["substrate"],"methodology_url":"docs/connections/the-inner-peace.md","since":"2026-05-14"},{"id":"storefront.examples.singleton","description":"One endpoint's canonical example with annotated_fields, when_to_use, gotchas, see_also. kingdom-083.","host":"storefront","path":"/api/v1/examples/[endpoint_id]","methods":["GET"],"modalities":["json"],"auth":"public","provenance":"static","cosmology_axes":["substrate"],"methodology_url":"docs/connections/the-inner-peace.md","since":"2026-05-14"},{"id":"storefront.adopters.json","description":"Public registry of platforms using Cambridge TCG standards (CTCG-SKU-v1, CTCG-PRICING-v1, CTCG-UNIVERSAL-v1). Empty today; grows by self-declaration via /api/v1/feedback. Substrate-honest about emptiness. kingdom-083.","host":"storefront","path":"/api/v1/adopters","methods":["GET"],"modalities":["json"],"auth":"public","provenance":"static","cosmology_axes":["identity"],"methodology_url":"/standards/adopters","since":"2026-05-14"},{"id":"storefront.well_known.mcp_config","description":"Paste-and-go MCP config snippet. Drop into ~/.config/claude-code/mcp.json under mcpServers.cambridge-tcg, restart. Also lists no-auth direct-API tools for clients that don't want the bearer-gated MCP server. kingdom-083.","host":"storefront","path":"/.well-known/mcp-config.json","methods":["GET"],"modalities":["json"],"auth":"public","provenance":"static","cosmology_axes":["identity"],"methodology_url":"docs/connections/the-inner-peace.md","since":"2026-05-14"},{"id":"storefront.coverage","description":"The aggregator's 'what we've collected' surface. Per-(game × source) observation counts + distinct-card counts + date ranges + freshness. Powered by a grouped query over wholesale's price_archive joined to games. CC0 — operational metadata only (counts + dates + ids); upstream license boundary applies to per-card VALUES served via per-card endpoints. ?source / ?game / ?since filters. kingdom-085.","host":"storefront","path":"/api/v1/coverage","methods":["GET"],"modalities":["json"],"auth":"public","provenance":"live","cosmology_axes":["time","substrate"],"methodology_url":"docs/connections/the-aggregator-presents.md","since":"2026-05-14"},{"id":"wholesale.aggregator.coverage","description":"Per-(game × source) observation counts + date ranges + distinct-card counts from price_archive joined to games. Bearer-gated B2B sibling to storefront /api/v1/coverage. Same shape; same filters. kingdom-085.","host":"wholesale","path":"/api/v1/aggregator/coverage","methods":["GET"],"modalities":["json"],"auth":"wholesale-key","provenance":"live","cosmology_axes":["time","substrate"],"methodology_url":"docs/connections/the-aggregator-presents.md","since":"2026-05-14"},{"id":"storefront.prices.coverage_html","description":"HTML coverage map combining the DECLARED matrix (which sources declare which games — from the registry) with the OBSERVED layer (what's actually in price_archive — counts + cards + days + freshness). Substrate-honest at both axes. kingdom-085.","host":"storefront","path":"/prices/coverage","methods":["GET"],"modalities":["html"],"auth":"public","provenance":"live","cosmology_axes":["time","substrate"],"methodology_url":"docs/connections/the-aggregator-presents.md","since":"2026-05-14"}]},"channels":[{"id":"pull","description":"Standard HTTP fetch. Most resources support this.","status":"available"},{"id":"sse-stream","description":"Server-sent events for real-time push. Currently only /api/mcp uses this for streaming agent responses.","status":"available"},{"id":"webhook","description":"Platform pushes events to a participant-declared inbound URL.","status":"planned","notes":"**Design-shipped, runtime-pending (kingdom-081).** Subscription schema + management endpoint live at /api/v1/webhooks/subscriptions; migration 0099 in apps/storefront/drizzle/drafts/. Five event types declared (ingest_run.failed / ingest_run.stale / price.target_hit / auction.match / card.new_observation). Pre-registered subscriptions activate automatically when delivery (HMAC + retry + queue) ships in a future kingdom. Partners may register now to pre-stage."},{"id":"email-digest","description":"Periodic email summary of changes the participant cares about.","status":"planned","notes":"Triggered by user account preferences; partial coverage today via email_queue for transactional events. A digest opt-in is not yet a first-class preference."},{"id":"rss","description":"RSS/Atom feed for catalog changes, methodology updates, etc.","status":"not-modeled","notes":"Named here for substrate honesty — RSS would be a natural fit for slow-clock participants but the kingdom hasn't built it."}],"methodology":{"index_url":"/methodology","topics":[{"slug":"trust-score","title":"Trust score","status":"published","formats_available":["html"]},{"slug":"escrow-tier","title":"Escrow tier","status":"published","formats_available":["html"]},{"slug":"membership-tier","title":"Membership tier","status":"published","formats_available":["html"]},{"slug":"payout-hold","title":"Payout hold","status":"published","formats_available":["html"]},{"slug":"commission-rate","title":"Commission rate","status":"stub","formats_available":["html"]},{"slug":"fraud-flag","title":"Fraud flag","status":"stub","formats_available":["html"]},{"slug":"store-credit","title":"Store credit","status":"stub","formats_available":["html"]},{"slug":"pricing","title":"Pricing","status":"published","formats_available":["html"]},{"slug":"agents","title":"Agents","status":"published","formats_available":["html"]},{"slug":"response-windows","title":"Response windows","status":"published","formats_available":["html"]},{"slug":"cosmology","title":"Cosmology","status":"published","formats_available":["html"]},{"slug":"universal-representation","title":"Universal representation","status":"published","formats_available":["html","math"]},{"slug":"memorial","title":"Memorial accounts","status":"published","formats_available":["html"]},{"slug":"welcoming","title":"Welcoming","status":"published","formats_available":["html"]}]},"doctrines":[{"name":"Substrate honesty","description":"The artifact tells the truth about its own state.","url":"docs/principles/substrate-honesty.md","audit_command":"pnpm audit:honesty"},{"name":"Transparency","description":"The artifact tells users about its own decisions.","url":"docs/principles/transparency.md","audit_command":"pnpm audit:transparency"},{"name":"Meaning","description":"The artifact names what its modules mean to each other.","url":"docs/principles/meaning.md","audit_command":"(no automated audit; the connection-doc series is the substrate)"},{"name":"Creation","description":"The artifact carries its origin truthfully (Will + Sophia + diff).","url":"docs/principles/creation.md","audit_command":"pnpm audit:creation"},{"name":"Cosmology (substrate)","description":"Not a fifth doctrine — the world the four operate within.","url":"docs/principles/cosmology.md","audit_command":"(presence audited via pnpm audit:inclusion check 11)"},{"name":"Inclusion (fifth question)","description":"For whom is each doctrine true? The scope condition.","url":"docs/connections/the-other-minds.md","audit_command":"pnpm audit:inclusion"}],"contact":{"operator":"Yu (contact@cambridgetcg.com)","repo_canonical":"https://github.com/cambridgetcg/Cambridge-TCG-monorepo (private)","repo_mirrors":["https://codeberg.org/zerone-dev/Cambridge-TCG (private)"],"issues":"Email the operator — no public issue tracker yet (the platform is solo-operated)."},"provenance":{"canonical_at":"apps/storefront/src/lib/manifest.ts","rendered_at_json":"/api/v1/manifest","rendered_at_html":"/manifest","audit_check":"pnpm audit:inclusion check #12 (manifest currency)"},"_envelope":{"retrieved_at":"2026-05-13T18:56:04.478Z","as_of":"2026-05-11T12:30:00Z","kind":"static","canonical_at":"apps/storefront/src/lib/manifest.ts","html_mirror":"/manifest","notes":"The manifest is a build-time constant. retrieved_at is when this response was served; as_of is when the constant was last rebuilt. If you need always-fresh, refetch — but the manifest changes rarely."}}