Portal do Parceiro
O Portal do Parceiro é onde você cria a sua conta de desenvolvedor, registra os apps que integram com o Lumen ERP e gerencia as credenciais de cada um. Todo app começa no sandbox, um ambiente com dados de demonstração, e só acessa escolas reais depois de aprovado pela equipe Lumen e liberado por cada cliente.
Do cadastro à produção
O caminho de uma integração nova tem seis etapas. As três primeiras você faz sozinho, em minutos; as demais dependem de aprovação.
-
1
Crie a conta
Cadastre-se no portal e confirme o e-mail. O acesso ao painel só é liberado depois da confirmação.
-
2
Crie um app
Cada integração é um app, com chaves, conexões, webhooks e logs próprios. O app nasce no status Sandbox.
-
3
Teste no sandbox
Na aba Credenciais, gere uma chave lmn_test_…, crie os clientes de teste do app e chame a API no sandbox. Nada do que você faz ali chega à produção.
-
4
Peça a aprovação para produção
Na aba Visão geral, descreva como o app usa a API: quais dados lê e grava, com que frequência, quem são os usuários finais e como os dados de alunos são protegidos (LGPD). A equipe Lumen revisa cada app e você recebe a decisão por e-mail.
-
5
Peça acesso a cada cliente
Aprovado o app, informe na aba Clientes o CNPJ de uma escola do cliente que contratou a sua integração. A equipe Lumen confirma com o cliente e libera o acesso.
-
6
Gere o token da conexão
Com o acesso liberado, gere uma chave lmn_live_… e o token da conexão com aquele cliente. A partir daí o app chama a API com os dados reais da escola.
Sandbox e produção
O sandbox é uma instância separada do Lumen, com banco de dados, filas e arquivos próprios, em
https://sandbox.lumenerp.app.br.
Chaves de teste só funcionam lá; chaves de produção só funcionam em produção. Os endpoints e o formato das
respostas são os mesmos nos dois. O guia Sandbox
explica como usá-lo para desenvolver e validar a sua integração.
| Sandbox | Produção | |
|---|---|---|
| Endereço da API | https://sandbox.lumenerp.app.br/api/v1 |
https://lumenerp.app.br/api/v1 |
| X-Partner | lmn_test_… |
lmn_live_…, disponível após a aprovação do app |
| X-Client | Slug de um dos clientes de teste do app, mostrado na aba Credenciais | Slug do cliente, mostrado na aba Clientes |
| X-Authorization | Token desse cliente de teste, mostrado na aba Credenciais | Token da conexão com o cliente (lmn_conn_…) |
| Dados | Uma rede privada e uma pública (SEDUC) só do app, cada uma com uma escola cheia de dados de demonstração | Somente os clientes que liberaram o app |
| Efeitos externos | Nada sai do sandbox: e-mails, SMS, WhatsApp e push vão para a Caixa de saída; cobranças e assinaturas são simuladas. Só os webhooks chegam ao seu endpoint de teste | Os mesmos de uma ação feita no próprio Lumen |
| Limite | 60 requisições por minuto | 300 requisições por minuto, ajustável por app na aprovação |
| Webhooks | Endpoint de teste do app, para tudo o que acontece nos clientes de teste: chamadas à API, ações no sistema e rotinas automáticas | Endpoint de produção do app |
| Sistema web | Você entra como a rede de ensino (botão "Entrar no sandbox") e cadastra o que quiser, inclusive novos usuários | — |
- Toda resposta traz o cabeçalho
X-Lumen-Environment(testoulive) e os cabeçalhosX-RateLimit-*. O limite é contado por app e por ambiente e vale para todos os endpoints da API de parceiros. - Na aba Credenciais, crie o cliente de teste da rede privada e/ou da rede pública (SEDUC). Cada um vem com uma escola, o Colégio Demonstração, com dados em todos os módulos da referência da API: turmas, alunos, responsáveis, professores, notas, frequência, diário, conselho de classe, ocorrências, fotos, eventos, biblioteca, metas, cursos online e visitantes. Contratos e CRM têm dados só na rede privada, e o Orçamento Público só na rede pública.
- O quadro Dados de teste de cada cliente traz um valor pronto para cada parâmetro dos endpoints (CNPJ, turma, matrícula, CPF, aula, nota, evento, meta…) e o ID de um registro de cada recurso endereçado por
{id}. - Os clientes de teste são só do seu app: nenhum outro parceiro os vê, e os dados ficam como você deixou. Para voltar ao estado inicial, use "Recriar dados" — o cliente é apagado e criado de novo, com novo
X-Client,X-Authorizatione login. - No sandbox, pagamentos e assinaturas eletrônicas são simulados: o link de uma cobrança abre uma página onde você "paga" (PIX, boleto ou cartão), e o link de assinatura abre uma página onde você "assina". A escola recebe a confirmação como receberia em produção, e os webhooks correspondentes são enviados.
- Uma chave de teste usada em produção recebe
403com"code": "SANDBOX_HOST"e o endereço do sandbox.
Primeira chamada no sandbox
Com uma chave de teste e o slug e o token de um cliente de teste copiados da aba Credenciais, liste as escolas desse cliente no sandbox:
-H "X-Partner: lmn_test_{sua_chave}" \
-H "X-Client: {slug_do_cliente_de_teste}" \
-H "X-Authorization: {token_do_cliente_de_teste}"
use GuzzleHttp\Client; $client = new Client(); $response = $client->get('https://sandbox.lumenerp.app.br/api/v1/partners/schools/all', [ 'headers' => [ 'X-Partner' => 'lmn_test_{sua_chave}', 'X-Client' => '{slug_do_cliente_de_teste}', 'X-Authorization' => '{token_do_cliente_de_teste}', ], ]); $environment = $response->getHeaderLine('X-Lumen-Environment'); // "test"
const response = await fetch('https://sandbox.lumenerp.app.br/api/v1/partners/schools/all', { headers: { 'X-Partner': 'lmn_test_{sua_chave}', 'X-Client': '{slug_do_cliente_de_teste}', 'X-Authorization': '{token_do_cliente_de_teste}', }, }); const environment = response.headers.get('X-Lumen-Environment'); // "test"
Para ir à produção, troque os três valores: a chave lmn_live_…,
o slug do cliente e o token da conexão, ambos mostrados na aba Clientes. O código da integração não muda.
Status do app
Chaves de teste funcionam em qualquer status, exceto quando o app está suspenso. Chaves de produção só funcionam com o app em Produção.
Status inicial. Só chaves de teste, só dados de demonstração.
A equipe Lumen está revisando o pedido de aprovação. Continue testando no sandbox enquanto isso.
Aprovado. O app pode gerar chaves lmn_live_… e pedir acesso a clientes.
A revisão foi recusada, com o motivo informado no portal. Ajuste o app e peça uma nova revisão.
Um app, ou a conta inteira do desenvolvedor, pode ser suspenso pela equipe Lumen. Enquanto
estiver suspenso, todas as chaves respondem 403,
inclusive as de teste.
Chaves e tokens
Exibidos uma única vez
Chaves, tokens de conexão e o segredo de webhooks aparecem só no momento em que são gerados. O Lumen guarda apenas um hash. Se perder um valor, gere outro.
Até 5 chaves por ambiente
Use chaves separadas por servidor ou ambiente seu (homologação, produção) e dê um nome a cada uma, para saber qual revogar se uma vazar.
Rotação sem indisponibilidade
Rotacionar gera uma chave nova e mantém a antiga funcionando por mais 24 horas, tempo para você publicar a troca. Revogar desativa a chave na hora.
Token de conexão
Existe um token por cliente conectado. Gerar um novo token invalida o anterior imediatamente. Remover a conexão revoga o acesso àquele cliente na hora.
Prefixos detectáveis
Os prefixos lmn_test_, lmn_live_ e lmn_conn_ permitem que scanners de segredos identifiquem um valor vazado em um repositório. Nunca coloque credenciais no código do app.
Excluir o app
Revoga todas as chaves e conexões do app de uma vez e desativa os clientes de teste dele no sandbox. Não pode ser desfeito.
Segurança da conta
A conta de desenvolvedor dá acesso às credenciais das integrações com escolas. Na página Conta do portal, ative a verificação em duas etapas e cadastre uma chave SSH de recuperação.
Verificação em duas etapas
Com um aplicativo autenticador (TOTP), pedido em todo login. Ativar, desativar ou gerar novos códigos de recuperação exige antes um código enviado ao e-mail da conta. Guarde os códigos de recuperação: cada um vale um login.
Chaves SSH de recuperação
Chaves públicas Ed25519 (ssh-keygen -t ed25519) que comprovam a sua identidade se você perder o autenticador e os códigos de recuperação.
Recuperar o acesso
Em "Recuperar acesso", na tela de login: informe a senha e o código enviado ao e-mail e comprove que controla a integração, de um dos dois jeitos abaixo. O pedido fica então em espera por 72 horas, com um link "Não fui eu" enviado ao e-mail; qualquer login normal com o autenticador o cancela. Concluída a espera, você cadastra um novo autenticador; a verificação em duas etapas nunca é desligada.
Sem reset pelo suporte
A equipe Lumen não desativa a verificação em duas etapas de ninguém. Sem chave de API ativa nem chave SSH cadastrada não há como comprovar a identidade, então cadastre a chave SSH já.
Comprovar com uma chave de API
Chame a produção com uma chave do app, de onde a integração a guarda, enviando o desafio
rec_… mostrado no portal. Só o cabeçalho
X-Partner é necessário. Se a conta tiver chaves
de produção, a comprovação exige uma chave lmn_live_….
curl -X POST https://lumenerp.app.br/api/v1/partner-portal/account-recovery \
-H "X-Partner: $LUMEN_API_KEY" \
-H "Content-Type: application/json" \
-d '{"challenge":"rec_…"}'
| Status | Mensagem |
|---|---|
200 |
API key confirmed. Go back to the Portal do Parceiro to follow your recovery request. |
401 |
Invalid or revoked API key. |
403 |
This key cannot be used: its app is suspended or not approved for production. |
422 |
Invalid or expired recovery challenge. (ou, com uma chave de teste numa conta com chaves de produção: This account has production keys: …) |
429 |
Too Many Attempts. (10 por minuto por IP) |
Comprovar com uma chave SSH
Assine o desafio com a chave privada correspondente a uma chave SSH cadastrada e cole a assinatura no portal:
printf '%s' 'rec_…' | ssh-keygen -Y sign -n lumen-partner-2fa-recovery -f ~/.ssh/id_ed25519
Erros de acesso
Além dos erros gerais da API, requisições feitas com chaves do portal podem receber:
| Status | Mensagem | O que fazer |
|---|---|---|
400 |
Missing required headers. | Envie X-Client e X-Authorization junto com a chave. |
401 |
Invalid or revoked API key. | A chave foi digitada errado, revogada ou expirou após uma rotação. Gere uma nova. |
401 |
Unauthorized. | X-Client e X-Authorization não correspondem. Em produção, confira se o token é da conexão com esse cliente e se não foi substituído. |
403 |
This app is still under review for production. … | O app está Em análise. Use uma chave de teste até a aprovação. |
403 |
This app is not approved for production. … | Chave lmn_live_ num app que não está em Produção. Peça a revisão no portal. |
403 |
This app is suspended. … | O app ou a conta foi suspenso. Fale com o suporte Lumen. |
403 |
"code": "SANDBOX_HOST" | Chave de teste enviada à produção. Aponte a integração para o sandbox (o endereço vem na mensagem). |
403 |
Production keys (lmn_live_) do not work in the sandbox. … | Chave de produção enviada ao sandbox. Use uma chave lmn_test_. |
429 |
Too Many Attempts. | Limite por minuto excedido. Aguarde o tempo indicado em Retry-After. |
Webhooks e logs
Webhooks
Cada app configura um endpoint de teste e um de produção, escolhe os eventos que quer receber (nenhum selecionado equivale a todos), envia eventos de teste e reenvia entregas. As entregas são assinadas no padrão Standard Webhooks.
Como validar a assinatura →Logs de requisições
A aba Logs lista toda chamada feita com as chaves do app nos últimos 30 dias: método, caminho, status, duração, ambiente e IP, com filtros por ambiente, resultado e caminho. Corpos de requisição e resposta não são guardados.