Skip to main content
Para deploys após o primeiro registro do mesmo e-mail, você pode pular o navegador e usar a ativação automática por e-mail — uma única chamada de API. O fluxo abaixo continua sendo necessário no primeiro registro de um e-mail.

Visão geral do fluxo

Diagrama do fluxo de ativação manual: instância chama register/init, exibe URL, operador autentica no navegador, instância faz polling, recebe api_key, ativa via HMAC e segue com heartbeats. A URL base do servidor é definida na variável LICENSE_BASE_URL do .env do produto (padrão: https://license.evolutionfoundation.com.br).

Passo 1 — Iniciar registro

Quando a instância detecta que não há api_key salva localmente, ela chama:
Campos: Resposta (200):
O token expira em 30 minutos. Há rate limit de 10 inits por hora por IP. Se o operador não concluir a ativação no prazo, basta repetir o passo 1.
Erros possíveis:

Passo 2 — Exibir a URL ao operador

A instância exibe o register_url ao operador. Padrões aceitos:
  • Web UI / Manager — botão “Ativar Licença” abre o link no navegador
  • Terminal / CLI — imprime a URL e fica aguardando
  • QR Code — em deployments headless, gera um QR para escanear
Exemplo de output em CLI:

Passo 3 — O que acontece no navegador

O servidor de licença renderiza a página de registro com a identidade visual da Evolution. O operador escolhe entre:
  • Magic Link — informa nome e e-mail, recebe link de confirmação por e-mail
  • Google OAuth — login com conta Google
  • GitHub OAuth — login com conta GitHub
Após autenticar, o servidor cria (ou recupera) o customer e gera um authorization_code interno. Esse fluxo é transparente para a instância — ela só precisa fazer polling.

Passo 4 — Polling do status

Enquanto o operador resolve o login, a instância faz polling:
Resposta enquanto pendente:
Resposta quando concluído:
Resposta após expiração:
Recomendações de implementação:
  • Intervalo de polling entre 3 e 5 segundos (não mais rápido)
  • Timeout total de 30 minutos
  • Quando receber completed, persistir api_key em local seguro (config criptografada, secret manager, etc.)

Passo 5 — Ativar a instância

Com a api_key em mãos, a instância chama o endpoint de ativação:
Resposta:
A geolocalização (operator_country, operator_city) é detectada automaticamente pelo IP da request. A instância não precisa enviar essa informação.

Passo 6 — Heartbeat periódico

Após ativação, a instância envia heartbeats a cada 5 minutos:
O campo telemetry_bundle é JSON livre. Os campos extraídos automaticamente pelo servidor são detalhados em Telemetria.

Passo 7 — Desativação (opcional)

Em shutdown gracioso (uninstall, container stop intencional), recomenda-se:
Isso libera a contagem da instância no licenciamento. Não é obrigatório — o servidor expira instâncias inativas automaticamente após 7 dias sem heartbeat.

Autenticação HMAC

Todas as chamadas para /v1/activate, /v1/heartbeat e /v1/deactivate exigem o header X-Signature com HMAC-SHA256 do body. Algoritmo:
  1. Serializar o body em JSON
  2. Calcular HMAC-SHA256(body, api_key)
  3. Converter para hexadecimal
  4. Enviar no header X-Signature
O body usado no HMAC deve ser byte-a-byte idêntico ao enviado. Não reformate o JSON entre o cálculo da assinatura e o envio.

Exemplo Python

Exemplo Node.js

Exemplo Go


Códigos de erro


Checklist de integração

Para quem está implementando a ativação em um fork ou produto derivado:
  • Gerar e persistir instance_id (UUID v4) na primeira execução
  • Implementar POST /v1/register/init quando não houver api_key
  • Exibir register_url ao operador (UI, terminal ou QR)
  • Polling GET /v1/register/status a cada 3–5s
  • Persistir api_key em local seguro (não em texto plano)
  • Implementar cálculo HMAC-SHA256 para todas as chamadas assinadas
  • POST /v1/activate na inicialização do serviço
  • POST /v1/heartbeat a cada 5min com messages_sent + features
  • POST /v1/deactivate em shutdown gracioso
  • Tratar erros (token expirado, key suspensa, limite de instâncias)
  • Backoff exponencial em falhas transitórias de rede

Modo offline e degradação

Se o servidor de licença estiver inacessível:
  • A instância continua funcionando normalmente
  • Heartbeats falham silenciosamente (sem quebrar a aplicação)
  • Após reconexão, o próximo heartbeat retoma o ciclo
A ativação inicial (passo 1–5) é a única etapa que exige conectividade. Depois disso, a instância tolera períodos offline. Veja FAQ — modo offline para mais detalhes.