De transfer.created à saml.login_failed, chaque mouvement est observable. HMAC-SHA256 avec timestamp anti-replay, retry exponentiel sur 72 h, dead letter automatique et replay manuel depuis le dashboard.
Pollez GET /v1/webhooks/events pour récupérer la liste à jour, avec schémas JSON et exemples.
transfer.createdtransfer.downloadedsignaltransfer.expiredtransfer.deletedtransfer.clonedtransfer.scan_cleansignaltransfer.scan_infectedtransfer.scan_quarantinedtransfer.limit_reachedtransfer.password_failedtransfer.geo_blockedtransfer.preview_openedbetatransfer.email_senttransfer.e2e_createdsignalworkspace.createdworkspace.plan_changedworkspace.payment_succeededworkspace.payment_failedworkspace.usage_limit_warningworkspace.usage_limit_reachedapi_key.createdapi_key.revokedapi_key.rotatedapi_key.expiredapi_key.suspicious_usagebetawebhook.delivery_failed_finalwebhook.endpoint_disabledscim.user_provisionedscim.user_deprovisionedsaml.login_succeededsaml.login_failedSi vous avez déjà vérifié une signature Stripe, vous savez vérifier une signature Coffrify.
// Header reçu sur votre endpoint
X-Coffrify-Signature: t=1709558400,v1=abc123def456...
// Vérification
const signed = `${timestamp}.${rawBody}`
const expected = hmac('sha256', WEBHOOK_SECRET).update(signed).digest('hex')
const valid = timingSafeEqual(received_v1, expected)
&& (Date.now() / 1000) - timestamp < 300 // anti-replay 5 minRetry exponentiel avec jitter, dead letter automatique au-delà, replay manuel depuis le dashboard.