Conselho de Classe
Os endpoints de conselho de classe permitem criar, consultar e gerenciar os conselhos de classe de uma turma. Cada conselho é vinculado a uma turma de uma escola do seu cliente e a um período letivo, passando pelos estágios de rascunho, encerrado e homologado. Professores registram observações por aluno; coordenadores consolidam a situação pedagógica e detectam divergências.
Permissões
O acesso aos endpoints depende de permissões atribuídas ao usuário autenticado.
| Permissão | Professor | Coordenador | Diretor |
|---|---|---|---|
view class council |
✓ | ✓ | ✓ |
create class council |
— | ✓ | ✓ |
edit class council |
— | ✓ | ✓ |
observe class council |
✓ | ✓ | ✓ |
close class council |
— | ✓ | ✓ |
homologate class council |
— | — | ✓ |
delete class council |
— | — | ✓ |
restore class council |
— | — | ✓ |
# Ciclo de vida do conselho rascunho → encerrado → homologado # Quem pode cada transição? rascunho → encerrado: coordenador / diretor encerrado → homologado: diretor
O modelo conselho de classe
Representa um conselho de classe de uma turma para um período letivo.
id
string (uuid)
Identificador único do conselho.
classroom_id
string (uuid)
Identificador da turma.
created_by
string (uuid)
Identificador do usuário que criou o conselho.
periodo
integer (1–4)
Período letivo do conselho (bimestre/trimestre).
data_reuniao
date | null
Data da reunião do conselho (Y-m-d).
status
string
Status: rascunho, encerrado ou homologado.
ata
string | null
Texto da ata do conselho.
encerrado_por
string | null
Identificador do usuário que encerrou o conselho.
encerrado_em
datetime | null
Data e hora do encerramento.
homologado_por
string | null
Identificador do usuário que homologou o conselho.
homologado_em
datetime | null
Data e hora da homologação.
created_at
datetime
Data e hora de criação.
updated_at
datetime
Data e hora da última atualização.
{ "id": "a1b2c3d4-e5f6-7890-ab12-cd34ef567890", "classroom_id": "b2c3d4e5-f6a7-8901-bc23-de45fa678901", "created_by": "c3d4e5f6-a7b8-9012-cd34-ef56ab789012", "periodo": 2, "data_reuniao": "2026-06-15", "status": "rascunho", "ata": null, "encerrado_por": null, "encerrado_em": null, "homologado_por": null, "homologado_em": null, "created_at": "2026-05-20 14:30:00", "updated_at": "2026-05-20 14:30:00" }
/v1/partners/school/{cnpj}/class-councils/all
Listar conselhos de classe
Retorna os conselhos de classe da escola identificada pelo CNPJ.
Requer permissão view class council.
Parâmetros de rota
cnpj
string
obrigatório
CNPJ da escola (14 dígitos, sem formatação).
Códigos de resposta
200
Sucesso.
401
Autenticação inválida.
404
Escola não encontrada.
-H "X-Authorization: {api_token}" \
-H "X-Partner: {partner_token}" \
-H "X-Client: {client_slug}"
use GuzzleHttp\Client; $client = new Client(); $response = $client->get('https://toakiescola.com.br/api/v1/partners/school/26019466000122/class-councils/all', [ 'headers' => [ 'X-Authorization' => '{api_token}', 'X-Partner' => '{partner_token}', 'X-Client' => '{client_slug}', ], ]); $councils = json_decode($response->getBody(), true);
const response = await fetch('https://toakiescola.com.br/api/v1/partners/school/26019466000122/class-councils/all', { headers: { 'X-Authorization': '{api_token}', 'X-Partner': '{partner_token}', 'X-Client': '{client_slug}', }, }); const councils = await response.json();
[ { "id": "a1b2c3d4-e5f6-7890-ab12-cd34ef567890", "classroom_id": "b2c3d4e5-f6a7-8901-bc23-de45fa678901", "periodo": "2", "status": "rascunho", // ... } ]
{ "message": "Autenticação inválida." }
{ "message": "Escola não encontrada." }
/v1/partners/school/{cnpj}/class-council/{id}
Consultar conselho de classe
Retorna os detalhes de um conselho de classe, incluindo assessments dos alunos e observações dos professores.
Requer permissão view class council.
Parâmetros de rota
cnpj
string
obrigatório
CNPJ da escola (14 dígitos, sem formatação).
id
string (uuid)
obrigatório
Identificador do conselho de classe.
Códigos de resposta
200
Sucesso.
401
Autenticação inválida.
404
Escola ou conselho não encontrado.
-H "X-Authorization: {api_token}" \
-H "X-Partner: {partner_token}" \
-H "X-Client: {client_slug}"
use GuzzleHttp\Client; $client = new Client(); $response = $client->get('https://toakiescola.com.br/api/v1/partners/school/26019466000122/class-council/{id}', [ 'headers' => [ 'X-Authorization' => '{api_token}', 'X-Partner' => '{partner_token}', 'X-Client' => '{client_slug}', ], ]); $council = json_decode($response->getBody(), true);
const response = await fetch(`https://toakiescola.com.br/api/v1/partners/school/26019466000122/class-council/${id}`, { headers: { 'X-Authorization': '{api_token}', 'X-Partner': '{partner_token}', 'X-Client': '{client_slug}', }, }); const council = await response.json();
{ "id": "a1b2c3d4-e5f6-7890-ab12-cd34ef567890", "classroom_id": "b2c3d4e5-f6a7-8901-bc23-de45fa678901", "periodo": "2", "status": "rascunho", "data_reuniao": "2026-06-15", "ata": null, // ... }
{ "message": "Autenticação inválida." }
{ "message": "Escola ou conselho não encontrado." }
/v1/partners/school/{cnpj}/class-council
Criar conselho de classe
Cria um novo conselho de classe com status rascunho.
Assessments são criados automaticamente para todos os alunos matriculados na turma.
Requer permissão create class council.
Parâmetros de rota
cnpj
string
obrigatório
CNPJ da escola (14 dígitos, sem formatação).
Corpo da requisição
classroom_id
string (uuid)
obrigatório
Identificador da turma.
periodo
string
obrigatório
Período letivo do conselho (ex: "1", "2", "3", "4").
data_reuniao
date | null
opcional
Data da reunião no formato Y-m-d.
Códigos de resposta
201
Criado com sucesso.
422
Dados inválidos.
401
Autenticação inválida.
404
Escola ou turma não encontrada.
-X POST \
-H "X-Authorization: {api_token}" \
-H "X-Partner: {partner_token}" \
-H "X-Client: {client_slug}" \
-H "Content-Type: application/json" \
-d '{"classroom_id":"b2c3d4e5-f6a7-8901-bc23-de45fa678901","periodo":"2","data_reuniao":"2026-06-15"}'
use GuzzleHttp\Client; $client = new Client(); $response = $client->post('https://toakiescola.com.br/api/v1/partners/school/26019466000122/class-council', [ 'headers' => [ 'X-Authorization' => '{api_token}', 'X-Partner' => '{partner_token}', 'X-Client' => '{client_slug}', ], 'json' => [ 'classroom_id' => '{classroom_id}', 'periodo' => '2', 'data_reuniao' => '2026-06-15', ], ]); $council = json_decode($response->getBody(), true);
const response = await fetch('https://toakiescola.com.br/api/v1/partners/school/26019466000122/class-council', { method: 'POST', headers: { 'X-Authorization': '{api_token}', 'X-Partner': '{partner_token}', 'X-Client': '{client_slug}', 'Content-Type': 'application/json', }, body: JSON.stringify({ classroom_id: '{classroom_id}', periodo: '2', data_reuniao: '2026-06-15', }), }); const council = await response.json();
{ "id": "a1b2c3d4-e5f6-7890-ab12-cd34ef567890", "classroom_id": "b2c3d4e5-f6a7-8901-bc23-de45fa678901", "periodo": "2", "status": "rascunho", "data_reuniao": "2026-06-15", "ata": null }
{ "message": "Autenticação inválida." }
{ "message": "Escola ou turma não encontrada." }
{ "message": "Dados inválidos." }
/v1/partners/school/{cnpj}/class-council/{id}
Atualizar conselho de classe
Atualiza os dados de um conselho de classe em rascunho, incluindo ata e assessments dos alunos.
Requer permissão edit class council.
Parâmetros de rota
cnpj
string
obrigatório
CNPJ da escola (14 dígitos, sem formatação).
id
string (uuid)
obrigatório
Identificador do conselho de classe.
Corpo da requisição
data_reuniao
date | null
opcional
Data da reunião no formato Y-m-d.
ata
string | null
opcional
Texto da ata do conselho.
assessments
array
opcional
Lista de assessments de alunos para atualizar. Cada item aceita: student_id (obrigatório), situacao, parecer, observacoes.
Códigos de resposta
200
Atualizado com sucesso.
422
Dados inválidos.
401
Autenticação inválida.
404
Escola ou conselho não encontrado.
-X PUT \
-H "X-Authorization: {api_token}" \
-H "X-Partner: {partner_token}" \
-H "X-Client: {client_slug}" \
-H "Content-Type: application/json" \
-d '{"ata":"Reunião realizada...","assessments":[{"student_id":"...","situacao":"aprovado"}]}'
use GuzzleHttp\Client; $client = new Client(); $response = $client->put('https://toakiescola.com.br/api/v1/partners/school/26019466000122/class-council/{id}', [ 'headers' => [ 'X-Authorization' => '{api_token}', 'X-Partner' => '{partner_token}', 'X-Client' => '{client_slug}', ], 'json' => [ 'ata' => 'Reunião realizada com todos os professores...', 'assessments' => [[ 'student_id' => '{student_id}', 'situacao' => 'aprovado', 'parecer' => 'Bom desempenho.', ]], ], ]); $council = json_decode($response->getBody(), true);
const response = await fetch(`https://toakiescola.com.br/api/v1/partners/school/26019466000122/class-council/${id}`, { method: 'PUT', headers: { 'X-Authorization': '{api_token}', 'X-Partner': '{partner_token}', 'X-Client': '{client_slug}', 'Content-Type': 'application/json', }, body: JSON.stringify({ ata: 'Reunião realizada com todos os professores...', assessments: [{ student_id: '{student_id}', situacao: 'aprovado', parecer: 'Bom desempenho.', }], }), }); const council = await response.json();
{ "id": "a1b2c3d4-e5f6-7890-ab12-cd34ef567890", "status": "rascunho", "ata": "Reunião realizada...", // ... }
{ "message": "Autenticação inválida." }
{ "message": "Escola ou conselho não encontrado." }
{ "message": "Dados inválidos." }
/v1/partners/school/{cnpj}/class-council/{id}/student/{student_id}/observation
Consultar observação do professor
Retorna a observação registrada por um professor sobre um aluno específico no conselho.
Retorna null se nenhuma observação foi registrada.
Requer permissão observe class council.
Parâmetros de rota
cnpj
string
obrigatório
CNPJ da escola (14 dígitos, sem formatação).
id
string (uuid)
obrigatório
Identificador do conselho de classe.
student_id
string (uuid)
obrigatório
Identificador do aluno.
Códigos de resposta
200
Sucesso. Retorna a observação ou null.
401
Autenticação inválida.
404
Escola ou conselho não encontrado.
-H "X-Authorization: {api_token}" \
-H "X-Partner: {partner_token}" \
-H "X-Client: {client_slug}"
use GuzzleHttp\Client; $client = new Client(); $response = $client->get("https://toakiescola.com.br/api/v1/partners/school/26019466000122/class-council/{$id}/student/{$studentId}/observation", [ 'headers' => [ 'X-Authorization' => '{api_token}', 'X-Partner' => '{partner_token}', 'X-Client' => '{client_slug}', ], ]); $observation = json_decode($response->getBody(), true);
const response = await fetch(`https://toakiescola.com.br/api/v1/partners/school/26019466000122/class-council/${id}/student/${studentId}/observation`, { headers: { 'X-Authorization': '{api_token}', 'X-Partner': '{partner_token}', 'X-Client': '{client_slug}', }, }); const observation = await response.json();
{ "id": "f6a7b8c9-d0e1-2345-fa67-bc89de012345", "student_id": "d4e5f6a7-b8c9-0123-de45-fa67bc890123", "teacher_id": "c3d4e5f6-a7b8-9012-cd34-ef56ab789012", "subject_name": "Matemática", "sentimento": "POSITIVO", "is_critical": false, "observation": "Excelente desempenho.", "dificuldades": null, "encaminhamentos": null }
{ "message": "Autenticação inválida." }
{ "message": "Escola ou conselho não encontrado." }
/v1/partners/school/{cnpj}/class-council/{id}/observation
Registrar observação do professor
Registra ou atualiza a observação de um professor sobre um aluno no conselho.
Quando sentimentos conflitantes (POSITIVO e NEGATIVO) são detectados entre professores para o mesmo aluno,
o campo has_divergence do assessment é marcado como
divergência pedagógica.
Requer permissão observe class council.
Parâmetros de rota
cnpj
string
obrigatório
CNPJ da escola (14 dígitos, sem formatação).
id
string (uuid)
obrigatório
Identificador do conselho de classe.
Corpo da requisição
student_id
string (uuid)
obrigatório
Identificador do aluno.
teacher_id
string (uuid)
obrigatório
Identificador do professor.
subject_name
string
obrigatório
Nome da disciplina do professor.
observation
string
obrigatório
Observação geral do professor sobre o aluno.
sentimento
string
obrigatório
Sentimento do professor: POSITIVO, NEUTRO ou NEGATIVO.
is_critical
boolean
obrigatório
Indica se o caso é crítico.
dificuldades
string | null
opcional
Dificuldades observadas no aluno.
encaminhamentos
string | null
opcional
Encaminhamentos e recomendações pedagógicas.
Códigos de resposta
200
Observação registrada/atualizada com sucesso.
422
Dados inválidos.
401
Autenticação inválida.
404
Escola ou conselho não encontrado.
-X POST \
-H "X-Authorization: {api_token}" \
-H "X-Partner: {partner_token}" \
-H "X-Client: {client_slug}" \
-H "Content-Type: application/json" \
-d '{"student_id":"...","teacher_id":"...","subject_name":"Matemática","observation":"...","sentimento":"POSITIVO","is_critical":false}'
use GuzzleHttp\Client; $client = new Client(); $response = $client->post("https://toakiescola.com.br/api/v1/partners/school/26019466000122/class-council/{$id}/observation", [ 'headers' => [ 'X-Authorization' => '{api_token}', 'X-Partner' => '{partner_token}', 'X-Client' => '{client_slug}', ], 'json' => [ 'student_id' => '{student_id}', 'teacher_id' => '{teacher_id}', 'subject_name' => 'Matemática', 'observation' => 'Excelente desempenho.', 'sentimento' => 'POSITIVO', 'is_critical' => false, 'dificuldades' => null, 'encaminhamentos' => null, ], ]); $observation = json_decode($response->getBody(), true);
const response = await fetch(`https://toakiescola.com.br/api/v1/partners/school/26019466000122/class-council/${id}/observation`, { method: 'POST', headers: { 'X-Authorization': '{api_token}', 'X-Partner': '{partner_token}', 'X-Client': '{client_slug}', 'Content-Type': 'application/json', }, body: JSON.stringify({ student_id: '{student_id}', teacher_id: '{teacher_id}', subject_name: 'Matemática', observation: 'Excelente desempenho.', sentimento: 'POSITIVO', is_critical: false, dificuldades: null, encaminhamentos: null, }), }); const observation = await response.json();
{ "id": "f6a7b8c9-d0e1-2345-fa67-bc89de012345", "student_id": "d4e5f6a7-b8c9-0123-de45-fa67bc890123", "teacher_id": "c3d4e5f6-a7b8-9012-cd34-ef56ab789012", "subject_name": "Matemática", "sentimento": "POSITIVO", "is_critical": false, "observation": "Excelente desempenho.", "dificuldades": null, "encaminhamentos": null }
{ "message": "Autenticação inválida." }
{ "message": "Escola ou conselho não encontrado." }
{ "message": "Dados inválidos." }
/v1/partners/school/{cnpj}/class-council/{id}/close
Encerrar conselho de classe
Transiciona o conselho do status rascunho para encerrado.
Somente conselhos em rascunho podem ser encerrados.
Requer permissão close class council.
Parâmetros de rota
cnpj
string
obrigatório
CNPJ da escola (14 dígitos, sem formatação).
id
string (uuid)
obrigatório
Identificador do conselho de classe.
Códigos de resposta
200
Encerrado com sucesso.
422
O conselho precisa estar em rascunho para ser encerrado.
401
Autenticação inválida.
404
Escola ou conselho não encontrado.
-X POST \
-H "X-Authorization: {api_token}" \
-H "X-Partner: {partner_token}" \
-H "X-Client: {client_slug}"
use GuzzleHttp\Client; $client = new Client(); $response = $client->post("https://toakiescola.com.br/api/v1/partners/school/26019466000122/class-council/{$id}/close", [ 'headers' => [ 'X-Authorization' => '{api_token}', 'X-Partner' => '{partner_token}', 'X-Client' => '{client_slug}', ], ]);
const response = await fetch(`https://toakiescola.com.br/api/v1/partners/school/26019466000122/class-council/${id}/close`, { method: 'POST', headers: { 'X-Authorization': '{api_token}', 'X-Partner': '{partner_token}', 'X-Client': '{client_slug}', }, });
{ "id": "a1b2c3d4-e5f6-7890-ab12-cd34ef567890", "status": "encerrado", // ... }
{ "message": "Autenticação inválida." }
{ "message": "Escola ou conselho não encontrado." }
{ "message": "O conselho precisa estar em rascunho para ser encerrado." }
/v1/partners/school/{cnpj}/class-council/{id}/homologate
Homologar conselho de classe
Transiciona o conselho do status encerrado para homologado.
Somente conselhos encerrados podem ser homologados.
Requer permissão homologate class council.
Parâmetros de rota
cnpj
string
obrigatório
CNPJ da escola (14 dígitos, sem formatação).
id
string (uuid)
obrigatório
Identificador do conselho de classe.
Códigos de resposta
200
Homologado com sucesso.
422
O conselho precisa estar encerrado para ser homologado.
401
Autenticação inválida.
404
Escola ou conselho não encontrado.
-X POST \
-H "X-Authorization: {api_token}" \
-H "X-Partner: {partner_token}" \
-H "X-Client: {client_slug}"
use GuzzleHttp\Client; $client = new Client(); $response = $client->post("https://toakiescola.com.br/api/v1/partners/school/26019466000122/class-council/{$id}/homologate", [ 'headers' => [ 'X-Authorization' => '{api_token}', 'X-Partner' => '{partner_token}', 'X-Client' => '{client_slug}', ], ]);
const response = await fetch(`https://toakiescola.com.br/api/v1/partners/school/26019466000122/class-council/${id}/homologate`, { method: 'POST', headers: { 'X-Authorization': '{api_token}', 'X-Partner': '{partner_token}', 'X-Client': '{client_slug}', }, });
{ "id": "a1b2c3d4-e5f6-7890-ab12-cd34ef567890", "status": "homologado", // ... }
{ "message": "Autenticação inválida." }
{ "message": "Escola ou conselho não encontrado." }
{ "message": "O conselho precisa estar encerrado para ser homologado." }
/v1/partners/school/{cnpj}/class-council/{id}
Excluir conselho de classe
Remove permanentemente um conselho de classe.
Requer permissão delete class council.
Parâmetros de rota
cnpj
string
obrigatório
CNPJ da escola (14 dígitos, sem formatação).
id
string (uuid)
obrigatório
Identificador do conselho de classe.
Códigos de resposta
200
Excluído com sucesso.
401
Autenticação inválida.
404
Escola ou conselho não encontrado.
-X DELETE \
-H "X-Authorization: {api_token}" \
-H "X-Partner: {partner_token}" \
-H "X-Client: {client_slug}"
use GuzzleHttp\Client; $client = new Client(); $response = $client->delete("https://toakiescola.com.br/api/v1/partners/school/26019466000122/class-council/{$id}", [ 'headers' => [ 'X-Authorization' => '{api_token}', 'X-Partner' => '{partner_token}', 'X-Client' => '{client_slug}', ], ]);
const response = await fetch(`https://toakiescola.com.br/api/v1/partners/school/26019466000122/class-council/${id}`, { method: 'DELETE', headers: { 'X-Authorization': '{api_token}', 'X-Partner': '{partner_token}', 'X-Client': '{client_slug}', }, });
{ "success": true }
{ "message": "Autenticação inválida." }
{ "message": "Escola ou conselho não encontrado." }