{
  "dataset": "CardAdvisor — frozen dataset releases",
  "license": "CC BY 4.0",
  "note": "Each release is immutable. The live endpoints under /data/ are not.",
  "releases": [
    {
      "version": "v2026-09-17",
      "date": "2026-09-17",
      "errata": [],
      "files": [
        {
          "name": "cards",
          "rows": 280,
          "rowsOf": "cards",
          "asOf": "2026-09-17",
          "schemaVersion": 6,
          "json": "https://cardadvisor.in/data/v/2026-09-17/cards.json",
          "csv": "https://cardadvisor.in/data/v/2026-09-17/cards.csv"
        },
        {
          "name": "changes",
          "rows": 1629,
          "rowsOf": "events",
          "asOf": "2026-09-10",
          "schemaVersion": 6,
          "json": "https://cardadvisor.in/data/v/2026-09-17/changes.json",
          "csv": "https://cardadvisor.in/data/v/2026-09-17/changes.csv"
        },
        {
          "name": "transfers",
          "rows": 156,
          "rowsOf": "edges",
          "asOf": "2026-09-10",
          "schemaVersion": 6,
          "json": "https://cardadvisor.in/data/v/2026-09-17/transfers.json",
          "csv": "https://cardadvisor.in/data/v/2026-09-17/transfers.csv"
        },
        {
          "name": "valuations",
          "rows": 231,
          "rowsOf": "cards",
          "asOf": "2026-09-05",
          "schemaVersion": 6,
          "json": "https://cardadvisor.in/data/v/2026-09-17/valuations.json",
          "csv": "https://cardadvisor.in/data/v/2026-09-17/valuations.csv"
        }
      ]
    },
    {
      "version": "v2026-08-16",
      "date": "2026-08-16",
      "errata": [
        {
          "recorded": "2026-09-04",
          "kind": "data",
          "summary": "transfers carried `confidence: HIGH` on every edge whose confidence was never authored. The loader defaulted an absent value to HIGH and the enum's own documentation said absent MEANS HIGH, so silence published as the strongest claim available: \"verified against the programme's own published terms\". Measured on 2026-09-04 against the same source files, 61 of 156 edges had no authored confidence and 7 of those had no sourceUrl either. Readers of this release should treat any HIGH without a sourceUrl as unverified. From schema v4 the default is the new value UNVERIFIED, and only an authored value can say HIGH.",
          "resolvedIn": "schema v4"
        },
        {
          "recorded": "2026-09-04",
          "kind": "data",
          "summary": "the transfers dataset published one `asOf` for the whole graph, taken from a hand-maintained `lastReviewed` key (on the live endpoint the citable `version` token was derived from it too; a frozen file's `version` is its release date). Every edge already carried its own `lastVerified` and the dataset dropped it. On 2026-09-04 the graph-level date was 2026-07-02 while the 156 edges spanned eight dates up to 2026-08-27, so the published date was wrong for 151 rows — understating freshness here, and capable of overstating it after any later edit. From schema v4 each edge carries its own `lastVerified`. From schema v5 the dataset-level date is a window derived from the published rows — `asOf` is the newest per-row check and `verifiedFrom` the oldest — so no hand-typed key sets it.",
          "resolvedIn": "schema v4 (per-edge dates); schema v5 (dataset date window)"
        },
        {
          "recorded": "2026-09-17",
          "kind": "data",
          "summary": "valuations published the same hand-maintained `lastReviewed` date, 2026-07-02, as its dataset-level `asOf`. On 2026-09-04 that date described 8 of the 36 partner-programme valuations these rows are derived from; 2 had been checked earlier and 26 later. From schema v5 the dataset-level date is a window derived from those partner checks — `asOf` is the newest and `verifiedFrom` the oldest — so no hand-typed key sets it.",
          "resolvedIn": "schema v5"
        },
        {
          "recorded": "2026-09-04",
          "kind": "schema",
          "summary": "the field dictionary described `lastVerified` as \"Date this card record was last verified against issuer sources\". It is a CHANGE stamp: the V29 database triggers re-stamp it on any edit to the card or its reward, perk and related-card rows, so a corrected typo re-dated the record and published it as a fresh verification. No re-read of an issuer document is implied by any value in this column, in this release or any other. The catalogue does carry a real verification stamp — `verifiedOn` with the document it was checked against in `verifiedAgainst`, split out by migration V142 precisely because the two had been one field — and as of 2026-09-04 no active card carries one, so no card in this release had been verified in that sense. Readers should treat `lastVerified` as last-modified. The live dictionary was corrected on 2026-09-04; frozen releases are never rewritten.",
          "resolvedIn": "live dictionary 2026-09-04; next frozen release"
        }
      ],
      "files": [
        {
          "name": "cards",
          "rows": 280,
          "rowsOf": "cards",
          "asOf": "2026-08-15",
          "schemaVersion": 3,
          "json": "https://cardadvisor.in/data/v/2026-08-16/cards.json",
          "csv": "https://cardadvisor.in/data/v/2026-08-16/cards.csv"
        },
        {
          "name": "changes",
          "rows": 1617,
          "rowsOf": "events",
          "asOf": "2026-08-13",
          "schemaVersion": 3,
          "json": "https://cardadvisor.in/data/v/2026-08-16/changes.json",
          "csv": "https://cardadvisor.in/data/v/2026-08-16/changes.csv"
        },
        {
          "name": "transfers",
          "rows": 153,
          "rowsOf": "edges",
          "asOf": "2026-07-02",
          "schemaVersion": 3,
          "json": "https://cardadvisor.in/data/v/2026-08-16/transfers.json",
          "csv": "https://cardadvisor.in/data/v/2026-08-16/transfers.csv"
        },
        {
          "name": "valuations",
          "rows": 233,
          "rowsOf": "cards",
          "asOf": "2026-07-02",
          "schemaVersion": 3,
          "json": "https://cardadvisor.in/data/v/2026-08-16/valuations.json",
          "csv": "https://cardadvisor.in/data/v/2026-08-16/valuations.csv"
        }
      ]
    },
    {
      "version": "v2026-08-15",
      "date": "2026-08-15",
      "errata": [
        {
          "recorded": "2026-08-16",
          "kind": "schema",
          "summary": "cards carried `expertRating`, `welcomeBonusValueRs` and `perks[].estimatedAnnualValueRs`, and valuations/transfers carried route-level point values (`bestPaisaPerPoint`, `cashPaisaPerPoint`, `voucherPaisaPerPoint`, `travelPortalPaisaPerPoint`, `transferPaisaPerPoint`, `valueGapPaisaPerPoint`, `bestRouteName`, `valuePaisa`, `paisaPerPoint`, `destValuePaisa`) — CardAdvisor's editorial valuation model, which the datasheet stated was excluded. The datasheet was right about the intent and the files were wrong. From schema v3 the open dataset carries facts plus one point value per card/row; the model is published on the site.",
          "resolvedIn": "2026-08-16"
        },
        {
          "recorded": "2026-09-04",
          "kind": "data",
          "summary": "transfers carried `confidence: HIGH` on every edge whose confidence was never authored. The loader defaulted an absent value to HIGH and the enum's own documentation said absent MEANS HIGH, so silence published as the strongest claim available: \"verified against the programme's own published terms\". Measured on 2026-09-04 against the same source files, 61 of 156 edges had no authored confidence and 7 of those had no sourceUrl either. Readers of this release should treat any HIGH without a sourceUrl as unverified. From schema v4 the default is the new value UNVERIFIED, and only an authored value can say HIGH.",
          "resolvedIn": "schema v4"
        },
        {
          "recorded": "2026-09-04",
          "kind": "data",
          "summary": "the transfers dataset published one `asOf` for the whole graph, taken from a hand-maintained `lastReviewed` key (on the live endpoint the citable `version` token was derived from it too; a frozen file's `version` is its release date). Every edge already carried its own `lastVerified` and the dataset dropped it. On 2026-09-04 the graph-level date was 2026-07-02 while the 156 edges spanned eight dates up to 2026-08-27, so the published date was wrong for 151 rows — understating freshness here, and capable of overstating it after any later edit. From schema v4 each edge carries its own `lastVerified`. From schema v5 the dataset-level date is a window derived from the published rows — `asOf` is the newest per-row check and `verifiedFrom` the oldest — so no hand-typed key sets it.",
          "resolvedIn": "schema v4 (per-edge dates); schema v5 (dataset date window)"
        },
        {
          "recorded": "2026-09-17",
          "kind": "data",
          "summary": "valuations published the same hand-maintained `lastReviewed` date, 2026-07-02, as its dataset-level `asOf`. On 2026-09-04 that date described 8 of the 36 partner-programme valuations these rows are derived from; 2 had been checked earlier and 26 later. From schema v5 the dataset-level date is a window derived from those partner checks — `asOf` is the newest and `verifiedFrom` the oldest — so no hand-typed key sets it.",
          "resolvedIn": "schema v5"
        },
        {
          "recorded": "2026-09-04",
          "kind": "schema",
          "summary": "the field dictionary described `lastVerified` as \"Date this card record was last verified against issuer sources\". It is a CHANGE stamp: the V29 database triggers re-stamp it on any edit to the card or its reward, perk and related-card rows, so a corrected typo re-dated the record and published it as a fresh verification. No re-read of an issuer document is implied by any value in this column, in this release or any other. The catalogue does carry a real verification stamp — `verifiedOn` with the document it was checked against in `verifiedAgainst`, split out by migration V142 precisely because the two had been one field — and as of 2026-09-04 no active card carries one, so no card in this release had been verified in that sense. Readers should treat `lastVerified` as last-modified. The live dictionary was corrected on 2026-09-04; frozen releases are never rewritten.",
          "resolvedIn": "live dictionary 2026-09-04; next frozen release"
        }
      ],
      "files": [
        {
          "name": "cards",
          "rows": 280,
          "rowsOf": "cards",
          "asOf": "2026-08-14",
          "schemaVersion": 2,
          "json": "https://cardadvisor.in/data/v/2026-08-15/cards.json",
          "csv": "https://cardadvisor.in/data/v/2026-08-15/cards.csv"
        },
        {
          "name": "changes",
          "rows": 1613,
          "rowsOf": "events",
          "asOf": "2026-08-05",
          "schemaVersion": 2,
          "json": "https://cardadvisor.in/data/v/2026-08-15/changes.json",
          "csv": "https://cardadvisor.in/data/v/2026-08-15/changes.csv"
        },
        {
          "name": "transfers",
          "rows": 154,
          "rowsOf": "edges",
          "asOf": "2026-07-02",
          "schemaVersion": 2,
          "json": "https://cardadvisor.in/data/v/2026-08-15/transfers.json",
          "csv": "https://cardadvisor.in/data/v/2026-08-15/transfers.csv"
        },
        {
          "name": "valuations",
          "rows": 231,
          "rowsOf": "cards",
          "asOf": "2026-07-02",
          "schemaVersion": 2,
          "json": "https://cardadvisor.in/data/v/2026-08-15/valuations.json",
          "csv": "https://cardadvisor.in/data/v/2026-08-15/valuations.csv"
        }
      ]
    }
  ]
}
