Gestão de Turmas

As turmas representam os grupos de alunos em um período letivo (ex: "Turma 1A", "Turma do 6º Ano - Tarde"). Cada turma pertence a uma unidade e está vinculada a uma série.

:::info
Todos os endpoints de turmas exigem contexto de unidade. Se sua API key tem escopo BUSINESS, envie o header x-branch-id. Se tem escopo BRANCH, a branch já está embutida na key.
:::

Endpoints

MétodoRotaScopeDescrição
GET/v1/classesclasses:readListar turmas (paginado)
POST/v1/classesclasses:writeCriar turma
GET/v1/classes/:idclasses:readDetalhar turma
PUT/v1/classes/:idclasses:writeAtualizar turma
DELETE/v1/classes/:idclasses:writeDesativar turma
POST/v1/classes/:id/reactivateclasses:writeReativar turma

GET /v1/classes

Lista as turmas da unidade com paginação e filtros.

Parâmetros (query)

ParâmetroTipoDefaultDescrição
searchstringBusca por nome (contains, case-insensitive)
statusstringactiveFiltrar por status: active, inactive ou all
schoolYearIdUUIDID do período letivo para cálculo do _count.students. Se omitido, usa o período ativo da unidade.
gradeIdUUIDFiltrar por série
typestringFiltrar por tipo: REGULAR, TRACK ou ELECTIVE
pageinteger1Número da página
limitinteger10Itens por página (máx. 100)
sortBystringnameCampo de ordenação: name ou createdAt
sortOrderstringascDireção: asc ou desc

Exemplo

curl "https://api.gdredu.com/v1/classes?gradeId=grade-id&type=REGULAR&page=1&limit=10" \
  -H "Authorization: Bearer gdredu_live_..." \
  -H "x-branch-id: branch-id-aqui"

Resposta (200)

{
  "data": [
    {
      "id": "550e8400-e29b-41d4-a716-446655440000",
      "name": "Turma 1A",
      "type": "REGULAR",
      "scheduleMode": "BRANCH_DEFAULT",
      "daysOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
      "shifts": ["MORNING"],
      "isActive": true,
      "gradeId": "660e8400-e29b-41d4-a716-446655440000",
      "branchId": "a999af34-c399-45f6-9dc9-5e8c024b0a49",
      "createdAt": "2026-04-28T20:57:59.720Z",
      "updatedAt": "2026-04-28T20:57:59.729Z",
      "grade": {
        "id": "660e8400-e29b-41d4-a716-446655440000",
        "name": "1º Ano Ensino Médio",
        "isActive": true
      },
      "_count": {
        "students": 30
      }
    }
  ],
  "pagination": {
    "page": 1,
    "limit": 10,
    "total": 1,
    "totalPages": 1,
    "hasNext": false,
    "hasPrev": false
  }
}

Campos da resposta

CampoTipoDescrição
idUUIDID da turma
namestringNome da turma
typestringTipo: REGULAR (comum), TRACK (itinerário) ou ELECTIVE (eletiva)
scheduleModestringBRANCH_DEFAULT (usa horários da unidade) ou CLASS_SPECIFIC (horários próprios)
daysOfWeekstring[]Dias da semana: Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday
shiftsstring[]Turnos: MORNING, AFTERNOON, NIGHT
isActivebooleanStatus (ativa/desativada)
gradeIdUUIDID da série vinculada
branchIdUUIDID da unidade
gradeobjectResumo da série (id, name, isActive)
_count.studentsintegerNúmero de estudantes no período letivo ativo (ou conforme schoolYearId)

POST /v1/classes

Cria uma nova turma na unidade.

Body

{
  "name": "Turma 1A",
  "gradeId": "660e8400-e29b-41d4-a716-446655440000",
  "type": "REGULAR",
  "daysOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
  "shifts": ["MORNING"],
  "scheduleMode": "BRANCH_DEFAULT"
}
CampoTipoObrigatórioDefaultDescrição
namestringsimNome da turma (1-200 caracteres)
gradeIdUUIDsimID da série (deve existir e estar ativa na mesma unidade)
typestringnãoREGULARREGULAR, TRACK ou ELECTIVE
daysOfWeekstring[]nãoSeg-SexDias da semana que a turma funciona
shiftsstring[]simTurnos (ao menos 1; valores: MORNING, AFTERNOON, NIGHT)
scheduleModestringnãoBRANCH_DEFAULTBRANCH_DEFAULT ou CLASS_SPECIFIC
overrideBranchPresenceConfigbooleannãofalseSe true, esta turma usará os overrides de presença abaixo em vez dos da unidade
presenceDedupWindowMinutesint?nãoOverride: janela (1-240 min) para deduplicar presenças consecutivas
presenceConsiderationWindowMinutesint?nãoOverride: janela de consideração (1-240 min)
entryEarlyToleranceMinutesint?nãoOverride: tolerância de entrada antecipada (0-240 min)
entryLateToleranceMinutesint?nãoOverride: tolerância de entrada com atraso (0-240 min)
exitEarlyToleranceMinutesint?nãoOverride: tolerância de saída antecipada (0-240 min)
exitLateToleranceMinutesint?nãoOverride: tolerância de saída com atraso (0-240 min)
notifyAllPresenceEventsbool?nãoOverride: notificar todos os eventos de presença (não só atrasos)

Você também pode passar opcionalmente os campos de override de presença. Veja Override de configuração de presença abaixo.

Exemplo

curl -X POST "https://api.gdredu.com/v1/classes" \
  -H "Authorization: Bearer gdredu_live_..." \
  -H "x-branch-id: branch-id-aqui" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: 550e8400-e29b-41d4-a716-446655440000" \
  -d '{
    "name": "Turma 1A",
    "gradeId": "660e8400-e29b-41d4-a716-446655440000",
    "shifts": ["MORNING"],
    "daysOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"]
  }'

Resposta (201)

{
  "id": "770e8400-e29b-41d4-a716-446655440000",
  "name": "Turma 1A",
  "type": "REGULAR",
  "scheduleMode": "BRANCH_DEFAULT",
  "daysOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
  "shifts": ["MORNING"],
  "isActive": true,
  "gradeId": "660e8400-e29b-41d4-a716-446655440000",
  "branchId": "a999af34-c399-45f6-9dc9-5e8c024b0a49",
  "createdAt": "2026-06-19T12:00:00.000Z",
  "updatedAt": "2026-06-19T12:00:00.000Z",
  "grade": { "id": "660e8400-e29b-41d4-a716-446655440000", "name": "1º Ano Ensino Médio", "isActive": true },
  "_count": { "students": 0 }
}

Erros

StatusCodeQuando
404NOT_FOUNDSérie (gradeId) não existe, não pertence à unidade, ou está inativa
400VALIDATION_ERRORCampos obrigatórios ausentes, shifts vazio, ou type/daysOfWeek com valores inválidos

GET /v1/classes/:id

Retorna os detalhes de uma turma.

Parâmetros (query)

ParâmetroTipoDefaultDescrição
schoolYearIdUUIDID do período letivo para o cálculo de _count.students. Se omitido, usa o período ativo.

Exemplo

curl "https://api.gdredu.com/v1/classes/550e8400-e29b-41d4-a716-446655440000" \
  -H "Authorization: Bearer gdredu_live_..." \
  -H "x-branch-id: branch-id-aqui"

Resposta (200)

Mesma estrutura de POST /v1/classes, incluindo grade e _count.students.

Erros

StatusCodeQuando
404NOT_FOUNDTurma não existe, não pertence à unidade, ou a série está inativa

PUT /v1/classes/:id

Atualiza os dados de uma turma ativa.

Body

Mesmos campos de POST /v1/classes, exceto que type é opcional (se omitido, mantém o valor atual).

CampoTipoObrigatórioDescrição
namestringsimNovo nome (1-200 caracteres)
gradeIdUUIDsimID da nova série (deve existir e estar ativa)
typestringnãoSe informado, sobrescreve o tipo
daysOfWeekstring[]simSubstitui a lista de dias
shiftsstring[]simSubstitui a lista de turnos (ao menos 1)
scheduleModestringnãoSe informado, sobrescreve o modo de horários
overrideBranchPresenceConfigbooleannãoLiga/desliga o override de presença da turma
presenceDedupWindowMinutesint?nãoOverride: janela (1-240 min) de deduplicação. null remove.
presenceConsiderationWindowMinutesint?nãoOverride: janela de consideração (1-240 min). null remove.
entryEarlyToleranceMinutesint?nãoOverride: tolerância de entrada antecipada (0-240 min). null remove.
entryLateToleranceMinutesint?nãoOverride: tolerância de entrada com atraso (0-240 min). null remove.
exitEarlyToleranceMinutesint?nãoOverride: tolerância de saída antecipada (0-240 min). null remove.
exitLateToleranceMinutesint?nãoOverride: tolerância de saída com atraso (0-240 min). null remove.
notifyAllPresenceEventsbool?nãoOverride: notificar todos os eventos de presença. null remove.

Exemplo

curl -X PUT "https://api.gdredu.com/v1/classes/550e8400-e29b-41d4-a716-446655440000" \
  -H "Authorization: Bearer gdredu_live_..." \
  -H "x-branch-id: branch-id-aqui" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: 660e8400-e29b-41d4-a716-446655440000" \
  -d '{
    "name": "Turma 1A Atualizada",
    "gradeId": "660e8400-e29b-41d4-a716-446655440000",
    "shifts": ["MORNING", "AFTERNOON"],
    "daysOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"]
  }'

Resposta (200)

Mesma estrutura de GET /v1/classes/:id.

Erros

StatusCodeQuando
404NOT_FOUNDTurma não existe, está inativa, ou a série informada está inativa
400VALIDATION_ERRORshifts vazio ou valores inválidos

DELETE /v1/classes/:id

Desativa uma turma. A turma pode ser reativada posteriormente via POST /v1/classes/:id/reactivate.

Exemplo

curl -X DELETE "https://api.gdredu.com/v1/classes/550e8400-e29b-41d4-a716-446655440000" \
  -H "Authorization: Bearer gdredu_live_..." \
  -H "x-branch-id: branch-id-aqui"

Resposta (204)

Sem corpo (No Content).

Erros

StatusCodeQuando
404NOT_FOUNDTurma não existe, não pertence à unidade, ou já está inativa

POST /v1/classes/:id/reactivate

Reativa uma turma previamente desativada.

:::note[Pré-requisito]
A série vinculada à turma deve estar ativa (isActive: true) para reativar a turma.
:::

Exemplo

curl -X POST "https://api.gdredu.com/v1/classes/550e8400-e29b-41d4-a716-446655440000/reactivate" \
  -H "Authorization: Bearer gdredu_live_..." \
  -H "x-branch-id: branch-id-aqui"

Resposta (200)

{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "isActive": true,
  "message": "Turma reativada com sucesso."
}

Erros

StatusCodeQuando
404NOT_FOUNDTurma não existe, já está ativa, ou a série vinculada está inativa

Override de configuração de presença (opcional)

Os endpoints POST /v1/classes e PUT /v1/classes aceitam opcionalmente campos para sobrescrever a configuração de presença da unidade para esta turma específica.

:::info
Quando usar
Use overrides para casos como: turma de educação infantil que precisa de tolerância maior (30 min em vez de 15), turma de ensino integral que precisa de janela de consideração mais ampla, ou turma de reforço que requer notificação de todos os eventos. Para a maioria das turmas, deixe o override desligado e use a configuração da unidade.
:::

Como ativar: envie overrideBranchPresenceConfig: true no body. Quando false (default), os outros campos de override são ignorados.

CampoTipoFaixaDescrição
overrideBranchPresenceConfigbooleanSe true, esta turma usará os outros campos abaixo em vez dos valores da unidade
presenceDedupWindowMinutesint | null1-240Janela em minutos para deduplicar presenças consecutivas do mesmo aluno na mesma aula
presenceConsiderationWindowMinutesint | null1-240Janela de consideração para classificar a presença (antes/depois do horário da aula)
entryEarlyToleranceMinutesint | null0-240Tolerância de entrada antecipada — entrada dentro desta janela antes do horário é ON_TIME
entryLateToleranceMinutesint | null0-240Tolerância de entrada com atraso — entrada dentro desta janela após o horário é ON_TIME (após isso, vira LATE)
exitEarlyToleranceMinutesint | null0-240Tolerância de saída antecipada — saída antes do horário é classificada de acordo
exitLateToleranceMinutesint | null0-240Tolerância de saída com atraso — saída após o horário fica ON_TIME até esta janela
notifyAllPresenceEventsboolean | nullSe true, notifica todos os eventos de presença (não só atrasos) para os responsáveis

Comportamento de null: enviar null em um campo numérico remove o override daquele campo, fazendo a turma usar o valor da unidade. Para manter o override mas apagar o valor, envie 0 (ou outro valor numérico válido). Omitir o campo na requisição não altera o valor atual.

Exemplo com override

{
  "name": "Turma 1A",
  "gradeId": "660e8400-e29b-41d4-a716-446655440000",
  "shifts": ["MORNING"],
  "daysOfWeek": ["Monday", "Wednesday", "Friday"],
  "overrideBranchPresenceConfig": true,
  "presenceDedupWindowMinutes": 10,
  "entryEarlyToleranceMinutes": 10,
  "entryLateToleranceMinutes": 20,
  "exitEarlyToleranceMinutes": 15,
  "notifyAllPresenceEvents": true
}

Removendo um override específico

Para limpar um override (voltar a usar o valor da unidade), envie null no campo:

{
  "name": "Turma 1A",
  "gradeId": "660e8400-e29b-41d4-a716-446655440000",
  "shifts": ["MORNING"],
  "overrideBranchPresenceConfig": true,
  "entryLateToleranceMinutes": null
}

Neste exemplo, a turma continua com override ativado, mas o entryLateToleranceMinutes volta a usar o valor da unidade.

Tipos de turma

TipoValorUso
ComumREGULARTurmas da Base Nacional Comum Curricular (padrão)
Itinerário Formativo / TrilhaTRACKTurmas de itinerário formativo
EletivaELECTIVETurmas de disciplinas eletivas

Modos de horário

ModoValorSignificado
Padrão da unidadeBRANCH_DEFAULTA turma usa os horários padrão configurados na unidade (padrão)
Horário específicoCLASS_SPECIFICA turma tem seus próprios horários individuais (mais comum para turmas com rotinas diferenciadas)


Did this page help you?