{
 "schema_name": "page",
 "schema_version": "2.0",
 "page_type": "api",
 "url": "/api/",
 "canonical": "/api/",
 "language": "en",
 "hreflang": [],
 "translations": [],
 "heading": "Data and API",
 "description": "The same numbers as the pages, in JSON and CSV, with plans, schema and changelog.",
 "first_paragraph": {
  "body": "The public Forecast Record API returns the numbers on these pages, built from the same snapshot, with 1,000 requests a month on the free plan (as of 7 November 2026, source: the plans table on this page).",
  "key_number": "1,000",
  "data": "2026-11-07",
  "source_info": "the plans table on this page",
  "brand": "Forecast Record"
 },
 "indexable": false,
 "noindex_reason": "technical",
 "indexing_threshold": {
  "settled_count": 0,
  "date_count": 0,
  "required_settled": 0,
  "required_dates": 0
 },
 "data_date": "2026-11-07T19:52:23.438Z",
 "built_at": "2026-11-07T19:52:23.438Z",
 "lastmod": "2026-11-08T02:12:33.000Z",
 "content_hash": null,
 "meaning_hash": "d57a31fc7be4ca504f84808007262e57681f341ba70c3af7a357b324f9fcd512",
 "dependency_group": "static",
 "release_id": "20261107-195223",
 "markup": [
  {
   "type_code": "WebPage",
   "allowed": true,
   "cause": null
  },
  {
   "type_code": "Organization",
   "allowed": true,
   "cause": null
  }
 ],
 "exports": [
  {
   "type_code": "json",
   "url": "/api/index.json",
   "bytes": null
  }
 ],
 "modules": {
  "affiliate": false,
  "api": true,
  "compare_yourself": false
 },
 "affiliate_block": null,
 "restrictions": {
  "name_withdrawn": false,
  "tracker_number": null,
  "withdrawn_quotes": [],
  "removed_at": null,
  "cause": null,
  "suspended_records": [],
  "withdrawal_log_number": 0
 },
 "page_links": {
  "methodology": "/methodology/",
  "right_of_reply": "/right-of-reply/",
  "source_coverage": "/coverage/",
  "corrections_log": "/corrections/",
  "api": "/api/",
  "claim": "/claim/"
 },
 "text_blocks": [
  {
   "heading": "How to read the data",
   "anchor_id": null,
   "revision": null,
   "body": "Every page has an index.json next to it at the same address, and pages with tables of records also have a .csv. Both files are built from the same snapshot as the page, so a number in a file and the same number on the page come from one calculation; a file can list more records than the page shows, and each file states its own counts. They are for machines to read, not for search engines to index instead of the page."
  },
  {
   "heading": "Rules of use",
   "anchor_id": null,
   "revision": null,
   "body": "Attribution to the source page is required. Quotes from third-party sources stay under their own rights: what we license is the measurement, not the material we measured. A name removed at its owner's request disappears from the exports too, on the same deadline as from the pages."
  },
  {
   "heading": "JSON field glossary",
   "anchor_id": "json-glossary",
   "revision": "2.0",
   "body": "Since contract version 2.0 (12 October 2026), every field name and code in the JSON next to each page is in English; `schema_version` in each file names the version. What each part means:\n\n- `record_summary` — profile summary: the headline sentence, 2–4 numbers, the series behind them, limitations, the citation\n- `recorded_picks` — one row per prediction: match, what the author said, outcome in words, group (settled, pending, excluded), points in a named series, origin\n- `pagination` — how many predictions there are and the addresses of the pages that list them\n- `match_summary` — match page: final score, distinct predictions, sources, who predicted what, predictions by market\n- `pick_summary` — pick page: author, selection, match, final score, outcome of the pick\n- `evidence_items` — statements with their evidence: quotation (`quote_text`), source (`source_info`), dates, provenance, statement class and state\n- `evidence_items[].link`, `who_predicted_what[].also` — match page: the same pick recorded again, or the same material in another edition of the source, stays as evidence and is linked to the main row: `link` names the main record (`main_record_id`, `kind` is `same_pick` for the same pick or `same_material` for the same article or post in another publication), and the main row lists the others in `also`\n- `author_claim` — what the author said: market, selection, the author’s own price\n- `author_claim_outcome` — outcome of the author’s own claim at the final score\n- `settlements` — calculations by series: stake, price, result and points of each Forecast Record series; a derived series is marked as derived\n- `origin`, `dates` — origin of the record (recorded before kick-off, pre-match web archive, date stated by the source) and three separate dates: publication, source page date, first recorded by us\n- `record_counts` — the counts of one set of records: statement, prediction, qualifying pick, settled pick, match\n- `simulations` — points bankroll of each series, with top-ups shown separately\n- `retro` — restored history: counts by origin, returns by series, closing-line value status\n- `lead_time` — profile: hours between our recording of each pick and kick-off (`lead_hours` on every row) and the share of picks recorded at least two hours before kick-off\n- `baseline` — profile: the same stakes on the same matches against backing the market favourite by the recorded line (match result, over/under, both teams to score, handicap only); `favourite` on every settled row\n- `scenarios` — match page: picks of one author on the same match joined into one scenario, with their outcomes\n- `match_summary.lead_time` — match page: hours between our recording of each pick and kick-off and the share recorded at least two hours before kick-off, counted as on author profiles\n\nStatuses are always one of measured, stated, calculated, unknown; unknown is never written as zero. Points are hundredths in the JSON (`10000` = 100 points)."
  }
 ],
 "plans": [
  {
   "display_name": "Public",
   "price_usd": "0",
   "history_days": null,
   "requests_per_month": 1000,
   "limit_per_minute": 10,
   "features": [
    "JSON and CSV next to every page",
    "methodology and its version",
    "links to the evidence"
   ],
   "status": "available"
  },
  {
   "display_name": "Research",
   "price_usd": "29",
   "history_days": 90,
   "requests_per_month": 10000,
   "limit_per_minute": 10,
   "features": [
    "history up to 90 days",
    "export",
    "watchlist"
   ],
   "status": "not_enabled"
  },
  {
   "display_name": "Pro",
   "price_usd": "99",
   "history_days": null,
   "requests_per_month": 100000,
   "limit_per_minute": 60,
   "features": [
    "the whole history we are allowed to publish",
    "comparisons",
    "extended exports"
   ],
   "status": "not_enabled"
  },
  {
   "display_name": "Data",
   "price_usd": "299",
   "history_days": null,
   "requests_per_month": 500000,
   "limit_per_minute": 120,
   "features": [
    "batch exports",
    "change notifications",
    "everything in Pro"
   ],
   "status": "not_enabled"
  }
 ],
 "entity_id": "api:/api/",
 "source_revision": 36
}
