Casos de uso comunes
- Enviar notificaciones internas cuando se firman documentos
- Actualizar tu base de datos cuando se completan solicitudes de firma
- Activar flujos de trabajo posteriores (facturación, aprovisionamiento, etc.)
- Rastrear cambios de estado de las solicitudes de firma en tiempo real
Tipos de eventos
Firma envía los siguientes tipos de eventos:Eventos de solicitud de firma
signing_request.created- Nueva solicitud de firma creadasigning_request.sent- Solicitud de firma enviada a los destinatariossigning_request.viewed- El destinatario visualizó el documentosigning_request.completed- Todos los destinatarios terminaron de firmarsigning_request.expired- La solicitud de firma expirósigning_request.cancelled- La solicitud de firma fue canceladasigning_request.updated- Metadatos de la solicitud de firma actualizadossigning_request.certificate.generated- Certificado de firma generadosigning_request.reminder.sent- Recordatorio enviado a los destinatariossigning_request.field.filled- Un destinatario completó un camposigning_request.document.updated- El documento fue actualizado
Eventos de destinatario
signing_request.recipient.added- Destinatario agregado a la solicitud de firmasigning_request.recipient.signed- El destinatario completó la firmasigning_request.recipient.declined- El destinatario rechazó firmarsigning_request.recipient.updated- Datos del destinatario actualizadossigning_request.recipient.identity_changed- El destinatario cambió su identidad (nombre, empresa, etc.) durante la firma
Eventos de plantilla
template.created- Nueva plantilla creadatemplate.updated- Plantilla modificadatemplate.deleted- Plantilla eliminadatemplate.field.added- Campo agregado a la plantillatemplate.used- Plantilla usada para crear una solicitud de firma
Eventos de espacio de trabajo
workspace.created- Nuevo espacio de trabajo creadoworkspace.updated- Espacio de trabajo modificadoworkspace.deleted- Espacio de trabajo eliminado
Eventos de dominio
domain.verified- Dominio verificado correctamentedomain.verification.failed- Falló la verificación del dominio
Crear un webhook
Crea webhooks a través de la API o del panel:Tu URL de webhook debe usar HTTPS y responder en un plazo de 5 segundos. Firma enviará un evento de prueba durante la creación para verificar el endpoint.
Estructura del payload del webhook
Todos los eventos de webhook siguen esta estructura estándar:Seguridad: Verificación de firma (Obligatorio)
Firma firma todas las solicitudes de webhook usando HMAC SHA-256. Tu endpoint de webhook recibe estos headers:X-Firma-Signature- Firma HMAC usando el secret de firma actualX-Firma-Signature-Old- Firma HMAC usando el secret anterior (durante el período de gracia de rotación de 24 horas)X-Firma-Event- Tipo de evento (por ejemplo,signing_request.completed)X-Firma-Delivery- ID único del intento de entrega
Formato de la firma
Firma usa un header de firma con marca de tiempo:- Header:
X-Firma-Signature: t=1707500000,v1=abc123def456... t= Marca de tiempo Unix (segundos) cuando se generó la firmav1= Digest hexadecimal HMAC-SHA256- Formato del payload firmado:
{timestamp}.{json_body}
Obtén tu secret de firma
- Ve a tu panel de Firma
- Consulta los detalles del webhook para obtener el secret de firma
- Almacena el secret de forma segura (variable de entorno o gestor de secretos)
Ejemplo de verificación — Node.js (Express)
Ejemplo de verificación — Python (Flask)
Manejo de rotación de secrets
Cuando rotas tu secret de firma de webhooks:- Firma genera un nuevo secret
- Durante 24 horas, Firma envía ambas firmas:
X-Firma-Signature(secret nuevo)X-Firma-Signature-Old(secret anterior)
- Después de 24 horas, solo se envía
X-Firma-Signature
X-Firma-Signature. Si la verificación falla y X-Firma-Signature-Old existe, verifica contra el secret anterior.
Comportamiento de reintentos
Firma reintenta automáticamente las entregas de webhooks fallidas:- Programa de reintentos: 1 minuto, 5 minutos, 30 minutos, 2 horas, 6 horas
- Total de intentos: Hasta 5 reintentos por evento
- Tiempo de espera: Tu endpoint debe responder en un plazo de 5 segundos
- Éxito: Cualquier código de estado 2xx indica éxito
- Desactivación automática: Después de 50 fallos consecutivos, el webhook se desactiva automáticamente
Idempotencia
Siempre maneja eventos duplicados usando elid del evento:
Monitorear la salud del webhook
Monitorea la salud de tu webhook consultando los detalles del webhook:consecutive_failures- Número de entregas fallidas consecutivaslast_failure_at- Marca de tiempo del fallo más recienteenabled- Si el webhook está activo (se desactiva automáticamente después de 50 fallos)last_success_at- Marca de tiempo de la entrega exitosa más reciente
Límite de tasa: Las solicitudes GET de webhook admiten 60 solicitudes por minuto por clave API.
Solución de problemas
Problemas comunes
401 Unauthorized / Firma inválida- Verifica que estás usando el secret de firma correcto
- Comprueba que estás hasheando el cuerpo de la solicitud sin procesar (no el JSON parseado)
- Asegúrate de estar usando HMAC SHA-256 y no otro algoritmo de hash
- Responde con 200 inmediatamente y procesa de forma asíncrona
- Comprueba que tu endpoint responde en un plazo de 5 segundos
- Usa tareas en segundo plano/colas para el procesamiento pesado
- Implementa idempotencia usando el
iddel evento - Almacena los IDs de eventos procesados en tu base de datos
- Revisa
consecutive_failuresy los registros de eventos recientes - Corrige los problemas del endpoint y luego vuelve a activar el webhook mediante la API o el panel
Probar webhooks localmente
Usa un servicio de túnel como ngrok para el desarrollo local:Lista de verificación para producción
- Verificar las firmas HMAC en todas las solicitudes de webhook
- Manejar la rotación de firmas (comprobar tanto
X-Firma-SignaturecomoX-Firma-Signature-Old) - Responder con 200 en un plazo de 5 segundos
- Procesar eventos de forma asíncrona (colas/tareas en segundo plano)
- Implementar idempotencia usando el
iddel evento - Almacenar el secret de firma de forma segura (variable de entorno o gestor de secretos)
- Monitorear la métrica
consecutive_failuresmediante el endpoint GET de webhook - Configurar alertas para fallos de webhooks
- Registrar todos los eventos de webhook para depuración
- Probar con todos los tipos de eventos suscritos
- Mantente dentro de los límites de tasa (Consulta la Guía de Límites de Tasa)
Próximos pasos
- Crea un webhook mediante la API
- Prueba tu webhook antes de ponerlo en marcha
- Actualiza la configuración del webhook según sea necesario