Webhooks
Los webhooks de Tu Pana te permiten recibir notificaciones en tiempo real cuando ocurren eventos importantes en tu sistema de facturación. Esta guía te ayudará a configurar y usar webhooks de forma efectiva.¿Qué son los webhooks?
Los webhooks son una forma de comunicación donde Tu Pana envía automáticamente una notificación HTTP POST a una URL que tú configures cuando ocurre un evento específico (por ejemplo, cuando se emite una factura). A diferencia de las APIs donde tú haces las consultas, con los webhooks Tu Pana te notifica cuando algo importante sucede, permitiéndote mantener tu sistema sincronizado en tiempo real.Cómo crear un webhook
Desde la interfaz web
- Ve a Configuración → Webhooks
- Haz clic en Nuevo Webhook
- Completa los siguientes campos:
- URL del Endpoint: La URL de tu servidor que recibirá las notificaciones (debe ser HTTPS)
- Eventos: Selecciona los eventos que quieres recibir
- Secret (opcional): Una clave secreta para verificar la autenticidad de las notificaciones
- Activo: Marca esta opción para activar el webhook
- Haz clic en Guardar
Ejemplo de configuración
Seguridad
Firma de webhooks
Para verificar que las notificaciones provienen realmente de Tu Pana, puedes configurar un secret al crear el webhook. Tu Pana firmará cada notificación usando HMAC SHA-256.Cómo verificar la firma
Node.js:Headers enviados
Cada notificación incluye los siguientes headers:Content-Type: application/jsonUser-Agent: Pana-Webhook/1.0X-Pana-Event-Id: ID único del evento (UUID)X-Pana-Event-Type: Tipo de evento (ej:document.issued)X-Pana-Timestamp: Timestamp ISO 8601 del eventoX-Pana-Delivery: ID único del intento de entrega (UUID)X-Pana-Signature: Firma HMAC SHA-256 (si configuraste un secret)
Eventos soportados
Eventos de documentos
document.issued: Se emitió un documento exitosamentedocument.issue_failed: Falló la emisión de un documentodocument.updated: Se actualizó un documento existentedocument.delivered: Se entregó un documento (PDF/XML enviado al cliente)document.rejected: El SII rechazó el documentodocument.paid: El documento fue pagado (conciliación bancaria)document.cancelled: El documento fue anulado o tiene nota de crédito
Eventos de documentos programados
scheduled_document.created: Se creó un documento programadoscheduled_document.updated: Se actualizó un documento programadoscheduled_document.run_started: Se inició la ejecución de un documento programadoscheduled_document.run_succeeded: La ejecución de un documento programado fue exitosascheduled_document.run_failed: La ejecución de un documento programado falló
Eventos operacionales
webhook.test: Evento de prueba para verificar que tu endpoint funciona correctamente
Payloads por Evento
Cada evento tiene una estructura de payload específica. Navega a cada evento para ver su payload completo:Navegación Rápida
Eventos de Documentos
document.issued
Se dispara cuando un documento se emite exitosamente. Incluye el PDF y XML del documento.pdf_file: URL del PDF del documento (solo en este evento)xml_file: URL del XML del documentodocument_issuer: Información completa del emisordocument_receiver: Información completa del receptordetails: Array con todas las líneas del documento
document.issue_failed
Se dispara cuando falla la emisión de un documento.folio, pdf_file y xml_file pueden ser null ya que el documento no se emitió exitosamente.
document.updated
Se dispara cuando se actualiza un documento existente.pdf_file puede ser null en este evento ya que solo se genera en la emisión inicial.
document.delivered
Se dispara cuando se entrega un documento (PDF/XML enviado al cliente).document.rejected
Se dispara cuando el SII rechaza un documento.document.paid
Se dispara cuando un documento es pagado (conciliación bancaria).document.cancelled
Se dispara cuando un documento es anulado o tiene una nota de crédito asociada.references puede contener información sobre la nota de crédito o anulación asociada.
Eventos de Documentos Programados
scheduled_document.created
Se dispara cuando se crea un documento programado.frequency: Frecuencia de ejecución (daily, weekly, monthly, etc.)status: Estado del documento programado (active, paused, etc.)next_execution: Fecha y hora de la próxima ejecución
scheduled_document.updated
Se dispara cuando se actualiza un documento programado.scheduled_document.run_started
Se dispara cuando se inicia la ejecución de un documento programado.scheduled_document.run_succeeded
Se dispara cuando la ejecución de un documento programado es exitosa.next_execution se actualiza con la próxima fecha de ejecución.
scheduled_document.run_failed
Se dispara cuando falla la ejecución de un documento programado.Eventos Operacionales
webhook.test
Evento de prueba para verificar que tu endpoint funciona correctamente.Estructura común del payload
Todos los payloads comparten esta estructura base:event: Tipo de evento que disparó el webhook (string)created_at: Timestamp ISO 8601 del evento (string)data: Objeto con los datos específicos del evento (varía según el tipo)
Campos comunes en eventos de documentos
id: ID único del documento en Tu Pana (integer)folio: Folio del documento (string o null)date_issued: Fecha de emisión en formato ISO (string)amount_with_iva: Monto total con IVA (float)is_sandbox: Indica si es un documento de prueba (boolean)dte_type: Tipo de documento tributario (objeto concodeydescription)sender: Información del emisor (objeto conid,name,tax_id,email)receiver: Información del receptor (objeto conid,name,tax_id,emailo null)document_total: Totales del documento (objeto connet_amount,iva_rate,iva_amount,total_amount)details: Array con las líneas del documentoxml_file: URL del XML del documento (string o null)pdf_file: URL del PDF del documento (string o null, solo endocument.issued)
Reintentos
Tu Pana reintenta automáticamente las entregas fallidas usando una estrategia exponencial:- Intento 1: Inmediato
- Intento 2: 1 minuto después
- Intento 3: 5 minutos después
- Intento 4: 15 minutos después
- Intento 5: 1 hora después
- Intento 6: 6 horas después
Idempotencia
Cada notificación tiene undelivery_id único (UUID). Si recibes el mismo delivery_id múltiples veces, es un reintento del mismo evento. Tu endpoint debe ser idempotente para evitar procesar el mismo evento varias veces.
Recomendaciones
- Responde con código
2xx(200-299) para indicar éxito - Responde rápidamente (idealmente < 2 segundos)
- Si tu endpoint tarda más, responde
202 Acceptedy procesa asíncronamente - No proceses la misma notificación dos veces (usa
delivery_idpara deduplicar)
Errores comunes
Error 4xx (Client Error)
Si tu endpoint responde con un código 4xx (400-499), Tu Pana asume que hay un problema con la configuración o el formato de la notificación. Estos errores se reintentan, pero si persisten, considera:- Verificar que la URL es correcta y accesible
- Verificar que tu endpoint acepta POST requests
- Verificar que tu endpoint acepta
Content-Type: application/json - Revisar los logs de tu servidor para ver el error específico
Error 5xx (Server Error)
Si tu endpoint responde con un código 5xx (500-599), Tu Pana asume que hay un problema temporal en tu servidor. Estos errores se reintentan automáticamente.Timeout
Si tu endpoint no responde en 120 segundos, Tu Pana considera la entrega como fallida y la reintenta.Monitoreo y Debug
Dashboard de métricas
En Configuración → Webhooks, puedes ver:- Total de entregas: Número total de notificaciones enviadas
- Tasa de éxito: Porcentaje de entregas exitosas
- Fallos: Número de entregas fallidas
- Reintentos: Número de reintentos necesarios
- Tiempo promedio de respuesta: Tiempo que tarda tu endpoint en responder
- Top 5 errores: Los errores más comunes
- Top 5 endpoints con fallos: URLs que más fallan
Historial de entregas
Puedes ver el historial completo de cada intento de entrega, incluyendo:- Status code recibido
- Tiempo de respuesta
- Mensaje de error (si falló)
- Payload completo enviado
Mejores prácticas
- Usa HTTPS: Tu endpoint debe usar HTTPS para seguridad
- Configura un secret: Siempre configura un secret y verifica la firma
- Sé idempotente: Usa
delivery_idpara evitar procesar el mismo evento dos veces - Responde rápido: Responde en menos de 2 segundos o usa
202 Accepted - Maneja errores: Responde con códigos HTTP apropiados
- Monitorea métricas: Revisa regularmente el dashboard de métricas
- Prueba primero: Usa el evento
webhook.testpara verificar tu endpoint
Ejemplo completo
Endpoint de ejemplo (Node.js + Express)
Soporte
Si tienes problemas con tus webhooks:- Revisa el Dashboard de Métricas en Configuración → Webhooks
- Revisa el Historial de Entregas para ver errores específicos
- Contacta a soporte con el
delivery_iddel intento fallido
