De lessen-API — de lessen ophalen voor elke willekeurige datum
PremiumWanneer iets buiten Omniscol moet weten wat er gebeurt, en wanneer, is dit het endpoint dat wordt aangeroepen:
GET /api/schedules/lessons/{datesrange}
Het geeft de gedateerde lessen uit uw roosters terug — elke les geplaatst op haar werkelijke datum — voor de gevraagde datums en entiteiten. Bijna elke integratie (een intranet, een ETL, een partnertool) begint hier. Deze pagina loopt de parameters langs die er één endpoint van maken voor uiteenlopende toepassingen.
Lessen versus structuren
Twee endpoints, twee rollen:
GET /api/schedules/lessons/{datesrange}— de lessen: elke les geplaatst op een werkelijke datum, met haar vak, docenten, lokaal, groep en duur. Dit is wat u leest om te weten wie waar is, en wanneer.GET /api/schedules/— de structuren: de gepubliceerde roosters zelf (klassen, vakken, vestigingen, het tijdrooster). Te lezen wanneer u het onderliggende model nodig hebt in plaats van de gedateerde lessen.
U kunt de structuren ook in de aanroep van de lessen opnemen met
with_timetables=true (zie verderop): één enkele aanvraag geeft dan
beide terug.
De datums kiezen
{datesrange} wordt geschreven als YYYYMMDD en is bewust soepel opgezet:
| Vorm | Betekenis |
|---|---|
20261005 |
Eén bepaalde dag |
20261005-20261011 |
Een gesloten interval (een week) |
20260901- / -20260630 |
Aan één kant open |
20261005,20261012,20261019 |
Losse datums — drie bepaalde maandagen |
20261005-20261011,20261102-20261108 |
Meerdere intervallen tegelijk |
`` of - |
Alle datums |
Dankzij de losse vorm (gescheiden door komma's) wordt een vraag als “deze drie maandagen” één enkele aanroep.
Precies opvragen wat u nodig hebt
Een filter beperkt de aanvraag tot de entiteiten die ertoe doen —
dezelfde filtergrammatica als bij de beschikbaarheids-endpoints
(Geavanceerde queries):
- een eenvoudige lijst met identificaties —
{"classes":["4a","4b"]}, - een jokerteken —
{"teachers":"*"}, - een eenvoudige veldovereenkomst —
{"classrooms":[{"site":"noord"}]}, - of een gestructureerde
$where—{"classrooms":[{"$where":{"capacity":{"$gte":30}}}]}.
Het resultaat is gegroepeerd per filtertype en daarna per
entiteitsidentificatie — bijvoorbeeld schedules.classes.4a.lessons[],
schedules.teachers.d-devries.lessons[].
Dezelfde array wordt tijdens een overgangsperiode nog steeds aangeboden
onder haar oude naam courses[]: baseer uw integratie op lessons[].
Twee andere parameters bakenen de extractie af, en een laatste stelt er een plafond aan:
timetables_restrict/timetables_exclude— roosteridentificaties beperken of uitsluiten (tekenreeks, CSV of array).limit— het aantal per filter teruggegeven lessen begrenzen.
Hoe een les eruitziet
Elk item in lessons[] is een geplaatste les:
{
"position": { "day": "2026-10-05", "period": 0, "start": "8:15", "end": "9:10" },
"duration": 2,
"subject": "wiskunde",
"teachers": ["d-devries"],
"classroom": "noord:B12",
"class": "4a",
"schedid": "3"
}
position.dayis de datum van de les.position.periodis de index van de les op het tijdrooster van het rooster — aanwezig bij lessen die op het tijdrooster staan. Een les buiten rooster (met eigen explicietestart/end, buiten de gewone tijdslots) draagt in plaats daarvanstart/end, zonderperiod.position.start/position.end(kloktijden) horen altijd bij een les buiten rooster, en komen erbij op de lessen op het tijdrooster wanneer uwith_hours=truemeegeeft (vooraf berekende tijden). Zet dit aan wanneer uw doelsysteem de kloktijden nodig heeft in plaats van de index op het tijdrooster.
Afwezigheden, annuleringen en vervangingen
Standaard verwerkt het endpoint de afwezigheden: een afwezige docent wordt van de les gehaald, en een les zonder overgebleven docent geldt als geannuleerd en valt weg. Verschillende schakelaars veranderen dat:
without_absences— de afwezigheden volledig negeren; het ruwe geplande rooster teruggeven.with_absences— de ruwe afwezigheden van de periode naast de lessen toevoegen.with_cancelcourses— de geannuleerde lessen (alle docenten afwezig) behouden in plaats van ze weg te laten.with_studentcancelcourses— alleen de lessen behouden die door de afwezigheid van een leerling geannuleerd zijn.with_removedcourses— de verwijderde lessen teruggeven (sluitwith_cancelcoursesuit).without_teacher_consolidation— de afwezige docenten in de lijstteachersvan elke les behouden in plaats van ze eruit te halen.without_holidays— de vakanties niet in het bereik invoegen.
Wanneer er voor een afwezigheid een vervanger is aangewezen, neemt die
standaard eenvoudigweg de plaats in van de afwezige docent in de lijst
teachers van de les — de vervanging verloopt onzichtbaar, zonder
extra veld. Geeft u with_cancelcourses of
without_teacher_consolidation mee, dan draagt de les daarbovenop
een blok substitutes (de identificatie van de vervanger, de reden
van de afwezigheid en de afwezigheid die haar heeft opgelegd), zodat u in
hetzelfde antwoord ziet wie vervangen is en waarom.
Structuren en referentielijsten
Voeg de nuttige referentiegegevens toe, in dezelfde aanroep:
with_timetables=true— de ruwe structuren van de roosters die gebruikt zijn om de lessen te berekenen (klassen, vakken, tijdrooster, per identificatie). Zet dit aan om de identificaties te herleiden; laat het uit voor een compact antwoord.with_entities=true— lichte naam/code (en de naamvelden van personen) van de entiteiten in het resultaat.with_teachers/with_all_teachers— de docenten die op de lessen gebruikt worden, of alle docenten uit het rooster en de gebruikerslijst.with_students— de leerlingen, met hun plaatsingen per datum.with_events=true— de evenementen buiten rooster (rapportvergaderingen, ouderavonden…) binnen hetzelfde bereik.
Een nachtelijke ETL-extractie
Een week aan lessen ophalen voor alle klassen, met de kloktijden, en die laden in uw informatiesysteem:
curl -G "https://uw-school.omniscol.com/api/schedules/lessons/20261005-20261011" \
-H "Authorization: Bearer $OMNISCOL_TOKEN" \
--data-urlencode 'filter={"classes":"*"}' \
--data-urlencode "with_hours=true"
Het antwoord groepeert de lessen onder schedules.classes.<id>.lessons[].
De afwezigheden zijn al verwerkt: wat u laadt, weerspiegelt het
werkelijke, actuele rooster — voeg with_absences=true toe als u ook de
reden van een wijziging wilt vastleggen.
Gegevens naar Omniscol sturen
De integratie werkt ook de andere kant op — om Omniscol in lijn te houden met een externe bron van waarheid. Deze endpoints bestaan uitsluitend voor die externe synchronisatie; de Omniscol-interface roept ze zelf nooit aan:
POST /api/external/classes(os_external_classes_post) — bestaande klassen bijwerken (naam, vestiging, niveau, lokaal, aantal leerlingen) vanuit gegevens die op klasidentificatie zijn geïndexeerd. Het werkt de bekende klassen bij; het maakt er geen nieuwe aan. Zet een veld opnullom het te wissen (behalve de naam van de klas — een klas behoudt haar naam).POST /api/external/teachers(os_external_teachers_post) — docenten invoegen of bijwerken op identificatie, zowel in de roosters als in de gebruikerslijst (waarbij de gebruiker zo nodig wordt aangemaakt met de rol docent en een automatisch gegenereerde login). DeDELETE-varianten verwijderen een klas of een docent.POST /api/admin/subjects/custom(os_admin_subjects-custom_post) — een catalogus met aangepaste vakken laden. De body is{ "subjects": [ … ], "replace": false, "nodoubles": true }: standaard incrementeel,replace: truevoor een volledige verversing,nodoubles: trueom bestaande vakken te matchen op externe identificatie, code of naam. Dit is het endpoint voor een nachtelijke push van vakken.
Er bestaat ook een bijzonder endpoint dat alleen als override werkt,
os_external_classes_get: Omniscol levert er standaard geen enkele
implementatie voor, maar zodra een partner of een leverancier het naar
zijn eigen dienst laat wijzen (via API-aanpassingen),
vult het scherm voor het aanmaken van een klas zich vooraf in vanuit die
gesloten lijst met klassen in plaats van uit het handmatige
formulier. Zonder override doet het eenvoudigweg niets.
Voor een SIS- of ERP-pakket (Aurion, Auriga…) verdient de speciale connector de voorkeur boven deze ruwe endpoints — zie Synchronisatie met externe systemen.