API endpoints
In addition to lesson-level data and lesson assets, we also provide information about each sequence and the units within them, as well as assets and quiz data for each sequence.
Use when you want every unit across a whole sequence — all programmes combined, in unit sequence order. Returns units grouped by programme (year group) in unit sequence order. If the sequence slug includes an exam board (e.g. science-secondary-aqa), units are scoped to that exam board. Secondary sequences also expose tiers, pathways, and exam subjects where applicable. Pass year as an optional filter to return only that year's units (across all KS4 factor combinations). Not for: units in a single programme (GET /sequences/{sequence}/programmes/{programme}/units); a flat list of units for a key stage + subject without programme structure or unit sequence order (GET /key-stages/{keyStage}/subject/{subject}/units); the programmes within this sequence (GET /sequences/{sequence}/programmes); a single unit (GET /units/{unit}/summary); units in a thread (GET /threads/{threadSlug}/units). Example: sequence=science-secondary-aqa or maths-primary.
Name | Type | Description | Example |
|---|---|---|---|
sequence | string | The sequence slug identifier, including the key stage 4 option where relevant. | english-primary |
year [optional] | string | The year group to filter by. For the physical-education-primary sequence, a value of all-years can also be used. | 1 |
Name | Type | Description |
|---|---|---|
year | number, string | The year group |
title | string | The title of the exam board |
units | array[object, object] | A list of units that make up a full sequence, grouped by year. |
unitTitle | string | The title of the unit |
unitOrder | number | The position of the unit within the sequence. |
unitOptions | array[object] | The unique slug identifier for the unit |
categories | array[object] | The categories (if any) that are assigned to the unit. If the unit does not have any categories, this property is omitted. |
categoryTitle | string | The title of the category |
categorySlug | string | The unique identifier for the category |
threads | array[object] | A list of threads (if any) that are assigned to the unit. If the unit does not have any categories, this property is omitted. |
threadTitle | string | The title of the category |
threadSlug | string | The unique identifier for the thread |
order | number | Deprecated |
examBoards | array[object] | The exam boards the unit appears in. Only populated when the sequence is requested without an exam board (e.g. |
slug | string | The slug of the exam board |
unitSlug | string | The unique slug identifier for the unit |
examSubjects | array[object, object] | Only used in secondary science. Contains a full year's unit sequences based on which subject is being studied at KS4. |
tierTitle | string | The title of the tier |
tierSlug | string | The tier identifier |
message | string | The error message |
code | string | The error code |
issues | array[object] | An array of issues that were responsible for the error |
message | string | The error message |
code | string | The error code |
issues | array[object] | An array of issues that were responsible for the error |
message | string | The error message |
code | string | The error code |
issues | array[object] | An array of issues that were responsible for the error |
[
{
"year": 1,
"units": [
{
"unitTitle": "Speaking and Listening",
"unitOrder": 1,
"unitSlug": "speaking-and-listening",
"categories": [
{
"categoryTitle": "Reading, writing & oracy"
}
],
"threads": [
{
"threadTitle": "Developing spoken language",
"threadSlug": "developing-spoken-language",
"order": 8
}
]
}
]
}
]Use when you need every downloadable asset across a whole sequence — all programmes combined. Returns assets grouped by lesson in unit sequence order, with signed download URLs, asset type, lesson title and slug, and attribution. Pass year as an optional filter. Narrow further with type (one of: slideDeck, starterQuiz, starterQuizAnswers, exitQuiz, exitQuizAnswers, worksheet, worksheetAnswers, supplementaryResource, video). Lesson content is under OGL v3.0; assets are either Oak-owned or third-party under an OGL-compatible licence. Attribution required — see https://open-api.thenational.academy/docs/about-oaks-api/terms. Not for: assets in a single programme (GET /sequences/{sequence}/programmes/{programme}/assets); a single lesson's downloads (GET /lessons/{lesson}/assets); streaming one file (GET /lessons/{lesson}/assets/{type}); assets for a key stage + subject without programme structure (GET /key-stages/{keyStage}/subject/{subject}/assets).
Name | Type | Description | Example |
|---|---|---|---|
sequence | string | The sequence slug identifier, including the key stage 4 option where relevant. | english-primary |
year [optional] | number | The year group to filter by. For the physical-education-primary sequence, a value of all-years can also be used. | 3 |
type [optional] | string | Optional asset type specifier Available values: slideDeck, exitQuiz, exitQuizAnswers, starterQuiz, starterQuizAnswers, supplementaryResource, video, worksheet, worksheetAnswers | slideDeck |
Name | Type | Description |
|---|---|---|
lessonSlug | string | The unique slug identifier for the lesson |
lessonTitle | string | The title for the lesson |
attribution | array[string] | Licence information for any third-party content contained in the lessons' downloadable resources |
assets | array[object] | List of assets |
type | string | Use the this type and the lesson slug in conjunction to get a signed download URL to the asset type from the /api/lessons/{slug}/asset/{type} endpoint |
label | string | The label for the asset |
url | string | The download endpoint for the asset. |
message | string | The error message |
code | string | The error code |
issues | array[object] | An array of issues that were responsible for the error |
message | string | The error message |
code | string | The error code |
issues | array[object] | An array of issues that were responsible for the error |
message | string | The error message |
code | string | The error code |
issues | array[object] | An array of issues that were responsible for the error |
[
{
"lessonSlug": "using-numerals",
"lessonTitle": "Using numerals",
"assets": [
{
"label": "Worksheet",
"type": "worksheet",
"url": "https://open-api.thenational.academy/api/v0/lessons/using-numerals/assets/worksheet"
},
{
"label": "Worksheet Answers",
"type": "worksheetAnswers",
"url": "https://open-api.thenational.academy/api/v0/lessons/using-numerals/assets/worksheetAnswers"
},
{
"label": "Video",
"type": "video",
"url": "https://open-api.thenational.academy/api/v0/lessons/using-numerals/assets/video"
}
]
}
]Use when you want every quiz question across a whole sequence — all programmes combined. Returns questions grouped by lesson in unit sequence order. Pass year as an optional filter to return only that year's questions. Supports offset and limit; Link: rel="next" header signals more pages. Not for: questions in a single programme (GET /sequences/{sequence}/programmes/{programme}/questions); a single lesson's quiz (GET /lessons/{lesson}/quiz); questions for a key stage + subject without programme structure (GET /key-stages/{keyStage}/subject/{subject}/questions).
Name | Type | Description | Example |
|---|---|---|---|
sequence | string | The sequence slug identifier, including the key stage 4 option where relevant. | english-primary |
year [optional] | number | The year group to filter by. For the physical-education-primary sequence, a value of all-years can also be used. | 3 |
offset [optional] | number | If limiting results returned, this allows you to return the next set of results, starting at the given offset point | 50 |
limit [optional] | number | Limit the number of lessons, e.g. return a maximum of 100 lessons | 10 |
filter [optional] | string | Optional filter for question results. Use |
Name | Type | Description |
|---|---|---|
0 | object | Multiple choice answer allows for one or more than one answer to be correct as defined by the distractor field being set to false |
1 | object | Short answers allow students to enter a free text answer, and the answers array contains a list of acceptable answers |
2 | object | The student is offered a list from the |
3 | object | The student is offered a list of items to order, and must correctly order them according to the |
lessonSlug | string | The lesson slug identifier |
lessonTitle | string | The title of the lesson |
starterQuiz | array[object] | The starter quiz questions - which test prior knowledge |
question | string | The question text |
text | string | Supplementary text for the image, if any |
type | string | The format of the quiz answer Note: currently, we are only returning text-based quiz answers. In the future, we will also have image-based questions available. |
content | string | Quiz question answer |
distractor | boolean | Whether the multiple choice question response is the correct answer (false) or is a distractor (true) |
matchOption | object | Matching options (LHS) |
correctChoice | object | Matching options (RHS), indicating the correct choice |
order | number | Indicates the correct ordering of the response |
exitQuiz | array[object] | The exit quiz questions - which test on the knowledge learned in the lesson |
message | string | The error message |
code | string | The error code |
issues | array[object] | An array of issues that were responsible for the error |
message | string | The error message |
code | string | The error code |
issues | array[object] | An array of issues that were responsible for the error |
message | string | The error message |
code | string | The error code |
issues | array[object] | An array of issues that were responsible for the error |
[
{
"lessonTitle": "3D shapes can be composed from 2D nets",
"lessonSlug": "3d-shapes-can-be-composed-from-2d-nets",
"starterQuiz": [
{
"question": "Select all of the names of shapes that are polygons.",
"questionType": "multiple-choice",
"answers": [
{
"type": "text",
"content": "Cube ",
"distractor": true
},
{
"type": "text",
"content": " Square",
"distractor": false
},
{
"type": "text",
"content": "Triangle",
"distractor": false
},
{
"type": "text",
"content": "Semi-circle",
"distractor": true
}
]
}
],
"exitQuiz": [
{
"question": "What is a net?",
"questionType": "multiple-choice",
"answers": [
{
"type": "text",
"content": "A 3D shape made of 2D shapes folded together. ",
"distractor": false
},
{
"type": "text",
"content": "A 2D shape made of 3D shapes folded togehther.",
"distractor": true
},
{
"type": "text",
"content": "A type of cube.",
"distractor": true
}
]
}
]
}
]Use when you have a unit slug and need the unit summary: title, description, key stage, subject, year, threads, prior-knowledge requirements, national-curriculum statements, and the lessons inside. Unit variant slugs (ending in -1, -2, etc.) resolve to that specific variant. Not for: listing every unit in a key stage + subject (GET /key-stages/{keyStage}/subject/{subject}/units); all units across a sequence (GET /sequences/{sequence}/units); units in one programme (GET /sequences/{sequence}/programmes/{programme}/units); units in a thread (GET /threads/{threadSlug}/units); lessons inside the unit (GET /key-stages/{keyStage}/subject/{subject}/lessons with unit={unit}).
Name | Type | Description | Example |
|---|---|---|---|
unit | string | The unit slug | programming-subroutines |
examBoard [optional] | string | ||
pathway [optional] | string | ||
tier [optional] | string | ||
childSubject [optional] | string |
Name | Type | Description |
|---|---|---|
1 | string | All years |
unitSlug | string | The unit slug identifier |
unitTitle | string | The unit title |
yearSlug | string | The slug identifier for the year to which the unit belongs |
year | number, string | The year to which the unit belongs |
phaseSlug | string | The slug identifier for the phase to which the unit belongs |
subjectSlug | string | The subject identifier |
keyStageSlug | string | The slug identifier for the the key stage to which the unit belongs |
notes | string | Unit summary notes |
description | string | A short description of the unit. Not yet available for all subjects. |
priorKnowledgeRequirements | array[string] | The prior knowledge required for the unit |
nationalCurriculumContent | array[string] | National curriculum attainment statements covered in this unit |
whyThisWhyNow | string | An explanation of where the unit sits within the sequence and why it has been placed there. |
threads | array[object] | The threads that are associated with the unit |
categories | array[object] | The categories (if any) that are assigned to the unit. If the unit does not have any categories, this property is omitted. |
programmeFactors | object | The programme-factor values that identify which variant of this unit is returned. Omitted when the unit has no programme factors. |
examBoard | object | The exam board that identifies this unit variant |
slug | string | The slug identifier for the science child subject |
title | string | The title of the science child subject |
pathway | object | The pathway that identifies this unit variant |
tier | object | The tier that identifies this unit variant |
childSubject | object | The science child subject that identifies this unit variant |
items | object | All the lessons contained in the unit |
lessonSlug | string | The lesson slug identifier |
lessonTitle | string | The title for the lesson |
lessonOrder | number | Indicates the ordering of the lesson |
state | string | If the state is 'published' then it is also available on the /lessons/* endpoints. If the state is 'new' then it's not available yet. |
message | string | The error message |
code | string | The error code |
issues | array[object] | An array of issues that were responsible for the error |
message | string | The error message |
code | string | The error code |
issues | array[object] | An array of issues that were responsible for the error |
message | string | The error message |
code | string | The error code |
issues | array[object] | An array of issues that were responsible for the error |
{
"unitSlug": "programming-subroutines",
"unitTitle": "Programming subroutines",
"yearSlug": "year-10",
"year": 10,
"phaseSlug": "secondary",
"subjectSlug": "computing",
"keyStageSlug": "ks4",
"priorKnowledgeRequirements": [
"Variables can be used to store values in a program.",
"Selection can be used to choose between paths in a program.",
"Iteration can be used to repeat a set of instructions."
],
"nationalCurriculumContent": [
"Use two or more programming languages, at least one of which is textual, to solve a variety of computational problems.",
"Make appropriate use of data structures.",
"Design and develop modular programs."
],
"programmeFactors": {
"examBoard": {
"slug": "aqa",
"title": "AQA"
},
"pathway": {
"slug": "gcse",
"title": "GCSE"
}
},
"unitLessons": [
{
"lessonSlug": "structured-programs",
"lessonTitle": "Structured programs",
"lessonOrder": 1,
"state": "published"
},
{
"lessonSlug": "subroutines-with-parameters",
"lessonTitle": "Subroutines with parameters",
"lessonOrder": 2,
"state": "new"
}
]
}