Skip to main content
A engineAPI suporta dois métodos de autenticação. Como cada credencial chega até a chamada:

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

Resposta (201)
A resposta é 201 Created, não 200 OK (versões anteriores desta doc afirmavam 200). Trate qualquer resposta 2xx como sucesso, em vez de checar um código exato.
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:
A rotação é obrigatória: o refresh token usado morre na mesma chamada. Guarde sempre o refresh_token novo que veio na resposta: reapresentar o antigo devolve 401. Para encerrar a sessão:
O logout invalida o access token na hora: ele não continua valendo até expirar. Trocar a senha também derruba todas as sessões abertas.
Nunca exponha seu token no frontend, em logs ou em repositórios públicos. Use variáveis de ambiente.

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:
Conclua com o código de 6 dígitos do autenticador:
Clientes que preferem uma chamada só podem mandar o código junto no login (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

  1. Acesse o Dashboardapp.engineapi.com.br
  2. Vá em Configurações → API Keys
  3. 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)
  4. Copie e guarde. Ela é exibida uma única vez
Via API (sessão JWT do dashboard):

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.
A ek_test_ só opera emissores em homologação (ambienteFiscal=2) ou marcados como sandbox. Usá-la contra um emissor de produção retorna 403. Emissões com ek_test_ não são faturadas.

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 responde 400 (“informe issuerId: sua conta tem N emissores”) em vez de emitir pelo CNPJ errado;
    • um issuerId que não pertence ao partner autenticado responde 404 (isolamento entre tenants).
  • NFS-e: issuerId é obrigatório no corpo da requisição.
O issuerId (UUID) é retornado ao criar uma empresa via POST /v1/companies.