Overview

The EES API provides a way to directly consume published data published on the EES service.


Documents

openapi-v1-with-docs.json
Uploaded schema

Who can use this API

Anyone, the service is open to all with an interest in our published statistics.


Service level

Public facing.


Technologies

REST


Environments

Environment Base URL
live https://api.education.gov.uk/statistics

You need to sign in to subscribe to an API environment or view your existing subscriptions.

Sign in here using GOV.UK One Login


Current release

Release name Available from
1.0.4 10 August 2026

Other releases

Release name Available from Available to
1.0.2 01 September 2025
1.0.3 17 November 2025
v1 06 March 2025
v1 live 06 March 2025
v1.0.1 24 June 2025

Operations

GET Download a data set as CSV

Description

The CSV response will render its metadata in a human-readable format (instead of machine-readable IDs). The CSV is not subject to the same backward compatibility guarantees as the data set's JSON representation in other endpoints.

URL template
/v1/data-sets/{dataSetId}/csv
Show / Hide additional information

Parameters

Name Type Location Field Description
dataSetId string Path Required The ID of the data set.
dataSetVersion string Query Optional The data set version e.g. 1.0, 1.1, 2.0, etc. Wildcard versions are supported. For example, `2.*` returns the latest minor version in the v2 series.

Response Codes

Status code Description
200 The data set CSV file.
403 Forbidden
404 Not Found
504 Timeout

Example Request

curl -X GET \
  "https://api.education.gov.uk/statistics/v1/data-sets/{dataSetId}/csv"

GET Get a data set version's summary

Description

Gets a data set version's summary details.

URL template
/v1/data-sets/{dataSetId}/versions/{dataSetVersion}
Show / Hide additional information

Parameters

Name Type Location Field Description
dataSetId string Path Required The ID of the data set.
dataSetVersion string Path Required The data set version e.g. 1.0, 1.1, 2.0, etc. Wildcard versions are supported. For example, `2.*` returns the latest minor version in the v2 series.

Response Codes

Status code Description
200 The requested data set version.
403 Forbidden
404 Not Found
504 Timeout

Example Request

curl -X GET \
  "https://api.education.gov.uk/statistics/v1/data-sets/{dataSetId}/versions/{dataSetVersion}"

GET Get a data set version's changes

Description

Lists the changes made by a data set version relative to the version prior to it.

URL template
/v1/data-sets/{dataSetId}/versions/{dataSetVersion}/changes
Show / Hide additional information

Parameters

Name Type Location Field Description
dataSetId string Path Required The ID of the data set.
dataSetVersion string Path Required The data set version e.g. 1.0, 1.1, 2.0, etc. Wildcard versions are supported. For example, `2.*` returns the latest minor version in the v2 series.
includePatchHistory boolean Query Optional Whether to include change logs for all associated patches will be in the results.

Response Codes

Status code Description
200 The changes for the data set version.
403 Forbidden
404 Not Found
504 Timeout

Example Request

curl -X GET \
  "https://api.education.gov.uk/statistics/v1/data-sets/{dataSetId}/versions/{dataSetVersion}/changes"

GET Get a data set's metadata

Description

Get the metadata about a data set. Use this to create data set queries.

URL template
/v1/data-sets/{dataSetId}/meta
Show / Hide additional information

Parameters

Name Type Location Field Description
dataSetId string Path Required The ID of the data set.
types array Query Optional The types of meta to get for the requested data set version. Can be any combination of the following: - `Filters` - include all meta relating to *filters* - `Indicators` - include all meta relating to *indicators* - `Locations` - include all meta relating to *locations* - `TimePeriods` - include all meta relating to *time periods*
dataSetVersion string Query Optional The data set version e.g. 1.0, 1.1, 2.0, etc. Wildcard versions are supported. For example, `2.*` returns the latest minor version in the v2 series.

Response Codes

Status code Description
200 The requested data set version metadata.
403 Forbidden
404 Not Found
504 Timeout

Example Request

curl -X GET \
  "https://api.education.gov.uk/statistics/v1/data-sets/{dataSetId}/meta"

GET Get a data set's summary

Description

Gets a data set's summary details.

URL template
/v1/data-sets/{dataSetId}
Show / Hide additional information

Parameters

Name Type Location Field Description
dataSetId string Path Required The ID of the data set.

Response Codes

Status code Description
200 The requested data set summary.
403 Forbidden
404 Not Found
504 Timeout

Example Request

curl -X GET \
  "https://api.education.gov.uk/statistics/v1/data-sets/{dataSetId}"

GET Get a publication's details

Description

Get a publication's summary details.

URL template
/v1/publications/{publicationId}
Show / Hide additional information

Parameters

Name Type Location Field Description
publicationId string Path Required The ID of the publication.

Response Codes

Status code Description
200 The requested publication summary.
404 Not Found
504 Timeout

Example Request

curl -X GET \
  "https://api.education.gov.uk/statistics/v1/publications/{publicationId}"

GET List a data set's versions

Description

List a data set's versions. Only provides summary information of each version.

URL template
/v1/data-sets/{dataSetId}/versions
Show / Hide additional information

Parameters

Name Type Location Field Description
dataSetId string Path Required The ID of the data set.
page integer Query Optional The page of results to fetch.
pageSize integer Query Optional The maximum number of results per page.

Response Codes

Status code Description
200 The paginated list of data set versions.
400 Bad Request
403 Forbidden
504 Timeout

Example Request

curl -X GET \
  "https://api.education.gov.uk/statistics/v1/data-sets/{dataSetId}/versions"

GET List a publication's data sets

Description

Lists summary details of all the data sets related to a publication.

URL template
/v1/publications/{publicationId}/data-sets
Show / Hide additional information

Parameters

Name Type Location Field Description
publicationId string Path Required The ID of the publication.
page integer Query Optional The page of results to fetch.
pageSize integer Query Optional The maximum number of results per page.

Response Codes

Status code Description
200 The paginated list of data sets.
400 Bad Request
504 Timeout

Example Request

curl -X GET \
  "https://api.education.gov.uk/statistics/v1/publications/{publicationId}/data-sets"

GET List publications

Description

Lists details about publications with data available for querying.

URL template
/v1/publications
Show / Hide additional information

Parameters

Name Type Location Field Description
search string Query Optional A search term to find matching publications.
page integer Query Optional The page of results to fetch.
pageSize integer Query Optional The maximum number of results per page.

Response Codes

Status code Description
200 The paginated list of publications.
400 Bad Request
504 Timeout

Example Request

curl -X GET \
  "https://api.education.gov.uk/statistics/v1/publications"

GET Public API documentation

Description

Public API documentation

URL template
/docs/*
Show / Hide additional information

Response Codes

Status code Description
200 The documentation site content.

Example Request

curl -X GET \
  "https://api.education.gov.uk/statistics/docs/*"

GET Public API documentation

Description

Public API documentation

URL template
/docs
Show / Hide additional information

Response Codes

Status code Description
200 The documentation site content.

Example Request

curl -X GET \
  "https://api.education.gov.uk/statistics/docs"

GET Query a data set (GET)

Description

Query a data set using a GET request, returning the filtered results.

Note that there is a POST variant of this endpoint which provides a more complete set of querying functionality. The GET variant is only recommended for initial exploratory testing or simple queries that do not need advanced functionality.

Unlike the POST variant, this endpoint does not allow condition clauses (and, or, not) and consequently cannot express more complex queries. Use the POST variant instead for these types of queries.

Indicators

The indicators query parameter is used to include only specific values in the data set results.

Each indicator should be a string containing the indicator ID e.g. 4xbOu, 8g1RI.

Omitting the indicators parameter will return values for all indicators.

Filters

The filters query parameter is used to filter by other filter options (not locations, geographic levels or time periods).

Each filter should be a string containing the required filter option ID e.g. z4FQE, DcQeg.

Geographic levels

The geographicLevels query parameter is used to filter results by geographic level.

The geographic levels are specified as codes, and can be one of the following:

  • EDA - English devolved area
  • INST - Institution
  • LA - Local authority
  • LAD - Local authority district
  • LEP - Local enterprise partnership
  • LSIP - Local skills improvement plan area
  • MCA - Mayoral combined authority
  • MAT - MAT
  • NAT - National
  • OA - Opportunity area
  • PA - Planning area
  • PCON - Parliamentary constituency
  • PROV - Provider
  • REG - Regional
  • RSC - RSC region
  • SCH - School
  • SPON - Sponsor
  • WARD - Ward
  • PFA - Police Force Area

Locations

The locations query parameter is used to filter results by location.

The locations should be strings formatted like {level}|{property}|{value} where:

  • {level} is the location's level code (e.g. NAT, REG, LA)
  • {property} is the name of the identifying property to match on (e.g. id, code, urn`)
  • {value} is the value for the property to match

An ID or a code can be used to identify a location, with the following differences:

  • IDs only match a single location
  • Codes may match multiple locations

Whilst codes are generally unique to a single location, they can be used for multiple locations. This may match more results than you expect so it's recommended to use IDs where possible.

Examples

  • LA|code|E08000019 matches any local authority with code E08000019
  • REG|id|6bQgZ matches any region with ID 6bQgZ
  • SCH|urn|140821 matches any school with URN 140821

Time periods

The timePeriods query parameter is used to filter results by time period.

The time periods should be strings formatted like {period}|{code} where:

  • period is the time period or range (e.g. 2020 or 2020/2021)
  • code is the code identifying the time period type (e.g. AY, CY, M1, W20)

The period should be a single year like 2020, or a range like 2020/2021. Currently, only years (or year ranges) are supported.

Some time period types span two years e.g. financial year part 2 (P2), or may fall in a latter year e.g. academic year summer term (T3). For these types, a singular year period like 2020 is considered as 2020/2021.

For example, a period value of 2020 is applicable to the following time periods:

  • 2020 calendar year
  • 2020/2021 academic year
  • 2020/2021 financial year part 2 (October to March)
  • 2020/2021 academic year's summer term

If you wish to be more explicit, you may use a range for the period e.g. 2020/2021. However, a range cannot be used with time period types which only span a single year, for example, 2020/21 cannot be used with CY, M or W codes.

Examples

  • 2020|AY is the 2020/21 academic year
  • 2021|FY is the 2021/22 financial year
  • 2020|T3 is the 2020/21 academic year's summer term
  • 2020|P2 is the 2020/21 financial year part 2 (October to March)
  • 2020|CY is the 2020 calendar year
  • 2020|W32 is 2020 week 32
  • 2020/2021|AY is the 2020/21 academic year
  • 2021/2022|FY is the 2021/22 financial year

Sorts

The sorts query parameter is used to sort the results.

Sorts are applied in the order they are provided and should be strings formatted like {field}|{direction} where:

  • field is the name of the field to sort e.g. timePeriod
  • direction is the direction to sort in e.g. ascending (Asc) or descending (Desc)

The field can be one of the following:

  • timePeriod to sort by time period
  • geographicLevel to sort by the geographic level of the data
  • location|{level} to sort by locations in a geographic level where {level} is the level code (e.g. REG, LA)
  • filter|{id} to sort by the options in a filter where {id} is the filter ID (e.g. 3RxWP)
  • indicator|{id} to sort by the values in a indicator where {id} is the indicator ID (e.g. 6VfPgZ)

Examples

  • timePeriod|Desc sorts by time period in descending order
  • geographicLevel|Asc sorts by geographic level in ascending order
  • location|REG|Asc sorts by regions in ascending order
  • filter|3RxWP|Desc sorts by options in filter 3RxWP in descending order
  • indicator|7a1dk|Asc sorts by values in indicator 7a1dk in ascending order
URL template
/v1/data-sets/{dataSetId}/query
Show / Hide additional information

Parameters

Name Type Location Field Description
dataSetId string Path Required The ID of the data set.
dataSetVersion string Query Optional The data set version e.g. 1.0, 1.1, 2.0, etc. Wildcard versions are supported. For example, `2.*` returns the latest minor version in the v2 series.
filters.in array Query Optional Filter the results to have a filter option matching at least one of these IDs.
filters.notIn array Query Optional Filter the results to not have a filter option matching any of these IDs.
filters.eq string Query Optional Filter the results to have a filter option matching this ID.
filters.notEq string Query Optional Filter the results to not have a filter option matching this ID.
geographicLevels.in array Query Optional Filter the results to be in one of these geographic levels.
geographicLevels.notIn array Query Optional Filter the results to not be in one of these geographic levels.
geographicLevels.eq string Query Optional Filter the results to be in this geographic level.
geographicLevels.notEq string Query Optional Filter the results to not be in this geographic level.
locations.eq string Query Optional Filter the results to be in this location.
locations.notEq string Query Optional Filter the results to not be in this location.
locations.in array Query Optional Filter the results to be in one of these locations.
locations.notIn array Query Optional Filter the results not to be in one of these locations.
timePeriods.eq string Query Optional Filter the results to be in this time period.
timePeriods.notEq string Query Optional Filter the results to not be in this time period.
timePeriods.in array Query Optional Filter the results to be in one of these time periods.
timePeriods.notIn array Query Optional Filter the results to not be in one of these time periods.
timePeriods.gt string Query Optional Filter the results to be in a time period that is chronologically greater than the one specified.
timePeriods.gte string Query Optional Filter the results to be in a time period that is chronologically greater than or equal to the one specified.
timePeriods.lt string Query Optional Filter the results to be in a time period that is chronologically less than the one specified.
timePeriods.lte string Query Optional Filter the results to be in a time period that is chronologically less than or equal to the one specified.
indicators array Query Optional The IDs of indicators to return values for. Omitting this parameter will return values for all indicators.
sorts array Query Optional The sorts to apply to the results. Sorts at the start of the list will be applied first. By default, results are sorted by time period in descending order.
debug boolean Query Optional Enable debug mode. Results will be formatted with human-readable labels to assist in identification. This **should not** be enabled in a production environment.
page integer Query Optional The page of results to fetch.
pageSize integer Query Optional The maximum number of results per page.

Response Codes

Status code Description
200 The paginated list of query results.
400 Bad Request
403 Forbidden
404 Not Found
504 Timeout

Example Request

curl -X GET \
  "https://api.education.gov.uk/statistics/v1/data-sets/{dataSetId}/query"

POST Query a data set (POST)

Description

Query a data set using a POST request, returning the filtered results.

Note that for simpler queries or exploratory testing, there is also GET variant of this endpoint only handles a smaller subset of querying functionality. However, for most use-cases, this endpoint is recommended as it provides the complete set of functionality.

Unlike the GET endpoint, the POST endpoint allows condition criteria (and, or, not) and consequently can express more complex queries.

A POST request without a body will return a paginated set of unfiltered results and will include values for all indicators.

A Content-Type request header of application/json is required.

URL template
/v1/data-sets/{dataSetId}/query
Show / Hide additional information

Parameters

Name Type Location Field Description
dataSetId string Path Required The ID of the data set.
dataSetVersion string Query Optional The data set version e.g. 1.0, 1.1, 2.0, etc. Wildcard versions are supported. For example, `2.*` returns the latest minor version in the v2 series.

Response Codes

Status code Description
200 The paginated list of query results.
400 Bad Request
403 Forbidden
404 Not Found
504 Timeout

Example Request

curl -X POST \
  "https://api.education.gov.uk/statistics/v1/data-sets/{dataSetId}/query" \
  -H "Content-Type: application/json"

Back to top