{
  "generatedAt": "2026-05-29T14:58:03.370Z",
  "liveTrackers": [
    {
      "id": "senedd.2026",
      "title": "Senedd 2026",
      "status": "live",
      "nation": "wales",
      "date": "2026-05-07",
      "snapshot": "/api/public/results/senedd.2026",
      "archive": "/elections/senedd/2026"
    },
    {
      "id": "senedd.2021",
      "title": "Senedd 2021",
      "status": "archive",
      "nation": "wales",
      "date": "2021-05-06",
      "snapshot": "/api/public/results/senedd.2021",
      "archive": "/elections/senedd/2021"
    },
    {
      "id": "holyrood.2026",
      "title": "Scottish Parliament 2026",
      "status": "live",
      "nation": "scotland",
      "date": "2026-05-07",
      "snapshot": "/api/public/results/holyrood.2026",
      "archive": "/elections/holyrood/2026"
    },
    {
      "id": "westminster.2024",
      "title": "UK Parliament 2024",
      "status": "archive",
      "nation": "uk",
      "date": "2024-07-04",
      "snapshot": "/api/public/results/westminster.2024",
      "archive": "/elections/westminster/2024"
    },
    {
      "id": "english-locals.2026",
      "title": "English local councils 2026",
      "status": "live",
      "nation": "england",
      "date": "2026-05-07",
      "snapshot": "/api/public/results/english-locals.2026",
      "archive": "/elections/english-locals/2026"
    },
    {
      "id": "locals.2022",
      "title": "Welsh local councils 2022",
      "status": "archive",
      "nation": "wales",
      "date": "2022-05-05",
      "snapshot": "/api/public/results/locals.2022",
      "archive": "/elections/locals/2022"
    },
    {
      "id": "pcc.2024",
      "title": "Police & Crime Commissioners 2024",
      "status": "archive",
      "nation": "uk",
      "date": "2024-05-02",
      "snapshot": "/api/public/results/pcc.2024",
      "archive": "/elections/pcc/2024"
    }
  ],
  "aggregateFeeds": [
    {
      "method": "GET",
      "path": "/api/public/by-elections",
      "purpose": "Rolling UK by-elections snapshot (local + Senedd + PCC)."
    },
    {
      "method": "GET",
      "path": "/api/public/english-locals.2026",
      "purpose": "Aggregated English principal council results, 7 May 2026."
    },
    {
      "method": "GET",
      "path": "/api/public/holyrood.2026.ams",
      "purpose": "Holyrood 2026 constituency + AMS regional list output."
    },
    {
      "method": "GET",
      "path": "/api/public/locals.2027",
      "purpose": "Welsh principal council preview/snapshot for May 2027."
    },
    {
      "method": "GET",
      "path": "/api/public",
      "purpose": "This manifest, as JSON."
    }
  ],
  "hooks": [
    {
      "method": "POST",
      "path": "/api/public/hooks/refresh-snapshots",
      "purpose": "Recompute every live snapshot. Cron-triggered.",
      "notes": "Internal. Requires hook secret."
    },
    {
      "method": "POST",
      "path": "/api/public/hooks/sync-live-results",
      "purpose": "Pull latest live results from Democracy Club.",
      "notes": "Internal."
    },
    {
      "method": "POST",
      "path": "/api/public/hooks/sync-election",
      "purpose": "Resync a single election's metadata + ballots.",
      "notes": "Internal."
    },
    {
      "method": "POST",
      "path": "/api/public/hooks/sync-democracy-club",
      "purpose": "Full DC ballot/candidate sync.",
      "notes": "Internal."
    },
    {
      "method": "POST",
      "path": "/api/public/hooks/reconcile-crowd",
      "purpose": "Match crowd submissions against verified DC ballots.",
      "notes": "Internal."
    }
  ],
  "v1": [
    {
      "method": "GET",
      "path": "/api/v1/health",
      "purpose": "Service status. No auth."
    },
    {
      "method": "GET",
      "path": "/api/v1/elections",
      "purpose": "List elections.",
      "scope": "read"
    },
    {
      "method": "GET",
      "path": "/api/v1/elections/{electionId}",
      "purpose": "Single election with prediction windows.",
      "scope": "read"
    },
    {
      "method": "GET",
      "path": "/api/v1/by-elections",
      "purpose": "By-elections feed with provenance flags.",
      "scope": "read"
    },
    {
      "method": "GET",
      "path": "/api/v1/results/{electionId}",
      "purpose": "Per-constituency live results snapshot.",
      "scope": "read"
    },
    {
      "method": "POST",
      "path": "/api/v1/crowd/submissions",
      "purpose": "Submit a crowd-sourced declaration.",
      "scope": "crowd:write"
    },
    {
      "method": "GET",
      "path": "/api/v1/crowd/submissions/{id}",
      "purpose": "Status of a submission you authored.",
      "scope": "crowd:write"
    }
  ],
  "archives": [
    {
      "id": "senedd.2021",
      "title": "Senedd 2021",
      "status": "archive",
      "page": "/elections/senedd/2021"
    },
    {
      "id": "westminster.2024",
      "title": "UK Parliament 2024",
      "status": "archive",
      "page": "/elections/westminster/2024"
    },
    {
      "id": "locals.2022",
      "title": "Welsh local councils 2022",
      "status": "archive",
      "page": "/elections/locals/2022"
    },
    {
      "id": "pcc.2024",
      "title": "Police & Crime Commissioners 2024",
      "status": "archive",
      "page": "/elections/pcc/2024"
    }
  ],
  "datasets": [
    {
      "name": "Static archive index",
      "path": "src/data/elections/archive.ts"
    },
    {
      "name": "Westminster 2024 seats",
      "path": "src/data/elections/westminster-2024-seats.ts"
    },
    {
      "name": "Notional 2021 (Westminster)",
      "path": "src/data/elections/notional-2021.ts"
    },
    {
      "name": "Senedd 2026 regions",
      "path": "src/data/elections/senedd-2026-regions.ts"
    },
    {
      "name": "Holyrood regions",
      "path": "src/data/elections/holyrood-regions.ts"
    },
    {
      "name": "English councils",
      "path": "src/data/elections/english-councils.ts"
    },
    {
      "name": "Welsh councils",
      "path": "src/data/elections/welsh-councils.ts"
    },
    {
      "name": "Party history",
      "path": "src/data/elections/party-history.ts"
    },
    {
      "name": "Election registry",
      "path": "src/data/elections/registry.ts"
    }
  ]
}