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.
curl "https://api.gyanis.ai/platform/v1/taxonomy/boards?country=IN" \
-H "Authorization: Bearer gyn_sk_live_aBcDeFgHiJkLmNoPqRsTuVwXyZ012345"{
"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
- 1Boarde.g. CBSE
GET /taxonomy/boards?country=INThe examination or curriculum authority a school follows. Filter by ISO country code to list the boards available in a market.
- 2Gradee.g. Class 10
GET /taxonomy/boards/:boardId/gradesThe year of study as that board names it — Class 10 for CBSE, Year 11 for Cambridge, MYP 5 for the IB.
- 3Subjecte.g. Physics
GET /taxonomy/grades/:gradeId/subjectsA subject offered at that grade. Subjects differ by board and grade, so they are always read from the grade rather than assumed.
- 4Unite.g. Optics
GET /taxonomy/subjects/:subjectId/unitsThe chapter-level grouping the syllabus uses to organise a subject. Units are the natural unit of scheduling and coverage reporting.
- 5Topice.g. Refraction of Light
GET /taxonomy/units/:unitId/topicsThe 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.
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/subjectsA picker that is still correct next session — three basic reads per sign-up funnel, comfortably inside the free monthly allowance.
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 /chatGeneration bounded by the real syllabus, with the topic’s sample prompts seeding the generator instead of a blank prompt.
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/topicsA populated course, module and lesson tree carrying stable Gyanis IDs you can diff against later.
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/:topicIdOne 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.
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/resolveEvery asset carries a canonical topic ID, so filtering, analytics and cross-product joins become possible. Batch resolve is billed per topic ID.
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.
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/topicsPer-class coverage percentages and a "not started" unit list, built on an authoritative denominator instead of a guess.
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/unitsDashboards 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.
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/contextA plan that spends time where the exam does — sections, marks, negative marking, sittings and per-topic weightage come straight from the track.
Adaptive-learning engineer
A student fails a Refraction item and deciding what to show next is guesswork.
GET /taxonomy/topics/:topicId/contextPOST /taxonomy/topics/resolveRemediation that walks a real dependency graph — prerequisite topic IDs come back with the context and hydrate in one batch call.
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.
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 /chatAnswers bounded to the syllabus slot the student is actually in — one enriched read improves an entire tutoring session.
Migrate, in one call — batch resolve
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"]}'{
"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.
- 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.
- 02
List the boards for your market
GET /taxonomy/boards?country=INFilter by ISO country code and pick the board your tenants follow. For India this returns CBSE, CISCE/ICSE, NIOS and the state boards.
- 03
List that board’s grades
GET /taxonomy/boards/:boardId/gradesGrades come back named the way the board names them, so you never have to map "Class 10" to "Year 11" by hand.
- 04
List the grade’s subjects
GET /taxonomy/grades/:gradeId/subjectsSubjects are read from the grade rather than assumed, because the subject list differs by board and by year of study.
- 05
List the subject’s units
GET /taxonomy/subjects/:subjectId/unitsUnits are the chapter-level groupings the syllabus itself uses — the natural unit for scheduling and for coverage reports.
- 06
List the unit’s topics
GET /taxonomy/units/:unitId/topicsStore the topic ID. It is the stable join key for lessons, questions, progress rows and analytics from this point on.
- 07
Fetch LLM-ready topic context
GET /taxonomy/topics/:topicId/contextReturns the canonical path, learning objectives, prerequisites, keywords, difficulty, sample prompts and tags for one topic. This is an enriched read.
- 08
Make the tutoring call
POST /chatPass 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.
- 09
Build the remediation path
POST /taxonomy/topics/resolveSend the prerequisite topic IDs from step 07 — up to 50 per call — to hydrate their names and difficulty in a single round trip.
- 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
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.
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"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); // 400Which 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.
Errors the Gyanis Taxonomy API returns
- 400
invalid_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.
- 402
insufficient_credits - The prepaid credit balance cannot cover the call. Top up, or watch the credits.low webhook so you never get here.
- 403
endpoint_not_allowed - The API key does not carry the taxonomy scope (or the wildcard * scope). Add the scope to the key.
- 403
product_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.
- 404
not_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.
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 "https://api.gyanis.ai/platform/v1/taxonomy/topics/652f1a9c4b7d3e0012ab34cd/context" \
-H "Authorization: Bearer gyn_sk_live_aBcDeFgHiJkLmNoPqRsTuVwXyZ012345"{
"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.
- 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
- 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=
- POST/taxonomy/topics/resolve
- 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 carries | What it is for |
|---|---|
| Sections | How the paper is divided, so a mock test can mirror the real structure. |
| Marks | Marks carried per section, which is what turns a score into a comparable percentage. |
| Negative marking | The penalty rule to apply when grading, so practice scores match exam scores. |
| Sittings | How many attempts the exam offers in a cycle, which drives revision scheduling. |
| Per-topic weightage | How much of the exam each curriculum topic accounts for — the input to a study plan. |
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.
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.
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.
Pull the delta
Call the changes endpoint with the timestamp of your last successful sync and page through the cursor until it is exhausted.
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.
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 sold | The Gyanis Taxonomy API | |
|---|---|---|
| Unit of purchase | An annual enterprise licence, with pricing behind a sales process. | One request, drawn from the prepaid credit balance you already hold. |
| Coverage | Freely 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. |
| Evaluation | A 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.
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.
The Gyanis Taxonomy API covers CBSE, CISCE/ICSE, roughly thirty Indian state boards and NIOS, plus Cambridge IGCSE and CAIE, Pearson Edexcel, AQA, OCR, the International Baccalaureate (PYP, MYP and DP), Malaysia’s KSSR, KSSM, SPM and STPM, and the UAE Ministry of Education curriculum. Call GET /taxonomy/boards?country=IN to list boards by country.
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 (100 credits each). Enriched reads — topic context, search, exam-track detail and change deltas — cost $4.00 per 1,000 requests (400 credits each). The first 10,000 request units each month are free.
Yes. Every Gyanis tenant receives 10,000 free taxonomy request units each month, applied automatically before any credits are charged. Test-mode API keys are never billed at all. Every response carries a billing object showing request_units, free_units_applied, credits_charged, estimated_usd and test_mode, so the cost of each call is visible in the response itself.
Call the Gyanis Taxonomy API. GET /taxonomy/boards?country=IN returns CBSE, then walk /boards/:boardId/grades, /grades/:gradeId/subjects, /subjects/:subjectId/units and /units/:unitId/topics to reach any CBSE topic. Every call needs a Bearer key with the taxonomy scope. Basic reads cost $1.00 per 1,000 requests, and the first 10,000 request units each month are free.
GET /taxonomy/topics/:topicId/context returns an LLM-ready block for one topic: its canonical path from board down to topic, learning objectives, prerequisites with prerequisite topic IDs, keywords, difficulty on a 1-5 scale, sample prompts and tags. It is an enriched read at $4.00 per 1,000 requests.
Yes. POST /taxonomy/topics/resolve on the Gyanis Taxonomy API accepts a JSON body of topicIds and resolves up to 50 topic IDs in a single call, which is how you hydrate stored IDs. Each topic ID is one request unit billed at 100 credits — $1.00 per 1,000 IDs — drawn from the same 10,000 free monthly request units.
GET /taxonomy/search?q=&types=&country=&boardId=&limit= searches the Gyanis Taxonomy API curriculum graph and returns matching boards, subjects, units and topics with their canonical paths. Filter by entity type, country or board, and cap results with limit. Search is an enriched read at $4.00 per 1,000 requests.
The Gyanis Taxonomy API exposes 13 endpoints under https://api.gyanis.ai/platform/v1/taxonomy — 12 GET reads plus one POST, and that POST is a batch lookup rather than a write. Seven are basic reads at $1.00 per 1,000 requests: boards, grades, subjects, units, topics, topic detail and the exam-track list. Four are enriched reads at $4.00 per 1,000: topic context, search, exam-track detail and change deltas. POST /taxonomy/topics/resolve hydrates up to 50 topic IDs per call, and GET /taxonomy/export is the bulk-export add-on.
Curriculum standards data is normally sold as an annual enterprise licence priced behind a sales process, and the freely available catalogues cover United States standards only. The Gyanis Taxonomy API is bought per request from the same prepaid credit balance as Gyanis chat — no contract, no seat count, and the first 10,000 request units each month are free. It also carries Indian board structure and competitive exam tracks with per-topic weightage, which neither option provides.
The Gyanis Taxonomy API returns HTTP 400 invalid_request for malformed parameters, 402 insufficient_credits when the prepaid balance cannot cover a call, 403 product_not_enabled when the taxonomy product is not enabled for the account — which can hit any endpoint, and which GET /taxonomy/export also returns when the bulk-export add-on is off — 403 endpoint_not_allowed when the key lacks the taxonomy scope, and 404 not_found for unknown board, grade, subject, unit, topic or track IDs.
GET /taxonomy/export?boardId= returns the full nested tree for one board — grades, subjects, units and topics in a single payload. Bulk export is an add-on: it requires the taxonomy.export scope plus account-level activation, so contact hello@gyanis.ai. Every other Gyanis Taxonomy API endpoint is self-serve from the dashboard.
Resolve the student’s topic with GET /taxonomy/search or a stored topic ID, fetch GET /taxonomy/topics/:topicId/context from the Gyanis Taxonomy API, then pass the canonical path, objectives and prerequisites into your Gyanis chat request as system context. The taxonomy constrains the model to what the board actually teaches at that grade.
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.