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.
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
GETrequest, returning the filtered results.Note that there is a
POSTvariant of this endpoint which provides a more complete set of querying functionality. TheGETvariant is only recommended for initial exploratory testing or simple queries that do not need advanced functionality.Unlike the
POSTvariant, this endpoint does not allow condition clauses (and,or,not) and consequently cannot express more complex queries. Use thePOSTvariant instead for these types of queries.Indicators
The
indicatorsquery 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
indicatorsparameter will return values for all indicators.Filters
The
filtersquery 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
geographicLevelsquery 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 areaINST- InstitutionLA- Local authorityLAD- Local authority districtLEP- Local enterprise partnershipLSIP- Local skills improvement plan areaMCA- Mayoral combined authorityMAT- MATNAT- NationalOA- Opportunity areaPA- Planning areaPCON- Parliamentary constituencyPROV- ProviderREG- RegionalRSC- RSC regionSCH- SchoolSPON- SponsorWARD- WardPFA- Police Force Area
Locations
The
locationsquery 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|E08000019matches any local authority with codeE08000019REG|id|6bQgZmatches any region with ID6bQgZSCH|urn|140821matches any school with URN140821
Time periods
The
timePeriodsquery parameter is used to filter results by time period.The time periods should be strings formatted like
{period}|{code}where:periodis the time period or range (e.g.2020or2020/2021)codeis the code identifying the time period type (e.g.AY,CY,M1,W20)
The
periodshould be a single year like2020, or a range like2020/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 yearperiodlike2020is considered as2020/2021.For example, a
periodvalue of2020is 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
periode.g.2020/2021. However, a range cannot be used with time period types which only span a single year, for example,2020/21cannot be used withCY,MorWcodes.Examples
2020|AYis the 2020/21 academic year2021|FYis the 2021/22 financial year2020|T3is the 2020/21 academic year's summer term2020|P2is the 2020/21 financial year part 2 (October to March)2020|CYis the 2020 calendar year2020|W32is 2020 week 322020/2021|AYis the 2020/21 academic year2021/2022|FYis the 2021/22 financial year
Sorts
The
sortsquery 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:fieldis the name of the field to sort e.g.timePerioddirectionis the direction to sort in e.g. ascending (Asc) or descending (Desc)
The
fieldcan be one of the following:timePeriodto sort by time periodgeographicLevelto sort by the geographic level of the datalocation|{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|Descsorts by time period in descending ordergeographicLevel|Ascsorts by geographic level in ascending orderlocation|REG|Ascsorts by regions in ascending orderfilter|3RxWP|Descsorts by options in filter3RxWPin descending orderindicator|7a1dk|Ascsorts by values in indicator7a1dkin 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
POSTrequest, 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
GETendpoint, thePOSTendpoint allows condition criteria (and,or,not) and consequently can express more complex queries.A
POSTrequest without a body will return a paginated set of unfiltered results and will include values for all indicators.A
Content-Typerequest header ofapplication/jsonis 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