Matrículas
As matrículas vinculam alunos a turmas dentro de uma escola. Os endpoints de parceiro permitem listar, matricular, editar número e desmatricular. Operações sensíveis — transferência, atualização de status, reativação e exclusão forçada — são realizadas por endpoints administrativos internos que requerem sessão autenticada e, em alguns casos, aprovação da direção via fluxo de Autorizações.
403
com "code": "ERP_REQUIRED".
O modelo matrícula
O modelo matrícula contém os dados de vínculo do aluno com a turma, seu número de matrícula e o
status atual. Use o id
para referenciar a matrícula nas operações de edição.
id
uuid
Identificador único da matrícula.
number
string
Número de matrícula do aluno.
status
string
Status da matrícula. Valores possíveis: MATRICULADO, TRANSFERIDO, DESISTENTE, APROVADO, REPROVADO, FALECIDO, REMANEJADA, CANCELADA.
student_name
string
Nome completo do aluno.
school_cnpj
string
CNPJ da escola à qual a matrícula pertence.
classroom_name
string
Nome da turma à qual o aluno está matriculado.
deleted_at
datetime|null
Data de exclusão lógica (soft delete). Quando preenchido, a matrícula está inativa e pode ser reativada via fluxo de autorização.
has_pending_authorization
boolean
Indica se existe uma autorização administrativa pendente para esta matrícula. Quando true, novas operações sensíveis são bloqueadas até a decisão da direção.
{ "id": "b2c3d4e5-f6a7-8901-bcde-f12345678901", "number": "7.553", "status": "MATRICULADO", "student_name": "João da Silva", "school_cnpj": "26019466000122", "classroom_name": "Turma A", "deleted_at": null, "has_pending_authorization": false }
/v1/partners/school/{cnpj}/enrollments/all
Listar matrículas
Retorna todas as matrículas de uma escola específica, identificada pelo CNPJ. A resposta é paginada,
com os registros em data.
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.
-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://lumenerp.app.br/api/v1/partners/school/26019466000122/enrollments/all', [ 'headers' => [ 'X-Authorization' => '{api_token}', 'X-Partner' => '{partner_token}', 'X-Client' => '{client_slug}', ], ]); $enrollments = json_decode($response->getBody(), true);
const response = await fetch('https://lumenerp.app.br/api/v1/partners/school/26019466000122/enrollments/all', { headers: { 'X-Authorization': '{api_token}', 'X-Partner': '{partner_token}', 'X-Client': '{client_slug}', }, }); const enrollments = await response.json();
{ "data": [ { "id": "b2c3d4e5-f6a7-8901-bcde-f12345678901", "number": "7.553", "status": "MATRICULADO", "student_name": "João da Silva", // ... } ], "links": { /* URLs de paginação */ }, "meta": { "current_page": 1, "per_page": 25, // ... } }
{ "message": "Autenticação inválida." }
{ "message": "Recurso não encontrado." }
/v1/partners/school/{cnpj}/student/{enrollment_number}/enroll
Matricular aluno
Matricula um aluno em uma turma da escola. O aluno é identificado pelo seu número de matrícula
atual e a turma pelo classroom_id
no corpo da requisição.
Parâmetros de rota
cnpj
string
obrigatório
CNPJ da escola (14 dígitos, sem formatação).
enrollment_number
string
obrigatório
Número de matrícula atual do aluno.
Corpo da requisição
classroom_id
uuid
obrigatório
UUID da turma em que o aluno será matriculado.
Códigos de resposta
201
Criado com sucesso.
400
Dados inválidos.
401
Autenticação inválida.
404
Recurso de referência 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 '{"classroom_id":"a1b2c3d4-..."}'
use GuzzleHttp\Client; $client = new Client(); $response = $client->post('https://lumenerp.app.br/api/v1/partners/school/26019466000122/student/7.553/enroll', [ 'headers' => [ 'X-Authorization' => '{api_token}', 'X-Partner' => '{partner_token}', 'X-Client' => '{client_slug}', ], 'json' => [ 'classroom_id' => '{classroom_id}', ], ]); $enrollment = json_decode($response->getBody(), true);
const response = await fetch('https://lumenerp.app.br/api/v1/partners/school/26019466000122/student/7.553/enroll', { 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}' }), }); const enrollment = await response.json();
{ "data": { "id": "b2c3d4e5-f6a7-8901-bcde-f12345678901", "number": "7.553", "status": "MATRICULADO", "student_name": "João da Silva", "school_cnpj": "26019466000122", "classroom_name": "Turma A" } }
{ "success": false, "errors": ["O campo classroom_id é obrigatório."] }
{ "message": "Autenticação inválida." }
{ "message": "Recurso não encontrado." }
/v1/partners/school/{cnpj}/enrollment/{enrollment_id}/number
Editar número de matrícula
Atualiza o número de matrícula de uma matrícula existente. Útil quando o sistema de gestão do parceiro precisa sincronizar ou corrigir o número de matrícula de um aluno.
Parâmetros de rota
cnpj
string
obrigatório
CNPJ da escola (14 dígitos, sem formatação).
enrollment_id
string
obrigatório
UUID da matrícula.
Corpo da requisição
number
string
obrigatório
Novo número de matrícula do aluno (máx. 50 caracteres).
Códigos de resposta
200
Sucesso.
400
Dados inválidos.
401
Autenticação inválida.
404
Recurso não encontrado.
-X PATCH \
-H "X-Authorization: {api_token}" \
-H "X-Partner: {partner_token}" \
-H "X-Client: {client_slug}" \
-H "Content-Type: application/json" \
-d '{"number":"8.001"}'
use GuzzleHttp\Client; $client = new Client(); $response = $client->patch('https://lumenerp.app.br/api/v1/partners/school/26019466000122/enrollment/{id}/number', [ 'headers' => [ 'X-Authorization' => '{api_token}', 'X-Partner' => '{partner_token}', 'X-Client' => '{client_slug}', ], 'json' => ['number' => '8.001'], ]);
const response = await fetch('https://lumenerp.app.br/api/v1/partners/school/26019466000122/enrollment/{id}/number', { method: 'PATCH', headers: { 'X-Authorization': '{api_token}', 'X-Partner': '{partner_token}', 'X-Client': '{client_slug}', 'Content-Type': 'application/json', }, body: JSON.stringify({ number: '8.001' }), });
{ "data": { "id": "b2c3d4e5-f6a7-8901-bcde-f12345678901", "number": "8.001", "status": "MATRICULADO", // ... } }
{ "success": false, "errors": ["O campo number é obrigatório."] }
{ "message": "Autenticação inválida." }
{ "message": "Recurso não encontrado." }
Operações administrativas
Os endpoints a seguir são destinados à equipe escolar (secretaria, coordenação, direção) e utilizam
autenticação via Bearer token Sanctum — não os cabeçalhos de parceiro
(X-Authorization /
X-Partner).
Operações que criam autorizações pendentes só são efetivadas após aprovação da direção — consulte
Autorizações.
api/enrollment/transfer/internal
Transferência interna
Move o aluno de uma turma para outra dentro da mesma escola. A operação é executada imediatamente (sem fluxo de autorização), desde que a turma de destino tenha vagas e não haja autorização pendente para a matrícula.
Corpo da requisição
enrollment_id
uuid
obrigatório
UUID da matrícula do aluno.
destination_classroom_id
uuid
obrigatório
UUID da turma de destino.
reason
string
obrigatório
Motivo da transferência (máx. 1000 caracteres).
observations
string
opcional
Observações adicionais (máx. 2000 caracteres).
Regras de negócio
- A turma de destino deve ser diferente da atual; caso contrário retorna
400com mensagemSAME_CLASSROOM. - A turma de destino deve ter pelo menos uma vaga disponível (
vacancies > 0); caso contrário retorna400. - Se houver uma autorização pendente para a matrícula, retorna
409 Conflict.
Códigos de resposta
200
Transferência realizada com sucesso.
400
Turma de destino inválida, igual à atual, ou sem vagas disponíveis.
409
Autorização pendente existente para esta matrícula.
422
Dados inválidos.
POST /api/enrollment/transfer/internal { "enrollment_id": "b2c3d4e5-...", "destination_classroom_id": "c3d4e5f6-...", "reason": "Redistribuição de turmas", "observations": null }
"Transferência interna realizada."
"A turma de destino não possui vagas."
"A turma de destino deve ser diferente da atual."
"Esta matrícula possui uma autorização administrativa pendente. Aguarde a decisão da direção."
{ "message": "The enrollment id field is required.", "errors": { "enrollment_id": ["The enrollment id field is required."] } }
api/enrollment/transfer/external
Transferência externa
Registra a saída do aluno da escola por transferência para outra instituição. A matrícula é
marcada com status TRANSFERIDO
e o nome da escola de destino é armazenado.
Corpo da requisição
enrollment_id
uuid
obrigatório
UUID da matrícula do aluno.
destination_school_name
string
obrigatório
Nome da escola de destino (máx. 255 caracteres).
reason
string
obrigatório
Motivo da transferência (máx. 1000 caracteres).
observations
string
opcional
Observações adicionais (máx. 2000 caracteres).
partial_transcript
boolean
opcional
Indica se foi emitido histórico parcial. Padrão: false.
Regras de negócio
- Se houver uma autorização pendente para a matrícula, retorna
409 Conflict. - A operação é executada imediatamente, sem fluxo de autorização.
Códigos de resposta
200
Transferência registrada com sucesso.
409
Autorização pendente existente para esta matrícula.
422
Dados inválidos.
POST /api/enrollment/transfer/external { "enrollment_id": "b2c3d4e5-...", "destination_school_name": "Colégio São João", "reason": "Mudança de bairro", "observations": null, "partial_transcript": false }
"Transferência externa registrada."
"Esta matrícula possui uma autorização administrativa pendente. Aguarde a decisão da direção."
{ "message": "The enrollment id field is required.", "errors": { "enrollment_id": ["The enrollment id field is required."] } }
api/enrollment/status/request
Solicitar atualização de status
Cria uma solicitação de alteração de status da matrícula, pendente de aprovação da direção.
Não altera o status diretamente — gera uma
autorização
do tipo ENROLLMENT_STATUS_UPDATE.
Corpo da requisição
enrollment_id
uuid
obrigatório
UUID da matrícula.
new_status
string
obrigatório
Novo status desejado. Valores: MATRICULADO, TRANSFERIDO, DESISTENTE, APROVADO, REPROVADO, REMANEJADA, CANCELADA, FALECIDO.
reason
string
obrigatório
Motivo da alteração (máx. 1000 caracteres).
observations
string
opcional
Observações adicionais (máx. 2000 caracteres).
Regras de negócio
- Se já existir uma autorização pendente para a matrícula, retorna
409. - O status atual da matrícula não é alterado até a direção aprovar a solicitação.
Códigos de resposta
200
Solicitação criada com sucesso.
409
Já existe uma autorização pendente para esta matrícula.
422
Dados inválidos ou status não permitido.
POST /api/enrollment/status/request { "enrollment_id": "b2c3d4e5-...", "new_status": "TRANSFERIDO", "reason": "Aluno solicitou transferência", "observations": null }
"Solicitação enviada para autorização da direção."
"Esta matrícula já possui uma solicitação de autorização pendente. Aguarde a decisão da direção."
{ "message": "The enrollment id field is required.", "errors": { "enrollment_id": ["The enrollment id field is required."] } }
api/enrollment/reactivation/request
Solicitar reativação de matrícula
Solicita a reativação de uma matrícula excluída logicamente (deleted_at != null).
Gera uma autorização
do tipo ENROLLMENT_REACTIVATION pendente de aprovação da direção.
Corpo da requisição
enrollment_id
uuid
obrigatório
UUID da matrícula excluída que se deseja reativar.
reason
string
obrigatório
Motivo da reativação (máx. 1000 caracteres).
Regras de negócio
- Se o aluno já possuir uma matrícula ativa (status
MATRICULADO,APROVADO,REPROVADOouREMANEJADA), retorna409. - Se já existir uma autorização pendente para esta matrícula, retorna
409. - A matrícula só é efetivamente restaurada após aprovação da direção.
Códigos de resposta
200
Solicitação criada com sucesso.
409
Aluno possui matrícula ativa, ou já existe autorização pendente.
422
Dados inválidos.
POST /api/enrollment/reactivation/request { "enrollment_id": "b2c3d4e5-...", "reason": "Aluno retornou após desistência" }
"Solicitação de reativação enviada para autorização da direção."
"O aluno já possui uma matrícula ativa. Não é possível reativar outra enquanto houver uma matrícula em andamento."
"Esta matrícula já possui uma solicitação de autorização pendente. Aguarde a decisão da direção."
{ "message": "The enrollment id field is required.", "errors": { "enrollment_id": ["The enrollment id field is required."] } }
api/enrollment/force/{enrollment}
Exclusão forçada Direção
Remove permanentemente um registro de matrícula do banco de dados. Operação restrita ao papel
DIRECTOR. Diferente do
soft delete, este endpoint não pode ser desfeito.
Parâmetros de rota
enrollment
uuid
obrigatório
UUID da matrícula a ser excluída permanentemente.
Corpo da requisição
reason
string
obrigatório
Motivo da exclusão (máx. 1000 caracteres).
observations
string
opcional
Observações adicionais (máx. 2000 caracteres).
Códigos de resposta
200
Matrícula excluída permanentemente.
403
Usuário não possui papel de direção.
404
Matrícula não encontrada.
DELETE /api/enrollment/force/{enrollment_id} { "reason": "Matrícula criada com erro — aluno nunca frequentou", "observations": null }
"Matrícula excluída de forma definitiva."
"Apenas a direção pode realizar esta operação."
{ "message": "No query results for model [Enrollment]." }
api/enrollment/timeline/{student}
Timeline da matrícula
Retorna o histórico cronológico de eventos de matrículas de um aluno: criações, transferências, atualizações de status, autorizações e exclusões. Útil para auditoria e visualização da trajetória escolar do aluno.
Parâmetros de rota
student
uuid
obrigatório
UUID do aluno.
Códigos de resposta
200
Lista de eventos em ordem cronológica reversa.
404
Aluno não encontrado.
[ { "type": "enrollment", "label": "Matriculado em Turma A", "date": "2026-02-01T10:00:00-03:00", "actor": "Maria Secretária" }, { "type": "status_update", "label": "Status atualizado para TRANSFERIDO", "date": "2026-05-10T14:22:00-03:00", "actor": "João Diretor" } ]
{ "message": "No query results for model [Student]." }
Contratos
O contrato de matrícula formaliza o vínculo do aluno com a escola para um ano letivo. A superfície de parceiro cobre leitura e o fluxo de assinatura — geração de cobranças, valores, parcelamento, cartão em recorrência (autopay) e cancelamento de cobranças são operações financeiras e ficam de fora desta API; use o painel administrativo para essas ações.
O modelo contrato
Traz o status do contrato e o bloco signing
com o andamento da assinatura. Não inclui valores, parcelas ou dados de cobrança.
id
uuid
Identificador único do contrato.
school_year
string
Ano letivo do contrato (ex.: "2026").
school_year_id
uuid
UUID do ano letivo.
status
string
DRAFT, SENT, ACCEPTED, ACTIVE, CANCELED ou FINISHED.
status_label
string
Rótulo em português do status.
student
object
id e name do aluno (presente quando carregado).
signing.method
string
ASSINAFY ou CODE — método de assinatura configurado pela escola.
signing.stage
string|null
RESPONSIBLE, SCHOOL ou COMPLETED.
signing.is_sent
boolean
Se o contrato já foi enviado para assinatura.
signing.responsible_signed
boolean
Se o responsável já assinou.
signing.school_signed
boolean
Se a escola já assinou.
signing.is_fully_signed
boolean
Se ambas as partes assinaram.
signing.has_signed_pdf
boolean
Se o PDF assinado está disponível para download.
signing.content_hash_formatted
string|null
Código de verificação do documento assinado.
created_at
datetime
Data de criação do contrato.
{ "id": "c1d2e3f4-0000-0000-0000-000000000001", "school_year": "2026", "school_year_id": "a1b2c3d4-0000-0000-0000-000000000001", "status": "ACTIVE", "status_label": "Ativo", "student": { "id": "...", "name": "João da Silva" }, "signing": { "method": "ASSINAFY", "stage": "COMPLETED", "is_sent": true, "responsible_signed": true, "school_signed": true, "is_fully_signed": true, "has_signed_pdf": true, "content_hash_formatted": "A1B2C3D4 E5F6A7B8" }, "created_at": "2026-02-01T09:00:00-03:00" }
/v1/partners/school/{cnpj}/student/{enrollment_number}/contracts
Listar contratos do aluno
Retorna todos os contratos de matrícula do aluno, mais recentes primeiro.
Códigos de resposta
200
Sucesso.
404
Aluno não encontrado.
{ "data": [ { "id": "...", "status": "ACTIVE", // ... } ] }
{ "message": "Aluno não encontrado." }
/v1/partners/school/{cnpj}/contract/{id}
Obter um contrato
Retorna um contrato específico pelo seu UUID.
Códigos de resposta
200
Sucesso.
404
Contrato não encontrado.
{ "message": "Contrato não encontrado." }
/v1/partners/school/{cnpj}/contract/{id}/send-signature
Enviar para assinatura
Inicia a cerimônia de assinatura pelo método configurado na escola — Assinafy (link de assinatura eletrônica) ou código por e-mail/SMS.
Códigos de resposta
200
Enviado com sucesso.
422
Não foi possível enviar (ex.: método externo indisponível).
404
Contrato não encontrado.
{ "ok": true, "message": "Enviado para assinatura." }
{ "message": "Contrato não encontrado." }
/v1/partners/school/{cnpj}/contract/{id}/signing-status
Consultar status de assinatura
Reconsulta o status junto ao provedor de assinatura (quando aplicável) e retorna o contrato atualizado — use para saber se o responsável e/ou a escola já assinaram.
Códigos de resposta
200
Sucesso.
404
Contrato não encontrado.
{ "message": "Contrato não encontrado." }
/v1/partners/school/{cnpj}/contract/{id}/document
Baixar documento assinado
Retorna o PDF do contrato já assinado por ambas as partes. Disponível apenas após
signing.is_fully_signed
ser true.
Códigos de resposta
200
PDF binário (application/pdf).
404
Contrato não encontrado, ou documento assinado ainda indisponível.
// Binary PDF data (application/pdf)
{ "message": "Documento assinado indisponível." }
Pré-matrículas
A pré-matrícula é o funil de captação antes de virar matrícula efetiva — o mesmo formulário usado
pela Matrícula Online pública, aqui aberto para que um parceiro (site da escola, plataforma de
captação) submeta candidaturas diretamente. Cobre apenas o tipo pre_enrollment
— rematrículas do aluno já matriculado são um fluxo interno à parte. Para abrir/fechar a janela de
pré-matrícula do ano letivo, veja Alternar pré-matrícula na página Ano Letivo.
O modelo pré-matrícula
id
uuid
Identificador único.
type
string
Sempre pre_enrollment nesta API.
status
string
pending, denied, approved ou fullfiled.
origin_status
string|null
Status de origem, quando aplicável a fluxos de rematrícula.
preenrollment_number
string
Número de protocolo da pré-matrícula.
student
object
id e name do aluno vinculado (criado automaticamente se novo).
school_cnpj
string
CNPJ da escola.
classroom_name
string|null
Turma reservada, quando já alocada.
responsible_name
string
Nome do responsável.
responsible_birthdate
date
Data de nascimento do responsável.
responsible_cpf
string
CPF do responsável (11 dígitos).
responsible_email
string
E-mail do responsável.
address
object
Endereço residencial. Contém: address_type, cep, address, number, complement, district, city, state.
matricula_online_status
string|null
Status no funil de Matrícula Online, quando aplicável.
created_at
datetime
Data de criação da pré-matrícula.
{ "id": "p1e2n3r4-0000-0000-0000-000000000001", "type": "pre_enrollment", "status": "pending", "preenrollment_number": "PM-2026-00042", "student": { "id": "...", "name": "João da Silva" }, "school_cnpj": "26019466000122", "classroom_name": null, "responsible_name": "Maria da Silva", "responsible_cpf": "12345678900", "responsible_email": "maria@email.com", "matricula_online_status": null, "created_at": "2026-08-01T09:00:00-03:00" }
/v1/partners/school/{cnpj}/preenrollments/all
Listar pré-matrículas
Retorna as pré-matrículas da escola, paginadas, mais recentes primeiro.
Códigos de resposta
200
Sucesso.
404
Escola não encontrada.
{ "message": "Escola não encontrada." }
/v1/partners/school/{cnpj}/preenrollment/{id}
Obter uma pré-matrícula
Retorna uma pré-matrícula específica pelo seu UUID.
Códigos de resposta
200
Sucesso.
404
Pré-matrícula não encontrada.
{ "message": "Pré-matrícula não encontrada." }
/v1/partners/school/{cnpj}/preenrollment
Criar pré-matrícula
Submete uma candidatura de pré-matrícula. Cria o aluno automaticamente se ainda não existir (mesmo nome + data de nascimento na escola) e reserva uma vaga na turma correspondente à série/turno informados, quando houver.
Corpo da requisição
grade
uuid
UUID da série pretendida.
shift
uuid
UUID do turno pretendido.
student_name
string
Nome completo do aluno.
student_birthdate
date
Data de nascimento do aluno.
responsible_name
string
Nome completo do responsável.
responsible_birthdate
date
Data de nascimento do responsável.
responsible_cpf
string (11)
CPF do responsável, sem formatação.
responsible_email
string
E-mail do responsável.
address_type
string
Tipo de endereço (ex.: "Residencial").
cep
string (8)
CEP, somente dígitos.
address
string
Logradouro.
number
string
Número do endereço.
complement
string|null
Complemento (opcional).
district
string
Bairro.
city_id
uuid
UUID da cidade.
state_id
uuid
UUID do estado.
contact_type
string
Tipo de contato (ex.: "Celular").
contact_number
string (10–11)
Telefone de contato, somente dígitos.
Códigos de resposta
201
Pré-matrícula criada.
409
Sem ano letivo corrente, ou sem vagas de pré-matrícula para a série/turno.
422
Erro de validação.
{ "data": { "id": "...", "status": "pending", // ... }, "message": "Pré-matrícula cadastrada." }
{ "message": "Não há vagas de pré-matrícula para a série/turno selecionados." }
{ "message": "Erro de validação." }
/v1/partners/school/{cnpj}/preenrollment/{id}
Cancelar pré-matrícula
Remove a candidatura e devolve a vaga reservada à turma, quando havia uma. Se o aluno criado para esta pré-matrícula nunca chegou a ter matrícula efetiva, ele também é removido.
Códigos de resposta
200
Sucesso.
404
Pré-matrícula não encontrada.
{ "success": true, "message": "Pré-matrícula excluída." }
{ "message": "Pré-matrícula não encontrada." }