Webhooks: receba os eventos do sistema
Faça o SG Fênix avisar outro sistema na hora em que um pedido, nota ou baixa acontece, com assinatura de segurança e novas tentativas automáticas.
3 min de leitura · Avançado · atualizado em 06/10/2026
Em vez de perguntar ao sistema "mudou alguma coisa?" a cada minuto, você cadastra um endereço e o SG Fênix avisa quando algo acontece: um pedido criado ou aprovado, uma NF-e autorizada, uma baixa registrada. Isso é um webhook. Configure em Configurações › Integrações › Webhooks.
Criar um webhook
1Informe o destino
Dê um Nome e a URL que vai receber os avisos. Só endereços https públicos são aceitos (por segurança, endereços locais ou da rede interna são recusados). ::
2Escolha os eventos
Marque Todos os eventos ou apenas os que interessam, como pedido.criado, pedido.status_alterado, nota.autorizada, titulo.criado, baixa.registrada, estoque.movimento, cliente.criado, devolucao_venda.confirmada e outros.
::
3Guarde o segredo
Ao criar, aparece o segredo de assinatura (começa com whsec_). Ele é mostrado uma única vez; se perder, use Novo segredo (o antigo deixa de valer).
::
4Teste
Clique em Testar: o sistema envia um evento webhook.teste na hora e mostra o resultado em Entregas.
::
O que chega
Cada evento é um POST com JSON:
{
"id": "UUID da entrega",
"evento": "pedido.criado",
"criado_em": "2026-10-05T10:15:00-03:00",
"dados": { "id": "...", "numero": 161, "status": "rascunho", "total": 1250.0 }
}
Os cabeçalhos trazem X-SGFenix-Evento, X-SGFenix-Entrega, X-SGFenix-Timestamp e X-SGFenix-Assinatura.
Conferindo a assinatura
Para ter certeza de que o aviso veio mesmo do SG Fênix, calcule o HMAC-SHA256 de timestamp + "." + corpo com o seu segredo e compare com X-SGFenix-Assinatura (formato sha256=...). Recuse avisos com timestamp com mais de 5 minutos.
$assinatura = 'sha256=' . hash_hmac('sha256', $timestamp . '.' . $corpoBruto, $segredo);
$ok = hash_equals($assinatura, $cabecalhoAssinatura) && abs(time() - (int) $timestamp) <= 300;
Confira a assinatura sobre o corpo bruto recebido, antes de converter o JSON. Qualquer mudança de espaço ou ordem quebra a assinatura.
Se o seu sistema estiver fora do ar
Responda com qualquer status 2xx em até 10 segundos para confirmar. Se não responder, o sistema tenta de novo depois de 1 min, 5 min, 30 min, 2 h e 6 h. Depois de 20 falhas seguidas o webhook é pausado; corrija o problema e use Reativar.
Em Entregas aparecem as últimas 30 tentativas com o código HTTP e o início da resposta do seu sistema; as que falharam têm o botão Reenviar.
A mesma entrega pode chegar mais de uma vez (por exemplo, se a sua resposta demorou). Use o campo id para ignorar repetições.
Quer avaliar este guia ou usar o sistema? Entre ou cadastre-se.
