Oak Curriculum API

API endpoints

Lists

The following lists are available to facilitate using other endpoints:

  • Key stages:
    • Units by key stage and subject
    • Lessons by key stage and subject
    • Assets by key stage and subject
  • Subjects
    • Specific subject
    • Key stages by subject
    • Sequences by subject
    • Years by subject
  • Threads
    • Units by thread

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.

1.1 Sequencing information for a given sequence slug

GET /sequences/{sequence}

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.

Inputs (path)

Name
Type
Description
Example

sequence

string

The sequence slug identifier

art-secondary

Output (response)

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

Sample response

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

1.2 All subjects

GET /subjects

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

Inputs

N/A

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

[
  "art",
  "computing",
  "english"
]

1.3 Single subject with sequences, key stages, and years

GET /subjects/{subject}

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.

Inputs (path)

Name
Type
Description
Example

subject

string

The slug identifier for the subject

art

Output (response)

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

Sample response

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

1.4 Key stages for a subject

GET /subjects/{subject}/key-stages

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

Inputs (path)

Name
Type
Description
Example

subject

string

The subject slug identifier

art

Output (response)

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

Sample response

[
  {
    "keyStageTitle": "Key Stage 1",
    "keyStageSlug": "ks1"
  },
  {
    "keyStageTitle": "Key Stage 2",
    "keyStageSlug": "ks2"
  },
  {
    "keyStageTitle": "Key Stage 3",
    "keyStageSlug": "ks3"
  },
  {
    "keyStageTitle": "Key Stage 4",
    "keyStageSlug": "ks4"
  }
]

1.5 Year groups for a subject

GET /subjects/{subject}/years

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

Inputs (path)

Name
Type
Description
Example

subject

string

Subject slug to filter by

cooking-nutrition

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

[
  1,
  2,
  3,
  4,
  5,
  6,
  7,
  8,
  9
]

1.6 All key stages

GET /key-stages

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

Inputs

N/A

Output (response)

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

Sample response

[
  {
    "slug": "ks1",
    "title": "Key Stage 1"
  }
]

1.7 List lessons in a key stage and subject

GET /key-stages/{keyStage}/subject/{subject}/lessons

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.

Inputs (path, query)

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

Output (response)

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

Sample response

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

1.8 Units in a key stage and subject

GET /key-stages/{keyStage}/subject/{subject}/units

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

Inputs (path, query)

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

Output (response)

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 examBoard filter.

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

Sample response

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

1.9 Keywords by subject and key stage

GET /keywords

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.

Inputs (query)

Name
Type
Example

subject [optional]

string

keyStage [optional]

string

phase [optional]

string

unit [optional]

string

lesson [optional]

string

Output (response)

N/A

1.10 All threads

GET /threads

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

Inputs

N/A

Output (response)

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

Sample response

[
  {
    "title": "Number: Multiplication and division",
    "slug": "number-multiplication-and-division",
    "unitCount": 78
  }
]

1.11 Units in a thread

GET /threads/{threadSlug}/units

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

Inputs (path)

Name
Type
Example

threadSlug

string

number-multiplication-and-division

Output (response)

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

Sample response

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