Les webhooks Coffrify permettent à votre infrastructure de recevoir des notifications HTTP en temps réel dès qu'un événement survient dans votre espace de travail (transfert téléchargé, membre invité, quota atteint, etc.). Chaque livraison est signée par HMAC-SHA256 avec un secret unique de format whsec_<hex> et suit la spécification Standard Webhooks, ce qui permet de vérifier l'authenticité de chaque requête côté receveur. L'API distingue les environnements : un webhook créé avec une clé cof_test_… ne reçoit que des événements de test ; une clé cof_live_… reçoit les événements de production. Les webhooks de sandbox (cof_sandbox_…) sont strictement isolés des deux autres environnements.
Endpoints disponibles
GET/v1/webhooksListe tous les webhooks de l'espace de travail courant, triés du plus récent au plus ancien.POST/v1/webhooksCrée un nouveau webhook. Retourne le webhook créé avec le champ `secret` (valeur visible une seule fois).PATCH/v1/webhooks/{id}Met à jour les propriétés d'un webhook existant (nom, URL, événements, statut actif, politique de relance).DELETE/v1/webhooks/{id}Supprime définitivement un webhook et arrête toute livraison future.POST/v1/webhooks/{id}/testEnvoie une livraison de test signée (type `ping` par défaut) vers l'URL du webhook et retourne le statut HTTP, la durée et un aperçu du corps de réponse.POST/v1/webhooks/{id}/simulateSimule n'importe quel type d'événement du catalogue avec un payload personnalisé, sans créer de livraison réelle.POST/v1/webhooks/{id}/rotate-secretGénère un nouveau secret de signature avec une fenêtre de grâce (1–168 heures, 24 h par défaut) pendant laquelle l'ancien secret reste valide.GET/v1/webhooks/{id}/secret-statusRetourne l'état de rotation du secret (préfixe masqué, date de dernière rotation, fenêtre de grâce active) sans jamais exposer la valeur complète.GET/v1/webhooks/{id}/deliveriesListe l'historique des tentatives de livraison avec pagination (paramètres `limit` max 100 et `offset`).POST/v1/webhooks/deliveries/{id}/retryForce la relance d'une livraison en état `failed` ou `abandoned` en réinitialisant son compteur de tentatives.POST/v1/webhooks/deliveries/{id}/replayRenvoie immédiatement une livraison passée (succès ou échec) en préservant l'`event_id` d'origine pour la déduplication.GET/v1/webhooks/healthRetourne le taux de succès, les percentiles de latence (p50/p95/p99) et l'état de santé (`healthy` / `degraded` / `critical`) de chaque webhook sur une fenêtre glissante (paramètre `hours`, 1–168, défaut 24).Authentification
Toutes les opérations de lecture (liste, livraisons, santé) requièrent le scope webhooks:read. Les opérations d'écriture (création, modification, suppression, test, simulation, rotation du secret, relance) requièrent le scope webhooks:manage. Passez votre clé API dans l'en-tête Authorization: Bearer <cof_live_…>. En environnement de développement, utilisez une clé cof_test_… pour isoler vos webhooks de test.
Créer un webhook
Corps de la requête (POST /v1/webhooks)
| Champ | Type | Requis | Description |
|---|---|---|---|
name | string | Oui | Nom lisible du webhook (affiché dans le tableau de bord). |
url | string | Oui | URL HTTPS de votre receveur. Doit être une URL valide. |
events | string[] | Non | Tableau de types d'événements (voir catalogue). Par défaut ["transfer.downloaded"]. Au moins 1 type valide requis. |
description | string | Non | Description libre, stockée mais non utilisée par le moteur de livraison. |
L'API impose une limite de 25 webhooks par espace de travail. Au-delà, la création retourne une erreur 409 validation_error. Le secret de signature (format whsec_<64 caractères hex>) est généré automatiquement et retourné une seule fois dans la réponse de création : stockez-le immédiatement dans vos variables d'environnement.
Réponse de création (201)
Vérifier la signature côté receveur
Coffrify signe chaque livraison selon deux mécanismes complémentaires. Le premier suit la spécification Standard Webhooks : l'en-tête webhook-signature contient v1,<base64> calculé sur la chaîne <webhook-id>.<webhook-timestamp>.<corps JSON>. Le second est le format natif Coffrify : l'en-tête X-Coffrify-Signature contient t=<timestamp>,v1=<hex> calculé sur <timestamp>.<corps JSON>. Dans les deux cas, la clé HMAC est obtenue en décodant la partie hexadécimale après le préfixe whsec_.
Tester et simuler un webhook
L'endpoint /test envoie un événement ping (ou le type choisi) signé vers votre URL et retourne le statut HTTP, la durée en millisecondes et un aperçu des 500 premiers caractères du corps de réponse. L'endpoint /simulate va plus loin : vous choisissez n'importe quel type du catalogue et injectez un payload arbitraire pour valider le comportement de votre receveur sur des cas précis (par exemple transfer.scan_infected avec un country_code spécifique). Dans les deux cas, l'en-tête X-Coffrify-Test-Delivery: true est ajouté pour que votre receveur puisse distinguer les appels de test des livraisons réelles.
Catalogue des types d'événements
Le catalogue contient 74 types d'événements stables répartis en familles : transfer (17), workspace (9), member (6), api_key (5), api_token (3), webhook (2), scim (2), saml (2), audit (2), gdpr (2), collection (4), coffre (5), request (4), domain (3), billing (3), session (2), rule (2), system (1 : ping). Certains types requièrent un plan spécifique (ex. transfer.scan_infected requiert pro, transfer.geo_blocked requiert ultra, workspace.sso_configured requiert entreprise). Consultez le catalogue complet via GET /v1/webhooks/event-catalog ou GET /v1/webhooks/events/by-family.
Mettre à jour un webhook
Corps de la requête (PATCH /v1/webhooks/{id})
| Champ | Type | Description |
|---|---|---|
name | string | Nouveau nom du webhook. |
description | string | null | Description libre ou null pour effacer. |
url | string | Nouvelle URL HTTPS du receveur (validée à la mise à jour). |
events | string[] | Nouveau tableau de types d'événements. Doit contenir au moins 1 type valide. |
is_active | boolean | Activez (true) ou désactivez (false) le webhook sans le supprimer. |
retry_policy.max_attempts | integer (1–10) | Nombre maximal de tentatives de livraison. |
retry_policy.disable_after_consecutive_failures | integer (1–10000) | Nombre d'échecs consécutifs avant la désactivation automatique du webhook. |
Rotation du secret de signature
Pour faire pivoter le secret sans interrompre les livraisons en cours, appelez POST /v1/webhooks/{id}/rotate-secret. Le paramètre optionnel grace_window_hours (1–168, défaut 24) définit la durée pendant laquelle l'ancien secret reste accepté par le moteur de livraison Coffrify. Pendant cette fenêtre de grâce, GET /v1/webhooks/{id}/secret-status expose les deux préfixes masqués (current_secret_prefix et previous_secret_prefix) et la date d'expiration grace_until pour vous aider à suivre la migration.
Réponse de rotation
Consulter les livraisons et relancer
Réponse de liste des livraisons
Codes d'erreur
| Code HTTP | Code erreur | Quand | Résolution |
|---|---|---|---|
| 400 | validation_error | name ou url absent à la création, URL invalide, type d'événement inconnu, events vide, max_attempts hors plage 1–10, grace_window_hours hors plage 1–168, aucun champ valide dans un PATCH. | Corrigez le corps de la requête selon les contraintes indiquées dans le message d'erreur. |
| 401 | unauthorized | Clé API absente, expirée ou révoquée. | Vérifiez votre clé cof_live_… ou cof_test_… dans l'en-tête Authorization. |
| 403 | forbidden | La clé API ne possède pas le scope requis (webhooks:read ou webhooks:manage). | Recréez la clé avec le scope approprié via POST /v1/api-keys. |
| 404 | not_found | Webhook ou livraison introuvable dans l'espace de travail courant (mauvais id ou mauvais environnement). | Vérifiez l'identifiant et l'environnement de la clé (test vs live). |
| 409 | validation_error | Quota de 25 webhooks atteint, ou tentative de relance d'une livraison déjà en succès (utilisez /replay dans ce cas). | Supprimez un webhook existant avant d'en créer un nouveau, ou utilisez l'endpoint /replay. |
| 500 | internal_error | Erreur base de données inattendue. | Réessayez après quelques secondes. Si le problème persiste, contactez support@coffrify.com. |
Voir aussi
- Créer un premier transfert
- Authentification et clés API
- Catalogue complet des événements
- Référence API Webhooks
- Livraisons et rejouer une livraison