POST /v1/webhooks; la respuesta devuelve un signingSecret una sola vez —
guárdalo ahora.
Events
Event catalog
Suscríbete a uno o más eventos por webhook (el array
events en la creación).
Subscribing to events
Pasa un arrayevents al registrar un webhook para elegir exactamente qué eventos recibe. El campo
type de cada entrega indica qué evento se disparó, así un mismo endpoint maneja todo el ciclo.
PATCH /v1/webhooks/{id} y un nuevo array events.
Event envelope
El cuerpo de cada POST de webhook es un sobre JSON.id es estable entre reentregas — deduplica
por él. data lleva el objeto de negocio del evento — para los eventos scribe_session.*, una
instantánea de la sesión:
data para los eventos scribe_session.*:
Se envía la misma forma de
data para cada evento scribe_session.*; status refleja el estado
real de la sesión y completedAt es null cuando la sesión no se completó.
Verifying the signature
Cada solicitud lleva un encabezadoX-Scribe-Api-Signature (estilo Stripe):
t es la marca de tiempo Unix en que se firmó la solicitud; v1 es el HMAC-SHA256 en hexadecimal
de "{t}." + raw_request_body, con clave tu secreto de firma. Verifica sobre el cuerpo crudo
de la solicitud antes de parsearlo — reserializar el JSON puede cambiar los bytes y romper la
comparación. Usa una comparación de tiempo constante y rechaza marcas de tiempo fuera de una
ventana de 5 minutos para mitigar ataques de repetición.
X-Scribe-Api-Event-Id (igual al id del sobre) para registro rápido.
Retry & delivery
- Devuelve un
2xxrápidamente para confirmar. Haz el trabajo lento de forma asíncrona. - Un
5xx, error de red o timeout se reintenta con backoff exponencial (≈2s hasta ≈2min entre intentos) por hasta 6 intentos a lo largo de ~15 minutos. - Cualquier
4xx(incluidos408y429) se trata como permanente — la entrega no se reintenta. - Los reintentos reutilizan el mismo
iddel sobre, así que deduplica por él para ser idempotente.
Rotating the signing secret
Llama aPOST /v1/webhooks/{id}/rotate-secret para generar un nuevo secreto. La respuesta devuelve
el nuevo signingSecret una sola vez e incrementa signingSecretVersion. El secreto anterior deja
de verificar de inmediato, así que despliega el nuevo valor en tu endpoint antes de rotar.