Oak Curriculum API

API endpoints

Unit and curriculum data

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.

3.1 Units in a curriculum sequence

GET /sequences/{sequence}/units

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.

Inputs (path, query)

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

Output (response)

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. science-secondary rather than science-secondary-aqa).

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

Sample response

[
  {
    "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
          }
        ]
      }
    ]
  }
]

3.2 Downloadable assets in a sequence

GET /sequences/{sequence}/assets

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).

Inputs (path, query)

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

Output (response)

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

Sample response

[
  {
    "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"
      }
    ]
  }
]

3.3 Quiz questions across a sequence

GET /sequences/{sequence}/questions

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).

Inputs (path, query)

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 images to return only questions with a question image or image answer.

Output (response)

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 match_option field in the answers array, and must correctly match them to the correct_choice value

3

object

The student is offered a list of items to order, and must correctly order them according to the order field. When presenting the answer options to the student, you should randomise the order of the items

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

Sample response

[
  {
    "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
          }
        ]
      }
    ]
  }
]

3.4 Unit summary by slug

GET /units/{unit}/summary

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}).

Inputs (path, query)

Name
Type
Description
Example

unit

string

The unit slug

programming-subroutines

examBoard [optional]

string

pathway [optional]

string

tier [optional]

string

childSubject [optional]

string

Output (response)

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

Sample response

{
  "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"
    }
  ]
}