Education API Reference
Ofsted inspection outcomes for state-funded schools in England.
Daily DfE Get Information About Schools register records are available through the additive establishments endpoints below.
Base URL: https://api.govdata.dev/v1
Search schools
Returns paginated latest-inspection records for school-search products, local-authority analysts, and education researchers. Find nearby primary schools for a postcode tool, filter schools inspected under the current report-card framework, or compare published judgements within a local authority.
/v1/education/schools
Waiting for request...
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
name |
string | No | — | Case-insensitive partial school-name match. |
postcode |
string | No | — | Full postcode; spacing and case are normalised. |
local_authority |
string | No | — | Case-insensitive partial local-authority match. |
phase |
string | No | — | Exact Ofsted phase, such as Primary, Secondary, or Special. |
judgement |
string | No | — | Matches any current report-card standard or legacy OEIF value (1–4). |
has_current_judgements |
boolean | No | — | true for post-November-2025 report-card records; false for legacy-only records. |
page |
integer | No | 1 | One-based result page. |
per_page |
integer | No | 25 | Results per page; minimum 1, maximum 100. |
curl -H "Authorization: Bearer YOUR_API_KEY" \ "https://api.govdata.dev/v1/education/schools?has_current_judgements=true&per_page=1"
uri = URI("https://api.govdata.dev/v1/education/schools") uri.query = URI.encode_www_form(has_current_judgements: true, per_page: 1) req = Net::HTTP::Get.new(uri, "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/education/schools", headers={"Authorization": "Bearer YOUR_API_KEY"}, params={"postcode": "NW3 2JB", "phase": "Primary", "has_current_judgements": True, "per_page": 5} )
const url = new URL("https://api.govdata.dev/v1/education/schools"); url.search = new URLSearchParams({ has_current_judgements: "true", per_page: "1" }); const response = await fetch(url, { headers: { Authorization: "Bearer YOUR_API_KEY" } });
Response
{ "data": [ { "urn": "138858", "school_name": "Abbeyfield School", "local_authority": "West Northamptonshire", "postcode": "NN4 8BU", "phase": "Secondary", "inspection_date": "2026-01-20", "publication_date": "2026-04-19", "current_judgements": { "category_of_concern": null, "safeguarding": "Met", "inclusion": "Needs attention", "curriculum_and_teaching": "Needs attention", "achievement": "Needs attention", "attendance_and_behaviour": "Needs attention", "personal_development_and_wellbeing": "Needs attention", "early_years": "Not applicable", "post_16": "Needs attention", "leadership_and_governance": "Expected standard" }, "legacy_oief_judgements": { "overall_effectiveness": null, "quality_of_education": null, "behaviour_and_attitudes": null, "personal_development": null, "leadership_and_management": null, "safeguarding_effective": null } } ], "meta": { "api_version": "v1", "licence": "Open Government Licence v3.0", "source": "Ofsted", "source_url": "https://www.gov.uk/government/statistical-data-sets/monthly-management-information-ofsteds-school-inspections-outcomes", "latest_publication_date": "2026-07-26" }, "pagination": { "total": 2526, "page": 1, "per_page": 1, "total_pages": 2526 } }
current_judgements contains the report-card standards used from 10 November 2025. legacy_oief_judgements preserves the older numeric OEIF scheme; null means that scheme did not supply a value, not a zero grade. URN 119441 is a real row in the bundled Ofsted development fixture.
Error responses
Search has no endpoint-specific 400, 404, or 422 branch. Unknown filters return an empty 200 response; boolean values use Rails boolean coercion.
Get school by URN
Returns the latest published inspection record for one school, addressed by its stable Unique Reference Number. Use it for a school profile page or to refresh Ofsted fields already linked to a school in your own system.
/v1/education/schools/:urn
Waiting for request...
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
urn |
string | Yes | — | Department for Education Unique Reference Number. |
curl -H "Authorization: Bearer YOUR_API_KEY" "https://api.govdata.dev/v1/education/schools/138858"
uri = URI("https://api.govdata.dev/v1/education/schools/138858") req = Net::HTTP::Get.new(uri, "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/education/schools/138858", headers={"Authorization": "Bearer YOUR_API_KEY"})
const response = await fetch("https://api.govdata.dev/v1/education/schools/138858", { headers: { Authorization: "Bearer YOUR_API_KEY" } });
Response
{ "data": { "urn": "138858", "school_name": "Abbeyfield School", "local_authority": "West Northamptonshire", "postcode": "NN4 8BU", "phase": "Secondary", "inspection_date": "2026-01-20", "publication_date": "2026-04-19", "current_judgements": { "category_of_concern": null, "safeguarding": "Met", "inclusion": "Needs attention", "curriculum_and_teaching": "Needs attention", "achievement": "Needs attention", "attendance_and_behaviour": "Needs attention", "personal_development_and_wellbeing": "Needs attention", "early_years": "Not applicable", "post_16": "Needs attention", "leadership_and_governance": "Expected standard" }, "legacy_oief_judgements": { "overall_effectiveness": null, "quality_of_education": null, "behaviour_and_attitudes": null, "personal_development": null, "leadership_and_management": null, "safeguarding_effective": null } }, "meta": { "api_version": "v1", "licence": "Open Government Licence v3.0", "source": "Ofsted", "source_url": "https://www.gov.uk/government/statistical-data-sets/monthly-management-information-ofsteds-school-inspections-outcomes", "latest_publication_date": "2026-07-26" } }
This is the same complete school object returned in search, without pagination.
Error responses
404 — the URN is not present. There are no endpoint-specific 400 or 422 branches.
{"error":{"code":"not_found","message":"Resource not found","documentation_url":"https://docs.govdata.dev/errors/not_found"}}
Search establishments
Search open, closed, and proposed establishments by canonical URN and register attributes. Results include predecessor/successor relationships and the latest Ofsted inspection when one joins on URN.
/v1/education/establishments
Waiting for request...
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
name |
string | No | — | Case-insensitive partial establishment-name match. |
postcode |
string | No | — | Full postcode; spacing and case are normalised. |
local_authority |
string | No | — | Exact local-authority name or DfE code. |
phase |
string | No | — | Exact phase such as Primary or Secondary. |
type |
string | No | — | Exact GIAS establishment type. |
status |
string | No | — | Open, Closed, Open, but proposed to close, or Proposed to open. |
age |
integer | No | — | Only establishments whose statutory age range contains this age. |
page |
integer | No | 1 | One-based result page. |
per_page |
integer | No | 25 | Results per page; maximum 100. |
curl -H "Authorization: Bearer YOUR_API_KEY" "https://api.govdata.dev/v1/education/establishments?name=Aldgate&status=Open&per_page=1"
uri = URI("https://api.govdata.dev/v1/education/establishments?name=Aldgate&status=Open&per_page=1") req = Net::HTTP::Get.new(uri, "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/education/establishments", headers={"Authorization": "Bearer YOUR_API_KEY"}, params={"postcode": "EC3A 5DE"})
const response = await fetch("https://api.govdata.dev/v1/education/establishments?postcode=EC3A%205DE", { headers: { Authorization: "Bearer YOUR_API_KEY" } });
Response
{"data":[{"urn":"100000","name":"The Aldgate School","establishment_type":"Voluntary aided school","status":"Open","open_date":null,"close_date":null,"local_authority":{"code":"201","name":"City of London"},"postcode":"EC3A 5DE","phase":"Primary","age_range":{"low":3,"high":11},"gender":"Mixed","religious_character":"Church of England","capacity":245,"pupils":229,"address":"St James's Passage, Duke's Place, London, EC3A 5DE","telephone":"02072831147","ukprn":"10079319","source_updated_on":"2026-06-29","links":[],"latest_inspection":null}],"meta":{"api_version":"v1","licence":"Open Government Licence v3.0","source":"Department for Education — Get Information About Schools","source_url":"https://get-information-schools.service.gov.uk/Downloads","source_release_date":"2026-08-21","source_last_changed":"2026-06-29","imported_at":"2026-08-21T07:44:19.742Z"},"pagination":{"total":1,"page":1,"per_page":1,"total_pages":1}}
Captured verbatim from a local API run using the trimmed real 21 August 2026 source sample. Re-capture examples from production after the initial load.
Error responses
Invalid age returns 400 invalid_parameter. Authentication errors return 401. A search with no matches returns an empty 200 page.
{"error":{"code":"invalid_parameter","message":"age must be a whole number and status must be a GIAS status.","documentation_url":"https://docs.govdata.dev/errors/invalid_parameter"}}
Get establishment by URN
Returns one canonical establishment record using the DfE Unique Reference Number.
/v1/education/establishments/:urn
Waiting for request...
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
urn |
string | Yes | — | DfE Unique Reference Number. |
curl -H "Authorization: Bearer YOUR_API_KEY" "https://api.govdata.dev/v1/education/establishments/100000"
Net::HTTP.get_response(URI("https://api.govdata.dev/v1/education/establishments/100000"))
requests.get("https://api.govdata.dev/v1/education/establishments/100000", headers={"Authorization": "Bearer YOUR_API_KEY"})
fetch("https://api.govdata.dev/v1/education/establishments/100000", { headers: { Authorization: "Bearer YOUR_API_KEY" } })
Response
{"data":{"urn":"100000","name":"The Aldgate School","status":"Open","postcode":"EC3A 5DE"},"meta":{"api_version":"v1","licence":"Open Government Licence v3.0","source":"Department for Education — Get Information About Schools","source_release_date":"2026-08-21"}}
Error responses
An unknown URN returns 404 not_found.
{"error":{"code":"not_found","message":"Resource not found","documentation_url":"https://docs.govdata.dev/errors/not_found"}}
GIAS data notes
Coverage and cadence: all open, closed, and proposed establishments in England. DfE updates the public downloads daily; GovData imports after the publisher's midnight generation.
Relationships: links contains DfE predecessor and successor history. latest_inspection is an optional URN join to Ofsted.
Licence: GIAS public bulk downloads are reused under the Open Government Licence v3.0.
Data notes
Coverage and cadence: Ofsted-inspected state-funded schools in England only. Ofsted publishes management information to a dated monthly release schedule, including separate summer releases. GovData refreshes from those releases; it is not a live inspection feed. meta.latest_publication_date is the newest individual inspection-report date, not the source release or import date, so the API does not currently expose a machine-verifiable freshness timestamp.
Legacy-OEIF dates: inspection_date and publication_date are null for 19,960 of 21,957 records (91%). The populated dates in the examples are the exception.
Licence and attribution: source Ofsted monthly management information, reused under the Open Government Licence v3.0. Attribute Ofsted and link to the source release.
Ofsted replaced the single overall-effectiveness judgement with report-card standards for inspections from 10 November 2025. Current text standards and legacy OEIF grades (1 outstanding, 2 good, 3 requires improvement, 4 inadequate) are separate schemes; do not combine or rank them as one scale.
Each row is the latest full inspection published in the source, not a complete inspection history. Publication can lag inspection, fields can be null or Not applicable, and academy conversion or school closure can change identifiers and coverage.