Query a data set (POST)
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.
The URL for this endpoint is:
POST https://dev.statistics.api.education.gov.uk/api/v{version}/data-sets/{dataSetId}/query
Parameters
Path parameters
The following parameters will need to be substituted into the URL path.
Parameter | Type | Required | Description |
---|---|---|---|
dataSetId |
string | true |
The ID of the data set. |
version |
string | true |
The requested API version Defaults to: |
Query parameters
Parameter | Type | Required | Description |
---|---|---|---|
dataSetVersion |
string | false |
The version of the data set to use e.g. 2.0, 1.1, etc. |
Request body
The request body is described by the DataSetQueryRequest schema which contains the following parameters:
Name | Type | Required | Description |
---|---|---|---|
criteria |
one of: | false |
The criteria to match. |
indicators |
array (string) | true |
The IDs of indicators in the data set to return values for. Validation constraints:
Validation constraints for child items:
|
sorts |
array (DataSetQuerySort) | false |
The sorts to sort the results by. Sorts at the start of the list will be applied first. By default, results are sorted by time period in descending order. |
debug |
boolean | false |
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 | false |
The page of results to fetch. Defaults to: Validation constraints:
|
pageSize |
integer | false |
The maximum number of results per page. Defaults to: Validation constraints:
|
Example request body
{
"criteria": {
"and": [
{
"filters": {
"eq": "pVAkV"
}
},
{
"locations": {
"eq": {
"level": "LA",
"code": "E08000019"
}
}
}
]
},
"indicators": [
"C2ySJ",
"q4X3J"
],
"sorts": [
{
"field": "timePeriod",
"direction": "Asc"
}
],
"debug": true,
"page": 1,
"pageSize": 1000
}
Example request
To illustrate how to use this API endpoint, we have provided some samples below in various languages.
cURL
curl -X POST https://dev.statistics.api.education.gov.uk/api/v{version}/data-sets/{dataSetId}/query \
-H 'Content-Type: application/json' \
-d '{
"criteria": {
"and": [
{
"filters": {
"eq": "pVAkV"
}
},
{
"locations": {
"eq": {
"level": "LA",
"code": "E08000019"
}
}
}
]
},
"indicators": [
"C2ySJ",
"q4X3J"
],
"sorts": [
{
"field": "timePeriod",
"direction": "Asc"
}
],
"debug": true,
"page": 1,
"pageSize": 1000
}'
JavaScript
const url = 'https://dev.statistics.api.education.gov.uk/api/v{version}/data-sets/{dataSetId}/query';
const headers = {
'Content-Type': 'application/json'
};
const body = {
"criteria": {
"and": [
{
"filters": {
"eq": "pVAkV"
}
},
{
"locations": {
"eq": {
"level": "LA",
"code": "E08000019"
}
}
}
]
},
"indicators": [
"C2ySJ",
"q4X3J"
],
"sorts": [
{
"field": "timePeriod",
"direction": "Asc"
}
],
"debug": true,
"page": 1,
"pageSize": 1000
};
const response = await fetch(url, {
method: 'POST',
headers,
body: JSON.stringify(body)
});
console.log(response.json());
Python
import requests
url = 'https://dev.statistics.api.education.gov.uk/api/v{version}/data-sets/{dataSetId}/query'
headers = {
'Content-Type': 'application/json'
}
data = '''{
"criteria": {
"and": [
{
"filters": {
"eq": "pVAkV"
}
},
{
"locations": {
"eq": {
"level": "LA",
"code": "E08000019"
}
}
}
]
},
"indicators": [
"C2ySJ",
"q4X3J"
],
"sorts": [
{
"field": "timePeriod",
"direction": "Asc"
}
],
"debug": true,
"page": 1,
"pageSize": 1000
}'''
response = requests.post(url, headers=headers, data=data)
print(response.text)
R
library(httr)
url <- "https://dev.statistics.api.education.gov.uk/api/v{version}/data-sets/{dataSetId}/query"
body <- "{
"criteria": {
"and": [
{
"filters": {
"eq": "pVAkV"
}
},
{
"locations": {
"eq": {
"level": "LA",
"code": "E08000019"
}
}
}
]
},
"indicators": [
"C2ySJ",
"q4X3J"
],
"sorts": [
{
"field": "timePeriod",
"direction": "Asc"
}
],
"debug": true,
"page": 1,
"pageSize": 1000
}"
response <- POST(
url,
body = body,
encode = "json",
content_type("application/json")
)
output <- content(response)
Responses
Status | Description | Media Type | Schema |
---|---|---|---|
200 | The paginated list of query results. |
application/json | DataSetQueryPaginatedResultsViewModel |
400 | Bad Request |
application/json | ValidationProblemViewModel |
403 | Forbidden |
application/json | ProblemDetailsViewModel |
404 | Not Found |
application/json | ProblemDetailsViewModel |
Example successful response
{
"paging": {
"page": 1,
"pageSize": 20,
"totalResults": 60,
"totalPages": 3
},
"results": [
{
"timePeriod": {
"code": "AYQ1",
"period": "2020/2021"
},
"geographicLevel": "NAT",
"locations": {
"NAT": "04bTr",
"REG": "4veOu",
"LA": "owqlK"
},
"filters": {
"ups2K": "n0WqP",
"j51wV": "AnZsi",
"hAkBQ": "dvB4z"
},
"values": {
"wLcft": "23593018",
"4S8Ou": "50.342",
"9kVFg": "25369172"
}
}
],
"warnings": [
{
"message": "There are no results.",
"path": "results",
"code": "NoResults",
"detail": {
"total": 0
}
}
]
}