A partir de julho de 2026, a Emitare envia notificações webhook em tempo real para o endpoint do seu ERP sempre que uma NFS-e é emitida, cancelada ou falha. Sem polling. Sem complexidade. Você configura uma URL e começa a receber eventos imediatamente.
Elimine o loop de consulta (GET /nfse/:id a cada N segundos). Com webhooks, o seu sistema é notificado em menos de 1 segundo após qualquer alteração no status da NFS-e.
Eventos disponíveis
nfse.emitida
nfse.cancelada
nfse.falha
lote.concluido
POST /nfse/lote termina o processamento (sucesso ou com erros parciais).
Payload de exemplo
// POST https://seu-erp.com/webhooks/nfse
// Headers:
// Content-Type: application/json
// X-Emitare-Signature: sha256=abc123...
// X-Emitare-Event: nfse.emitida
{
"event": "nfse.emitida",
"timestamp": "2026-07-08T14:32:00.000Z",
"tenantId": "tenant_abc123",
"data": {
"nfseId": "nfse_xyz789",
"nfseNumero": "000000042",
"chaveAcesso": "35470000012345678901234...",
"codigoVerificacao": "ABCD-1234",
"dataEmissao": "2026-07-08T14:31:58.000Z",
"valorServicos": 5000.00,
"valorIss": 250.00,
"companyId": "comp_123",
"municipioIbge": "3547809",
"municipioNome": "Santo André"
}
}
Segurança: verificando a assinatura HMAC
Cada requisição webhook inclui o header X-Emitare-Signature com uma assinatura HMAC-SHA256. Sempre valide a assinatura antes de processar o evento — isso garante que a requisição veio da Emitare e não foi adulterada.
// Node.js — verificar assinatura HMAC
const crypto = require('crypto');
function verificarAssinatura(payload, signature, secret) {
const expected = 'sha256=' + crypto
.createHmac('sha256', secret)
.update(payload)
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(expected)
);
}
// No handler do webhook:
app.post('/webhooks/nfse', (req, res) => {
const sig = req.headers['x-emitare-signature'];
const raw = req.rawBody; // body bruto, antes do JSON.parse
if (!verificarAssinatura(raw, sig, process.env.EMITARE_WEBHOOK_SECRET)) {
return res.status(401).send('Signature invalid');
}
const event = req.body;
// processar event.event, event.data...
res.status(200).send('ok');
});
Como configurar
Via Dashboard
- Acesse emitare.com.br/app e vá em Configurações → Webhooks
- Clique em Adicionar endpoint
- Informe a URL do seu ERP (ex:
https://meu-erp.com/webhooks/nfse) - Selecione os eventos que deseja receber
- Copie o Webhook Secret gerado e configure na variável de ambiente do seu servidor
Via API
// POST /api/v1/webhooks
// Header: x-api-key: sua-chave
{
"url": "https://meu-erp.com/webhooks/nfse",
"events": ["nfse.emitida", "nfse.cancelada", "nfse.falha"],
"ativo": true
}
Política de tentativas (retry)
| Tentativa | Delay | Condição |
|---|---|---|
| 1ª (imediata) | — | Sempre |
| 2ª | 1 minuto | Se 1ª falhou (timeout ou status ≥ 400) |
| 3ª | 5 minutos | Se 2ª falhou |
| 4ª | 30 minutos | Se 3ª falhou |
| Descartado | — | Após 4ª falha |
Retorne HTTP 200 assim que receber o evento, mesmo que o processamento seja assíncrono. Se o seu servidor demorar mais de 10 segundos para responder, a Emitare considera a entrega como falha e tenta novamente.