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.

Plano Gestão Escolar (ERP): os endpoints de contratos de matrícula respondem somente para clientes do plano Gestão Escolar (ERP), como no sistema web. Para clientes do plano simplificado, a resposta é 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.

Modelo matrícula
{
  "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
}
GET /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.

Requisição GET
GET /v1/partners/school/{cnpj}/enrollments/all
curl https://lumenerp.app.br/api/v1/partners/school/26019466000122/enrollments/all \
  -H "X-Authorization: {api_token}" \
  -H "X-Partner: {partner_token}" \
  -H "X-Client: {client_slug}"
Resposta
{
  "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, // ... }
}
POST /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.

Requisição POST
POST /v1/partners/school/{cnpj}/student/{enrollment_number}/enroll
curl https://lumenerp.app.br/api/v1/partners/school/26019466000122/student/7.553/enroll \
  -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-..."}'
Resposta
{
  "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"
  }
}
PATCH /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.

Requisição PATCH
PATCH /v1/partners/school/{cnpj}/enrollment/{enrollment_id}/number
curl https://lumenerp.app.br/api/v1/partners/school/26019466000122/enrollment/b2c3d4e5-.../number \
  -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"}'
Resposta
{
  "data": {
    "id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
    "number": "8.001",
    "status": "MATRICULADO",
    // ...
  }
}

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.

POST 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 400 com mensagem SAME_CLASSROOM.
  • A turma de destino deve ter pelo menos uma vaga disponível (vacancies > 0); caso contrário retorna 400.
  • 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.

Requisição POST
POST /api/enrollment/transfer/internal

{
  "enrollment_id": "b2c3d4e5-...",
  "destination_classroom_id": "c3d4e5f6-...",
  "reason": "Redistribuição de turmas",
  "observations": null
}
Resposta
"Transferência interna realizada."
POST 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.

Requisição POST
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
}
Resposta
"Transferência externa registrada."
POST 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.

Requisição POST
POST /api/enrollment/status/request

{
  "enrollment_id": "b2c3d4e5-...",
  "new_status": "TRANSFERIDO",
  "reason": "Aluno solicitou transferência",
  "observations": null
}
Resposta
"Solicitação enviada para autorização da direção."
POST 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, REPROVADO ou REMANEJADA), retorna 409.
  • 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.

Requisição POST
POST /api/enrollment/reactivation/request

{
  "enrollment_id": "b2c3d4e5-...",
  "reason": "Aluno retornou após desistência"
}
Resposta
"Solicitação de reativação enviada para autorização da direção."
DELETE 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.

Requisição DELETE
DELETE /api/enrollment/force/{enrollment_id}

{
  "reason": "Matrícula criada com erro — aluno nunca frequentou",
  "observations": null
}
Resposta
"Matrícula excluída de forma definitiva."
GET 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.

Requisição GET
GET /api/enrollment/timeline/{student_id}
Resposta
[
  {
    "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"
  }
]

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.

Modelo 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"
}
GET /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.

Requisição GET
GET /api/v1/partners/school/{cnpj}/student/{enrollment_number}/contracts
Resposta
{
  "data": [
    { "id": "...", "status": "ACTIVE", // ... }
  ]
}
GET /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.

Requisição GET
GET /api/v1/partners/school/{cnpj}/contract/{id}
Resposta
{
  "message": "Contrato não encontrado."
}
POST /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.

Requisição POST
POST /api/v1/partners/school/{cnpj}/contract/{id}/send-signature
Resposta
{
  "ok": true,
  "message": "Enviado para assinatura."
}
GET /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.

Requisição GET
GET /api/v1/partners/school/{cnpj}/contract/{id}/signing-status
Resposta
{
  "message": "Contrato não encontrado."
}
GET /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.

Requisição GET
GET /api/v1/partners/school/{cnpj}/contract/{id}/document
Resposta
// Binary PDF data (application/pdf)

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.

Modelo 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"
}
GET /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.

Requisição GET
GET /api/v1/partners/school/{cnpj}/preenrollments/all
Resposta
{
  "message": "Escola não encontrada."
}
GET /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.

Requisição GET
GET /api/v1/partners/school/{cnpj}/preenrollment/{id}
Resposta
{
  "message": "Pré-matrícula não encontrada."
}
POST /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.

Requisição POST
POST /api/v1/partners/school/{cnpj}/preenrollment
Resposta
{
  "data": { "id": "...", "status": "pending", // ... },
  "message": "Pré-matrícula cadastrada."
}
DELETE /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.

Requisição DELETE
DELETE /api/v1/partners/school/{cnpj}/preenrollment/{id}
Resposta
{
  "success": true,
  "message": "Pré-matrícula excluída."
}