L'API delle lezioni — recuperare le lezioni per qualsiasi data
PremiumQuando qualcosa fuori da Omniscol ha bisogno di sapere cosa succede, e quando, è questo l'endpoint da chiamare:
GET /api/schedules/lessons/{datesrange}
Restituisce le lezioni datate dei Suoi orari — ogni lezione posata sulla sua data reale — per le date e le entità richieste. Quasi ogni integrazione (un intranet, un ETL, uno strumento partner) parte da qui. Questa pagina percorre le leve che ne fanno un solo endpoint per numerosi usi.
Lezioni vs strutture
Due endpoint, due ruoli:
GET /api/schedules/lessons/{datesrange}— le lezioni: ogni lezione posata su una data reale, con la sua materia, i suoi professori, la sua aula, il suo gruppo e la sua durata. È ciò che si legge per sapere chi è dove e quando.GET /api/schedules/— le strutture: gli orari pubblicati stessi (classi, materie, sedi, la griglia). Da leggere quando si ha bisogno del modello sottostante piuttosto che delle lezioni datate.
Si possono anche ripiegare le strutture nella chiamata delle lezioni con
with_timetables=true (vedi più sotto): una sola richiesta restituisce allora
entrambe.
Scegliere le date
{datesrange} si scrive in YYYYMMDD e si vuole volutamente flessibile:
| Forma | Significato |
|---|---|
20261005 |
Un giorno preciso |
20261005-20261011 |
Un intervallo chiuso (una settimana) |
20260901- / -20260630 |
Aperto da un lato |
20261005,20261012,20261019 |
Date sparse — tre lunedì precisi |
20261005-20261011,20261102-20261108 |
Più intervalli in una volta |
`` o - |
Tutte le date |
La forma sparsa (separata da virgole) è ciò che rende una domanda come «questi tre lunedì» una sola chiamata.
Mirare a ciò di cui ha bisogno
Un filter restringe la richiesta alle entità che contano — la stessa
grammatica di filtro degli endpoint di disponibilità
(Interrogazione avanzata):
- una semplice lista di identificativi —
{"classes":["3a","3b"]}, - un jolly —
{"teachers":"*"}, - una corrispondenza di campo semplice —
{"classrooms":[{"site":"nord"}]}, - o un
$wherestrutturato —{"classrooms":[{"$where":{"capacity":{"$gte":30}}}]}.
Il risultato è raggruppato per tipo di filtro, poi per identificativo
di entità — ad esempio schedules.classes.3a.courses[],
schedules.teachers.j-doe.courses[].
Altri due regolaggi inquadrano l'estrazione, e un ultimo la limita:
timetables_restrict/timetables_exclude— limitare o escludere degli identificativi di orario (stringa, CSV o array).limit— limitare il numero di lezioni restituite per filtro.
A cosa somiglia una lezione
Ogni voce di courses[] è una lezione posata:
{
"position": { "day": "2026-10-05", "period": 0, "start": "8:15", "end": "9:10" },
"duration": 2,
"subject": "maths",
"teachers": ["j-doe"],
"classroom": "nord:B12",
"class": "3a",
"schedid": "3"
}
position.dayè la data della lezione.position.periodè l'indice della lezione sulla griglia dell'orario — presente per le lezioni posate sulla griglia. Una lezione fuori griglia (con i suoi propristart/endespliciti, fuori dagli slot regolari) portastart/endal suo posto, senzaperiod.position.start/position.end(orari) accompagnano sempre una lezione fuori griglia, e si aggiungono alle lezioni di griglia quando passawith_hours=true(orari pre-calcolati). Da attivare quando il Suo sistema target ha bisogno delle ore d'orologio piuttosto che dell'indice di griglia.
Assenze, annullamenti e sostituzioni
Per impostazione predefinita, l'endpoint consolida le assenze: un professore assente è ritirato dalla lezione, e una lezione senza professore rimasto è considerata annullata e scartata. Diversi indicatori cambiano ciò:
without_absences— ignorare completamente le assenze; restituire la griglia pianificata grezza.with_absences— aggiungere le assenze grezze del periodo accanto alle lezioni.with_cancelcourses— conservare le lezioni annullate (tutti gli professori assenti) invece di scartarle.with_studentcancelcourses— mantenere solo le lezioni annullate dall'assenza di un allievo.with_removedcourses— restituire le lezioni ritirate (esclusivo conwith_cancelcourses).without_teacher_consolidation— mantenere i professori assenti nella listateachersdi ogni lezione invece di ritirarli.without_holidays— non iniettare le vacanze nell'intervallo.
Per impostazione predefinita, quando un sostituto è stato designato per un'assenza,
esso sostituisce semplicemente il professore assente nella lista teachers della
lezione — la sostituzione è trasparente, senza campo
supplementare. Passi with_cancelcourses o
without_teacher_consolidation e la lezione porta in più un blocco
substitutes (l'identificativo del sostituto, il motivo di assenza e
l'assenza che l'ha imposta), per vedere chi è stato sostituito e perché nello
stesso payload.
Strutture e rubriche
Attacchi i dati di riferimento utili, nella stessa chiamata:
with_timetables=true— le strutture grezze degli orari che sono servite a calcolare le lezioni (classi, materie, griglia, per identificativo). Da attivare per risolvere gli identificativi; da lasciare disattivato per una risposta compatta.with_entities=true— nome/codice leggero (e campi di nome di persona) delle entità del risultato.with_teachers/with_all_teachers— i professori utilizzati sulle lezioni, o tutti i professori dell'orario e della rubrica.with_students— gli allievi, con i loro posizionamenti per data.with_events=true— gli eventi fuori griglia (consigli, incontri genitori-professori…) sullo stesso intervallo.
Un tiraggio ETL notturno
Recuperare una settimana di lezioni per tutte le classi, con gli orari, e caricarla nel Suo sistema informativo:
curl -G "https://vostra-scuola.omniscol.com/api/schedules/lessons/20261005-20261011" \
-H "Authorization: Bearer $OMNISCOL_TOKEN" \
--data-urlencode 'filter={"classes":"*"}' \
--data-urlencode "with_hours=true"
La risposta raggruppa le lezioni sotto schedules.classes.<id>.courses[].
Le assenze sono già consolidate: ciò che carica riflette l'orario
reale e aggiornato — aggiunga with_absences=true se vuole
anche registrare la ragione di un cambiamento.
Spingere verso Omniscol
L'integrazione funziona anche nell'altro senso — per mantenere Omniscol allineato a una fonte di verità esterna. Questi endpoint esistono unicamente per questa sincronizzazione esterna; l'interfaccia Omniscol non li chiama mai da sé:
POST /api/external/classes(os_external_classes_post) — aggiornare delle classi esistenti (nome, sede, livello, aula, effettivo) da un payload indicizzato per identificativo di classe. Aggiorna le classi conosciute; non ne crea di nuove. Metta un campo anullper cancellarlo (il nome della classe eccetto — una classe conserva il suo nome).POST /api/external/teachers(os_external_teachers_post) — inserire o aggiornare dei professori per identificativo, sia negli orari sia nella rubrica (creando l'utente con il ruolo professore e un login auto-generato all'occorrenza). Le variantiDELETEritirano una classe o un professore.POST /api/admin/subjects/custom(os_admin_subjects-custom_post) — caricare un catalogo di materie personalizzate. Il corpo è{ "subjects": [ … ], "replace": false, "nodoubles": true }: incrementale per impostazione predefinita,replace: trueper un aggiornamento completo,nodoubles: trueper riconciliare le materie esistenti per identificativo esterno, codice o nome. È l'endpoint di un push notturno di materie.
Esiste anche un endpoint speciale, solo sovrascrivibile,
os_external_classes_get: Omniscol non ne fornisce alcuna implementazione
predefinita, ma quando un partner o un fornitore lo punta verso il suo
proprio servizio (via Personalizzazione dell'API), la schermata di
creazione di classe si pre-compila da questa lista chiusa di
classi invece che dal modulo manuale. Senza sovrascrittura, non fa
semplicemente nulla.
Per un software gestionale SIS / ERP (Aurion, Auriga…), preferisca il connettore dedicato a questi endpoint grezzi — vedi Sincronizzazione con sistemi esterni.