Los webhooks son la forma más eficiente de mantener tu aplicación sincronizada con los eventos de facturación en gigstack. En lugar de hacer polling constante preguntando "¿hay facturas nuevas?", gigstack te notifica cuando algo sucede: factura creada, pago recibido, cancelación completada.
Esta guía técnica te explica cómo configurar webhooks, qué eventos están disponibles y cómo procesarlos en tu aplicación.
Un webhook es una llamada HTTP POST que gigstack hace a tu servidor cuando ocurre un evento. Tú defines una URL en tu aplicación (endpoint), y cada vez que se crea una factura, se cancela, o sucede cualquier evento relevante, gigstack envía los datos a ese endpoint.
Ventajas sobre polling:
En app.gigstack.pro, ve a Configuración > Webhooks. Agrega un nuevo webhook con:
POST a /webhooks:
{
"url": "https://tuapp.com/webhooks/gigstack",
"events": [
"invoice.created",
"invoice.cancelled",
"payment.received"
]
}
Cada webhook envía un JSON con esta estructura:
{
"id": "evt_abc123xyz",
"event": "invoice.created",
"timestamp": "2026-01-15T14:30:00Z",
"data": {
"id": "inv_123",
"uuid": "A1B2C3D4-E5F6-7890-ABCD-EF1234567890",
"total": 11600,
"subtotal": 10000,
"taxes": 1600,
"currency": "MXN",
"status": "active",
"client": {
"id": "cli_456",
"legal_name": "Empresa Cliente SA",
"rfc": "ECL920318XXX"
},
"items": [
{
"description": "Servicio mensual",
"quantity": 1,
"unit_price": 10000,
"total": 11600
}
],
"pdf_url": "https://api.gigstack.io/invoices/inv_123/pdf",
"xml_url": "https://api.gigstack.io/invoices/inv_123/xml"
}
}
Para asegurar que el webhook viene de gigstack y no de un atacante, valida la firma:
Cada request incluye el header: X-Gigstack-Signature
Ejemplo en Node.js:
const crypto = require('crypto');
function validateWebhook(body, signature, secret) {
const hash = crypto
.createHmac('sha256', secret)
.update(body)
.digest('hex');
return hash === signature;
}
Tu endpoint debe responder con 200 en menos de 30 segundos. Procesa el webhook de forma asíncrona si tu lógica toma tiempo.
Puedes recibir el mismo webhook más de una vez (reintentos por timeout). Usa el campo id del evento para detectar duplicados.
Guarda el webhook raw en tu base de datos antes de procesarlo. Si algo falla, tienes el dato para reprocesar.
Si tu procesamiento falla, retorna 500 para que gigstack reintente. Solo retorna 200 si procesaste correctamente.
Tu endpoint debe usar HTTPS. gigstack no envía webhooks a URLs HTTP sin cifrar.
Si tu endpoint no responde 200, gigstack reintenta:
Después de 5 intentos fallidos, el webhook se marca como fallido. Puedes ver webhooks fallidos en el panel y reenviarlos manualmente.
Cuando recibes invoice.created, actualiza el registro del cliente en tu CRM indicando que ya tiene su factura.
En invoice.cancellation_pending, envía notificación a tu equipo de que hay una cancelación esperando aprobación del cliente.
Con complement.created, registra el complemento de pago en tu sistema contable para conciliación.
En client.validation_failed, notifica al cliente que sus datos fiscales no son válidos y necesita actualizarlos.
Usa tu API key de staging para generar eventos de prueba sin afectar producción.
Durante desarrollo, usa herramientas como ngrok para exponer tu localhost y recibir webhooks en tu máquina local.
En el panel de gigstack puedes reenviar cualquier webhook histórico para testing.
En el panel de gigstack ves:
Los webhooks transforman tu integración de reactiva a proactiva. En lugar de preguntar constantemente por cambios, tu aplicación es notificada en tiempo real.
Consulta la documentación completa en docs.gigstack.io y empieza a recibir eventos de facturación en tu aplicación.