Chaque webhook que vous enregistrez reçoit des événements : des notifications JSON signées que Coffrify envoie à votre URL dès qu'une action se produit dans votre espace de travail (un transfert téléchargé, un fichier déposé dans un coffre, une demande de réception complétée, etc.). Ce document recense les familles d'événements réellement émises, le rôle de chaque type courant, la forme de la charge utile que vous recevez, et l'endpoint public qui retourne en permanence la liste complète et à jour.
Enveloppe d'un événement
Tous les événements partagent la même enveloppe. Le corps de la requête POST envoyée à votre endpoint est un objet JSON dont la structure ne change pas d'une famille à l'autre : seul le contenu de data varie selon le type. Le champ created est un horodatage Unix en secondes, et id est l'identifiant unique de la livraison (utilisable pour l'idempotence côté récepteur).
Familles d'événements
Chaque type suit la convention famille.action. Vous abonnez un webhook à une liste de types précis : si vous ne précisez aucun événement à la création, l'abonnement par défaut est ["transfer.downloaded"]. Voici les familles réellement émises et ce qu'elles couvrent.
| Famille | Couvre |
|---|---|
| transfer.* | Cycle de vie des transferts de fichiers : création, téléchargement, expiration, scan antivirus, mot de passe, géo-blocage |
| coffre.* | Coffres (data rooms) : création, accès d'un invité, dépôt de fichier, invitation |
| collection.* | Collections (regroupements de transferts) : création, mise à jour, ajout d'élément |
| request.* | Réception (demandes de fichiers) : demande créée, soumise, expirée, complétée |
| member.* | Membres de l'espace : invitation, acceptation, retrait, changement de rôle |
| api_key.* | Clés API : création, révocation, rotation, expiration |
| workspace.* | Espace de travail : plan, paiement, seuils d'usage et de stockage |
| billing.* | Facturation : essai, fin d'essai, annulation d'abonnement |
| domain.* | Domaines personnalisés : ajout, vérification DNS |
| session.* | Sessions de connexion : ouverture sur appareil inconnu, révocation |
| ping | Événement de test unique (famille système) |
Événements de transfert
C'est la famille la plus utilisée. transfer.downloaded se déclenche dès qu'un destinataire récupère les URL de téléchargement, et transfer.scanned est neutre : pour un routage typé, préférez transfer.scan_clean, transfer.scan_infected ou transfer.scan_quarantined.
| Type | Rôle |
|---|---|
| transfer.created | Un nouveau transfert a été créé. |
| transfer.downloaded | Le destinataire a récupéré les URL de téléchargement. |
| transfer.expired | Le transfert a atteint son expires_at. |
| transfer.deleted | Le propriétaire a supprimé le transfert (ou consommation après lecture unique). |
| transfer.limit_reached | Le dernier téléchargement autorisé a été consommé. |
| transfer.password_failed | Un mot de passe incorrect a été saisi sur un transfert protégé. |
| transfer.scan_clean | Analyse antivirus terminée, aucune menace (palier Pro). |
| transfer.scan_infected | Analyse antivirus : logiciel malveillant détecté, fichiers mis en quarantaine (palier Pro). |
| transfer.geo_blocked | Téléchargement bloqué par la politique géographique (palier Ultra). |
| transfer.e2e_created | Un transfert chiffré de bout en bout (zero-knowledge) a été créé. |
Coffres, collections et réception
Les familles coffre.*, collection.* et request.* couvrent respectivement les data rooms, les regroupements de transferts et les demandes de fichiers. Pour la réception, suivez request.submitted (le destinataire a déposé des fichiers) puis request.completed (tous les fichiers requis sont reçus).
| Type | Rôle |
|---|---|
| coffre.accessed | Un invité a ouvert le coffre (palier Pro). |
| coffre.item_uploaded | Un fichier a été déposé dans une section du coffre (palier Pro). |
| coffre.invitation_sent | Une invitation a été envoyée à un invité externe (palier Pro). |
| collection.created | Une nouvelle collection a été créée. |
| collection.item_added | Un transfert a été ajouté à une collection. |
| request.created | Une demande de fichiers a été créée et envoyée. |
| request.submitted | Le destinataire a soumis les fichiers demandés. |
| request.completed | Tous les fichiers requis ont été reçus. |
| request.expired | L'échéance de la demande est passée sans soumission. |
Espace, facturation, membres et sécurité
Ces familles sont utiles pour la supervision interne : facturation, gestion des sièges, et surveillance des accès. workspace.usage_limit_warning se déclenche à 80 % d'un quota et workspace.usage_limit_reached à 100 %.
| Type | Rôle |
|---|---|
| workspace.plan_changed | Le plan d'abonnement a changé. |
| workspace.payment_failed | Un paiement de facture a échoué. |
| workspace.usage_limit_warning | L'espace a atteint 80 % d'une limite de plan. |
| billing.trial_ending | L'essai se termine sous 3 jours, sans moyen de paiement enregistré. |
| billing.subscription_cancelled | L'abonnement a été annulé (rétrogradation en fin de période). |
| member.invited | Une invitation a été envoyée. |
| member.role_changed | Le rôle d'un membre a été modifié. |
| api_key.revoked | Une clé API a été révoquée. |
| domain.verified | La vérification DNS a réussi, le domaine est actif (palier Pro). |
| session.created | Une session a été ouverte depuis un appareil ou une IP non reconnus. |
Lister tous les types disponibles
Plutôt que de coder en dur une liste qui peut évoluer, interrogez le catalogue en direct. L'endpoint GET /v1/webhooks/events est public (aucune authentification requise), ce qui le rend pratique pour les générateurs de documentation, les explorateurs et les scripts de validation. Il retourne tous les types, leur famille, leur description et, le cas échéant, le palier requis.
/v1/webhooks/eventsListe publique de tous les types d'événements pris en charge, avec famille, description et palier requis. Aucune authentification.Lorsque vous abonnez un webhook à une liste d'événements via POST /v1/webhooks, chaque type doit appartenir à ce catalogue : un type inconnu renvoie une erreur validation_error. Vérifiez donc vos noms d'événements contre GET /v1/webhooks/events avant de créer ou de mettre à jour un endpoint.