Sandbox
O sandbox é o ambiente de testes do Lumen. É nele que você desenvolve e valida a sua integração do começo ao fim, com chaves de teste, escolas cheias de dados de demonstração e acesso ao sistema web como a própria escola, sem nenhum risco para os dados reais. Nada do que acontece no sandbox chega à produção ou a pessoas reais.
Endereço do sandbox
https://sandbox.lumenerp.app.brComo o sandbox funciona
O sandbox é uma instância separada do Lumen, com banco de dados, filas, rotinas automáticas e arquivos próprios. Ele roda sempre a mesma versão da produção, então os endpoints, as validações e o formato das respostas são idênticos: o código que funciona no sandbox funciona em produção trocando só as credenciais.
| Serviço | Endereço |
|---|---|
| API | https://sandbox.lumenerp.app.br/api/v1 |
| Sistema web | https://sandbox.lumenerp.app.br |
| Caixa de saída | https://sandbox.lumenerp.app.br/sandbox/caixa-de-saida (com login) |
| Portal do Parceiro | Só em produção. Chaves, clientes de teste, webhooks e logs do sandbox são gerenciados no portal. |
- Só chaves de teste (
lmn_test_…) funcionam no sandbox, e só nos clientes de teste do seu app. Nenhum outro parceiro vê os seus dados, e você não vê os deles. - Filas e rotinas agendadas rodam como em produção: processamento de faltas, alertas, lembretes, PDFs e demais tarefas em segundo plano acontecem de verdade, e geram os mesmos webhooks.
- Toda resposta traz o cabeçalho
X-Lumen-Environment: test. Use-o para confirmar em qual ambiente a sua integração está falando. - Os dados ficam como você deixou: não há limpeza automática. Para voltar ao estado inicial, use "Recriar dados" (veja Limites e regras).
Preparando o ambiente
Tudo é feito por você, no Portal do Parceiro, em poucos minutos e sem depender de aprovação.
-
1
Crie a conta e o app
Cadastre-se no portal, confirme o e-mail e crie um app. Todo app nasce no status Sandbox.
-
2
Gere uma chave de teste
Na aba Credenciais do app, gere uma chave lmn_test_… e guarde-a: ela é exibida uma única vez. Ela vai no cabeçalho X-Partner.
-
3
Crie os clientes de teste
Ainda na aba Credenciais, clique em "Criar cliente" no cartão Rede privada e/ou Rede pública (SEDUC). Em alguns segundos o cartão mostra o endereço da API, o X-Client, o X-Authorization, o CNPJ da escola e o login no sistema. A senha do login aparece uma única vez.
-
4
Configure o endpoint de teste dos webhooks
Na aba Webhooks, informe o Endpoint de teste e os eventos que quer receber. Tudo o que acontece nos seus clientes de teste é entregue ali.
-
5
Faça a primeira chamada
Chame a API do sandbox com a chave, o X-Client e o X-Authorization do cliente de teste. Use o quadro Dados de teste para preencher os parâmetros dos endpoints.
-
6
Entre no sistema como a escola
Clique em "Entrar no sandbox" no cartão do cliente para abrir o sistema web já logado como a rede de ensino, e use-o como a escola usaria.
Clientes de teste
Cada app pode ter até dois clientes de teste: uma rede privada e uma rede pública (SEDUC). Os dois são criados pelo mesmo processo de implantação de um cliente real, com uma escola, o Colégio Demonstração, com CNPJ próprio e dados de demonstração. Crie o tipo que corresponde aos clientes que vão usar a sua integração, ou os dois, se ela atende ambos.
Rede privada
Escola particular. Tem todos os módulos pedagógicos e de gestão da referência da API, com dados também nos que existem só na rede privada: Financeiro (contratos de matrícula) e CRM de Prospecção.
Rede pública (SEDUC)
Secretaria de Educação, com os módulos de uma rede pública, inclusive o Orçamento Público
(endpoints budget/*). Módulos que só existem num tipo de rede
(Financeiro/contratos e CRM na privada; Orçamento Público na pública) respondem sem dados no cliente do outro tipo.
O que o cartão do cliente mostra
API |
Endereço base da API do sandbox. |
X-Partner |
O prefixo da sua chave de teste. A chave completa você guardou quando a gerou. |
X-Client |
Slug do cliente de teste. |
X-Authorization |
Token do cliente de teste. Diferente da produção, ele fica visível no portal enquanto o cliente existir. |
CNPJ da escola |
O valor do parâmetro {cnpj} dos endpoints por escola. |
Login no sistema |
E-mail do usuário principal da rede, para entrar no sistema web do sandbox. |
Dados de teste
O Colégio Demonstração já vem com dados em todos os módulos da referência da API: turmas, alunos,
responsáveis, professores, horários, aulas, notas, frequência, diário de classe, conselho de classe,
ocorrências, fotos e os módulos de ERP. Todo endpoint GET
documentado devolve dados desde o primeiro dia.
Para não ter de procurar IDs, abra o quadro Dados de teste no cartão do cliente. Ele traz um valor pronto para cada parâmetro de caminho:
{cnpj}
{classroom_id}
{enrollment_number}
{cpf}
{student_id}
{enrollment_id}
{lesson_id}
?date=
{entry_id}
{score_id}
{gradeId}
{subjectId}
{school_year_id}
{event}
{goal}
{contract}
{title}
{copy}
{loan}
{onlineCourse}
{exerciseGroup}
{opportunity}
{preenrollment}
{visit}
- Os valores se encaixam entre si: a turma é a que tem mais dados, o aluno está matriculado nela, o CPF é do responsável dele e a data é de uma aula com frequência e plano de aula registrados.
- O quadro também traz o ID de um registro de cada recurso endereçado por
{id}(turma, professor, disciplina, ano letivo, aviso da agenda, aula, conselho de classe, ocorrência disciplinar, portão, espaço físico…). Parâmetros nomeados como{event}e{contract}aparecem junto com os demais. Valores de módulos que o tipo de rede não tem (contrato e CRM na rede pública, por exemplo) não aparecem. - Os valores são lidos na hora em que você abre o quadro, então acompanham o que você alterou ou excluiu.
- Os dados são fictícios. Nunca cadastre dados reais de alunos, responsáveis ou funcionários no sandbox.
Chamando a API do sandbox
Guarde o endereço da API e as três credenciais em variáveis de ambiente, nunca no código. Assim, ir para a produção é só trocar a configuração. Este exemplo busca a frequência de um dia da turma de demonstração, com os valores do quadro Dados de teste:
LUMEN_API_URL=https://sandbox.lumenerp.app.br/api/v1 LUMEN_KEY=lmn_test_{sua_chave} LUMEN_CLIENT={X-Client do cliente de teste} LUMEN_TOKEN={X-Authorization do cliente de teste}
-H "X-Partner: $LUMEN_KEY" \
-H "X-Client: $LUMEN_CLIENT" \
-H "X-Authorization: $LUMEN_TOKEN"
use GuzzleHttp\Client; $lumen = new Client([ 'base_uri' => getenv('LUMEN_API_URL') . '/', 'headers' => [ 'X-Partner' => getenv('LUMEN_KEY'), 'X-Client' => getenv('LUMEN_CLIENT'), 'X-Authorization' => getenv('LUMEN_TOKEN'), ], ]); $response = $lumen->get('partners/school/{cnpj}/classroom/{classroom_id}/attendance/day', [ 'query' => ['date' => '{date}'], ]); $environment = $response->getHeaderLine('X-Lumen-Environment'); // "test"
const headers = { 'X-Partner': process.env.LUMEN_KEY, 'X-Client': process.env.LUMEN_CLIENT, 'X-Authorization': process.env.LUMEN_TOKEN, }; const url = `${process.env.LUMEN_API_URL}/partners/school/{cnpj}/classroom/{classroom_id}/attendance/day?date={date}`; const response = await fetch(url, { headers }); const environment = response.headers.get('X-Lumen-Environment'); // "test"
Substitua {cnpj},
{classroom_id} e
{date} pelos valores do quadro Dados de teste.
Usando o sistema web
O sandbox tem o sistema web completo do Lumen. Use-o para fazer, como a escola, o que vai disparar a sua integração, e para conferir na tela o que a sua integração gravou pela API.
Entrar no sandbox
O botão no cartão do cliente abre o sistema já logado como o usuário principal da rede de ensino, com todas as permissões. O link vale uma única vez e por 5 minutos; clique de novo quando precisar.
Login com e-mail e senha
Você também pode entrar direto em sandbox.lumenerp.app.br com o e-mail do cartão e a senha exibida ao criar o cliente. Se perdê-la, use "Gerar nova senha".
Outros perfis
Cadastre secretários, coordenadores, professores, inspetores e demais funcionários pelo cadastro normal do sistema. A senha de cada novo usuário chega na Caixa de saída, e você pode entrar com ele para testar o que aquele perfil vê e faz.
Portais do Responsável e do Aluno
Os portais web do Responsável e do Aluno também funcionam no sandbox. Os aplicativos móveis do Lumen não se conectam ao sandbox.
Caixa de saída e serviços simulados
Nada sai do sandbox para o mundo real. Os serviços externos que o Lumen usa em produção são capturados ou simulados, sem custo e sem risco de atingir pessoas reais.
| Em produção | No sandbox |
|---|---|
| E-mail, SMS, WhatsApp e push | Vão para a Caixa de saída. Com o sistema aberto, o botão amarelo "Ambiente sandbox · Caixa de saída", no canto da tela, leva até ela. Cada cliente vê só as próprias mensagens, com filtro por canal e busca por destinatário. |
| Cobranças (Asaas) | Simuladas. O link de uma cobrança abre uma página do sandbox onde você clica em "Simular pagamento". A escola recebe a confirmação como receberia do Asaas, e os webhooks de pagamento são enviados. |
| Assinatura eletrônica (Assinafy) | Simulada. O link de assinatura abre uma página do sandbox onde você clica em "Assinar documento". A assinatura é registrada e o fluxo segue como em produção. |
| Correções e relatórios com IA | Respostas fixas, geradas sem custo. Servem para testar o fluxo, não a qualidade do texto. |
| Catracas, câmeras, agregador bancário e integrações de terceiros | Desligados. Qualquer outra chamada externa é bloqueada. |
| Webhooks para o seu app | Enviados de verdade para o seu endpoint de teste. É a única coisa que sai do sandbox. |
Webhooks no sandbox
O endpoint de teste recebe todos os eventos dos seus clientes de teste, qualquer que seja a origem: uma chamada da sua integração à API, uma ação feita no sistema web ou uma rotina automática. Isso permite testar o caminho de volta, quando a escola faz algo e a sua integração precisa reagir.
- As entregas têm o mesmo formato e a mesma assinatura da produção, com
"environment": "test"e"client"com o slug do cliente de teste. Veja como validar a assinatura. - O endpoint precisa ser público. Endereços como
localhost, domínios.local/.teste IPs de rede privada são recusados. Para receber na sua máquina, use um túnel público (ngrok, Cloudflare Tunnel ou similar). - Mudanças no endpoint de teste, nos eventos escolhidos ou no segredo chegam ao sandbox em poucos segundos.
- Na aba Webhooks do portal você envia eventos de teste, vê o histórico de entregas e reenvia uma entrega, o que serve para testar se a sua integração descarta repetições pelo
webhook-id.
Roteiro para validar a integração
Antes de pedir a aprovação para produção, percorra no sandbox todos os caminhos que a sua integração vai usar. Este roteiro cobre o que a equipe Lumen avalia na revisão do app.
Leitura
Chame cada endpoint GET que a integração usa, com os valores do quadro Dados de teste, e confira que a paginação e todos os campos são tratados (inclusive os que podem vir nulos).
Escrita
Crie, edite e exclua pela API e confira o resultado no sistema web, entrando como a escola. Provoque erros de validação (422) e confira que a sua integração mostra a mensagem certa.
Caminho de volta
Faça no sistema web, como secretário ou professor, as ações que a integração precisa acompanhar (cadastro de aluno, frequência, nota, pagamento…) e confira que o webhook chega e é processado.
Webhooks robustos
Valide a assinatura, rejeite timestamps antigos, descarte repetições pelo webhook-id e responda rápido (2xx), processando em segundo plano. Reenvie entregas pelo portal para testar.
Erros e limites
Trate 401, 403, 404, 422 e 429. O limite do sandbox (60 requisições por minuto) é menor que o da produção, então ele ajuda a encontrar rajadas: respeite Retry-After e os cabeçalhos X-RateLimit-*.
Rede pública
Se a integração atende redes públicas, rode tudo também no cliente da rede pública. Módulos que só existem num tipo de rede (Financeiro/contratos e CRM na privada; Orçamento Público na pública) respondem sem dados no cliente do outro tipo.
Plano sem ERP
Desligue a chave Gestão Escolar (ERP) no cartão do cliente e confira que a integração trata o ERP_REQUIRED dos módulos ERP, como acontece com escolas do plano simplificado em produção.
Logs
Confira na aba Logs do portal as chamadas feitas, com status e duração, para achar erros e requisições repetidas sem necessidade.
Limites e regras
| Requisições | 60 por minuto, contadas por app. |
| Chaves de teste | Até 5 por app. Use uma por máquina ou servidor de homologação, para saber qual revogar se uma vazar. |
| Clientes de teste | Um da rede privada e um da rede pública por app. |
| Persistência | Os dados ficam como você deixou, sem limpeza automática. |
| Recriar dados | Apaga o cliente e tudo o que você cadastrou nele, e cria um novo com os dados de demonstração. X-Client, X-Authorization, CNPJ e login mudam; os antigos param de funcionar na hora. |
| Gestão Escolar (ERP) | Chave no cartão de cada cliente. Desligada, o cliente passa ao plano simplificado: os módulos ERP somem do sistema web e respondem 403 com "code": "ERP_REQUIRED" na API. Os dados de demonstração continuam lá e voltam ao religar. O plano escolhido é mantido ao recriar os dados. |
| App suspenso | Enquanto o app ou a conta estiver suspenso, as chaves de teste também respondem 403. |
| Excluir o app | Os clientes de teste do app são desativados junto com as chaves. |
| Dados pessoais | Use só dados fictícios. O sandbox não é lugar para dados reais de alunos, responsáveis ou funcionários. |
Erros comuns no sandbox
Além dos erros gerais da API e dos erros de acesso do portal:
| Status | Resposta | O que fazer |
|---|---|---|
403 |
"code": "SANDBOX_HOST" | Chave de teste enviada para a produção. Aponte a integração para https://sandbox.lumenerp.app.br/api/v1. |
403 |
Production keys (lmn_live_) do not work in the sandbox. … | Chave de produção enviada para o sandbox. Use uma chave lmn_test_. |
401 |
Only Portal do Parceiro test keys (lmn_test_) work in the sandbox. | Credenciais de parceiro antigas não funcionam no sandbox. Crie um app no portal e use a chave de teste dele. |
401 |
Unauthorized. | X-Client e X-Authorization não são de um cliente de teste ativo do seu app. Copie de novo do cartão do cliente (eles mudam ao recriar os dados). |
404 |
CNPJ not found. | O {cnpj} não é de uma escola desse cliente. Use o CNPJ do cartão ou do quadro Dados de teste. |
403 |
"code": "ERP_REQUIRED" | Módulo do plano Gestão Escolar (ERP) chamado num cliente com a chave Gestão Escolar (ERP) desligada. Comportamento esperado; trate-o na integração. |
Do sandbox para a produção
Com o roteiro validado, peça a aprovação na aba Visão geral do app. Depois da aprovação e da liberação de cada cliente (veja Portal do Parceiro), troque só a configuração. O código da integração não muda.
| Sandbox | Produção | |
|---|---|---|
| LUMEN_API_URL | https://sandbox.lumenerp.app.br/api/v1 |
https://lumenerp.app.br/api/v1 |
| LUMEN_KEY | lmn_test_… |
lmn_live_… |
| LUMEN_CLIENT | Slug do cliente de teste (aba Credenciais) | Slug do cliente (aba Clientes) |
| LUMEN_TOKEN | Token do cliente de teste (aba Credenciais) | Token da conexão, lmn_conn_… (aba Clientes) |
| Webhooks | Endpoint de teste | Endpoint de produção |
Em produção, as ações têm efeitos reais: mensagens chegam a responsáveis e funcionários, e cobranças são emitidas. Mantenha o sandbox para testar cada mudança da integração antes de publicá-la.