Visão geral do fluxo

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:
Resposta (200):
Passo 2 — Exibir a URL ao operador
A instância exibe oregister_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
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
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:- Intervalo de polling entre 3 e 5 segundos (não mais rápido)
- Timeout total de 30 minutos
- Quando receber
completed, persistirapi_keyem local seguro (config criptografada, secret manager, etc.)
Passo 5 — Ativar a instância
Com aapi_key em mãos, a instância chama o endpoint de ativação:
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: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: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:
- Serializar o body em JSON
- Calcular
HMAC-SHA256(body, api_key) - Converter para hexadecimal
- Enviar no header
X-Signature
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/initquando não houverapi_key - Exibir
register_urlao operador (UI, terminal ou QR) - Polling
GET /v1/register/statusa cada 3–5s - Persistir
api_keyem local seguro (não em texto plano) - Implementar cálculo HMAC-SHA256 para todas as chamadas assinadas
-
POST /v1/activatena inicialização do serviço -
POST /v1/heartbeata cada 5min commessages_sent+features -
POST /v1/deactivateem 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