Developer API

Pre-baked JSON on a CDN — zero request-time computation, every response carrying the release version, OGL attribution and a verifiable receipt block (verify it yourself). Base URL: https://statbook.co.uk. The endpoint map is in the OpenAPI spec (full response schemas are being added; until then the spec covers paths, parameters, auth and status codes).

Maximum amount of a week's pay (redundancy / basic award)

£751.00per week
Corroborated in force since 2026-04-06
si·GBP/week·corroborated·last verified 2026-07-16

Endpoints

EndpointReturnsAccess
GET /v1/figuresindex of all figures with current values; filter with ?category= and ?jurisdiction=Free
GET /v1/figures/{id}full record including historyFree
GET /v1/figures/{id}/currentcurrent value onlyFree
GET /v1/figures/{id}/asof/{date}the value in force on a dateAPI key
GET /v1/figures/{id}/upcomingannounced future value(s) ahead of effect, individually signedAPI key
GET /v1/calendarmachine-readable calendar of all upcoming statutory changesAPI key
GET /v1/changes?since={date}diff feed of releases since a dateAPI key
GET /v1/releases/{version}/manifestsigned manifest (per-record hashes)Free
GET /v1/releases/{version}/datasetbulk dataset downloadFree (delayed) / key (latest)
GET /v1/figures/{id}/audit-bundlesigned audit-evidence bundle (zip) for one figureCompany

Static hosting note: the free figure endpoints are also reachable as a plain file by appending .json (e.g. /v1/figures/employment.guarantee_pay.daily_rate.json) — same bytes. Keyed endpoints are gated in every spelling, so the .json form of /v1/changes or the latest dataset still needs a key; asof, upcoming and calendar are computed at the edge and have no static file.

Values come in two forms: value is the canonical display string exactly as the corpus pins it ("£751.00" — this is what the record hash covers), and value_numeric is the machine-readable projection (751.0; percentages as numbers, banded tables already structured) carried on the index, current, history and asof responses. Integrate against value_numeric; cite value. For money, each value also carries value_minor — exact integer minor units (pence). Reconcile audits against value_minor, not the float, to avoid decimal/float drift.

Upcoming changes. Free responses carry an upcoming pointer — the date a statutory change takes effect (and when it was announced), never the value — so you can see a change is coming. The dated value itself, with its sources and an individual minisign signature, is served ahead of its effective date on the keyed /upcoming endpoint and aggregated across the corpus on /v1/calendar. Verify a supplement offline with the same verify_receipt.py that checks record receipts. This free record always shows the law currently in force; the paid layer is the head start.

Authentication

Free endpoints need no key, no account, no cookie. Keyed endpoints take Authorization: Bearer <key> (or X-Api-Key). Keys are stored hashed and are revocable; per-key rate limits apply. Get a key on the pricing page.

The receipt block

Every figure response ends with a receipt object:

{
  "record_hash": "sha256:…",   // canonical hash of the figure object
  "release_version": "2.0.0",
  "manifest": "https://statbook.co.uk/v1/releases/2.0.0/manifest.json",
  "sources": [ { "citation": …, "uri": …, "retrieved": …, "content_hash": … } ],
  "last_verified": "…"
}

An archived response can be validated end-to-end by any third party with no cooperation from us: recompute the record hash, find it in the signed manifest, check the manifest signature. Step-by-step instructions.

Example

curl https://statbook.co.uk/v1/figures/employment.redundancy.weekly_pay_cap/current
{
  "meta": { "release_version": "2.0.0", … },
  "figure_id": "employment.redundancy.weekly_pay_cap",
  "unit": "GBP/week",
  "current": { "value": "£751.00", "effective_from": "2026-04-06", … },
  "value_numeric": 751.0,   // history/asof entries carry this per value
  "receipt": { … }
}

MCP server

Statbook ships a local MCP server (stdio transport) exposing get_figure, get_figure_asof, list_figures and whats_changed. The free tier works with no key; keyed capabilities (as-of, changes) accept your API key as configuration — same tiers on every surface.

It is not yet packaged on PyPI: it is published as a single self-contained, stdlib-only Python file at /tools/statbook_mcp_server.py. Download it, read it (262 lines), and point your MCP client at it — Python 3.10+, no third-party dependencies, nothing to install.

curl -O https://statbook.co.uk/tools/statbook_mcp_server.py
{
  "mcpServers": {
    "statbook": {
      "command": "python",
      "args": ["/path/to/statbook_mcp_server.py"],
      "env": { "STATBOOK_API_KEY": "<optional>" }
    }
  }
}

Audit-evidence bundle (Company)

For auditors and regulated buyers, each figure has a downloadable audit-evidence bundle — a single zip that makes the signing legible: GET /v1/figures/{id}/audit-bundle (Company tier; a keyless request is 401, a non-Company key is 403). It packages only material that is already signed by, or hashes into, the public release manifest: the baked figure response, the full signed manifest and its detached .minisig, and the OGL-licensed source snapshot bytes (gov.uk / legislation.gov.uk) named by their SHA-256. Sources not published under the Open Government Licence (e.g. ACAS) are cited by hash and URI with the bytes omitted.

The bundle carries no signature of its own — the release manifest stays the sole trust root. A bundled VERIFY.txt walks an auditor through checking it while trusting nobody (step 0: fetch the signing key out-of-band; do not trust the copy in the zip), and the vendored verify_receipt.py gains a --sources-dir flag that confirms every bundled source file hashes to its own name and to the receipt. A self-contained evidence.html prints the same facts as a certificate.

Bulk dataset

Fair use

The free tier is rate-limited per IP, generously. Don't scrape the free tier at bulk-substitute volumes — the bulk download exists and is free (acceptable-use policy).