Los webhooks están en desarrollo. Este contrato es el que se publicará; todavía no se pueden configurar.
POST firmado a una URL HTTPS de tu organización. Así no tienes que consultar la API periódicamente.
Por ahora se notifican los documentos creados con la API de integración, y cada organización tiene un solo endpoint.
Eventos
Cuando firma el último participante recibes dos eventos independientes,
document.collaborator_signed y document.signed, cada uno con su propio id. No dependas del orden en que llegan.
Payload
Todos los eventos comparten la misma forma:data.document.status es el estado del documento justo después del hecho: PENDING_SIGNATURE, SIGNED, REJECTED o CANCELLED. El id del participante es el mismo que devuelve la API de integración.
data.document.id.
Se pueden agregar campos nuevos sin cambiar version, así que ignora los que no conozcas. Quitar o renombrar un campo exigiría una versión nueva.
Headers
Verifica la firma
Cada intento se firma con el secreto del endpoint:secretes el secreto completo, con su prefijowhsec_.timestampes el texto exacto deX-Signature-Timestamp.rawBodyson los bytes exactos del cuerpo recibido.
1
Lee el cuerpo crudo
Calcula la firma sobre los bytes recibidos, antes de parsear el JSON. Si lo parseas y lo vuelves a serializar, la firma no coincidirá.
2
Revisa el timestamp
Rechaza la entrega si faltan headers o si
X-Signature-Timestamp difiere de tu reloj en más de 5 minutos.3
Compara en tiempo constante
Calcula la firma esperada y compárala con
X-Signature-Hmac con una comparación de tiempo constante.Responde y procesa
- Responde con cualquier
2xxpara confirmar la entrega. El cuerpo de tu respuesta se ignora. - Responde en menos de 10 segundos. Si tu proceso tarda, guarda el evento, responde
200y procésalo después. - Las redirecciones no se siguen: un
3xxcuenta como fallo.
Reintentos
Si tu endpoint no responde2xx, no contesta en 10 segundos o no se puede conectar, Firmalo reintenta la entrega. Son 8 intentos en total, en algo más de 24 horas:
Cada reintento lleva un timestamp y una firma nuevos, pero el mismo
X-Signature-Webhook-Id y el mismo id de evento.
La entrega es al menos una vez: un mismo evento puede llegar más de una vez. Deduplica por id antes de actuar.
Secreto y rotación
- El secreto tiene el formato
whsec_…y se muestra una sola vez, al configurar el endpoint o al rotarlo. Guárdalo en el gestor de secretos de tu backend. - Al rotar, las entregas nuevas se firman con el secreto nuevo, pero las que ya estaban pendientes se siguen firmando con el anterior. Acepta los dos secretos durante 24 horas después de rotar.
Requisitos del endpoint
- URL
https://en el puerto 443, accesible desde internet. - No se aceptan direcciones privadas,
localhostni direcciones internas de nube.