API endpoints
The following lists are available to facilitate using other endpoints:
The top-level endpoints (key stages, subjects, threads) provide an overview of our data model, while the lower-level endpoints provide detailed information on specific subjects, key stages and threads.
Use when you have a sequence slug and need the sequence-level summary. A sequence is a subject's curriculum across a phase (e.g. maths-primary, science-secondary-aqa); it spans one or more National Curriculum schemes and contains one programme per year group. Get sequence slugs from GET /subjects or GET /subjects/{subject} (the sequenceSlugs field). Returns slug, phase, key stages, years, and any KS4 programme factors (exam board, tier, child subject, pathway) needed to interpret the programmes within it. Not for: the programmes within this sequence (GET /sequences/{sequence}/programmes); the unit sequence for one programme (GET /sequences/{sequence}/programmes/{programme}/units); all units across the sequence (GET /sequences/{sequence}/units); subject-level catalogue data (GET /subjects or GET /subjects/{subject}). Example: sequence=maths-primary or science-secondary-aqa.
Name | Type | Description | Example |
|---|---|---|---|
sequence | string | The sequence slug identifier | art-secondary |
Name | Type | Description |
|---|---|---|
sequenceSlug | string | The unique identifier for each sequence |
years | array[number] | The years for which this subject has content available for |
keyStages | array[object] | The key stage slug identifiers for which this subject has content available for. |
keyStageTitle | string | The key stage title for the given key stage |
keyStageSlug | string | The unique identifier for a given key stage |
phaseSlug | string | The unique identifier for the phase to which this sequence belongs |
phaseTitle | string | The title for the phase to which this sequence belongs |
ks4ProgrammeFactors | object | The programme factors that apply to this subject at key stage 4, with the valid values for each factor. |
examBoard | array[object] | The valid exam board values offered by Oak for this subject at key stage 4. |
title | string | The display title for a valid programme factor value |
slug | string | The slug identifier for a valid programme factor value |
pathway | array[object] | The valid pathway values offered by Oak for this subject at key stage 4. |
tier | array[object] | The valid tier values offered by Oak for this subject at key stage 4. |
childSubject | array[object] | The child subjects offered by Oak for this subject at key stage 4 (e.g. biology, chemistry, physics and combined-science under science). Only present for Science, which is split into child subjects at KS4. |
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 |
{
"sequenceSlug": "computing-secondary-core",
"years": [
7,
8,
9,
10,
11
],
"keyStages": [
{
"keyStageTitle": "Key Stage 3",
"keyStageSlug": "ks3"
},
{
"keyStageTitle": "Key Stage 4",
"keyStageSlug": "ks4"
}
],
"phaseSlug": "secondary",
"phaseTitle": "Secondary",
"ks4ProgrammeFactors": {
"examBoard": [
{
"title": "AQA",
"slug": "aqa"
},
{
"title": "Edexcel",
"slug": "edexcel"
},
{
"title": "OCR",
"slug": "ocr"
}
],
"pathway": [
{
"title": "Core",
"slug": "core"
}
],
"tier": [
{
"title": "Foundation",
"slug": "foundation"
},
{
"title": "Higher",
"slug": "higher"
}
]
}
}Use when you need every subject in one call — the entry point for a subject picker or for crawling the whole curriculum. Returns subjects alphabetically, each with subjectTitle, subjectSlug, sequenceSlugs, keyStages, and years. sequenceSlugs lists the sequences available for that subject; each sequence contains one programme per year group — call GET /sequences/{sequence}/programmes to enumerate them. Not for: a single subject (GET /subjects/{subject}); the key stages or year groups for a subject (GET /subjects/{subject}/key-stages or GET /subjects/{subject}/years); lessons or units inside a subject (GET /key-stages/{keyStage}/subject/{subject}/lessons or GET /key-stages/{keyStage}/subject/{subject}/units); the detail of one sequence (GET /sequences/{sequence}).
Name | Type | Description |
|---|---|---|
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 |
[
"art",
"computing",
"english"
]Use when you have a subject slug. Returns subjectTitle, subjectSlug, sequenceSlugs, keyStages, and years. sequenceSlugs lists the sequences available for this subject; each sequence contains one programme per year group — call GET /sequences/{sequence}/programmes to enumerate them. Not for: every subject in one call (GET /subjects); the key stages or year groups for a subject (GET /subjects/{subject}/key-stages or GET /subjects/{subject}/years); subject-scoped lessons or units (GET /key-stages/{keyStage}/subject/{subject}/lessons or GET /key-stages/{keyStage}/subject/{subject}/units); the detail of one sequence (GET /sequences/{sequence}). Example: subject=maths.
Name | Type | Description | Example |
|---|---|---|---|
subject | string | The slug identifier for the subject | art |
Name | Type | Description |
|---|---|---|
subjectTitle | string | The subject title |
subjectSlug | string | The subject slug identifier |
sequenceSlugs | array[object] | Information about the years, key stages and key stage 4 variance for each sequence |
sequenceSlug | string | The unique identifier for each sequence |
years | array[number] | The years for which this subject has content available for |
keyStages | array[object] | The key stage slug identifiers for which this subject has content available for. |
keyStageTitle | string | The key stage title for the given key stage |
keyStageSlug | string | The unique identifier for a given key stage |
phaseSlug | string | The unique identifier for the phase to which this sequence belongs |
phaseTitle | string | The title for the phase to which this sequence belongs |
ks4ProgrammeFactors | object | The programme factors that apply to this subject at key stage 4, with the valid values for each factor. |
examBoard | array[object] | The valid exam board values offered by Oak for this subject at key stage 4. |
title | string | The display title for a valid programme factor value |
slug | string | The slug identifier for a valid programme factor value |
pathway | array[object] | The valid pathway values offered by Oak for this subject at key stage 4. |
tier | array[object] | The valid tier values offered by Oak for this subject at key stage 4. |
childSubject | array[object] | The child subjects offered by Oak for this subject at key stage 4 (e.g. biology, chemistry, physics and combined-science under science). Only present for Science, which is split into child subjects at KS4. |
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 |
{
"subjectTitle": "Science",
"subjectSlug": "science",
"sequenceSlugs": [
{
"sequenceSlug": "science-primary",
"years": [
1,
2,
3,
4,
5,
6
],
"keyStages": [
{
"keyStageTitle": "Key Stage 1",
"keyStageSlug": "ks1"
},
{
"keyStageTitle": "Key Stage 2",
"keyStageSlug": "ks2"
}
],
"phaseSlug": "primary",
"phaseTitle": "Primary"
},
{
"sequenceSlug": "science-secondary-aqa",
"years": [
7,
8,
9,
10,
11
],
"keyStages": [
{
"keyStageTitle": "Key Stage 3",
"keyStageSlug": "ks3"
},
{
"keyStageTitle": "Key Stage 4",
"keyStageSlug": "ks4"
}
],
"phaseSlug": "secondary",
"phaseTitle": "Secondary"
},
{
"sequenceSlug": "science-secondary-edexcel",
"years": [
7,
8,
9,
10,
11
],
"keyStages": [
{
"keyStageTitle": "Key Stage 3",
"keyStageSlug": "ks3"
},
{
"keyStageTitle": "Key Stage 4",
"keyStageSlug": "ks4"
}
],
"phaseSlug": "secondary",
"phaseTitle": "Secondary"
},
{
"sequenceSlug": "science-secondary-ocr",
"years": [
7,
8,
9,
10,
11
],
"keyStages": [
{
"keyStageTitle": "Key Stage 3",
"keyStageSlug": "ks3"
},
{
"keyStageTitle": "Key Stage 4",
"keyStageSlug": "ks4"
}
],
"phaseSlug": "secondary",
"phaseTitle": "Secondary"
}
],
"years": [
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11
],
"keyStages": [
{
"keyStageTitle": "Key Stage 1",
"keyStageSlug": "ks1"
},
{
"keyStageTitle": "Key Stage 2",
"keyStageSlug": "ks2"
},
{
"keyStageTitle": "Key Stage 3",
"keyStageSlug": "ks3"
},
{
"keyStageTitle": "Key Stage 4",
"keyStageSlug": "ks4"
}
],
"ks4ProgrammeFactors": {
"examBoard": [
{
"title": "AQA",
"slug": "aqa"
},
{
"title": "Edexcel",
"slug": "edexcel"
},
{
"title": "OCR",
"slug": "ocr"
}
],
"tier": [
{
"title": "Foundation",
"slug": "foundation"
},
{
"title": "Higher",
"slug": "higher"
}
],
"childSubject": [
{
"title": "Biology",
"slug": "biology"
},
{
"title": "Chemistry",
"slug": "chemistry"
},
{
"title": "Combined science",
"slug": "combined-science"
},
{
"title": "Physics",
"slug": "physics"
}
]
}
}Use when you only need the key stages where this subject is available. Returns key-stage titles and slugs. Not for: every key stage (GET /key-stages); the subject record (GET /subjects/{subject}). Example: 'subject=history'.
Name | Type | Description | Example |
|---|---|---|---|
subject | string | The subject slug identifier | art |
Name | Type | Description |
|---|---|---|
keyStageTitle | string | The key stage title for the given key stage |
keyStageSlug | string | The unique identifier for a given key stage |
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 |
[
{
"keyStageTitle": "Key Stage 1",
"keyStageSlug": "ks1"
},
{
"keyStageTitle": "Key Stage 2",
"keyStageSlug": "ks2"
},
{
"keyStageTitle": "Key Stage 3",
"keyStageSlug": "ks3"
},
{
"keyStageTitle": "Key Stage 4",
"keyStageSlug": "ks4"
}
]Use when you only need the year groups where this subject is available. Returns an array of year numbers, derived from the subject's key stages. Not for: the subject record (GET /subjects/{subject}); key stages rather than year groups (GET /subjects/{subject}/key-stages). Example: 'subject=english'.
Name | Type | Description | Example |
|---|---|---|---|
subject | string | Subject slug to filter by | cooking-nutrition |
Name | Type | Description |
|---|---|---|
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 |
[
1,
2,
3,
4,
5,
6,
7,
8,
9
]Use when you need the master list of key stages. Returns every key stage with its title and slug. Not for: key stages restricted to a subject (GET /subjects/{subject}/key-stages).
Name | Type | Description |
|---|---|---|
slug | string | The key stage slug identifier |
title | string | The key stage title |
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 |
[
{
"slug": "ks1",
"title": "Key Stage 1"
}
]Use when you want every published lesson in a key stage + subject, grouped by unit, without programme structure or unit sequence order. Returns an array of units, each with slug, title, and the lessons inside. Pass unit to restrict to one. Supports offset/limit pagination; Link: rel="next" header signals more pages. Not for: finding a lesson from a search term (GET /search/lessons); a single lesson's metadata (GET /lessons/{lesson}/summary); all units across a sequence (GET /sequences/{sequence}/units); units in one programme (GET /sequences/{sequence}/programmes/{programme}/units). Example: keyStage=ks3, subject=maths, unit=perimeter-and-area.
Name | Type | Description | Example |
|---|---|---|---|
keyStage | string | Key stage slug to filter by, e.g. 'ks2' - note that casing is important here, and should be lowercase | ks1 |
subject | string | Subject slug to filter by, e.g. 'english' - note that casing is important here, and should be lowercase | english |
unit [optional] | string | Optional unit slug to additionally filter by | word-class |
offset [optional] | number | Limit the number of lessons returned per unit. Units with zero lessons after limiting are omitted. | 50 |
limit [optional] | number | Offset applied to lessons within each unit (not to the unit list). | 10 |
Name | Type | Description |
|---|---|---|
unitSlug | string | The unit slug identifier |
unitTitle | string | The unit title |
lessons | array[object] | List of lessons for the specified unit |
lessonSlug | string | The lesson slug identifier |
lessonTitle | string | The lesson title |
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": "simple-compound-and-adverbial-complex-sentences",
"unitTitle": "Simple, compound and adverbial complex sentences",
"lessons": [
{
"lessonSlug": "four-types-of-simple-sentence",
"lessonTitle": "Four types of simple sentence"
},
{
"lessonSlug": "three-ways-for-co-ordination-in-compound-sentences",
"lessonTitle": "Three ways for co-ordination in compound sentences"
}
]
}
]Use when you want a flat list of every unit with published lessons in a key stage + subject, without programme structure or unit sequence order. Returns units grouped by year slug; units without published lessons are omitted. Pass examBoard to restrict KS4 to one board (one of: aqa, edexcel (Edexcel A), eduqas, ocr, wjec, edexcelb (Edexcel B)); otherwise each unit lists the boards it appears in. Not for: all units across a sequence (GET /sequences/{sequence}/units); units in one programme (GET /sequences/{sequence}/programmes/{programme}/units); a single unit (GET /units/{unit}/summary); lessons rather than units (GET /key-stages/{keyStage}/subject/{subject}/lessons); units in a thread (GET /threads/{threadSlug}/units).
Name | Type | Description | Example |
|---|---|---|---|
keyStage | string | Key stage slug to filter by, e.g. 'ks2' | ks1 |
subject | string | Subject slug to search by, e.g. 'science' - note that casing is important here (always lowercase) | art |
examBoard [optional] | string |
Name | Type | Description |
|---|---|---|
yearSlug | string | The year identifier |
yearTitle | string | The year title |
units | array[object] | List of units for the specified year |
unitSlug | string | The unit slug identifier |
unitTitle | string | The unit title |
examBoards | array[object] | The exam boards the unit appears in. Only populated for KS4 subjects when the request does not supply an |
title | string | The title of the exam board |
slug | string | The slug of the exam board |
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 |
[
{
"units": [
{
"unitSlug": "2-4-and-8-times-tables-using-times-tables-to-solve-problems",
"unitTitle": "2, 4 and 8 times tables: using times tables to solve problems"
},
{
"unitSlug": "bridging-100-counting-on-and-back-in-10s-adding-subtracting-multiples-of-10",
"unitTitle": "Bridging 100: counting on and back in 10s, adding/subtracting multiples of 10"
}
],
"yearSlug": "year-3",
"yearTitle": "Year 3"
}
]Use when you want the vocabulary for a key stage, subject, unit, lesson, or phase — e.g. to build a glossary or attach definitions to content. Returns keywords with definition, the subject + key stage they appear in, and the lessons that use them, sorted alphabetically. All filters are optional, but pass at least one of keyStage, subject, unit, lesson, or phase.
Name | Type | Example |
|---|---|---|
subject [optional] | string | |
keyStage [optional] | string | |
phase [optional] | string | |
unit [optional] | string | |
lesson [optional] | string |
Use when you want the catalogue of every thread. A thread is an attribute on a unit that groups units across the curriculum to build a common body of knowledge — making vertical connections across year groups. Returns all threads with published units, sorted alphabetically — each with title, slug, and unitCount. Not for: the units inside a thread (GET /threads/{threadSlug}/units).
Name | Type | Description |
|---|---|---|
title | string | The thread title |
slug | string | The thread slug identifier |
unitCount | number | The number of published units in the thread |
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 |
[
{
"title": "Number: Multiplication and division",
"slug": "number-multiplication-and-division",
"unitCount": 78
}
]Use when you want every unit in a thread. A thread is an attribute on a unit that groups units across the curriculum to build a common body of knowledge — for example, number and place value or scientific method. Units in a thread span multiple programmes and key stages; thread order is independent of unit sequence order within any individual programme. Returns units in thread order with unitTitle, unitSlug, and unitOrder. Not for: the catalogue of threads (GET /threads); all units across a sequence (GET /sequences/{sequence}/units); units in one programme (GET /sequences/{sequence}/programmes/{programme}/units); a single unit (GET /units/{unit}/summary). Example: 'threadSlug=number-and-place-value'.
Name | Type | Example |
|---|---|---|
threadSlug | string | number-multiplication-and-division |
Name | Type | Description |
|---|---|---|
unitTitle | string | The unit title |
unitSlug | string | The unit slug 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 |
[
{
"unitTitle": "Unitising and coin recognition - counting in 2s, 5s and 10s",
"unitSlug": "unitising-and-coin-recognitions-counting-in-2s-5s-and-10s"
},
{
"unitTitle": "Programming subroutines",
"unitSlug": "programming-subroutines"
},
{
"unitTitle": "Programming subroutines",
"unitSlug": "programming-subroutines"
}
]