Employment API Reference
National minimum wage, pension auto-enrolment thresholds, and ONS earnings.
Base URL: https://api.govdata.dev/v1
Minimum Wage
GET
/v1/employment/minimum-wage/rates
response
Waiting for request...
Current national minimum and living wage rates by age band.
Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
tax_year |
string | No | Tax year in YYYY-YY format. Defaults to current year. |
curl -H "Authorization: Bearer YOUR_API_KEY" \ https://api.govdata.dev/v1/employment/minimum-wage/rates
uri = URI("https://api.govdata.dev/v1/employment/minimum-wage/rates") req = Net::HTTP::Get.new(uri) req["Authorization"] = "Bearer YOUR_API_KEY" res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |h| h.request(req) }
response = requests.get( "https://api.govdata.dev/v1/employment/minimum-wage/rates", headers={"Authorization": "Bearer YOUR_API_KEY"} )
const response = await fetch("https://api.govdata.dev/v1/employment/minimum-wage/rates", { headers: { "Authorization": "Bearer YOUR_API_KEY" } });
Response
{ "data": { "tax_year": "2025-26", "effective_from": "2025-04-01", "rates": [ { "band": "National Living Wage (21+)", "hourly_rate": 12.21 }, { "band": "18-20", "hourly_rate": 10.00 }, { "band": "16-17", "hourly_rate": 7.55 }, { "band": "Apprentice", "hourly_rate": 7.55 } ] }, "meta": { "api_version": "v1", "licence": "Open Government Licence v3.0", "source": "GOV.UK", "source_url": "https://www.gov.uk/national-minimum-wage-rates" } }
Auto-Enrolment
GET
/v1/employment/auto-enrolment/thresholds
response
Waiting for request...
Pension auto-enrolment earnings thresholds and contribution rates.
Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
tax_year |
string | No | Tax year in YYYY-YY format. Defaults to current year. |
curl -H "Authorization: Bearer YOUR_API_KEY" \ https://api.govdata.dev/v1/employment/auto-enrolment/thresholds
uri = URI("https://api.govdata.dev/v1/employment/auto-enrolment/thresholds") req = Net::HTTP::Get.new(uri) req["Authorization"] = "Bearer YOUR_API_KEY" res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |h| h.request(req) }
response = requests.get( "https://api.govdata.dev/v1/employment/auto-enrolment/thresholds", headers={"Authorization": "Bearer YOUR_API_KEY"} )
const response = await fetch("https://api.govdata.dev/v1/employment/auto-enrolment/thresholds", { headers: { "Authorization": "Bearer YOUR_API_KEY" } });
Response
{ "data": { "tax_year": "2025-26", "thresholds": { "lower_qualifying_earnings": 6240, "earnings_trigger": 10000, "upper_qualifying_earnings": 50270 }, "contribution_rates": { "employee_minimum": 0.05, "employer_minimum": 0.03, "total_minimum": 0.08 } }, "meta": { "api_version": "v1", "licence": "Open Government Licence v3.0", "source": "GOV.UK", "source_url": "https://www.gov.uk/workplace-pensions/what-your-employer-must-do" } }
ASHE Earnings
GET
/v1/employment/earnings
response
Waiting for request...
Median and mean gross hourly, weekly and annual earnings from ASHE Tables 5 and 29. Results are paginated. ONS x/.. markers become null with suppressed: true; null never means zero.
Query parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
year |
integer | No | — | ASHE reference year, for example 2025. |
region |
string | No | — | Region name or official geography code, for example London or E12000007. |
industry_code |
string | No | — | SIC 2007 industry code, including all for the aggregate. |
occupation_code |
string | No | — | SOC 2020 occupation code, including all for the aggregate. |
statistic |
string | No | — | Filter by mean or median. |
suppressed |
boolean | No | — | Filter by whether ONS suppressed the estimate. |
page |
integer | No | 1 | Page number. |
per_page |
integer | No | 25 | Records per page, from 1 to 100. |
curl -G -H "Authorization: Bearer YOUR_API_KEY" \ --data-urlencode "year=2025" --data-urlencode "region=London" \ --data-urlencode "statistic=mean" \ https://api.govdata.dev/v1/employment/earnings
uri = URI("https://api.govdata.dev/v1/employment/earnings") uri.query = URI.encode_www_form(year: 2025, region: "London", statistic: "mean") req = Net::HTTP::Get.new(uri) req["Authorization"] = "Bearer YOUR_API_KEY" res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(req) }
response = requests.get( "https://api.govdata.dev/v1/employment/earnings", params={"year": 2025, "region": "London", "statistic": "mean"}, headers={"Authorization": "Bearer YOUR_API_KEY"} )
const params = new URLSearchParams({ year: "2025", region: "London", statistic: "mean" }); const response = await fetch(`https://api.govdata.dev/v1/employment/earnings?${params}`, { headers: { "Authorization": "Bearer YOUR_API_KEY" } });
Response
{ "data": [ { "year": 2025, "geography": { "code": "E12000007", "name": "London" }, "industry": { "code": "all", "name": "All industries" }, "occupation": { "code": "all", "name": "All occupations" }, "statistic": "mean", "median": { "hourly_pay": null, "weekly_pay": null, "annual_pay": null }, "mean": { "hourly_pay": 30.94, "weekly_pay": 1047.3, "annual_pay": 60673.0 }, "suppressed": false, "source_table": 5 } ], "meta": { "api_version": "v1", "licence": "Open Government Licence v3.0", "source": "ONS Annual Survey of Hours and Earnings", "source_url": "https://www.ons.gov.uk/employmentandlabourmarket/peopleinwork/earningsandworkinghours/datasets/regionbyindustry2digitsicashetable5" }, "pagination": { "total": 1, "page": 1, "per_page": 25, "total_pages": 1 } }
Employment data is sourced from GOV.UK and ONS ASHE, updated annually. Contains public sector information licensed under the Open Government Licence v3.0.
Data Coverage
| Source | HMRC / GOV.UK / ONS |
| Date range | Minimum wage and auto-enrolment: 2020-21 to 2026-27 tax years; ASHE earnings: 2025 provisional reference year |
| Records | Minimum wage rates, auto-enrolment thresholds, and ASHE earnings by geography, industry, and occupation |
| Updated | Annually |
| Limitations | Historical rates before 2020-21 are not available. Minimum-wage bands follow the law in each year: NLW applied from age 25 in 2020-21, age 23 from 2021-22, and age 21 from 2024-25; a separate age 21–22 band therefore exists only from 2021-22 through 2023-24. |