Pular para o conteúdo principal

Webhooks

Receba notificações automáticas quando eventos acontecem.

Configurando

curl -X POST https://api.engineapi.com.br/webhooks \
-H "Authorization: Bearer SEU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"url": "https://seusite.com/webhooks/engine",
"events": ["invoice.authorized", "invoice.rejected"]
}'

Eventos

EventoQuando dispara
invoice.authorizedNota autorizada pela SEFAZ
invoice.rejectedNota rejeitada
invoice.canceledNota cancelada
mdfe.authorizedMDFe autorizado
mdfe.closedMDFe encerrado
nfse.authorizedNFSe autorizada
certificate.expiring_soonCertificado vence em 30 dias
certificate.expiredCertificado expirou

Payload

{
"event": "invoice.authorized",
"timestamp": "2026-02-08T23:00:00.000Z",
"data": {
"id": "uuid-da-nota",
"accessKey": "3526021122233300014455001...",
"status": "AUTHORIZED",
"type": "NFE"
}
}

Recebendo webhooks

import express from 'express';
const app = express();
app.use(express.json());

app.post('/webhooks/engine', (req, res) => {
const { event, data } = req.body;

switch (event) {
case 'invoice.authorized':
console.log(`✅ NFe ${data.accessKey} autorizada`);
// Atualizar seu banco de dados
break;
case 'invoice.rejected':
console.log(`❌ NFe rejeitada: ${data.id}`);
// Notificar usuário
break;
case 'certificate.expiring_soon':
console.log(`⚠️ Certificado ${data.id} vencendo`);
// Enviar email de alerta
break;
}

res.status(200).json({ received: true });
});

app.listen(3000, () => console.log('Webhook receiver running'));
Boas práticas
  • Responda com HTTP 200 em até 5 segundos
  • Use o id para evitar duplicatas (idempotência)
  • Retentativas automáticas: 1 min, 5 min, 30 min, 2h, 24h