voTechWorksGrade 13 · a vocational technology learning center, by urbanicity
newSchoolWorks.com › VoTechWorks › API
Developers · Curriculum API v1

The whole curriculum, as JSON.

Every program, course, lesson, reading, practice item, study list, credential and pathway on VoTechWorks — and every gallery, panel, reading and object in the Museum of VoTech — is readable at https://nswonline.urbanicity.space/api/v1. Read-only, no key, CORS open, five-minute cache with ETags. Built for the school's own apps, for partner schools licensing a program, and for anyone building study tools on top of the material.

90programs
888courses
6,641lessons
2,345readings
18,874practice items
2,928reference entries
204credentials
31pathways
11galleries
273museum panels
34objects
Draft notice. Readings, practice items and resource lists are AI-drafted and carry status: "draft" until a licensed professional in that trade, or the certifying body, has reviewed them; reviewed material carries status: "reviewed" with the reviewer's credential. Every response repeats this in meta.review. Curriculum text is © newSchoolWorks.com; free for study and non-commercial reuse with attribution, commercial licensing on request.

Endpoints

RouteReturnsTry it
GET/Index: live counts and the endpoint listopen ↗
GET/sectorsThe eight trade familiesopen ↗
GET/programsCatalogue. Filters: sector=HLT, q=text, limit, offset. Each program carries hours, months, exam fees, kit cost, BLS outlook and build countsopen ↗
GET/programs/{slug}One program: credentials with issuing bodies, courses with assessments and outcomes, modules, pathways, review recordsopen ↗
GET/programs/{slug}/coursesCourses with their lessons nested (objective, activities, materials, check-for, page state)open ↗
GET/programs/{slug}/lessonsEvery lesson, flat and pagedopen ↗
GET/programs/{slug}/resourcesThe study reference list (components, tools, standards, terms) — or the top-200 drug table for pharmacyopen ↗
GET/programs/{slug}/questionsPractice items. Filters: status=ready|draft, kind=mc|numeric, limit, offsetopen ↗
GET/courses/{id}Course with assessments and lessonsopen ↗
GET/lessons/{id}The full lesson: reading (Markdown), key terms, worked examples, practice items, review stateopen ↗
GET/certsAll credentials with issuing bodies; /certs/{code} adds the programs that prepare for itopen ↗
GET/pathwaysGrade-13 routes: ordered programs per pathwayopen ↗
GET/search?q=Programs, courses and lessons matching a phrase (trigram-ranked)open ↗
GET/changes?since=Lesson pages written or reviewed since a date — poll this instead of re-pulling the catalogueopen ↗
GET/museumThe Museum of VoTech. Galleries with panel and object counts, and the nine panel seriesopen ↗
GET/museum/overviewThe overview poster of the eleven galleries — image URL and the gallery list in walk orderopen ↗
GET/museum/galleries/{code}One gallery (G1 …): intro text, anchor object, the panels hung there, the catalogued objectsopen ↗
GET/museum/panelsThe 48-inch panels. Filters: series=K, program=welding, gallery=G3, status=open ↗
GET/museum/panels/{slug}One panel in full: body (Markdown), its general and technical readings, people, infographics, art, QR codeopen ↗
GET/museum/readingsThe readings behind the panels. Filters: level=general|technical, panel=slugopen ↗
GET/museum/readings/{slug}One reading in fullopen ↗
GET/museum/objectsThe object catalogue: accession number, trade, era, donor, galleryopen ↗
GET/museum/seriesPanel series A–K with targets, hung and printed countsopen ↗

Shape

Every response is an object with meta (api, version, base, generated, license, review) followed by the payload. Lists that page carry page: {count, total, limit, offset}. Add ?pretty=1 to any call to read it in a browser. Related records carry links so a client can walk program → courses → lessons → reading without building URLs.

curl -s "https://nswonline.urbanicity.space/api/v1/programs/pharmacy-tech" | jq '.program | {name, hours, credentials: [.credentials[].code], courses: [.courses[].name]}'

curl -s "https://nswonline.urbanicity.space/api/v1/lessons/6460" | jq '.lesson.page.key_terms'

# poll for new or reviewed readings once an hour
curl -s "https://nswonline.urbanicity.space/api/v1/changes?since=$(date -u -v-1H +%FT%TZ)"

Keys and limits

No key is needed to read. Without one, each address may make 300 requests an hour; a key raises that to its own limit and names your app in meta.client. Send it as an X-Api-Key header or ?key=. Keys are six-character codes issued by the school — ask through the enrollment desk or the feedback button, saying what you are building. Every response carries X-RateLimit-Limit and X-RateLimit-Remaining; a 429 means wait ten minutes.

Conventions

Hours are clock hours; months is the expected full-time span; bls is the U.S. Bureau of Labor Statistics outlook for the mapped occupation with its reference year. Readings are Markdown in reading_md. Multiple-choice items hold options and the answer key; numeric items hold a value and a unit in answer with the working in rationale. IDs are stable; slugs are stable; anything else may be rewritten as programs are reviewed, so consumers should key on IDs and watch /changes.

The API's own home is newschoolworks.online (same code, same data; the base URL follows whichever host you call). Questions and licensing: votechworks.com.