API Key
Para automações, SDKs e integrações server-to-server: o caso comum de software house.
Gerada no cadastro ou no Dashboard, nunca expira (até ser revogada).
JWT (Bearer Token)
Para o dashboard e sessões de usuário. Obtenha via
POST /v1/auth/login e use no header Authorization.Acesso antecipado (
POST /v1/auth/register) grava um pedido de acesso e responde
202 (não cria conta na hora). Nosso time revisa e, se liberar, você recebe um convite
por e-mail para criar a senha; a conta (partner + usuário dono + plano Dev, R$0) nasce
no aceite do convite. Ver Quickstart para o passo a passo.
POST /v1/auth/register-partner continua existindo para provisionamento manual por um
parceiro com papel SUPERADMIN.Método 1: JWT (Bearer Token)
Use quando seu backend/dashboard faz login com e-mail e senha.Obtendo o token
- cURL
- Node.js
- Python
Resposta (201)
Toda resposta de sucesso vem envelopada em
{ data, meta }: meta.requestId/meta.timestamp
são preenchidos automaticamente pelo interceptor global. Isso vale para todas as respostas
desta documentação, não só o login.Usando o token
Expiração e renovação
O login devolve
access_token e refresh_token. Quando o access token
expira, troque-o por um par novo:
refresh_token novo que veio na resposta: reapresentar o
antigo devolve 401.
Para encerrar a sessão:
Verificação em duas etapas (2FA)
Contas com acesso privilegiado (superadmin da plataforma e dono de parceiro,PartnerMember.role = OWNER) são obrigadas a usar um
aplicativo autenticador (TOTP, RFC 6238). Para as demais é opcional, ligável em
Configurações → Segurança.
Quando a conta tem 2FA ativo, o POST /v1/auth/login responde sem
access_token:
totpCode no corpo do POST /v1/auth/login).
Perdeu o celular? Envie um dos códigos de recuperação em
recoveryCode no
lugar de totpCode. Cada código funciona uma única vez, e o titular
(mais o dono da plataforma) recebe um e-mail avisando que um deles foi usado.
Bloqueio por tentativas de login
Tentativas falhas bloqueiam progressivamente, por e-mail e por IP: 5 falhas → 1 minuto, 10 → 15 minutos, 15 → 1 hora, 20 → 4 horas. Um balde sem falha nova por 1 hora zera sozinho, e um login bem-sucedido limpa o balde do e-mail. Enquanto o bloqueio vale, a senha certa também é recusada. A resposta é sempre a mesma (401 Credenciais inválidas) para senha errada, e-mail
inexistente, código 2FA errado e conta bloqueada: a API não confirma quais
e-mails existem.
Método 2: API Key
Use em automações de longa duração, SDKs ou integrações server-to-server sem sessão de login.Gerando uma API Key
- Acesse o Dashboard → app.engineapi.com.br
- Vá em Configurações → API Keys
- Gere a key de teste (
ek_test_), disponível sem assinatura paga, ou a key de produção (ek_live_), que exige uma subscription ACTIVE (403 sem plano pago) - Copie e guarde. Ela é exibida uma única vez
Usando a API Key
/v1/companies aceita x-api-key ou JWT (ApiKeyGuard, mesmo escopo de partner
nos dois casos); este exemplo funciona de ponta a ponta.- cURL
- Node.js / SDK
- Python
Multi-tenancy
Um único token (JWT) ou API Key gerencia múltiplos CNPJs emissores (Issuer) sob o mesmo Partner:
Seleção explícita de emissor: NF-e, NFC-e e NFS-e aceitam
issuerId (UUID) no
corpo da emissão para escolher qual CNPJ emite a nota.- NF-e / NFC-e:
issuerIdé opcional:- se você tem um único emissor, pode omitir: a API usa o seu emissor (retrocompatível);
- se você tem dois ou mais emissores, informe
issuerId; sem ele a API responde400(“informe issuerId: sua conta tem N emissores”) em vez de emitir pelo CNPJ errado; - um
issuerIdque não pertence ao partner autenticado responde404(isolamento entre tenants).
- NFS-e:
issuerIdé obrigatório no corpo da requisição.
issuerId (UUID) é retornado ao criar uma empresa via POST /v1/companies.