Open Index
Dados públicos do Reino Unido por área: preços de imóveis, crimes registrados, privação, escolas e mais, com fontes, datas e links de citação.
Servidor MCP hospedado
npx add-mcp 'https://openindex.co.uk/mcp'Instala no Claude Code, Codex, Cursor e outros
Documentação
Base address
https://openindex.co.uk/v1
Format
JSON, UTF-8. Every answer has the same envelope.
Key
None needed
Fair use
About 60 requests a minute per IP address
Updates
Monthly snapshots. This one is 2026.10.9
OpenAPI 3.1
Quick start
Ask for an area by its official code. Hackney is E09000012; search finds any other.
curl
curl https://openindex.co.uk/v1/places/E09000012
JavaScript
const res = await fetch("https://openindex.co.uk/v1/places/E09000012");
const { data, meta } = await res.json();
const price = data.headline["house-price-average"];
console.log(price.value, price.period); // 605729 "2026-07"
console.log(meta.sources.map((s) => s.credit)); // the credit lines to show
Every answer is {data, meta}. meta.sources lists the sources behind the data, each with its licence and the credit line you must show next to it. meta.snapshot says which monthly snapshot answered.
meta, from the example
{
"snapshot": "2026.10.9",
"sources": [
{
"id": "ons-geography",
"name": "ONS boundaries, lookups and code history (Open Geography Portal)",
"publisher": "Office for National Statistics",
"licence": "OGL-3.0",
"licence_url": "https://www.ons.gov.uk/methodology/geography/licences",
"credit": "Source: Office for National Statistics licensed under the Open Government Licence v.3.0. Contains OS data © Crown copyright and database right 2026.",
"edition": null,
"published_at": null,
"retrieved_at": "2026-10-18T13:45:02Z"
},
{
"id": "ons-mye",
"name": "Mid-year population estimates",
"publisher": "Office for National Statistics, National Records of Scotland and the Northern Ireland Statistics and Research Agency",
"licence": "OGL-3.0",
"licence_url": "https://www.nationalarchives.gov.uk/doc/open-government-licence/version/3/",
"credit": "Source: Office for National Statistics licensed under the Open Government Licence v.3.0.",
"edition": null,
"published_at": null,
"retrieved_at": "2026-10-15T17:37:24Z"
},
… 26 more
],
"docs": "https://openindex.co.uk/api#places",
"licence": {
"id": "CC-BY-4.0",
"name": "Creative Commons Attribution 4.0 International",
"url": "https://creativecommons.org/licenses/by/4.0/",
"covers": "Open Index's own text and the figures it works out. Each source in meta.sources keeps its own licence and credit line."
},
"credit": "Source: Open Index, openindex.co.uk",
"doi": null
}
What the API offers
GET /v1 Every endpoint, with links to this guide and the OpenAPI file.
No parameters.
Example
GET https://openindex.co.uk/v1
Response: data, shortened
{
"name": "Open Index API",
"version": "v1",
"docs": "https://openindex.co.uk/api",
"openapi": "https://openindex.co.uk/v1/openapi.json",
"endpoints": [
{
"method": "GET",
"path": "/v1/places/{code}",
"summary": "One area",
"docs": "https://openindex.co.uk/api#places"
},
{
"method": "GET",
"path": "/v1/places/{code}/data",
"summary": "Every value for an area",
"docs": "https://openindex.co.uk/api#place-data"
},
… 7 more
]
}
Errors: 429, 503. What they mean
One area
GET /v1/places/{code} An area's name, level, type, parents, neighbours and the latest value of every layer published at its level, each with its period, publication date, rank and comparisons. Layers with no value here are listed under gaps with the reason.
code RequiredpathThe area's official code, such as E09000012 (Hackney). Lowercase works too.
Example
GET https://openindex.co.uk/v1/places/E09000012
Response: data, shortened
{
"code": "E09000012",
"name": "Hackney",
"level": "council",
"type": "London borough",
"boundary_set": "LAD26",
"parents": [
{
"code": "E12000007",
"name": "London",
"level": "region",
"path": "/london",
"url": "https://openindex.co.uk/london"
},
{
"code": "E92000001",
"name": "England",
"level": "nation",
"path": "/england",
"url": "https://openindex.co.uk/england"
},
… 1 more
],
"headline": {
"house-price-average": {
"layer": "house-price-average",
"name": "Average house price",
"unit": "gbp",
"value": 619408,
"period": "2026-08",
"published_at": "2026-10-21",
"flags": [],
"rank": {
"position": 13,
"of": 360,
"scope": "uk",
"direction": "highest",
"position_desc": 13,
"tied": false
},
"parent": {
"code": "E12000007",
"name": "London",
"value": 554430,
"period": "2026-08"
},
"uk": {
"code": "K02000001",
"name": "United Kingdom",
"value": 273037,
"period": "2026-08"
},
"sources": ["uk-hpi"],
"derived": null
},
"age-15-to-64": {
"layer": "age-15-to-64",
"name": "Aged 15 to 64",
"unit": "percent",
"value": 74.1,
"period": "2021",
"published_at": "2026-07-21",
"flags": [],
"rank": {
"position": 10,
"of": 361,
"scope": "uk",
"direction": "highest",
"position_desc": 10,
"tied": false
},
"parent": { "code": "E12000007", "name": "London", "value": 70, "period": "2021" },
"uk": null,
"sources": ["ons-census-2021", "nrs-census-2022", "nisra-census-2021"],
"derived": null
},
… 79 more
},
"gaps": [
{
"layer": "council-tax-homes-band-i",
"period": "2026",
"flags": ["not-covered"],
"reasons": ["England has eight bands, A to H. Band I exists only in Wales."]
},
{
"layer": "crime-scotland-count",
"period": "2025/26",
"flags": ["not-covered"],
"reasons": ["This layer covers Scotland only. For England, see street-level crime."]
},
… 5 more
],
"links": {
"data": "https://openindex.co.uk/v1/places/E09000012/data",
"page": "https://openindex.co.uk/hackney"
},
… 14 more fields
}
Errors: 400, 404, 429, 503. What they mean
Every value for an area
GET /v1/places/{code}/data Every layer value for the area at its own level, each with its period, publication date, flags in words, sources and licences. A value of null always comes with a reason. Filter to one family with family.
code RequiredpathThe area's official code, such as E09000012 (Hackney). Lowercase works too.
family OptionalqueryOnly this family of layers, such as housing.housing, crime, people, deprivation, health, education, environment, transport, connectivity, planning, economy, council-tax, elections, services
Example
GET https://openindex.co.uk/v1/places/E09000012/data?family=housing
Response: data, shortened
{
"place": {
"code": "E09000012",
"name": "Hackney",
"level": "council",
"level_name": "Council",
"type": "London borough",
"path": "/hackney",
"url": "https://openindex.co.uk/hackney"
},
"family": "housing",
"values": [
{
"layer": "house-price-average",
"name": "Average house price",
"family": "housing",
"unit": "gbp",
"precision": 0,
"level": "council",
"value": 619408,
"period": "2026-08",
"published_at": "2026-10-21",
"flags": [],
"notes": [],
"rank": {
"position": 13,
"of": 360,
"scope": "uk",
"direction": "highest",
"position_desc": 13,
"tied": false
},
"parent": {
"code": "E12000007",
"name": "London",
"value": 554430,
"period": "2026-08"
},
"uk": {
"code": "K02000001",
"name": "United Kingdom",
"value": 273037,
"period": "2026-08"
},
"sources": ["uk-hpi"],
"licences": ["OGL-3.0"],
"derived": null,
"links": { "layer": "https://openindex.co.uk/v1/layers/house-price-average" }
},
{
"layer": "house-price-change-1y",
"name": "Annual price change",
"family": "housing",
"unit": "percent",
"precision": 1,
"level": "council",
"value": -1.6,
"period": "2026-08",
"published_at": "2026-10-21",
"flags": [],
"notes": [],
"rank": {
"position": 59,
"of": 360,
"scope": "uk",
"direction": "lowest",
"position_desc": 298,
"tied": true
},
"parent": { "code": "E12000007", "name": "London", "value": -2.2, "period": "2026-08" },
"uk": {
"code": "K02000001",
"name": "United Kingdom",
"value": 0.9,
"period": "2026-08"
},
"sources": ["uk-hpi"],
"licences": ["OGL-3.0"],
"derived": null,
"links": { "layer": "https://openindex.co.uk/v1/layers/house-price-change-1y" }
},
… 14 more
],
… 1 more fields
}
Errors: 400, 404, 429, 503. What they mean
Every layer
GET /v1/layers The catalogue: families, every layer with data in this snapshot (its unit, levels and periods), and every source with its licence and credit line.
No parameters.
Example
GET https://openindex.co.uk/v1/layers
Response: data, shortened
{
"families": [
{ "id": "housing", "name": "Housing", "order": 1, "layers": 17 },
{ "id": "crime", "name": "Crime and justice", "order": 2, "layers": 19 },
… 12 more
],
"layers": [
{
"id": "age-15-to-64",
"slug": "age-15-to-64",
"name": "Aged 15 to 64",
"short_name": "15 to 64",
"family": "people",
"description": "The share of residents aged 15 to 64 at the census.",
"unit": "percent",
"kind": "share",
"better": "neutral",
"precision": 1,
"period_type": "census",
"geometry": "area",
"nations": ["E", "W", "S", "N"],
"finest_level": "output_area",
"levels": [
{
"level": "nation",
"level_name": "Nation",
"areas": 4,
"first": "2021",
"latest": "2021",
"count": 1
},
{
"level": "region",
"level_name": "Region",
"areas": 12,
"first": "2021",
"latest": "2021",
"count": 1
},
… 9 more
],
"derived": null,
"sources": ["ons-census-2021", "nrs-census-2022", "nisra-census-2021"],
"links": {
"self": "https://openindex.co.uk/v1/layers/age-15-to-64",
"values": "https://openindex.co.uk/v1/layers/age-15-to-64/values",
"page": "https://openindex.co.uk/sources/age-15-to-64",
"map": "https://openindex.co.uk/map/age-15-to-64"
}
},
{
"id": "age-65-and-over",
"slug": "age-65-and-over",
"name": "Aged 65 and over",
"short_name": "65 and over",
"family": "people",
"description": "The share of residents aged 65 and over at the census.",
"unit": "percent",
"kind": "share",
"better": "neutral",
"precision": 1,
"period_type": "census",
"geometry": "area",
"nations": ["E", "W", "S", "N"],
"finest_level": "output_area",
"levels": [
{
"level": "nation",
"level_name": "Nation",
"areas": 4,
"first": "2021",
"latest": "2021",
"count": 1
},
{
"level": "region",
"level_name": "Region",
"areas": 12,
"first": "2021",
"latest": "2021",
"count": 1
},
… 9 more
],
"derived": null,
"sources": ["ons-census-2021", "nrs-census-2022", "nisra-census-2021"],
"links": {
"self": "https://openindex.co.uk/v1/layers/age-65-and-over",
"values": "https://openindex.co.uk/v1/layers/age-65-and-over/values",
"page": "https://openindex.co.uk/sources/age-65-and-over",
"map": "https://openindex.co.uk/map/age-65-and-over"
}
},
… 128 more
],
"sources": [
{
"id": "bgs-radon",
"name": "Indicative atlas of radon (Great Britain and Northern Ireland)",
"publisher": "British Geological Survey and UK Health Security Agency",
"licence": "OGL-3.0",
"licence_url": "https://www.nationalarchives.gov.uk/doc/open-government-licence/version/3/",
"credit": "Contains British Geological Survey materials © UKRI 2022. Radon Potential classification UK Health Security Agency © Crown copyright 2022. Contains OS data © Crown copyright 2020. Contains public sector information licensed under the Open Government Licence v3.0.",
"landing_url": "https://www.bgs.ac.uk/datasets/radon-data-indicative-atlas-of-radon/",
"cadence": "irregular",
"nations": ["E", "W", "S", "N"]
},
{
"id": "defra-air-maps",
"name": "Modelled background air pollution maps (1 km grid)",
"publisher": "Department for Environment, Food & Rural Affairs",
"licence": "OGL-3.0",
"licence_url": "https://www.nationalarchives.gov.uk/doc/open-government-licence/version/3/",
"credit": "Source: Defra, modelled background air pollution maps. Contains public sector information licensed under the Open Government Licence v3.0.",
"landing_url": "https://www.gov.uk/government/publications/air-quality-compliance-assessment-2025-modelled-data-and-reports",
"cadence": "annual",
"nations": ["E", "W", "S", "N"]
},
… 45 more
]
}
Errors: 429, 503. What they mean
One layer
GET /v1/layers/{id} One layer: its description and caveats, every level with every period, colour breaks, coverage by nation, gaps with reasons, flags in words and its sources.
id RequiredpathA layer id from /v1/layers, such as house-price-average. Its slug (house-prices) works too.Any id from /v1/layers
Example
GET https://openindex.co.uk/v1/layers/house-price-average
Response: data, shortened
{
"id": "house-price-average",
"name": "Average house price",
"unit": "gbp",
"precision": 0,
"levels": [
{
"level": "uk",
"level_name": "United Kingdom",
"areas": 1,
"first": "1968-04",
"latest": "2026-08",
"count": 701,
"periods": ["1968-04", "1968-05", "1968-06", "1968-07", "1968-08", "1968-09", … 695 more],
"breaks": [175000, 225000, 275000, 350000, 450000, 600000],
"stats": {
"period": "2026-08",
"n": 1,
"min": 273037,
"median": 273037,
"max": 273037
},
"coverage": {}
},
{
"level": "nation",
"level_name": "Nation",
"areas": 4,
"first": "1968-04",
"latest": "2026-08",
"count": 701,
"periods": ["1968-04", "1968-05", "1968-06", "1968-07", "1968-08", "1968-09", … 695 more],
"breaks": [175000, 225000, 275000, 350000, 450000, 600000],
"stats": {
"period": "2026-08",
"n": 4,
"min": 198397,
"median": 209425,
"max": 293525
},
"coverage": {
"E": { "areas": 1, "with_value": 1 },
"W": { "areas": 1, "with_value": 1 },
"S": { "areas": 1, "with_value": 1 },
"N": { "areas": 1, "with_value": 1 }
}
},
… 2 more
],
"flag_labels": {
"no-data": "No figure for this area in this period.",
"not-covered": "Not published here.",
"former-code": "The publisher gives this figure under the area's former code. Open Index has matched it to today's area, whose boundary may differ slightly.",
"summed-from-neighbourhoods": "Worked out by Open Index by adding up the neighbourhood estimates inside this area.",
"shared-from-neighbourhoods": "Worked out by Open Index from neighbourhood estimates, shared out by where people lived at the census (by area in Northern Ireland). This area's edges do not follow neighbourhood edges, so the figure is close but not exact.",
"provisional": "HM Land Registry revises sales volumes for the latest 12 months as more sales are registered, so this figure may change.",
"no-type-price": "The UK House Price Index publishes no price for this type of home in this area.",
"no-type-price-ni": "The UK House Price Index publishes prices by property type for Northern Ireland as a whole, not for its councils.",
"series-starts-later": "Council figures start in January 2004 in Scotland and January 2005 in Northern Ireland.",
"excluded-low-sales": "The UK House Price Index leaves out the Isles of Scilly because it has very few sales each month."
},
"gaps": {
"level": "council",
"period": "2026-08",
"total": 1,
"by_flag": { "excluded-low-sales": 1 },
"areas": [
{
"code": "E06000053",
"name": "Isles of Scilly",
"flags": ["excluded-low-sales"],
"reason": "The UK House Price Index leaves out the Isles of Scilly because it has very few sales each month."
}
]
},
"links": {
"self": "https://openindex.co.uk/v1/layers/house-price-average",
"values": "https://openindex.co.uk/v1/layers/house-price-average/values",
"page": "https://openindex.co.uk/sources/house-prices",
"map": "https://openindex.co.uk/map/house-prices",
"download": "https://data.openindex.co.uk/s/2026.10.9/downloads/layers/house-price-average/council.csv"
},
… 19 more fields
}
Errors: 400, 404, 429, 503. What they mean
Every area's value
GET /v1/layers/{id}/values Every area's value at one level and period, in code order. Pages hold up to 1,000 rows; follow page.next for the rest. Values are only ever given for the levels a source published (no level is split down to finer areas).
id RequiredpathA layer id from /v1/layers, such as house-price-average. Its slug (house-prices) works too.Any id from /v1/layers
level OptionalqueryThe level, such as council. Defaults to the finest level the layer has.uk, nation, region, council, constituency, postcode_area, postcode_district, town, ward, middle_area, neighbourhood, output_area, postcode, point
period OptionalqueryThe period, such as 2026-07, 2025 or 2025/26. Defaults to the latest.2026-07, 2025, 2025/26 or latest
limit OptionalqueryRows per page, 1 to 1,000.1 to 1000
cursor OptionalqueryFrom page.next. Treat it as opaque.
Example
GET https://openindex.co.uk/v1/layers/house-price-average/values?level=council&period=2026-07
Response: data, shortened
{
"layer": "house-price-average",
"level": "council",
"period": "2026-07",
"unit": "gbp",
"published_at": "2026-10-21",
"values": [
{ "code": "E06000001", "name": "Hartlepool", "value": 135741, "flags": [] },
{ "code": "E06000002", "name": "Middlesbrough", "value": 140948, "flags": [] },
… 359 more
],
"page": { "limit": 1000, "count": 361, "total": 361, "next": null },
… 5 more fields
}
Errors: 400, 404, 429, 503. What they mean
The areas a postcode sits in
GET /v1/postcodes/{postcode} Every area a live postcode sits in, from the UK down, and its location to about 10 metres. Great Britain only: Northern Ireland (BT) postcodes answer 404 because their licence allows internal use only.
postcode RequiredpathA full postcode. Spaces and case do not matter: E81AA, e8-1aa and E8%201AA all work.
Example
GET https://openindex.co.uk/v1/postcodes/E81AA
Response: data, shortened
{
"postcode": "E8 1AA",
"district": "E8",
"sector": "E8 1",
"location": { "lon": -0.0617, "lat": 51.548 },
"areas": {
"council": {
"code": "E09000012",
"name": "Hackney",
"path": "/hackney",
"url": "https://openindex.co.uk/hackney",
"api": "https://openindex.co.uk/v1/places/E09000012"
},
"uk": {
"code": "K02000001",
"name": "United Kingdom",
"path": "/united-kingdom",
"url": "https://openindex.co.uk/united-kingdom",
"api": "https://openindex.co.uk/v1/places/K02000001"
},
… 7 more
},
"links": { "page": "https://openindex.co.uk/postcode/e8-1aa" }
}
Errors: 400, 404, 429, 503. What they mean
Search places, layers and postcodes
GET /v1/search The same results as the search bar: places ranked exact first, then by kind and size; layers by name and synonyms; postcodes, sectors and districts by pattern. "crime in hackney" is split into a layer and a place.
q RequiredqueryWhat to search for, 1 to 100 characters.
limit OptionalqueryResults per group, 1 to 50.1 to 50
Example
GET https://openindex.co.uk/v1/search?q=hackney&limit=3
Response: data, shortened
{
"query": "hackney",
"parts": null,
"places": [
{
"name": "Hackney",
"kind": "council",
"kind_label": "Council",
"code": "E09000012",
"context": "London borough",
"path": "/hackney",
"url": "https://openindex.co.uk/hackney",
"api": "https://openindex.co.uk/v1/places/E09000012",
"lon": -0.0551,
"lat": 51.5498
},
{
"name": "Hackney",
"kind": "place",
"kind_label": "Place",
"code": "E02000427",
"context": "Place in Haringey",
"path": "/haringey/harringay-ladder-south",
"url": "https://openindex.co.uk/haringey/harringay-ladder-south",
"api": "https://openindex.co.uk/v1/places/E02000427",
"lon": -0.0966,
"lat": 51.5711
},
… 1 more
],
"layers": [],
"postcode": null,
"notes": []
}
Errors: 400, 429, 503. What they mean
The snapshot answering
GET /v1/snapshot Which snapshot is live, when it was built, its levels and boundary sets, every source edition in it, its check results and where its downloads are.
No parameters.
Example
GET https://openindex.co.uk/v1/snapshot
Response: data, shortened
{
"snapshot": "2026.10.9",
"created_at": "2026-10-21T10:30:18Z",
"levels": ["uk", "nation", "region", "council", "constituency", "postcode_area", … 6 more],
"boundary_sets": {
"uk": ["K02000001"],
"nation": ["CTRY25"],
"region": ["CTRY25", "RGN25"],
"council": ["LAD26"],
"constituency": ["PCON24"],
"ward": ["WD26"],
"middle_area": ["IZ22", "MSOA21", "SDZ21"],
"neighbourhood": ["DZ21", "DZ22", "LSOA21"],
"output_area": ["OA21", "OA22"],
"neighbourhood@DZ11": ["DZ11"],
"neighbourhood@SOA01": ["SOA01"],
"postcode_area": ["PCA-ONSPD_AUG26"],
"postcode_district": ["PCD-ONSPD_AUG26"],
"town": ["BUA22"]
},
"areas": {
"uk": 1,
"nation": 4,
"region": 12,
"council": 361,
"constituency": 650,
"postcode_area": 120,
"postcode_district": 2863,
"town": 1209,
"ward": 8413,
"middle_area": 9448,
"neighbourhood": 46844,
"output_area": 235243
},
"layers": 130,
"sources": [
{
"id": "bgs-radon",
"edition": "Indicative Atlas of Radon: GB v3, NI v1",
"published_at": "2022-12-01",
"retrieved_at": "2026-10-19T16:07:49Z"
},
{
"id": "defra-air-maps",
"edition": "Background maps 2025 (CMAQ-Urban, 1 km)",
"published_at": "2026-10-09",
"retrieved_at": "2026-10-15T18:46:18Z"
},
… 95 more
],
"checks": { "passed": 1457, "warnings": 78, "failed": 0 },
"downloads": "https://data.openindex.co.uk/s/2026.10.9/downloads/index.json",
… 2 more fields
}
Errors: 429, 503. What they mean
This API as OpenAPI 3.1
GET /v1/openapi.json Generated from the route definitions and this snapshot's catalog: layer ids, families, levels and units are enums.
No parameters.
Example
GET https://openindex.co.uk/v1/openapi.json
Errors: 429, 503. What they mean
For AI assistants (MCP)
The same figures as tools an assistant can call, over the Model Context Protocol. No key, no sign-in.
Server
https://openindex.co.uk/mcp
Transport
Streamable HTTP. Stateless: no sessions, nothing stored
Protocol
2026-07-28, and 2025-03-26 to 2025-11-25 for older clients
Claude Code
claude mcp add --transport http open-index https://openindex.co.uk/mcp
search_places Places and postcodes by name, with each one's code, level and page.
get_place An area's key figures, or every figure in one topic, each with its period, source and a link to the figure.
get_ranking Councils ranked on one measure across the UK, a nation or an English region.
compare_places Two areas of the same level side by side.
lookup_postcode The areas a Great Britain postcode sits in, or the councils a district covers.
search Area documents for deep research, with a page path, title and citation URL.
fetch An area document by its page path, with the same key figures and sources as get_place.
Figure answers are short plain text. Each ends with a citation: the page to link, every source with its licence, dates and credit line, and Open Index’s own credit. The same licence rules as the API apply, and measures each nation makes its own way, such as deprivation, are never ranked or compared across nations.
Errors
Errors use one shape, with words that say what would work instead.
404
{
"error": {
"code": "not_found",
"message": "No area with code E09999999 in this snapshot."
}
}
400 bad_request The request is malformed: an unknown parameter, a bad code, or a level or period the layer does not have. The message says what would work.
404 not_found No such area, layer, postcode or endpoint in this snapshot, or a Northern Ireland postcode.
405 method_not_allowed Anything but GET, HEAD or OPTIONS. The API only reads.
429 rate_limited Too many requests from one address. Wait a minute and try again.
503 unavailable The data could not be read just now. Try again shortly. Never cached.
Limits and caching
Without a key, each IP address can make about 60 requests a minute. Past that the API answers 429 for a short while; wait a minute and try again. Keys with higher limits will come later. For whole layers, the downloads are faster than paging through the API.
Answers can be cached for an hour (Cache-Control: public, max-age=3600). Each has an ETag: send it back in If-None-Match and an unchanged answer is a bodiless 304. The X-Snapshot header names the snapshot, so you can tell when the data moved on.
CORS is open (Access-Control-Allow-Origin: *), so a web page can call the API directly. Only GET, HEAD and OPTIONS are answered.
Licences and credit
The data belongs to its publishers. Most is under the Open Government Licence v3.0, which lets you copy, publish and adapt it, including commercially, as long as you credit the source. Show the credit line of every source in meta.sources next to anything you make with it, and check each licence: a few sources use other open licences.
Figures Open Index works out itself, such as house prices against pay, carry a derived label (“Worked out by Open Index from …”). Keep that label with the figure. They, and Open Index’s own text, are licensed under CC BY 4.0: credit them as “Source: Open Index, openindex.co.uk”. Every response says so in meta.licence and meta.credit.
Some things are never served, because their licences don’t allow it: address fields from Price Paid Data and energy certificates, and Northern Ireland (BT) postcodes, which are licensed for internal use only.
Versioning
/v1 never changes shape. Fields may be added, but none is removed or renamed, so ignore fields you don’t know. A change that breaks that promise would go to /v2, announced on the changelog with /v1 kept running alongside.
Numbers do change: each monthly snapshot brings new periods, and publishers revise recent figures. Every value carries its period and publication date, so you can tell which edition you have.
Every layer as CSV and Parquet, boundaries as GeoJSON and GeoParquet, and the register and postcode lookups as Parquet: 1,884 files, listed in downloads/index.json, with every credit line and licence in LICENCE.txt. Each layer’s page under Sources links its own CSV.