Un transfert Coffrify n'est pas un objet figé : il naît, vit le temps que vous lui accordez, puis disparaît. Comprendre ce cycle de vie vous permet d'anticiper précisément à quel moment un lien cesse de fonctionner, quand les fichiers sont purgés du stockage, et quels évènements votre intégration reçoit à chaque étape. Cette vue d'ensemble décrit les états possibles d'un transfert, les transitions automatiques (notamment l'expiration), la suppression manuelle, et les webhooks émis tout au long du parcours.
Les états d'un transfert
Chaque transfert porte un champ status qui reflète sa position dans le cycle de vie. Vous le retrouvez dans la réponse de création, dans GET /v1/transfers et dans GET /v1/transfers/{id}. Voici les valeurs possibles :
| status | Signification | Lien de partage |
|---|---|---|
active | Le transfert est en ligne et téléchargeable. | Fonctionnel |
scheduled | Envoi programmé : le transfert existe mais n'est pas encore ouvert au téléchargement. | Inactif jusqu'à l'heure prévue |
expired | La date d'expiration est passée. Les fichiers sont purgés. | Bloqué |
deleted | Le transfert a été supprimé manuellement. | Bloqué |
revoked | L'accès a été coupé avant l'expiration (révocation). | Bloqué |
Un transfert fraîchement créé passe à active dès que vos fichiers sont téléversés via les upload_urls. Tant qu'il est active, il reste accessible via son share_url, dans la limite de sa date d'expiration et de son éventuel plafond de téléchargements (max_downloads).
Ce qui se passe à l'expiration
Vous fixez la durée de vie d'un transfert à la création avec expires_in_hours. Le champ expires_at (horodatage ISO 8601) vous donne la date exacte. Une tâche planifiée s'exécute chaque heure côté Coffrify : elle bascule automatiquement en expired tout transfert encore active dont l'expires_at est dépassé. La transition est atomique et émise exactement une fois, donc vous ne recevez jamais de doublon de l'évènement d'expiration.
Concrètement, à l'expiration :
- Le
statuspasse deactiveàexpired. - Le lien de partage est bloqué : toute tentative de téléchargement échoue.
- Les fichiers sont purgés du stockage. L'expiration est définitive et irréversible côté contenu.
- L'évènement
transfer.expiredest émis vers vos webhooks abonnés.
Prolonger un transfert avant l'échéance
Tant qu'un transfert n'est pas supprimé, vous pouvez repousser son expiration et le maintenir active. Passez soit un nombre d'heures, soit une date cible ISO 8601. La nouvelle échéance est bornée par la rétention maximale de votre offre.
/v1/transfers/{id}/extendRepousse expires_at et remet le transfert à l'état active. Scope transfers:write.La réponse renvoie previous_expires_at, new_expires_at et plan_cap_hours, le plafond appliqué par votre offre. Une date au-delà de ce plafond est refusée par une erreur de validation.
Supprimer un transfert manuellement
Pour couper l'accès immédiatement, sans attendre l'expiration, supprimez le transfert. Le lien est aussitôt bloqué et le transfert passe à l'état supprimé.
DELETE/v1/transfers/{id}Supprime le transfert et bloque son lien de partage. Scope transfers:write.La suppression déclenche l'évènement transfer.deleted. Comme pour l'expiration, l'opération est définitive : les fichiers ne sont plus servis et le share_url cesse de fonctionner.
Les évènements du cycle de vie
Abonnez un webhook (POST /v1/webhooks) pour suivre un transfert en temps réel. Les évènements clés du cycle de vie sont les suivants. Chaque charge utile inclut au minimum transfer_id et short_code.
| Évènement | Émis quand | Champs utiles de la charge |
|---|---|---|
transfer.created | Le transfert est créé et ses fichiers téléversés. | transfer_id, short_code, encryption_mode, file_count, expires_in_hours |
transfer.downloaded | Un destinataire télécharge le transfert. | transfer_id, short_code, title, download_count, max_downloads, ip_address |
transfer.expired | La date d'expiration est atteinte (tâche horaire). | transfer_id, short_code, title, expires_at, observed_at |
transfer.deleted | Le transfert est supprimé manuellement. | transfer_id, short_code |
D'autres évènements jalonnent la vie d'un transfert selon vos options : l'analyse antivirus (transfer.scanned, puis transfer.scan_clean ou transfer.scan_infected), l'atteinte du plafond de téléchargements (transfer.limit_reached), un mot de passe erroné (transfer.password_failed) ou un accès refusé par règle géographique (transfer.geo_blocked). La liste complète et à jour des types d'évènements est exposée publiquement sur GET /v1/webhooks/events, sans authentification.
Récapitulatif
Un transfert démarre active, reste accessible jusqu'à son expires_at ou jusqu'à atteindre son plafond de téléchargements, puis bascule automatiquement en expired avec purge des fichiers. Vous pouvez prolonger sa durée de vie avec /extend tant qu'il existe, ou couper l'accès immédiatement avec DELETE. À chaque étape, les webhooks transfer.created, transfer.downloaded, transfer.expired et transfer.deleted tiennent votre intégration informée, vous laissant le contrôle complet du parcours sans avoir à interroger l'API en boucle.