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 weekEndpoints
| Endpoint | Returns | Access |
|---|---|---|
GET /v1/figures | index of all figures with current values; filter with ?category= and ?jurisdiction= | Free |
GET /v1/figures/{id} | full record including history | Free |
GET /v1/figures/{id}/current | current value only | Free |
GET /v1/figures/{id}/asof/{date} | the value in force on a date | API key |
GET /v1/figures/{id}/upcoming | announced future value(s) ahead of effect, individually signed | API key |
GET /v1/calendar | machine-readable calendar of all upcoming statutory changes | API key |
GET /v1/changes?since={date} | diff feed of releases since a date | API key |
GET /v1/releases/{version}/manifest | signed manifest (per-record hashes) | Free |
GET /v1/releases/{version}/dataset | bulk dataset download | Free (delayed) / key (latest) |
GET /v1/figures/{id}/audit-bundle | signed audit-evidence bundle (zip) for one figure | Company |
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
- Free, delayed: every release's dataset (JSON + SQLite)
and manifest are published in the public
statbook-releasesrepository. - Real-time: the latest release's dataset via
/v1/releases/2.0.0/datasetwith an API key. - Snapshot purchase: a one-off signed release snapshot for vendoring — see pricing. Vendoring is encouraged; the changes feed is the pull-back.
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).