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://www.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.
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.| Route | Returns | Try it | |
|---|---|---|---|
| GET | / | Index: live counts and the endpoint list | open ↗ |
| GET | /sectors | The eight trade families | open ↗ |
| GET | /programs | Catalogue. Filters: sector=HLT, q=text, limit, offset. Each program carries hours, months, exam fees, kit cost, BLS outlook and build counts | open ↗ |
| GET | /programs/{slug} | One program: credentials with issuing bodies, courses with assessments and outcomes, modules, pathways, review records | open ↗ |
| GET | /programs/{slug}/courses | Courses with their lessons nested (objective, activities, materials, check-for, page state) | open ↗ |
| GET | /programs/{slug}/lessons | Every lesson, flat and paged | open ↗ |
| GET | /programs/{slug}/resources | The study reference list (components, tools, standards, terms) — or the top-200 drug table for pharmacy | open ↗ |
| GET | /programs/{slug}/questions | Practice items. Filters: status=ready|draft, kind=mc|numeric, limit, offset | open ↗ |
| GET | /courses/{id} | Course with assessments and lessons | open ↗ |
| GET | /lessons/{id} | The full lesson: reading (Markdown), key terms, worked examples, practice items, review state | open ↗ |
| GET | /certs | All credentials with issuing bodies; /certs/{code} adds the programs that prepare for it | open ↗ |
| GET | /pathways | Grade-13 routes: ordered programs per pathway | open ↗ |
| 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 catalogue | open ↗ |
| GET | /museum | The Museum of VoTech. Galleries with panel and object counts, and the nine panel series | open ↗ |
| GET | /museum/overview | The overview poster of the eleven galleries — image URL and the gallery list in walk order | open ↗ |
| GET | /museum/galleries/{code} | One gallery (G1 …): intro text, anchor object, the panels hung there, the catalogued objects | open ↗ |
| GET | /museum/panels | The 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 code | open ↗ |
| GET | /museum/readings | The readings behind the panels. Filters: level=general|technical, panel=slug | open ↗ |
| GET | /museum/readings/{slug} | One reading in full | open ↗ |
| GET | /museum/objects | The object catalogue: accession number, trade, era, donor, gallery | open ↗ |
| GET | /museum/series | Panel series A–K with targets, hung and printed counts | open ↗ |
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://www.nswonline.urbanicity.space/api/v1/programs/pharmacy-tech" | jq '.program | {name, hours, credentials: [.credentials[].code], courses: [.courses[].name]}'
curl -s "https://www.nswonline.urbanicity.space/api/v1/lessons/6460" | jq '.lesson.page.key_terms'
# poll for new or reviewed readings once an hour
curl -s "https://www.nswonline.urbanicity.space/api/v1/changes?since=$(date -u -v-1H +%FT%TZ)"
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.
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.