Oak Curriculum API

API endpoints

Programmes

6.1 Downloadable assets in a programme

GET /programmes/{programme}/assets

Use when you need every downloadable asset for a single programme (year group) within a subject. Returns assets grouped by lesson with signed download URLs, asset type, lesson title and slug, and attribution. Supports offset/limit pagination; Link: rel="next" header signals more pages. Optionally narrow by asset 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 across a whole sequence (GET /sequences/{sequence}/assets); assets for a key stage + subject without programme structure (GET /key-stages/{keyStage}/subject/{subject}/assets); a single lesson's downloads (GET /lessons/{lesson}/assets); streaming one file (GET /lessons/{lesson}/assets/{type}).

Inputs (path, query)

Name
Type
Description
Example

programme

string

The programme slug identifier

computing-secondary-year-7

offset [optional]

number

If limiting results returned, this allows you to return the next set of results, starting at the given offset point

limit [optional]

number

Limit the number of lessons, e.g. return a maximum of 300 lessons

20

type [optional]

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}/assets/{type} endpoint

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}/assets/{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": "variables-and-data-types",
    "lessonTitle": "Variables and data types",
    "assets": [
      {
        "label": "Worksheet",
        "type": "worksheet",
        "url": "https://open-api.thenational.academy/api/v0/lessons/variables-and-data-types/assets/worksheet"
      },
      {
        "label": "Slide Deck",
        "type": "slideDeck",
        "url": "https://open-api.thenational.academy/api/v0/lessons/variables-and-data-types/assets/slideDeck"
      }
    ]
  }
]

6.2 Get all programmes for a subject slug

GET /subjects/{subject}/programmes

Use when you need to discover the programmes within a subject — to get a programme's slug for use with GET /programmes/{programme} or its sub-endpoints. Returns programmes grouped by key stage, each with year group, slug (e.g. y7, y10-biology-foundation), and applicable programme factors (exam board, tier, child subject). Not for: the metadata of one programme (GET /programmes/{programme}); the units, questions, or assets of one programme (GET /programmes/{programme}/units, GET /programmes/{programme}/questions, or GET /programmes/{programme}/assets); the sequence-level summary (GET /sequences/{sequence}).

Inputs (path)

Name
Type
Description
Example

subject

string

The subject slug identifier

english

Output (response)

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

Sample response

[
  "english-secondary-year-7",
  "english-secondary-year-8",
  "english-secondary-year-9",
  "english-secondary-year-10-aqa",
  "english-secondary-year-10-edexcel",
  "english-secondary-year-10-eduqas",
  "english-secondary-year-11-aqa",
  "english-secondary-year-11-edexcel",
  "english-secondary-year-11-eduqas"
]

6.3 Get a programme by slug

GET /programmes/{programme}

Use when you need to get the metadata of one programme. Get programme slugs from GET /subjects/{subject}/programmes. Returns the programme's year group, slug (e.g. y7, y10-biology-foundation), and applicable programme factors (exam board, tier, child subject). Not for: the units, questions, or assets of one programme (GET /programmes/{programme}/units, GET /programmes/{programme}/questions, or GET /programmes/{programme}/assets); the sequence-level summary (GET /sequences/{sequence}); all programmes for a subject (GET /subjects/{subject}/programmes).

Inputs (path)

Name
Type
Description
Example

programme

string

The programme slug identifier

english-secondary-year-10-edexcel

Output (response)

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

Sample response

{
  "examboardSlug": "aqa",
  "examboardTitle": "AQA",
  "keystageSlug": "ks4",
  "keystageTitle": "Key Stage 4",
  "pathwaySlug": null,
  "pathwayTitle": null,
  "phaseSlug": "secondary",
  "phaseTitle": "Secondary",
  "subjectSlug": "computing",
  "subjectTitle": "Computing",
  "tierSlug": null,
  "tierTitle": null,
  "yearSlug": "year-10",
  "yearTitle": "Year 10"
}

6.4 Units in a programme

GET /programmes/{programme}/units

Use when you need the unit sequence for one programme — units as an ordered arrangement designed to build knowledge progressively. Get programme slugs from GET /subjects/{subject}/programmes. Returns units in unit sequence order with title, slug, and any associated factors. Not for: every unit across the whole sequence (GET /sequences/{sequence}/units); a flat list of units for a key stage + subject without programme structure (GET /key-stages/{keyStage}/subject/{subject}/units); a single unit (GET /units/{unit}/summary); units in a thread (GET /threads/{threadSlug}/units).

Inputs (path)

Name
Type
Description
Example

programme

string

The programme slug identifier

english-secondary-year-10-edexcel

Output (response)

Name
Type
Description

unitSlug

string

The unit slug identifier

unitTitle

string

The unit title

unitOrder

number

The unit order within the programme

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": "variables-and-data-types",
    "unitTitle": "Variables and data types",
    "unitOrder": 1
  },
  {
    "unitSlug": "algorithms",
    "unitTitle": "Algorithms",
    "unitOrder": 2
  }
]

6.5 Quiz questions in a programme

GET /programmes/{programme}/questions

Use when you want every quiz question in a single programme (year group) within a subject. Get programme slugs from GET /subjects/{subject}/programmes. Returns questions grouped by lesson with starter and exit quiz questions and answers. Supports offset/limit pagination; Link: rel="next" header signals more pages. Not for: questions in a single lesson (GET /lessons/{lesson}/quiz); questions across a whole sequence (GET /sequences/{sequence}/questions); questions for a key stage + subject without programme structure (GET /key-stages/{keyStage}/subject/{subject}/questions).

Inputs (path, query)

Name
Type
Description
Example

programme

string

The programme slug identifier

computing-secondary-year-7

offset [optional]

number

If limiting results returned, this allows you to return the next set of results, starting at the given offset point

limit [optional]

number

Limit the number of lessons, e.g. return a maximum of 300 lessons

20

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
          }
        ]
      }
    ],
    "exitQuiz": [
      {
        "question": "What is a net?",
        "questionType": "multiple-choice",
        "answers": [
          {
            "type": "text",
            "content": "A 2D shape that folds into a 3D shape.",
            "distractor": false
          },
          {
            "type": "text",
            "content": "A type of cube.",
            "distractor": true
          }
        ]
      }
    ]
  }
]