Kairos Archive

Card history row

Every state a card's gameplay face has been in, as observed by syncs: the face's fields flattened into the row. valid_to null = the current face, which equals the card record. A closed row is how the card played until valid_to; a printing released within a row's dates was printed with that row's values. Seeded with every card's face on 2026-09-09.

One row per state a card's gameplay face has been in, with the dates it was in force. Every card has exactly one open row, and it equals the card record.

Where it appears

  • registry.json → card_history[]
  • history/cards.json
  • inside cards/{codex_id}.json, without codex_id

Fields

Every field is present on every record; a value that does not apply is null, never missing. Types are from the release's schema; the schema itself is the contract.

FieldTypeMeaning
codex_idcodex ID, C plus six digitsThe card this face belongs to.
valid_fromdate, YYYY-MM-DDStart of the range this face was in force. What the date means depends on source.
valid_todate, YYYY-MM-DD or nullEnd of the range; null for the current face.
source"api", "card" or "manual"Where the face came from: 'api' when the registry observed it in the official API; 'card' when it was recorded by hand from what is printed on the card (data/errata.json), the case of a card whose printed text differs from the text the API serves; 'manual' for the face of a card the registry recorded by hand because the API does not serve it (data/manual.json).
typestring or nullObserved values: Artifact, Aura, Avatar, Magic, Minion, Site.
categorystring or nullCoarser grouping: Spell (Minion, Magic, Artifact, Aura), Site, Avatar, Token.
raritystring or nullThe rarity printed on the card. Observed values: Ordinary, Exceptional, Elite, Unique; null on Avatars and some tokens.
slotstring or nullThe rarity slot the card is distributed in. Agrees with rarity except for Avatars (no printed rarity) and tokens.
subtypesarray of stringIn upstream's order, e.g. ["Beast", "Spirit"].
elementsarray of stringIn upstream's order. ["None"] means colourless (Artifacts, Avatars, most Sites).
keywordsarray of stringAbility keywords the card carries (Airborne, Genesis, Spellcaster, ...), as upstream tags them.
umbrellasarray of stringCross-subtype groupings rules text refers to (Evil, Knight, Royalty).
costinteger or nullMana cost. null for Sites and Avatars, and for X costs.
attackinteger or nullPrinted attack; null when the card has none.
defenseinteger or nullPrinted defense; null when the card has none.
powerinteger or nullDerived: Sorcery's power - equal to attack when attack equals defense, otherwise floor((attack + defense) / 2); null when either is null. Published so every consumer computes the same number.
lifeinteger or nullOnly Avatars have a life value.
thr_airinteger, 0 or moreAir threshold: the number of Air the card needs in play to be cast. 0 when none.
thr_earthinteger, 0 or moreEarth threshold. 0 when none.
thr_fireinteger, 0 or moreFire threshold. 0 when none.
thr_waterinteger, 0 or moreWater threshold. 0 when none.
rules_textstringCurrent text the card plays by, applying to every printing. Canonicalised: \n line endings, no trailing whitespace, one line per ability. Changes are recorded in rules_history.
backface object: the gameplay fields of a card (see Card) or nullThe back face at that time; null unless the card is double-faced.

Example

Card history row · from release v3.4.0
{
  "codex_id": "C000139",
  "valid_from": "2023-06-22",
  "valid_to": "2026-09-15",
  "source": "card",
  "type": "Minion",
  "category": "Spell",
  "rarity": "Elite",
  "slot": "Elite",
  "subtypes": [
    "Beast"
  ],
  "elements": [
    "Fire"
  ],
  "keywords": [
    "Airborne"
  ],
  "umbrellas": [],
  "cost": 5,
  "attack": 4,
  "defense": 4,
  "power": 4,
  "life": null,
  "thr_air": 0,
  "thr_earth": 0,
  "thr_fire": 2,
  "thr_water": 0,
  "rules_text": "Airborne\nIf Askelon Phoenix would take damage from a fire spell or ability, it gains +1 power this turn, instead.",
  "back": null
}

Reference: registry API contract and published object definitions. Report a data or documentation issue.