📦
Transferts·Intermédiaire·8 min

Créer un transfert avec options avancées (expiration, mot de passe, approbation)

Apprenez à créer un transfert via l'API Coffrify en configurant l'expiration, la protection par mot de passe et le circuit d'approbation.

Télécharger en PDF

La route POST /v1/transfers crée un transfert et retourne les URL d'upload pré-signées pour chaque fichier. Une fois les fichiers déposés sur ces URL, le transfert devient actif et le lien de partage est utilisable. Les options avancées, expiration sur mesure, mot de passe, nombre de téléchargements maximum et circuit d'approbation, se configurent dès la création ou se mettent à jour via des routes dédiées.

POST/v1/transfersCrée un nouveau transfert et retourne les URL d'upload pré-signées.GET/v1/transfers/{id}Récupère les détails complets d'un transfert, y compris la liste de ses fichiers.PUT/v1/transfers/{id}/passwordDéfinit ou remplace le mot de passe d'un transfert existant.POST/v1/transfers/{id}/extendRepousse la date d'expiration d'un transfert dans la limite du plan souscrit.POST/v1/transfers/{id}/approversAjoute un approbateur à un transfert soumis à validation et lui envoie un e-mail de notification.POST/v1/transfers/{id}/approveApprouve ou rejette un transfert en attente de validation.

Authentification

Toutes les routes ci-dessus requièrent une clé API transmise dans l'en-tête Authorization: Bearer <clé>. Utilisez une clé de test (cof_test_…) pour vos intégrations hors-production ou une clé sandbox (cof_sandbox_…) pour les simulations complètes. En production, utilisez une clé live (cof_live_…). Le scope requis varie selon la route : transfers:write pour créer, modifier le mot de passe ou prolonger ; transfers:manage pour gérer les approbateurs et rendre des décisions d'approbation.

Corps de la requête, POST /v1/transfers

Le corps accepte de nombreuses options avancées (mot de passe, expiration, TOTP, approbation, restrictions). Seul files est obligatoire. Le tableau ci-dessous détaille les champs.

ChampTypeRequisDescription
filesarrayOuiListe des fichiers à inclure. Chaque objet doit contenir name (string), size (number, octets) et optionnellement mime_type (string).
transfer_titlestringNonTitre lisible du transfert, affiché aux destinataires.
expires_in_hoursnumberNonDurée de validité en heures à partir de la création. Plafonné par le plan. Ex. : 72 pour 3 jours.
passwordstringNonMot de passe de protection (4 caractères minimum). Le hash SHA-256 est stocké, jamais la valeur en clair.
max_downloadsnumberNonNombre maximum de téléchargements autorisés. En environnement sandbox, plafonné à 5.
allow_downloadbooleanNonAutoriser ou non le téléchargement direct (défaut true).
auto_deletebooleanNonSupprimer automatiquement le transfert après le premier téléchargement.
notesstringNonMessage ou note libre jointe au transfert.
custom_slugstringNonSlug personnalisé pour l'URL de partage (doit être unique dans le workspace).
recipientstringNonAdresse e-mail du destinataire principal.
notify_opensbooleanNonEnvoyer une notification à l'expéditeur à chaque ouverture du lien.
require_totpbooleanNonExiger un code TOTP pour accéder au transfert (plan compatible requis).
watermark_enabledbooleanNonActiver le filigrane sur les fichiers consultables.
watermark_textstringNonTexte du filigrane si watermark_enabled est true.
geo_allowlistarrayNonCodes pays ISO 3166-1 alpha-2 autorisés (ex. ["FR","BE"]).
geo_blocklistarrayNonCodes pays ISO 3166-1 alpha-2 bloqués.
scheduled_forstringNonDate ISO 8601 à partir de laquelle le transfert devient actif.
encryption_modestringNonMode de chiffrement souhaité. AES-256-GCM est le mode client-side zero-knowledge.
encryption_metadataobjectNonMétadonnées de chiffrement nécessaires au mode zero-knowledge (clé publique, nonce, etc.).

Exemples d'appel

L'exemple ci-dessous crée un transfert avec plusieurs options de sécurité activées. Choisissez votre langage.

curl -X POST https://api.coffrify.com/v1/transfers \
-H "Authorization: Bearer cof_live_…" \
-H "Content-Type: application/json" \
-d '{
"transfer_title": "Rapport annuel 2025",
"files": [
{ "name": "rapport-2025.pdf", "size": 2048000, "mime_type": "application/pdf" }
],
"expires_in_hours": 72,
"password": "S3cr3t!",
"max_downloads": 10,
"notify_opens": true,
"recipient": "client@example.com"
}'

Réponse

{
"transfer": {
"id": "trf_01J9ZX4KPQM7WVBN3DGEH52RAT",
"short_code": "aB3kZ9",
"transfer_title": "Rapport annuel 2025",
"status": "pending_upload",
"expires_at": "2025-09-09T14:32:00.000Z",
"max_downloads": 10,
"total_downloads": 0,
"scan_status": "pending",
"encryption_mode": null,
"created_at": "2025-09-06T14:32:00.000Z"
},
"upload_urls": [
{
"file_id": "rapport-2025.pdf",
"url": "https://storage.coffrify.com/uploads/trf_01J9ZX4KPQM7WVBN3DGEH52RAT/rapport-2025.pdf?X-Amz-Expires=900&...",
"headers": {
"Content-Type": "application/pdf"
}
}
],
"share_url": "https://files.coffrify.com/aB3kZ9",
"totp_secret": null
}

Le champ totp_secret est non-null uniquement si require_totp: true a été passé et que le plan le permet. Les URL d'upload expirent après 15 minutes : effectuez l'upload immédiatement après la création du transfert.

Gérer l'approbation

Lorsque le champ approval_required est activé sur un transfert, le destinataire ne peut télécharger les fichiers qu'après validation d'un approbateur. Ajoutez un approbateur via POST /v1/transfers/{id}/approvers en passant approver_email ou approver_user_id. Un e-mail de demande d'approbation est envoyé automatiquement. L'approbateur (ou un administrateur via l'API) rend ensuite sa décision via POST /v1/transfers/{id}/approve avec decision: "approved" ou decision: "rejected" et un champ note optionnel. Ce flux nécessite le scope transfers:manage.

Erreurs

Les erreurs portent sur une validation du corps (option incompatible avec le plan) ou un scope manquant. Le tableau ci-dessous indique la résolution.

Code HTTPCode APIQuandRésolution
400validation_errorCorps absent, files[] vide, mot de passe trop court (< 4 caractères), champ until invalide ou ni hours ni until fourni pour /extend.Vérifiez les champs obligatoires et les contraintes de format décrites ci-dessus.
401invalid_api_keyClé API absente, mal formée ou révoquée.Vérifiez l'en-tête Authorization et l'état de la clé dans votre tableau de bord.
403scope_missingLa clé ne possède pas le scope requis (transfers:write ou transfers:manage).Régénérez la clé avec les scopes appropriés ou utilisez une clé avec des permissions plus larges.
404not_foundLe transfert n'existe pas dans le workspace ou est inaccessible depuis l'environnement de la clé.Vérifiez l'identifiant du transfert et l'environnement de la clé (test/live/sandbox).
410not_foundLe transfert a été supprimé (status: deleted).Le transfert est définitivement supprimé. Créez-en un nouveau si nécessaire.
422validation_errorEn sandbox : plus de 10 fichiers ou fichier dépassant 10 Mo par transfert. Ou tentative d'approbation d'un transfert ne nécessitant pas d'approbation.Respectez les limites sandbox ou vérifiez que approval_required est activé sur le transfert.
429rate_limitedEn sandbox : limite de 25 transferts par 24 h atteinte.Attendez la fin de la fenêtre de 24 h ou utilisez votre environnement live.
500internal_errorErreur interne (base de données, edge function, etc.).Réessayez avec un backoff exponentiel. Si l'erreur persiste, contactez le support en fournissant le request_id de la réponse.

Voir aussi

Continuer

Autres tutoriels à suivre