Syllabus APIsyllabus.ng ↗
Access Nigerian school schemes of work via the Syllabus.ng API. Retrieve subjects by class level and weekly topics by term for Primary, JSS, and SSS classes.
What is the Syllabus API?
The Syllabus.ng API provides 2 endpoints that expose Nigerian school curriculum data — subjects by class level and full term-by-term schemes of work. The get_scheme_of_work endpoint returns up to three terms of weekly learning objectives for a given class and subject combination, covering Primary 1 through SSS 3. Use list_subjects to discover valid subject slugs before querying scheme data.
curl -X GET 'https://api.parse.bot/scraper/f6b07dae-0a11-44e1-9b6f-0feb92cbc64d/list_subjects?class_slug=nursery1' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace syllabus-ng-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: syllabus_ng_api SDK — bounded, re-runnable; every call capped."""
from parse_apis.syllabus_ng_api import Syllabus, ClassLevel, SubjectNotFound
client = Syllabus()
# List subjects available for JSS 1
for subject in client.subjects.list(class_slug=ClassLevel.JSS_1, limit=3):
print(subject.subject_slug, subject.subject_name)
# Get the scheme of work for the first subject
first_subject = client.subjects.list(class_slug=ClassLevel.PRIMARY_1, limit=1).first()
try:
scheme = client.scheme_of_works.get(class_slug=ClassLevel.PRIMARY_1, subject_slug=first_subject.subject_slug)
print(scheme.title, len(scheme.terms), "terms")
for term in scheme.terms:
print(term.term)
for week in term.weeks[:2]:
print(f" Week {week.week}: {week.topic}")
except SubjectNotFound as e:
print("not found:", e.subject_slug)
print("exercised: subjects.list / scheme_of_works.get")
Returns the list of subjects available for a given class level. Each subject includes a slug usable as input to get_scheme_of_work. Coverage varies by class level (Primary classes have fewer subjects than JSS/SSS).
| Param | Type | Description |
|---|---|---|
| class_slugrequired | string | Class level identifier (e.g. 'primary1', 'jss1', 'ss3'). |
{
"type": "object",
"fields": {
"subjects": "array of subject objects with subject_slug and subject_name",
"class_slug": "string — the class level queried"
},
"sample": {
"data": {
"subjects": [
{
"subject_name": "JSS1 Agricultural Science",
"subject_slug": "agricultural-science"
},
{
"subject_name": "JSS1 Basic Science",
"subject_slug": "basic-science"
},
{
"subject_name": "JSS1 Mathematics",
"subject_slug": "math"
}
],
"class_slug": "jss1"
},
"status": "success"
}
}About the Syllabus API
Endpoints Overview
The API exposes two endpoints. list_subjects accepts a class_slug (e.g. primary1, jss2, ss3) and returns an array of subject objects, each containing a subject_slug and subject_name. The subject_slug values from this response are the required input to the second endpoint. Coverage varies by class level — Primary classes return fewer subjects than JSS or SSS classes.
Scheme of Work Data
get_scheme_of_work accepts a class_slug and a subject_slug and returns the complete scheme of work for that class-subject combination. The response includes a terms array, typically containing First Term, Second Term, and Third Term objects. Each term holds weekly topic entries with associated learning objectives. Terms normally span 10 to 13 weeks. The response also returns a title string reflecting the page title, plus the echo of class_slug and subject_slug for reference.
Class Level Coverage
Valid class_slug values follow a consistent naming convention: primary1 through primary6 for Primary school, jss1 through jss3 for Junior Secondary School, and ss1 through ss3 for Senior Secondary School. Subjects such as math, english, and basic-science are common across levels, though subject availability differs per class. Always call list_subjects first to confirm which slugs are valid for a given class level.
The Syllabus API is a managed, monitored endpoint for syllabus.ng — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when syllabus.ng changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official syllabus.ng API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a lesson planning tool that pulls weekly topics from
get_scheme_of_workfor a teacher's assigned class and subject - Generate a full-year curriculum calendar by iterating through all three terms returned in the
termsarray - Populate a school management system with subject lists per class using
list_subjects - Create a study guide app for Nigerian students that displays term-by-term topics and learning objectives by class level
- Validate that a school's internal syllabus aligns with the Syllabus.ng scheme of work for JSS or SSS subjects
- Index Nigerian curriculum content for search or recommendation across Primary, JSS, and SSS levels
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Syllabus.ng have an official developer API?+
What does `get_scheme_of_work` return for each week within a term?+
Does the API cover past exam questions or assignment content alongside the scheme of work?+
list_subjects and weekly scheme-of-work topics via get_scheme_of_work. It does not expose past exam questions, assignment banks, or additional learning resources. You can fork this API on Parse and revise it to add an endpoint targeting that content.Are all class levels guaranteed to return the same set of subjects?+
list_subjects with the specific class_slug you intend to query before calling get_scheme_of_work, to confirm which subject_slug values are valid for that level.Does the API support filtering scheme of work data by a specific term or week number?+
get_scheme_of_work endpoint returns all three terms in a single response. There is no server-side filtering by term or week — filtering must be applied client-side after receiving the full terms array. You can fork this API on Parse and revise it to return a filtered single-term response if your use case requires it.