{"@self_hash":"sha256:cea9110c18ac143e27f77ea98fc427f8fbf5820bf33427b32b4516d3e95cfcca","@encoding":"cambridge-tcg/universal/v1","@kind":"encoding_spec","@content_hash":"sha256:0d7f95e83e1de548a0c3668f54787b9c83873179ea484f9722fe81f71e12d3ba","@retrieved_at":{"iso8601":"2026-05-13T18:56:06.811Z","unix_epoch_seconds":1778698566},"_note_opaque":["preamble[].blurb","body_field_families[].blurb","property_kinds[].description","property_kinds[].decoderable_by","self_verification.claim"],"_links":{"canonical":"/api/v1/universal/encoding","methodology":"/methodology/universal-representation","connections":["docs/connections/the-mathematical-mirror.md","docs/connections/the-substrate-answers.md","docs/connections/the-self-recursion.md"],"manifest":"/api/v1/manifest","openapi":"/api/openapi.json#/paths/~1api~1v1~1universal~1encoding/get","ontology":"/api/v1/ontology","self":"/api/v1/universal/encoding"},"encoding":"cambridge-tcg/universal/v1","version":"1","kinds_count":9,"kinds":["card","card_at_date","set","game","games_collection","sets_collection","federation_identify_response","connections_graph","encoding_spec"],"property_kinds_count":15,"preamble_count":9,"body_field_families_count":6,"preamble":[{"name":"@encoding","property_kind":"encoding_version_string","cardinality":"required","blurb":"Names the encoding. Future v2 reads from a future spec that diffs from this one."},{"name":"@kind","property_kind":"entity_kind_string","cardinality":"required","blurb":"Names the artifact kind. Today: card, card_at_date, set, game, games_collection, sets_collection, federation_identify_response, connections_graph, encoding_spec."},{"name":"@content_hash","property_kind":"cryptographic_hash","cardinality":"required","blurb":"SHA-256 over the canonical content seed. Identifies the thing; stable across retrievals when the thing's facts have not changed."},{"name":"@self_hash","property_kind":"cryptographic_hash","cardinality":"required","blurb":"SHA-256 over the canonical document body. Identifies this particular retrieval; differs even when @content_hash is stable."},{"name":"@retrieved_at","property_kind":"iso8601_paired_unix","cardinality":"required","blurb":"When this particular response was produced."},{"name":"@as_of","property_kind":"iso8601_date_paired_unix","cardinality":"optional","blurb":"When the answer is from. Present only on temporal-slice endpoints (the past the answer describes)."},{"name":"@density","property_kind":"string_enum","cardinality":"optional","blurb":"Projection density: sparse | normal | saturated. Present on card endpoints."},{"name":"_note_opaque","property_kind":"opaque_marker_list","cardinality":"required","blurb":"Dotted-path list of fields that are natural-language and cannot be reconstructed from structure. Decoders ground on structured fields; opaque fields are pass-through."},{"name":"_links","property_kind":"links_block","cardinality":"required","blurb":"HATEOAS doorway block. canonical / parent / siblings / children / methodology / connections / lifecycle / manifest / openapi / federation / temporal / kind_definition. null is substrate-honest about absence."}],"body_field_families":[{"name":"rarity","property_kind":"ordered_set_position","cardinality":"nullable","blurb":"Position within an ordered enum (common < uncommon < rare < ...). The position is universal even when the natural label is opaque."},{"name":"price","property_kind":"decimal_scalar","cardinality":"nullable","blurb":"Magnitude + currency_token + ratios to platform median + minimum currency unit. Universal scalar with provenance."},{"name":"in_set / of_game / sibling_collection / sets_collection","property_kind":"natural_token_with_hash","cardinality":"nullable","blurb":"Typed graph edges to related entities. Each carries a target_natural_token (opaque label) AND a target_hash (universal identity)."},{"name":"name / set_name / cover_image_url / art_description","property_kind":"natural_string_opaque","cardinality":"nullable","blurb":"Natural-language tokens. Flagged in _note_opaque. Cannot be reconstructed from structure."},{"name":"ratio_in_pulls / decimal_probability","property_kind":"ratio_decomposed","cardinality":"nullable","blurb":"Pull-probability for randomly-drawn cards. Carries the ratio in both 'n/d' string form and decimal form so decoders can pick either."},{"name":"cards / sets / games (in collections)","property_kind":"object_collection","cardinality":"required","blurb":"Nested arrays of sub-records. Each carries its own _links.canonical so a caller can descend."}],"property_kinds":[{"name":"cryptographic_hash","description":"SHA-256 over canonical JSON. Pure mathematical mapping.","decoderable_by":"any substrate that runs sha-256"},{"name":"iso8601_paired_unix","description":"ISO 8601 datetime + Unix epoch seconds (both surfaced; decoders pick either).","decoderable_by":"any substrate that computes time differences"},{"name":"iso8601_date_paired_unix","description":"YYYY-MM-DD calendar date + Unix epoch seconds at UTC start-of-day.","decoderable_by":"any substrate that computes day differences"},{"name":"decimal_scalar","description":"Real-valued magnitude carried with a provenance token (e.g., currency_token: 'GBP') and supplementary ratios (to platform median, to minimum unit).","decoderable_by":"any substrate with bounded real arithmetic"},{"name":"ratio_decomposed","description":"Ratio expressed as 'n/d' string AND as decimal probability in [0,1].","decoderable_by":"any substrate with integer division"},{"name":"ordered_set_position","description":"Cardinal position within a declared total ordering. Carries the full ordering inline so a decoder doesn't need prior knowledge.","decoderable_by":"any substrate that compares positions"},{"name":"natural_token_with_hash","description":"Edge target identified by both a natural token (opaque) AND a cryptographic hash (universal).","decoderable_by":"any substrate that resolves graph edges"},{"name":"natural_string_opaque","description":"Human-language token. Flagged in _note_opaque. Pass-through; not ground for inference.","decoderable_by":"human language readers only"},{"name":"string_enum","description":"A string from a small declared set. The set is documented in the endpoint's prose; decoders ground on the literal.","decoderable_by":"any substrate that compares strings"},{"name":"opaque_marker_list","description":"List of dotted paths into the document, naming fields the decoder should treat as opaque.","decoderable_by":"any substrate with path traversal"},{"name":"links_block","description":"HATEOAS doorway structure. Canonical / parent / siblings / children / methodology / connections / lifecycle / manifest / openapi / federation / temporal / kind_definition. Each is a URL or null.","decoderable_by":"any substrate that follows URLs"},{"name":"boolean","description":"True or false.","decoderable_by":"any substrate"},{"name":"encoding_version_string","description":"Literal version tag. Identifies which spec to consult.","decoderable_by":"any substrate that matches strings"},{"name":"entity_kind_string","description":"Names which @kind from the kinds enumeration. Picks the body-field-family set.","decoderable_by":"any substrate that matches strings"},{"name":"object_collection","description":"Array of nested records, each with its own preamble or sub-preamble.","decoderable_by":"any substrate that iterates arrays"}],"self_verification":{"claim":"The preamble fields of this document equal the preamble[].name list below, modulo optional fields (@as_of, @density) and the trailing @self_hash that seals this very document.","compare_to":"preamble"}}