List metrics
curl --request GET \
--url https://api.catchment.app/v1/metrics \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.catchment.app/v1/metrics"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.catchment.app/v1/metrics', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"request_id": "146b728a-d25b-4a42-a902-893e4f415d5f",
"metrics": [
{
"key": "avg_income",
"label": "Average Household income",
"description": "ONS average income per household.",
"domain": "affluence",
"unit": "currency_gbp",
"source": "ONS small area income estimates, FYE 2023",
"nations": null,
"geographies": [
"catchment",
"hex"
],
"period_basis": "source_period"
},
{
"key": "avg_price",
"label": "Average House Price (2024/5)",
"description": "Average residential sale price (2025 figures) from MH Land Registry.",
"domain": "affluence",
"unit": "currency_gbp",
"source": "HM Land Registry Price Paid Data",
"nations": null,
"geographies": [
"catchment",
"hex"
],
"period_basis": "source_period"
},
{
"key": "la_occupancy_pct",
"label": "Local authority occupancy",
"description": "Reported English older-adult residential and nursing occupancy, excluding specialist beds. This is an authority figure, not catchment occupancy.",
"domain": "care",
"unit": "percent",
"source": "Capacity Tracker",
"nations": [
"E92000001"
],
"geographies": [
"local_authority"
],
"period_basis": "latest_reporting_month"
}
],
"credits": {
"used": 0,
"remaining": 1000
}
}{
"request_id": "4bc9eb08-0d69-4c6e-b226-1e66eda03bdc",
"error": {
"code": "unauthorized",
"message": "A valid API key is required. Send it as an Authorization: Bearer header."
}
}{
"request_id": "0e2e47c8-e798-4247-a077-d6b4d66cb70f",
"error": {
"code": "forbidden",
"message": "API access is not enabled for this organisation."
}
}{
"request_id": "c4c917f1-4162-47ac-b3d9-1642905491ba",
"error": {
"code": "rate_limited",
"message": "Rate limit of 60 requests a minute reached."
}
}{
"request_id": "9b8a7c6d-5e4f-4a3b-9c2d-1e0f9a8b7c6d",
"error": {
"code": "internal_error",
"message": "The request could not be completed. Quote the request id if this keeps happening."
}
}Metrics
List metrics
Catalogue of metrics this organisation can request, with stable key, label, description, unit, domain, source, nation coverage, supported geographies and period basis. Query parameters are ignored. This endpoint uses no credits.
GET
/
v1
/
metrics
List metrics
curl --request GET \
--url https://api.catchment.app/v1/metrics \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.catchment.app/v1/metrics"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.catchment.app/v1/metrics', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"request_id": "146b728a-d25b-4a42-a902-893e4f415d5f",
"metrics": [
{
"key": "avg_income",
"label": "Average Household income",
"description": "ONS average income per household.",
"domain": "affluence",
"unit": "currency_gbp",
"source": "ONS small area income estimates, FYE 2023",
"nations": null,
"geographies": [
"catchment",
"hex"
],
"period_basis": "source_period"
},
{
"key": "avg_price",
"label": "Average House Price (2024/5)",
"description": "Average residential sale price (2025 figures) from MH Land Registry.",
"domain": "affluence",
"unit": "currency_gbp",
"source": "HM Land Registry Price Paid Data",
"nations": null,
"geographies": [
"catchment",
"hex"
],
"period_basis": "source_period"
},
{
"key": "la_occupancy_pct",
"label": "Local authority occupancy",
"description": "Reported English older-adult residential and nursing occupancy, excluding specialist beds. This is an authority figure, not catchment occupancy.",
"domain": "care",
"unit": "percent",
"source": "Capacity Tracker",
"nations": [
"E92000001"
],
"geographies": [
"local_authority"
],
"period_basis": "latest_reporting_month"
}
],
"credits": {
"used": 0,
"remaining": 1000
}
}{
"request_id": "4bc9eb08-0d69-4c6e-b226-1e66eda03bdc",
"error": {
"code": "unauthorized",
"message": "A valid API key is required. Send it as an Authorization: Bearer header."
}
}{
"request_id": "0e2e47c8-e798-4247-a077-d6b4d66cb70f",
"error": {
"code": "forbidden",
"message": "API access is not enabled for this organisation."
}
}{
"request_id": "c4c917f1-4162-47ac-b3d9-1642905491ba",
"error": {
"code": "rate_limited",
"message": "Rate limit of 60 requests a minute reached."
}
}{
"request_id": "9b8a7c6d-5e4f-4a3b-9c2d-1e0f9a8b7c6d",
"error": {
"code": "internal_error",
"message": "The request could not be completed. Quote the request id if this keeps happening."
}
}Catalogue scope
The catalogue is filtered by the organisation’s API dataset and metric permissions.geographies controls which endpoint can read a key. local_authority keys can also be included in a postcode catchment request; they remain authority values in that response.
period_basis identifies source-period, current published, mixed population/supply, financial-year or monthly observations. It is not a claim that every dataset is current-year data. nations: null means no explicit nation restriction in the catalogue, within the API’s overall Great Britain coverage; individual values may still be unavailable.
The static metric catalogue describes the current full-access set. This endpoint is the discovery contract for your own organisation. Query parameters are ignored. No credits are consumed.Authorizations
An API key created under Account > Catchment API. Keys start with ck_.