Employment API Reference
National minimum wage, pension auto-enrolment thresholds, and ONS earnings.
Base URL: https://api.govdata.dev/v1
Minimum Wage
/v1/employment/minimum-wage/rates
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": "2026-27", "rates": [ { "age_band": "youth_under_18", "hourly_rate": 8.0 }, { "age_band": "apprentice", "hourly_rate": 8.0 }, { "age_band": "standard_18_20", "hourly_rate": 10.85 }, { "age_band": "national_living_wage", "hourly_rate": 12.71 } ] }, "meta": { "api_version": "v1", "licence": "Open Government Licence v3.0", "source": "GOV.UK", "source_url": "https://www.gov.uk/national-minimum-wage-rates", "last_updated": "2026-04-06", "tax_year": "2026-27" } }
Auto-Enrolment
/v1/employment/auto-enrolment/thresholds
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": "2026-27", "employee_min_rate": 0.05, "employer_min_rate": 0.03, "total_min_rate": 0.08, "earnings_trigger": 10000.0, "qualifying_earnings_lower": 6240.0, "qualifying_earnings_upper": 50270.0 }, "meta": { "api_version": "v1", "licence": "Open Government Licence v3.0", "source": "GOV.UK", "source_url": "https://www.gov.uk/workplace-pensions/what-you-your-employer-and-the-government-pay", "last_updated": "2026-04-06", "tax_year": "2026-27" } }
Gender Pay Gap
Search statutory employer reports to benchmark organisations, research sectors, or chart an employer's published history. Percentages are returned as rates: 0.067 means 6.7%, while a negative gap means women's pay was higher.
Search reports
/v1/employment/pay-gap
Waiting for request...
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
employer_name | string | No | — | Case-insensitive literal prefix; % and _ are not wildcards. |
company_number | string | No | — | Exact Companies House number. |
year | integer | No | — | Start year from 2017 through the current reporting year. |
sic_code | string | No | — | Exact code in the employer's reported SIC-code list. |
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 "employer_name=HM T" --data-urlencode "year=2025" https://api.govdata.dev/v1/employment/pay-gap
uri = URI("https://api.govdata.dev/v1/employment/pay-gap"); uri.query = URI.encode_www_form(employer_name: "HM T", year: 2025); req = Net::HTTP::Get.new(uri); req["Authorization"] = "Bearer YOUR_API_KEY"; response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |http| http.request(req) }
response = requests.get("https://api.govdata.dev/v1/employment/pay-gap", params={"employer_name": "HM T", "year": 2025}, headers={"Authorization": "Bearer YOUR_API_KEY"})
const params = new URLSearchParams({ employer_name: "HM T", year: "2025" }); const response = await fetch(`https://api.govdata.dev/v1/employment/pay-gap?${params}`, { headers: { Authorization: "Bearer YOUR_API_KEY" } });
Production response
{"data":[{"employer_id":303,"employer_name":"HM Treasury","current_name":"HM Treasury","reporting_year":2025,"company_number":null,"address":"1 Horse Guards Road, London, London, United Kingdom, SW1A 2HQ","postcode":"SW1A 2HQ","sic_codes":["1","84110"],"employer_size":"1000 to 4999","pay_gaps":{"mean_hourly":0.062,"median_hourly":0.067,"mean_bonus":0.078,"median_bonus":-0.091},"bonus_rates":{"male":0.83,"female":0.827},"quartile_rates":{"lower":{"male":0.424,"female":0.576},"lower_middle":{"male":0.509,"female":0.491},"upper_middle":{"male":0.533,"female":0.467},"top":{"male":0.526,"female":0.474}},"responsible_person":null,"company_link":"https://www.gov.uk/government/publications/hm-treasurys-gender-pay-gap-report-2024-to-2025","submitted_late":false,"due_at":"2026-03-31T00:00:00.000Z","submitted_at":"2025-12-16T10:55:33.000Z","company":null}],"meta":{"api_version":"v1","licence":"Open Government Licence v3.0","source":"UK Gender Pay Gap Service","source_url":"https://gender-pay-gap.service.gov.uk/viewing/download","reporting_years":"2017-18 to 2026-27"},"pagination":{"total":1,"page":1,"per_page":1,"total_pages":1}}
Employer history
Return every loaded report for one service employer ID or company number, ordered oldest first. Use this for trend charts or due-diligence timelines.
/v1/employment/pay-gap/history
Waiting for request...
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
company_number | string | Conditional | — | Required unless employer_id is supplied. |
employer_id | integer | Conditional | — | Required unless company_number is supplied. |
curl -G -H "Authorization: Bearer YOUR_API_KEY" --data-urlencode "employer_id=303" https://api.govdata.dev/v1/employment/pay-gap/history
uri = URI("https://api.govdata.dev/v1/employment/pay-gap/history?employer_id=303"); req = Net::HTTP::Get.new(uri); req["Authorization"] = "Bearer YOUR_API_KEY"; response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |http| http.request(req) }
response = requests.get("https://api.govdata.dev/v1/employment/pay-gap/history", params={"employer_id": 303}, headers={"Authorization": "Bearer YOUR_API_KEY"})
const response = await fetch("https://api.govdata.dev/v1/employment/pay-gap/history?employer_id=303", { headers: { Authorization: "Bearer YOUR_API_KEY" } });
Captured response
{"data":{"employer":{"employer_id":303,"employer_name":"HM Treasury","company_number":null,"company":null},"reports":[{"employer_id":303,"employer_name":"HM Treasury","current_name":"HM Treasury","reporting_year":2017,"company_number":null,"address":"1 Horse Guards Road, London, London, United Kingdom, SW1A 2HQ","postcode":"SW1A 2HQ","sic_codes":["1","84110"],"employer_size":"1000 to 4999","pay_gaps":{"mean_hourly":0.071,"median_hourly":0.137,"mean_bonus":0.335,"median_bonus":0.2},"bonus_rates":{"male":0.43,"female":0.38},"quartile_rates":{"lower":{"male":0.45,"female":0.55},"lower_middle":{"male":0.51,"female":0.49},"upper_middle":{"male":0.59,"female":0.41},"top":{"male":0.54,"female":0.46}},"responsible_person":null,"company_link":"https://www.gov.uk/government/publications/hm-treasury-gender-pay-gap-report-2016-to-2017","submitted_late":false,"due_at":"2018-03-31T00:00:00.000Z","submitted_at":"2017-12-18T12:32:51.000Z","company":null}]},"meta":{"api_version":"v1","licence":"Open Government Licence v3.0","source":"UK Gender Pay Gap Service","source_url":"https://gender-pay-gap.service.gov.uk/viewing/download","reporting_years":"2017-18 to 2026-27"}}
Verbatim production capture for employer ID 303, trimmed to the first report. company is null when no Companies House match is loaded. Blank source percentages remain null, never zero.
Errors
HTTP 400 {"error":{"code":"invalid_parameter","message":"year must be an integer.","documentation_url":"https://docs.govdata.dev/errors/invalid_parameter"}} HTTP 404 {"error":{"code":"not_found","message":"No pay-gap reports found for that employer.","documentation_url":"https://docs.govdata.dev/errors/not_found"}} HTTP 422 {"error":{"code":"invalid_year","message":"year must be between 2017 and 2026.","documentation_url":"https://docs.govdata.dev/errors/invalid_year"}}
Coverage and cadence: 94,471 unique employer-year reports across every available file: 2017-18 through partial 2026-27. Completed reporting deadlines are 30 March for most public authorities and 4 April for other employers, so GovData refreshes annually on 7 April. The current year may grow through late submissions.
Licence and caveats: Gender Pay Gap Service, Open Government Licence v3.0. Values are employer-submitted and can contain blanks, negative gaps, extreme bonus percentages, late corrections, changing names, and missing company numbers for public bodies. A report describes an employer, not necessarily a single legal company.
ASHE Earnings
/v1/employment/earnings
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. |