New · Curriculum Taxonomy API

Curriculum Taxonomy API for Indian and international boards

The Gyanis Taxonomy API is a read-only REST API that returns the syllabus itself — boards, grades, subjects, units and topics, plus exam tracks with per-topic weightage — behind one Bearer key, priced per request.

13 read-only endpoints (1 batch POST)First 10,000 request units a month freeSame prepaid wallet as chat
Your first call
bash
curl "https://api.gyanis.ai/platform/v1/taxonomy/boards?country=IN" \
  -H "Authorization: Bearer gyn_sk_live_aBcDeFgHiJkLmNoPqRsTuVwXyZ012345"
200 OK — inside the free monthly allowance
json
{
  "object": "taxonomy.boards",
  "country": "IN",
  "boards": [
    { "id": "652f1a9c4b7d3e0012ab0155", "code": "CBSE", "name": "CBSE", "country": "IN", "order": 1, "updated_at": "2026-07-28T09:14:03.201Z" },
    { "id": "652f1a9c4b7d3e0012ab0156", "code": "ICSE", "name": "CISCE (ICSE)", "country": "IN", "order": 2, "updated_at": "2026-07-28T09:14:03.201Z" }
  ],
  "billing": {
    "request_units": 1,
    "free_units_applied": 1,
    "credits_charged": 0,
    "estimated_usd": 0,
    "test_mode": false
  }
}

What is the Gyanis Taxonomy API?

The Gyanis Taxonomy API is a read-only REST API that returns structured curriculum data — boards, grades, subjects, units and topics — for Indian and international education systems. It is served from https://api.gyanis.ai/platform/v1, authenticated with a Bearer API key carrying the taxonomy scope, and billed per request from your prepaid Gyanis credit balance.

One path, five levels

  1. 1Boarde.g. CBSEGET /taxonomy/boards?country=IN

    The examination or curriculum authority a school follows. Filter by ISO country code to list the boards available in a market.

  2. 2Gradee.g. Class 10GET /taxonomy/boards/:boardId/grades

    The year of study as that board names it — Class 10 for CBSE, Year 11 for Cambridge, MYP 5 for the IB.

  3. 3Subjecte.g. PhysicsGET /taxonomy/grades/:gradeId/subjects

    A subject offered at that grade. Subjects differ by board and grade, so they are always read from the grade rather than assumed.

  4. 4Unite.g. OpticsGET /taxonomy/subjects/:subjectId/units

    The chapter-level grouping the syllabus uses to organise a subject. Units are the natural unit of scheduling and coverage reporting.

  5. 5Topice.g. Refraction of LightGET /taxonomy/units/:unitId/topics

    The teachable leaf node and the stable join key for your content. Store the topic ID on lessons, questions and progress rows.

Canonical path returned for that topic

CBSE > Class 10 > Physics > Optics > Refraction of Light

One string that addresses a topic from board down to leaf. Store the topic ID, render the canonical path, and pass both into a chat request as system context.

Boards and countries covered

The Gyanis Taxonomy API primarily covers India — CBSE, CISCE/ICSE, state boards and NIOS — and also carries Malaysian (KSSR, KSSM, SPM, STPM), UAE Ministry of Education, and international curricula used worldwide: Cambridge IGCSE/CAIE, Pearson Edexcel, AQA, OCR and the International Baccalaureate. Pass ?country=IN, MY, AE and similar ISO codes to filter.

India

National, state and open-schooling boards. Filter with ?country=IN on the boards endpoint.

  • CBSE
  • CISCE / ICSE
  • NIOS
  • State boards across roughly thirty Indian states

International

Examination boards and programmes taught in international schools worldwide.

  • Cambridge IGCSE
  • Cambridge CAIE
  • Pearson Edexcel
  • AQA
  • OCR
  • International Baccalaureate — Diploma Programme (DP)
  • International Baccalaureate — Middle Years Programme (MYP)
  • International Baccalaureate — Primary Years Programme (PYP)

Asia-Pacific & Middle East

National curricula published by education ministries in the region. Filter with ?country=MY or ?country=AE.

  • Malaysia KSSR
  • Malaysia KSSM
  • Malaysia SPM
  • Malaysia STPM
  • UAE Ministry of Education curriculum

Exam tracks cover JEE and NEET-style competitive formats, and coverage is maintained as the issuing bodies publish changes.

What teams build on the taxonomy

Model your content against stable taxonomy IDs rather than free text. Store the Gyanis topic ID on each lesson, question or progress row, then call GET /taxonomy/topics/:topicId or POST /taxonomy/topics/resolve to render names on demand. When a syllabus changes, GET /taxonomy/changes tells you exactly which records changed or were deleted.

Build

Start from a curriculum that is already correct instead of typing one in.

Board, grade and subject pickers that never go stale

Front-end engineer, K-12 tutoring app

The sign-up dropdowns for board, grade and subject are hardcoded and drift out of date every academic year.

GET /taxonomy/boards?country=INGET /taxonomy/boards/:boardId/gradesGET /taxonomy/grades/:gradeId/subjects

A picker that is still correct next session — three basic reads per sign-up funnel, comfortably inside the free monthly allowance.

Syllabus-aligned content generation

Content engineer generating practice sets

"Write ten questions on refraction" produces material the board never actually asked for.

GET /taxonomy/units/:unitId/topicsGET /taxonomy/topics/:topicId/contextPOST /chat

Generation bounded by the real syllabus, with the topic’s sample prompts seeding the generator instead of a blank prompt.

Bootstrap an LMS course tree

Platform engineer standing up a new tenant or academic year

Someone hand-types the course outline for every class, every year, and it is wrong by the second term.

GET /taxonomy/boards/:boardId/gradesGET /taxonomy/grades/:gradeId/subjectsGET /taxonomy/subjects/:subjectId/unitsGET /taxonomy/units/:unitId/topics

A populated course, module and lesson tree carrying stable Gyanis IDs you can diff against later.

One tagging vocabulary for a marketplace or CMS

Engineer on a content marketplace or publisher CMS

Sellers tag freely, buyers cannot filter, and category pages stay thin because no two uploads use the same words.

GET /taxonomy/search?q=&types=topic,unitGET /taxonomy/topics/:topicId

One shared vocabulary across every seller, real facets, and slug-backed browse pages.

Migrate

Give the content you already own a canonical ID it can be joined on.

Map an existing question bank to canonical topic IDs

Data engineer with thousands of items tagged "Class 10 Physics – light"

There is no join key between the content you already own and any curriculum.

GET /taxonomy/search?q=&types=topic&country=IN&boardId=POST /taxonomy/topics/resolve

Every asset carries a canonical topic ID, so filtering, analytics and cross-product joins become possible. Batch resolve is billed per topic ID.

Resolve messy inbound names to stable IDs

Integrations engineer ingesting partner files and teacher-typed chapter names

"Chapter 10 — Light: Reflection & Refraction" has to become an ID, reliably, without a human in the loop every time.

GET /taxonomy/search?q=&types=topic,unit&boardId=&limit=

A self-healing import pipeline — constraining the search to the tenant’s board is what makes matching precise rather than fuzzy.

Curriculum coverage reports for schools

Engineer at a school platform selling to principals

"Are we covering the whole syllabus?" is answered today with a spreadsheet nobody trusts.

GET /taxonomy/grades/:gradeId/subjectsGET /taxonomy/subjects/:subjectId/unitsGET /taxonomy/units/:unitId/topics

Per-class coverage percentages and a "not started" unit list, built on an authoritative denominator instead of a guess.

Analytics that roll up by unit, subject and board

Data engineer

Attempt events are tagged with product-specific chapter strings, so nothing rolls up and nothing compares across boards.

GET /taxonomy/topics/:topicId/contextGET /taxonomy/subjects/:subjectId/units

Dashboards that roll topic into unit into subject into grade into board cleanly, using the canonical path as a ready-made dimension.

Operate

Run on the taxonomy day to day — plans, remediation, mirrors and grounded answers.

Weightage-driven study plans for JEE and NEET

Backend engineer at a test-prep app

Study plans are rebuilt by hand each year and treat every chapter as equally important.

GET /taxonomy/exam-tracks?country=INGET /taxonomy/exam-tracks/:trackId?withTopics=trueGET /taxonomy/topics/:topicId/context

A plan that spends time where the exam does — sections, marks, negative marking, sittings and per-topic weightage come straight from the track.

Adaptive remediation along real prerequisite chains

Adaptive-learning engineer

A student fails a Refraction item and deciding what to show next is guesswork.

GET /taxonomy/topics/:topicId/contextPOST /taxonomy/topics/resolve

Remediation that walks a real dependency graph — prerequisite topic IDs come back with the context and hydrate in one batch call.

Keep a local mirror fresh

Platform engineer mirroring the tree into your own database

Syllabi change, and a stale mirror silently teaches last year’s syllabus without ever throwing an error.

GET /taxonomy/changes?since=&types=&limit=&cursor=GET /taxonomy/export?boardId=

The mirror converges within about a minute of a change: the taxonomy.updated webhook fires, you pull deltas, and apply upserts and delete tombstones.

Better chat calls with topic context

Any team already using the Gyanis chat API

Answer quality depends on how well the topic is described, and free-text subject and grade are lossy.

GET /taxonomy/topics/:topicId/contextPOST /chat

Answers bounded to the syllabus slot the student is actually in — one enriched read improves an entire tutoring session.

Migrate, in one call — batch resolve

POST /taxonomy/topics/resolve — three stored IDs
bash
curl -X POST "https://api.gyanis.ai/platform/v1/taxonomy/topics/resolve" \
  -H "Authorization: Bearer gyn_sk_live_aBcDeFgHiJkLmNoPqRsTuVwXyZ012345" \
  -H "Content-Type: application/json" \
  -d '{"topicIds":["652f1a9c4b7d3e0012ab34cd","652f1a9c4b7d3e0012ab34a1","652f1a9c4b7d3e0012ab34b2"]}'
200 OK — 3 request units, 300 credits (first context shown)
json
{
  "object": "taxonomy.topic_contexts",
  "contexts": [
    {
      "topic_id": "652f1a9c4b7d3e0012ab34cd",
      "topic_name": "Refraction of Light",
      "unit_id": "652f1a9c4b7d3e0012ab2f88",
      "unit_name": "Optics",
      "subject_id": "652f1a9c4b7d3e0012ab1e77",
      "subject_name": "Physics",
      "grade_id": "652f1a9c4b7d3e0012ab0d66",
      "grade_label": "Class 10",
      "board_id": "652f1a9c4b7d3e0012ab0155",
      "board_name": "Central Board of Secondary Education",
      "board_code": "CBSE",
      "country": "IN",
      "canonical_path": "CBSE > Class 10 > Physics > Optics > Refraction of Light",
      "learning_objectives": ["State the laws of refraction of light"],
      "keywords": ["refractive index", "Snell's law"],
      "difficulty": 3
    }
  ],
  "missing": [],
  "billing": {
    "request_units": 3,
    "free_units_applied": 0,
    "credits_charged": 300,
    "estimated_usd": 0.003,
    "test_mode": false
  }
}

How do I integrate the Gyanis Taxonomy API?

Create an API key carrying the taxonomy scope, then walk the hierarchy from a country board list down to a topic, fetch that topic’s context, and pass it into a chat request. The eleven steps below are one continuous story: grounding an AI tutor in the CBSE Class 10 Physics syllabus.

  1. 01

    Create an API key with the taxonomy scope

    In the dashboard, create a key and grant it the taxonomy scope. Start in test mode — test-mode keys are never billed. Keys without the scope receive HTTP 403 endpoint_not_allowed.

  2. 02

    List the boards for your market

    GET /taxonomy/boards?country=IN

    Filter by ISO country code and pick the board your tenants follow. For India this returns CBSE, CISCE/ICSE, NIOS and the state boards.

  3. 03

    List that board’s grades

    GET /taxonomy/boards/:boardId/grades

    Grades come back named the way the board names them, so you never have to map "Class 10" to "Year 11" by hand.

  4. 04

    List the grade’s subjects

    GET /taxonomy/grades/:gradeId/subjects

    Subjects are read from the grade rather than assumed, because the subject list differs by board and by year of study.

  5. 05

    List the subject’s units

    GET /taxonomy/subjects/:subjectId/units

    Units are the chapter-level groupings the syllabus itself uses — the natural unit for scheduling and for coverage reports.

  6. 06

    List the unit’s topics

    GET /taxonomy/units/:unitId/topics

    Store the topic ID. It is the stable join key for lessons, questions, progress rows and analytics from this point on.

  7. 07

    Fetch LLM-ready topic context

    GET /taxonomy/topics/:topicId/context

    Returns the canonical path, learning objectives, prerequisites, keywords, difficulty, sample prompts and tags for one topic. This is an enriched read.

  8. 08

    Make the tutoring call

    POST /chat

    Pass the canonical path and learning objectives into your chat request as system context, alongside entity_id, subject and grade. The answer is now bounded to the syllabus slot the student is in.

  9. 09

    Build the remediation path

    POST /taxonomy/topics/resolve

    Send the prerequisite topic IDs from step 07 — up to 50 per call — to hydrate their names and difficulty in a single round trip.

  10. 10

    Stay in sync as syllabi change

    GET /taxonomy/changes?since=&cursor=

    Subscribe to the taxonomy.updated webhook, then call the changes endpoint on delivery and apply upserts and delete tombstones. The window is a rolling 180 days.

  11. 11

    Meter usage and go live

    Read the billing object on every response — request_units, free_units_applied, credits_charged, estimated_usd and test_mode — then swap the test key for a live key.

Steps 02–06 — five basic reads, 100 credits each
bash
export GYANIS_KEY="gyn_sk_live_aBcDeFgHiJkLmNoPqRsTuVwXyZ012345"
export BASE="https://api.gyanis.ai/platform/v1"

curl -H "Authorization: Bearer $GYANIS_KEY" "$BASE/taxonomy/boards?country=IN"
curl -H "Authorization: Bearer $GYANIS_KEY" "$BASE/taxonomy/boards/$BOARD_ID/grades"
curl -H "Authorization: Bearer $GYANIS_KEY" "$BASE/taxonomy/grades/$GRADE_ID/subjects"
curl -H "Authorization: Bearer $GYANIS_KEY" "$BASE/taxonomy/subjects/$SUBJECT_ID/units"
curl -H "Authorization: Bearer $GYANIS_KEY" "$BASE/taxonomy/units/$UNIT_ID/topics"
Steps 07–08 — the handoff into chat
typescript
const BASE = 'https://api.gyanis.ai/platform/v1';
const auth = { Authorization: `Bearer ${process.env.GYANIS_KEY}` };

// 1. Enriched read — 400 credits. Returns the topic's LLM-ready context.
const res = await fetch(`${BASE}/taxonomy/topics/${topicId}/context`, { headers: auth });
const { context, billing } = await res.json();

// 2. Ground the tutoring call in that context.
await fetch(`${BASE}/chat`, {
  method: 'POST',
  headers: { ...auth, 'Content-Type': 'application/json' },
  body: JSON.stringify({
    model: 'mobius',
    entity_id: 'student_8842',
    messages: [
      {
        role: 'system',
        content: [
          `Answer only within: ${context.canonical_path}`,
          `Learning objectives: ${context.learning_objectives.join('; ')}`,
        ].join('\n'),
      },
      { role: 'user', content: 'Why does a pencil look bent in water?' },
    ],
  }),
});

console.log(billing.credits_charged); // 400

Which API key scope do taxonomy endpoints need?

Every Gyanis Taxonomy API endpoint requires an API key with the taxonomy scope (or the wildcard * scope). Keys without it receive HTTP 403 endpoint_not_allowed. Bulk export, GET /taxonomy/export?boardId=, additionally requires the taxonomy.export scope and an account-level add-on; accounts without it receive HTTP 403 product_not_enabled.

scope: taxonomyscope: taxonomy.exportCreating and revoking keys →

Errors the Gyanis Taxonomy API returns

400invalid_request
A parameter is malformed — an unknown type in types=, a bad ISO timestamp in since=, or more than 50 IDs in a resolve body.
402insufficient_credits
The prepaid credit balance cannot cover the call. Top up, or watch the credits.low webhook so you never get here.
403endpoint_not_allowed
The API key does not carry the taxonomy scope (or the wildcard * scope). Add the scope to the key.
403product_not_enabled
The taxonomy product is not enabled for the account — this can hit any endpoint. GET /taxonomy/export additionally returns it when the bulk-export add-on is off. Contact hello@gyanis.ai.
404not_found
The board, grade, subject, unit, topic or exam-track ID does not exist. IDs are stable, so treat this as a data-sync signal.

The full error envelope, its type vocabulary and the shared retry guidance live in the error reference.

Test-mode keys exercise every endpoint and are never billed, so development costs nothing.

The topic context payload

GET /taxonomy/topics/:topicId/context returns one LLM-ready block for a single topic, nested under a context key: canonical path, board, grade, subject and unit, learning objectives, prerequisites with their topic IDs, keywords, difficulty from 1 to 5, sample prompts and tags. It is an enriched read at $4.00 per 1,000 requests.

Key

canonical_path
The full board-to-topic address as one string — "CBSE > Class 10 > Physics > Optics > Refraction of Light".
learning_objectives
What the syllabus expects a student to be able to do. Drop straight into a system prompt.
prerequisites, prerequisite_topic_ids, prerequisite_topic_names
The dependency chain, as readable names and as IDs you can batch-resolve.
keywords
Retrieval and tagging vocabulary for the topic.
difficulty
An integer from 1 to 5. Not a float, and not a label.
sample_prompts, tags
Seed questions written against this topic, and free-form labels such as optics or board-exam.

The remaining keys name the slot the topic sits in — country, board_code, board_name, grade_code, grade_label, subject_code, subject_name, unit_name and topic_name.

slug and tier_scope are not on this payload — they come back on GET /taxonomy/topics/:topicId, the basic read.

cURL — topic context (enriched read)
bash
curl "https://api.gyanis.ai/platform/v1/taxonomy/topics/652f1a9c4b7d3e0012ab34cd/context" \
  -H "Authorization: Bearer gyn_sk_live_aBcDeFgHiJkLmNoPqRsTuVwXyZ012345"
Response — 200 OK
json
{
  "object": "taxonomy.topic_context",
  "topic_id": "652f1a9c4b7d3e0012ab34cd",
  "context": {
    "canonical_path": "CBSE > Class 10 > Physics > Optics > Refraction of Light",
    "country": "IN",
    "board_code": "CBSE",
    "board_name": "Central Board of Secondary Education",
    "grade_code": "10",
    "grade_label": "Class 10",
    "subject_code": "PHY",
    "subject_name": "Physics",
    "unit_name": "Optics",
    "topic_name": "Refraction of Light",
    "learning_objectives": [
      "State the laws of refraction of light",
      "Apply Snell's law to solve numerical problems",
      "Explain refraction through a rectangular glass slab"
    ],
    "prerequisites": ["Reflection of Light", "Light: basic properties"],
    "prerequisite_topic_ids": ["652f1a9c4b7d3e0012ab34a1", "652f1a9c4b7d3e0012ab34b2"],
    "prerequisite_topic_names": ["Reflection of Light", "Light: basic properties"],
    "keywords": ["refractive index", "Snell's law", "optical density", "lateral displacement"],
    "difficulty": 3,
    "sample_prompts": [
      "Explain why a pencil appears bent when partially immersed in water.",
      "A ray of light passes from air into glass at 45 degrees. Find the angle of refraction if n = 1.5."
    ],
    "tags": ["optics", "numericals", "board-exam"]
  },
  "billing": {
    "request_units": 1,
    "free_units_applied": 0,
    "credits_charged": 400,
    "estimated_usd": 0.004,
    "test_mode": false
  }
}

A request unit is one billable item: one API call, or one topic ID inside a batch resolve. Every single-call endpoint is exactly one request unit, basic and enriched alike. The rate class sets what that unit costs — 100 credits for a basic read, 400 for an enriched one — and the billing object above reports it per call. Full request and response reference for all 13 endpoints lives in the API documentation.

Endpoint reference

The Gyanis Taxonomy API exposes 13 endpoints under https://api.gyanis.ai/platform/v1, and all of them are read-only — the single POST is a batch lookup, not a write. 7 are basic reads at $1.00 per 1,000 requests, 4 are enriched reads at $4.00 per 1,000, one is that batch resolve billed per topic ID, and one is the bulk-export add-on.

Basic100 credits per request
  • GET/taxonomy/boards?country=IN
  • GET/taxonomy/boards/:boardId/grades
  • GET/taxonomy/grades/:gradeId/subjects
  • GET/taxonomy/subjects/:subjectId/units
  • GET/taxonomy/units/:unitId/topics
  • GET/taxonomy/topics/:topicId
  • GET/taxonomy/exam-tracks?country=IN
Enriched400 credits per request
  • GET/taxonomy/topics/:topicId/context
  • GET/taxonomy/search?q=&types=&country=&boardId=&limit=
  • GET/taxonomy/exam-tracks/:trackId?withTopics=true
  • GET/taxonomy/changes?since=&types=&limit=&cursor=
Batch100 credits per topic ID, up to 50 per call
  • POST/taxonomy/topics/resolve
Add-onrequires the taxonomy.export scope plus account activation
  • GET/taxonomy/export?boardId=

What each endpoint returns, its parameters, request bodies and full response samples are in the API documentation. GET /taxonomy/export is the one add-on: it needs the taxonomy.export scope plus account-level activation.

Is there an API for JEE and NEET topic weightage?

Yes. The Gyanis Taxonomy API exposes exam tracks: GET /taxonomy/exam-tracks?country=IN lists them, and GET /taxonomy/exam-tracks/:trackId?withTopics=true returns the exam’s sections, marks, negative-marking rules, sittings and per-topic weightage mapped to curriculum topics. The basic exam-track list is $1.00 per 1,000 requests; exam-track detail is an enriched read at $4.00 per 1,000.

A track carriesWhat it is for
SectionsHow the paper is divided, so a mock test can mirror the real structure.
MarksMarks carried per section, which is what turns a score into a comparable percentage.
Negative markingThe penalty rule to apply when grading, so practice scores match exam scores.
SittingsHow many attempts the exam offers in a cycle, which drives revision scheduling.
Per-topic weightageHow much of the exam each curriculum topic accounts for — the input to a study plan.
Expand one track — enriched, 400 credits
http
GET https://api.gyanis.ai/platform/v1/taxonomy/exam-tracks/665f1c2ab8f4a21d3c9e1b07?withTopics=true
Authorization: Bearer gyn_sk_live_aBcDeFgHiJkLmNoPqRsTuVwXyZ012345

200 OK
{
  "object": "taxonomy.exam_track",
  "exam_track": {
    "id": "665f1c2ab8f4a21d3c9e1b07",
    "code": "JEE_MAIN",
    "name": "JEE Main",
    "country": "IN",
    "format": "mcq",
    "total_time_min": 180,
    "sittings": [
      { "series": "Session 1", "year": 2027, "exam_date": "2027-01-24T00:00:00.000Z", "registration_deadline": "2026-11-30T00:00:00.000Z" }
    ],
    "sections": [
      { "paper": "Paper 1", "name": "Physics", "code": "PHY-A", "question_types": ["MCQ"], "marks": 4, "negative": -1, "duration_min": 60, "count": 20 }
    ],
    "updated_at": "2026-08-10T08:12:33.000Z"
  },
  "coverage": [
    {
      "topic_id": "652f1a9c4b7d3e0012ab34cd",
      "weight_percent": 6.5,
      "question_types": ["MCQ"],
      "difficulty_dist": [],
      "subject_id": "652f1a9c4b7d3e0012ab1e77",
      "section_code": "PHY-A",
      "topic": { "id": "652f1a9c4b7d3e0012ab34cd", "name": "Refraction of Light", "slug": "refraction-of-light" }
    }
  ],
  "billing": { "request_units": 1, "free_units_applied": 0, "credits_charged": 400, "estimated_usd": 0.004, "test_mode": false }
}

How do I keep my copy of the syllabus up to date?

Call GET /taxonomy/changes?since=<ISO timestamp> for cursor-paginated deltas, including tombstones for deleted records, over a rolling 180-day window. Subscribe to the taxonomy.updated webhook (debounced, roughly 60 seconds) so you only poll when something actually changed. Changes is an enriched read at $4.00 per 1,000 requests; Gyanis maintains the syllabi.

01

Mirror the tree once

Walk the hierarchy, or request a full nested board tree with the bulk-export add-on, and store the Gyanis IDs alongside your own records.

02

Subscribe to taxonomy.updated

The webhook is debounced to roughly sixty seconds and tells you that something changed, so you never poll on a schedule that is mostly empty.

03

Pull the delta

Call the changes endpoint with the timestamp of your last successful sync and page through the cursor until it is exhausted.

04

Apply upserts and tombstones

Deltas carry deletions as tombstones, so a mirror can remove records instead of silently keeping a topic the syllabus dropped.

A syllabus that changes is the reason curriculum data rots, so Gyanis treats maintenance as the product. Subscribe once — see webhook subscriptions — and taxonomy.updated tells you when something moved while GET /taxonomy/changes tells you exactly what.

Pull the delta — enriched, 400 credits
http
GET https://api.gyanis.ai/platform/v1/taxonomy/changes?since=2026-08-01T00:00:00Z&types=unit,topic&limit=100
Authorization: Bearer gyn_sk_live_aBcDeFgHiJkLmNoPqRsTuVwXyZ012345

200 OK
{
  "object": "taxonomy.changes",
  "since": "2026-08-01T00:00:00.000Z",
  "window_days": 180,
  "changes": [
    { "type": "unit",  "id": "652f1a9c4b7d3e0012ab2f88", "change": "deleted",  "name": "Optics (legacy)",     "changed_at": "2026-08-09T11:40:55.312Z" },
    { "type": "topic", "id": "652f1a9c4b7d3e0012ab34cd", "change": "upserted", "name": "Refraction of Light", "changed_at": "2026-08-09T11:42:07.884Z" }
  ],
  "has_more": true,
  "next_cursor": "eyJ2IjoxLCJ0aSI6NCwicGgiOjAsInUiOiIyMDI2LTA4LTA5VDExOjQyOjA3Ljg4NFoiLCJpIjoiNjUyZjFhOWM0YjdkM2UwMDEyYWIzNGNkIn0",
  "billing": { "request_units": 1, "free_units_applied": 0, "credits_charged": 400, "estimated_usd": 0.004, "test_mode": false }
}

Per request, not per contract

Curriculum standards data is normally bought as an annual enterprise licence, and the freely available catalogues cover United States standards only. The Gyanis Taxonomy API is bought per request from a self-serve dashboard, and it carries Indian board structure and competitive exam tracks that neither option provides.

How curriculum data is normally soldThe Gyanis Taxonomy API
Unit of purchaseAn annual enterprise licence, with pricing behind a sales process.One request, drawn from the prepaid credit balance you already hold.
CoverageFreely available open standards catalogues cover United States standards only — no Indian board structure, no competitive-exam formats.Indian and international boards, plus exam tracks carrying per-topic weightage.
EvaluationA sales call.Create a key and read the hierarchy.

How much does the Gyanis Taxonomy API cost?

The Gyanis Taxonomy API is billed per request from the same prepaid credit wallet as Gyanis chat. Basic reads cost $1.00 per 1,000 requests at 100 credits each, and enriched reads — topic context, search, exam-track detail and change deltas — cost $4.00 per 1,000 requests at 400 credits each. The first 10,000 request units each month are free.

Basic reads

$1.00

per 1,000 requests

100 credits per request — hierarchy lists, topic detail, exam-track list.

Enriched reads

$4.00

per 1,000 requests

400 credits per request — topic context, search, exam-track detail, change deltas.

Batch resolve

$1.00

per 1,000 topic IDs

100 credits per topic ID, up to 50 IDs in a single call.

The first 10,000 request units each calendar month are free per tenant, applied before any credits are drawn.
Credits are prepaid and shared with chat — there is no separate taxonomy subscription and no seat count.
Test-mode keys are never billed, and taxonomy responses on a test key carry "test_mode": true in the billing object.
Every taxonomy response ends with a billing object carrying request_units, free_units_applied, credits_charged, estimated_usd and test_mode, so the cost of a call is visible in the call itself.
Bulk export of a full board tree is an add-on — contact sales.

What is a curriculum taxonomy?

A curriculum taxonomy is a structured, machine-readable hierarchy of what a school system teaches. The Gyanis Taxonomy API models it as five levels — Board, Grade, Subject, Unit, Topic — with stable IDs at every level, plus exam tracks that map topics to exam sections and weightage. It replaces hard-coded syllabus lists in application code.

Curriculum taxonomy
A curriculum taxonomy is a structured, machine-readable hierarchy of what a school system teaches. The Gyanis Taxonomy API models it as five levels — Board, Grade, Subject, Unit, Topic — with stable IDs at every level.
Board
A board is the authority that defines and examines a curriculum. In the Gyanis Taxonomy API a board is the root of the hierarchy and is scoped to a country, so CBSE and Cambridge IGCSE are separate boards.
Grade
A grade is a year of study within a board. The Gyanis Taxonomy API returns grades using the board’s own naming, so CBSE returns Class 10 rather than a normalised year number.
Subject
A subject is a field of study offered at a grade. The Gyanis Taxonomy API reads subjects from the grade rather than from a global list, because the offer differs by board and by year.
Unit
A unit is the chapter-level grouping a syllabus uses to organise a subject. In the Gyanis Taxonomy API a unit is the natural level for scheduling, coverage reporting and analytics rollups.
Topic
A topic is the teachable leaf node of the curriculum. In the Gyanis Taxonomy API the topic ID is the stable join key you store on lessons, questions and progress rows.
Canonical path
A canonical path is the full board-to-topic address of a topic written as one string. The Gyanis Taxonomy API formats it as "CBSE > Class 10 > Physics > Optics > Refraction of Light" and returns it on the topic context endpoint.
Exam track
An exam track is a description of a competitive exam’s format. The Gyanis Taxonomy API returns sections, marks, negative marking and sittings for JEE/NEET-style exams, together with the curriculum topics each section draws on.
Topic weightage
Topic weightage is how much of an exam a given topic accounts for. The Gyanis Taxonomy API attaches weightage to topics through exam tracks, so a study plan can allocate time by what the exam actually weights.
Request unit
A request unit is one billable item — one API call, or one topic ID inside a batch resolve. Basic calls cost 100 credits per unit and enriched calls 400; the first 10,000 request units each month are free.
Basic read
A basic read is a plain hierarchy or detail lookup. In the Gyanis Taxonomy API basic reads cost 100 credits — $1.00 per 1,000 requests — and cover boards, grades, subjects, units, topic detail and the exam-track list.
Enriched read
An enriched read returns derived or cross-cutting data. In the Gyanis Taxonomy API enriched reads cost 400 credits — $4.00 per 1,000 requests — and cover topic context, search, exam-track detail and change deltas.
Change delta
A change delta is the set of records that changed since a timestamp. The Gyanis Taxonomy API serves deltas from GET /taxonomy/changes with cursor pagination over a rolling 180-day window.
Tombstone
A tombstone is a record that marks a deletion rather than a value. The Gyanis Taxonomy API includes tombstones in change deltas so a local mirror can remove records instead of silently keeping them.
Test mode
Test mode is a key mode that exercises the real API without billing. Gyanis test-mode keys are never charged, and every Taxonomy API response reports test_mode inside its billing object.

Curriculum Taxonomy API FAQ

Scope, coverage, billing and sync — answered for the Gyanis Taxonomy API specifically.

Start with 10,000 free request units a month

Create an account, add the taxonomy scope to a test key, and read a real board tree in a few minutes. Live keys draw on the same prepaid credits as chat.

Need a full board export or an enterprise agreement? Email hello@gyanis.ai.