A API das aulas — recuperar as aulas para qualquer data
PremiumQuando algo fora do Omniscol precisa saber o que acontece, e quando, é este ponto de acesso que se chama:
GET /api/schedules/lessons/{datesrange}
Ele devolve as aulas datadas dos seus horários — cada aula posta na sua data real — para as datas e as entidades solicitadas. Quase toda integração (um intranet, um ETL, uma ferramenta parceira) parte daí. Esta página percorre as alavancas que fazem dele um só ponto de acesso para numerosos usos.
Aulas vs estruturas
Dois pontos de acesso, dois papéis:
GET /api/schedules/lessons/{datesrange}— as aulas: cada aula posta numa data real, com a sua disciplina, os seus professores, a sua sala, o seu grupo e a sua duração. É o que se lê para saber quem está onde e quando.GET /api/schedules/— as estruturas: os próprios horários publicados (turmas, disciplinas, sites, a grade). A ler quando se precisa do modelo subjacente em vez das aulas datadas.
Também se podem dobrar as estruturas na chamada das aulas com
with_timetables=true (veja mais abaixo): uma só requisição devolve
então as duas.
Escolher as datas
{datesrange} escreve-se em YYYYMMDD e quer-se voluntariamente
flexível:
| Forma | Significado |
|---|---|
20261005 |
Um dia preciso |
20261005-20261011 |
Um intervalo fechado (uma semana) |
20260901- / -20260630 |
Aberto de um lado |
20261005,20261012,20261019 |
Datas esparsas — três segundas-feiras precisas |
20261005-20261011,20261102-20261108 |
Vários intervalos ao mesmo tempo |
`` ou - |
Todas as datas |
A forma esparsa (separada por vírgulas) é o que faz de uma pergunta como « estas três segundas-feiras » uma só chamada.
Mirar aquilo de que você precisa
Um filter restringe a requisição às entidades que contam — a mesma
gramática de filtro que os pontos de acesso de disponibilidade
(Consultas avançadas):
- uma simples lista de identificadores —
{"classes":["3a","3b"]}, - um curinga —
{"teachers":"*"}, - uma correspondência de campo simples —
{"classrooms":[{"site":"nord"}]}, - ou um
$whereestruturado —{"classrooms":[{"$where":{"capacity":{"$gte":30}}}]}.
O resultado é agrupado por tipo de filtro, depois por identificador de
entidade — por exemplo schedules.classes.3a.courses[],
schedules.teachers.j-doe.courses[].
Dois outros ajustes enquadram a extração, e um último a limita:
timetables_restrict/timetables_exclude— limitar ou excluir identificadores de horário (cadeia, CSV ou array).limit— limitar o número de aulas devolvidas por filtro.
Como é uma aula
Cada entrada de courses[] é uma aula posta:
{
"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é a data da aula.position.periodé o índice da aula na grade do horário — presente para as aulas postas na grade. Uma aula fora da grade (com os seus própriosstart/endexplícitos, fora das faixas regulares) levastart/endem vez disso, semperiod.position.start/position.end(horários de relógio) acompanham sempre uma aula fora da grade, e acrescentam-se às aulas de grade quando você passawith_hours=true(horários pré-calculados). A ativar quando o seu sistema-alvo precisa das horas de relógio em vez do índice de grade.
Ausências, cancelamentos e substituições
Por padrão, o ponto de acesso consolida as ausências: um professor ausente é retirado da aula, e uma aula sem professor restante é considerada cancelada e descartada. Vários indicadores mudam isso:
without_absences— ignorar completamente as ausências; devolver a grade planejada bruta.with_absences— acrescentar as ausências brutas do período ao lado das aulas.with_cancelcourses— conservar as aulas canceladas (todos os professores ausentes) em vez de descartá-las.with_studentcancelcourses— manter apenas as aulas canceladas pela ausência de um aluno.with_removedcourses— devolver as aulas retiradas (exclusivo comwith_cancelcourses).without_teacher_consolidation— manter os professores ausentes na listateachersde cada aula em vez de retirá-los.without_holidays— não injetar as férias na faixa.
Por padrão, quando um substituto foi designado para uma ausência, ele
substitui simplesmente o professor ausente na lista teachers da
aula — a substituição é transparente, sem campo suplementar. Passe
with_cancelcourses ou without_teacher_consolidation e a aula
leva além disso um bloco substitutes (o identificador do
substituto, o motivo da ausência e a ausência que a impôs), para ver
quem foi substituído e por quê na mesma carga útil.
Estruturas e diretórios
Anexe os dados de referência úteis, na mesma chamada:
with_timetables=true— as estruturas brutas dos horários que serviram para calcular as aulas (turmas, disciplinas, grade, por identificador). A ativar para resolver os identificadores; a deixar desativado para uma resposta compacta.with_entities=true— nome/código leves (e campos de nome de pessoa) das entidades do resultado.with_teachers/with_all_teachers— os professores usados nas aulas, ou todos os professores do horário e do diretório.with_students— os alunos, com os seus posicionamentos por data.with_events=true— os eventos fora da grade (conselhos, reuniões de pais e professores…) sobre a mesma faixa.
Um puxão ETL noturno
Recuperar uma semana de aulas para todas as turmas, com os horários, e carregá-la no seu sistema de informação:
curl -G "https://sua-escola.omniscol.com/api/schedules/lessons/20261005-20261011" \
-H "Authorization: Bearer $OMNISCOL_TOKEN" \
--data-urlencode 'filter={"classes":"*"}' \
--data-urlencode "with_hours=true"
A resposta agrupa as aulas sob schedules.classes.<id>.courses[]. As
ausências já estão consolidadas: o que você carrega reflete o horário
real e atualizado — acrescente with_absences=true se você quiser
também registrar a razão de uma mudança.
Injetar para o Omniscol
A integração funciona também no outro sentido — para manter o Omniscol alinhado com uma fonte de verdade externa. Estes pontos de acesso existem unicamente para essa sincronização externa; a interface do Omniscol nunca os chama ela própria:
POST /api/external/classes(os_external_classes_post) — atualizar turmas existentes (nome, site, nível, sala, efetivo) a partir de uma carga útil indexada por identificador de turma. Ele atualiza as turmas conhecidas; não cria novas. Coloque um campo emnullpara o apagar (o nome da turma exceptuado — uma turma conserva o seu nome).POST /api/external/teachers(os_external_teachers_post) — inserir ou atualizar professores por identificador, tanto nos horários como no diretório (criando o usuário com o papel professor e um login autogerado se necessário). As variantesDELETEretiram uma turma ou um professor.POST /api/admin/subjects/custom(os_admin_subjects-custom_post) — carregar um catálogo de disciplinas personalizadas. O corpo é{ "subjects": [ … ], "replace": false, "nodoubles": true }: incremental por padrão,replace: truepara uma atualização completa,nodoubles: truepara reaproximar as disciplinas existentes por identificador externo, código ou nome. É o ponto de acesso de uma injeção noturna de disciplinas.
Existe também um ponto de acesso especial, unicamente substituível,
os_external_classes_get: o Omniscol não entrega nenhuma implementação
por padrão, mas quando um parceiro ou um fornecedor o aponta para o seu
próprio serviço (via Personalização de API), a tela de
criação de turma preenche-se previamente a partir desta lista fechada
de turmas em vez do formulário manual. Sem substituição, ele
simplesmente não faz nada.
Para um pacote de software SIS / ERP (Aurion, Auriga…), prefira o conector dedicado a estes pontos de acesso brutos — veja Sincronização com sistemas externos.