The Curriculum API

Your AI is guessing the curriculum. Stop it.

Every model has read about the Lehrplan. None has read it. currikon has: 234,188 competencies from 21 curricula, each traceable to its paragraph.

Find the competencies

POST /v1/align

Matches in North Rhine-Westphalia for “Groß- und Kleinschreibung bei Nomen”

POST /v1/align · 3 matches · full-text

  1. NW-D-GS-RechNutzUnd-K34-01grades 3–4 · 1.00

    schreiben Texte unter Berücksichtigung der erarbeiteten Prinzipien der deutschen Orthographie (bezogen auf Wortbildung, Groß- und Kleinschreibung, Zeichensetzung)

    page 14

  2. NW-D-GY-EPS-IF1-REZ-01grades 5–6 · 0.69

    Wortarten (Verb, Nomen, Artikel, Pronomen, Adjektiv, Konjunktion, Adverb) unterscheiden

    page 17

  3. NW-D-GY-ES1-IF1-REZ-01grades 7–8 · 0.67

    Wortarten (Verb, Nomen, Artikel, Pronomen, Adjektiv, Konjunktion, Adverb, Präposition, Interjektion) unterscheiden

    page 25

Matches in North Rhine-Westphalia for “Brüche mit gleichem Nenner addieren”

POST /v1/align · 3 matches · full-text

  1. NW-M-GS-Oper-K34-01grades 3–4 · 1.00

    verwenden Fachbegriffe (Summe, Differenz, Produkt, Quotient, addieren, subtrahieren, multiplizieren und dividieren).

    page 17

  2. NW-M-GY-GOST-EF-Prod-24grades 11–11 · 0.97

    addieren Vektoren, multiplizieren Vektoren mit einem Skalar und untersuchen Vektoren auf Kollinearität

    page 23

  3. NW-M-SEK-EPS-ArithAlgeb-10grades 5–6 · 0.85

    deuten Brüche als Anteile, Operatoren, Quotienten, Zahlen und Verhältnisse

    page 27

Matches in Bavaria for “Photosynthese als Energieumwandlung”

POST /v1/align · 3 matches · full-text

  1. BY-GY-BI-13e-3.1-02grades 13–13 · 1.00

    Die Schülerinnen und Schüler erklären, welche Außenfaktoren die Photosynthese beeinflussen, legen dar, wie sich Veränderungen der Außenfaktoren auf die Photosyntheserate auswirken, und beurteilen deren Folgen für Wild- und Nutzpflanzen.

    source ↗

  2. BY-GY-BI-13e-3.1-05grades 13–13 · 0.80

    Die Schülerinnen und Schüler beschreiben die Tracer-Methode als Werkzeug, um Stoffwechselwege, z. B. bei der Photosynthese, aufzuklären.

    source ↗

  3. BY-GY-BI-13e-3.1-03grades 13–13 · 0.72

    Die Schülerinnen und Schüler trennen die verschiedenen Photosynthesefarbstoffe in einem Blattextrakt durch Chromatographie, um zu zeigen, dass ein Farbstoffgemisch für die Absorption von Licht verantwortlich ist.

    source ↗

Every match links to the paragraph it was extracted from. Ask the same question with your API key and get the full record.

The receipt

A claim is a link, or it is a claim.

Plain JSON with a stable code, a grade band, a domain, and on every record the paragraph it came from. A test fails the build without it.

Record 200 · application/json
{
  "code": "BY-GS-D-12-4.4-10",
  "text": "Die Schülerinnen und Schüler schreiben unbetonte Endsilben (Konsonant + <e>, <el>, <er>, <en>) richtig.",
  "jurisdiction": "BY",
  "schoolType": "GS",
  "subject": "D",
  "gradeRange": {
    "from": 1,
    "to": 2
  },
  "domain": {
    "code": "LB4",
    "name": "Sprachgebrauch und Sprache untersuchen und reflektieren"
  },
  "validFrom": "2014-09-01",
  "provenance": {
    "sourceUrl": "https://www.lehrplanplus.bayern.de/schulart/grundschule/jgs/1/fach/deutsch/inhalt/fachlehrplaene",
    "recipe": "by-gs-deutsch-2014.v1"
  }
}
BY-GS-D-12-4.4-10Bavaria · GSGerman · grades 1–2

Die Schülerinnen und Schüler schreiben unbetonte Endsilben (Konsonant + <e>, <el>, <er>, <en>) richtig.

sourcewww.lehrplanplus.bayern.de recipeby-gs-deutsch-2014.v1 · valid from 1 September 2014 reviewprovenance verified by test on every release
The problem

21 curriculum systems, 1,750 curricula, and every team parses them again.

The model's memory

Invents a code that looks right. No paragraph to show a teacher.

Your own parser

Someone parses Bavaria on a Tuesday. Bavaria changes. They parse it again.

currikon

Parsed once, with a receipt. Stable codes, a grade band, a source on every record. You get JSON.

21sources: 16 German states, the KMK, Austria, Zürich, Luxembourg, the US Common Core
1,750frameworks, one per school type and subject
234,188competencies, each with a source
1API. Nothing to upload, nothing to parse, nothing to maintain.
What you do with it

What you do with it

Find the competency behind a worksheet title.

Send a title, a learning objective or a paragraph. Get ranked competencies with jurisdiction, grade band and source.

request
curl -X POST https://api.currikon.org/v1/align \
  -H "Authorization: Bearer $CURRIKON_KEY" \
  -H "Content-Type: application/json" \
  -d '{
        "text": "Kinder schreiben unbetonte Endsilben wie -el, -er und -en richtig",
        "filters": { "jurisdiction": "BY", "schoolType": "GS" },
        "limit": 1
      }'
response 200 · application/json
{
  "query": "Kinder schreiben unbetonte Endsilben wie -el, -er und -en richtig",
  "method": "semantic",
  "results": [
    {
      "kind": "competency",
      "code": "BY-GS-D-12-4.4-10",
      "text": "Die Schülerinnen und Schüler schreiben unbetonte Endsilben (Konsonant + <e>, <el>, <er>, <en>) richtig.",
      "score": 0.95,
      "reason": "Die Kompetenzerwartung nennt genau diese unbetonten Endsilben als Rechtschreibziel.",
      "competency": {
        "code": "BY-GS-D-12-4.4-10",
        "text": "Die Schülerinnen und Schüler schreiben unbetonte Endsilben (Konsonant + <e>, <el>, <er>, <en>) richtig.",
        "jurisdiction": "BY",
        "schoolType": "GS",
        "subject": "D",
        "gradeRange": {
          "from": 1,
          "to": 2
        },
        "domain": {
          "code": "LB4",
          "name": "Sprachgebrauch und Sprache untersuchen und reflektieren"
        },
        "validFrom": "2014-09-01",
        "provenance": {
          "sourceUrl": "https://www.lehrplanplus.bayern.de/schulart/grundschule/jgs/1/fach/deutsch/inhalt/fachlehrplaene",
          "recipe": "by-gs-deutsch-2014.v1"
        }
      }
    }
  ],
  "total": 1
}

Ask for grades 5–6 Mathematik in NRW and get the slice.

Filter by curriculum, school type, subject and grade; the response is the slice, ordered as the Lehrplan orders it.

request
curl -G https://api.currikon.org/v1/curriculum-slices \
  -H "Authorization: Bearer $CURRIKON_KEY" \
  -d jurisdiction=BY \
  -d schoolType=GS \
  -d subject=D \
  -d grade=1
response 200 · application/json
{
  "filters": {
    "jurisdiction": "BY",
    "schoolType": "GS",
    "subject": "D",
    "grade": 1
  },
  "domains": [
    {
      "domain": {
        "code": "LB4",
        "name": "Sprachgebrauch und Sprache untersuchen und reflektieren"
      },
      "competencies": [
        {
          "competency": {
            "code": "BY-GS-D-12-4.4-10",
            "text": "Die Schülerinnen und Schüler schreiben unbetonte Endsilben (Konsonant + <e>, <el>, <er>, <en>) richtig."
          }
        }
      ]
    }
  ]
}

See what Bavaria's expectation is called in Hamburg.

Typed, scored mappings through the KMK standards, with the validation level stated on every one.

request
curl -G https://api.currikon.org/v1/mappings \
  -H "Authorization: Bearer $CURRIKON_KEY" \
  -d from=BY \
  -d to=KMK
response 200 · application/json
{
  "data": [
    {
      "sourceCode": "BY-GS-M-12-4.2-02",
      "targetCode": "KMK-M-PRI-EreiBeiZufa-01",
      "mappingType": "aequivalent",
      "confidence": 0.95,
      "validation": "llm-bewertet"
    },

  ],
  "total": 253,
  "limit": 100,
  "offset": 0
}

Cite the paragraph, not a badge.

Every record carries its source: a URL for web sources, a hash and page for PDFs, and the recipe that produced it.

request
curl https://api.currikon.org/v1/competencies/BY-GS-D-12-4.4-10 \
  -H "Authorization: Bearer $CURRIKON_KEY"
response 200 · application/json
{
  "code": "BY-GS-D-12-4.4-10",
  "provenance": {
    "sourceUrl": "https://www.lehrplanplus.bayern.de/schulart/grundschule/jgs/1/fach/deutsch/inhalt/fachlehrplaene",
    "recipe": "by-gs-deutsch-2014.v1"
  }
}
For agents

Ask currikon, not the model's memory.

A language model will happily invent a competency code that looks right. Give it a tool instead. Free text goes in, ranked competencies come out with their sources attached, and your product cites the Lehrplan rather than paraphrasing it.

POST /v1/align

Alignment endpoint

Send a learning objective, a worksheet title or a paragraph of text. Get back the matching competencies, scored, with jurisdiction, grade band and source paragraph.

npx @currikon/mcp

MCP server

The same corpus as a tool for Claude, Claude Code and any agent that speaks MCP. Search, look up, find equivalents and align, from inside the assistant.

launching

meinUnterricht's assistant is built on it

Teachers ask for material by curriculum or textbook; the assistant asks currikon and answers with the competency, not a guess. Launching this autumn.

Quickstart

Wire it in this afternoon.

  1. 1

    Get a key in the Console.

    https://api.currikon.org/console → API keys → New key

  2. 2

    Send one request.

    request
    curl -X POST https://api.currikon.org/v1/align \
      -H "Authorization: Bearer $CURRIKON_KEY" \
      -H "Content-Type: application/json" \
      -d '{
            "text": "Brüche mit gleichem Nenner addieren",
            "filters": { "jurisdiction": "NW" },
            "limit": 3
          }'
  3. 3

    Read the response, with its source.

    response
    {
      "provenance": {
        "sourceHash": "sha256:…",
        "page": 14,
        "recipe": "nw-…"
      }
    }
console

The Console

Keys, credit packs and usage in one place.

FAQ

Questions people actually ask.

Do I need a key for every endpoint?

Yes. Production requires a key on all endpoints. The homepage demo runs through a rate-limited public route.

What counts as a request?

One call to any endpoint. Align and chat consume credits from a credit pack in addition.

Can I export?

CASE v1.1 CFPackages per framework, and JSON everywhere. Your data, no lock-in.

Where is it hosted?

In Germany. Records never leave the EU.

How fresh is the data?

Every record carries the source document and its valid-from date; the corpus snapshot date is in the footer. Re-extraction is recipe-driven and count-pinned in CI, so a changed Lehrplan is a visible diff, not a silent drift.

How do you stop the model from inventing a competency?

The API does not generate competencies; it retrieves records that exist, each with its source paragraph. A test in the build refuses any record without provenance.

Hosted in GermanyGDPROpenAPI 3.1CASE v1.1Provenance test on every release

Stop guessing. Start citing.

Get a key, a walkthrough and a first aligned response the same day.