📄
Prise en main·Débutant·8 min

Votre premier transfert chiffré

Créez un transfert chiffré AES-256-GCM, obtenez les URLs d'upload et partagez un lien sécurisé en moins de cinq minutes.

Télécharger en PDF

Un transfert est l'unité centrale de Coffrify : il regroupe un ou plusieurs fichiers chiffrés (AES-256-GCM côté stockage), une date d'expiration, un quota de téléchargements et un lien de partage unique. Ce guide vous montre comment créer votre premier transfert via l'API, obtenir les URLs d'upload présignées, déposer vos fichiers sur l'objet de stockage, puis récupérer le lien public à partager. Le flux complet repose sur trois étapes : POST /v1/transfers (création), PUT vers les URLs présignées (upload), et lecture du champ share_url dans la réponse.

POST/v1/transfersCrée un transfert et retourne les URLs d'upload présignées pour chaque fichier déclaré.GET/v1/transfers/{id}Récupère les détails d'un transfert existant ainsi que la liste de ses fichiers.DELETE/v1/transfers/{id}Supprime définitivement un transfert et ses fichiers.

Authentification

Toutes les requêtes de création ou de lecture de transferts exigent une clé API transmise dans l'en-tête Authorization: Bearer <clé>. Le scope requis est transfers:write pour la création et la suppression, et transfers:read pour la liste et la lecture. Pour générer des URLs de téléchargement côté administration (sans incrémenter le compteur), le scope transfers:download est nécessaire. Créez ou consultez vos clés dans la console Coffrify.

Corps de la requête

ChampTypeRequisDescription
filesarrayOuiTableau d'objets { name, size, mime_type? }. Au moins un élément.
files[].namestringOuiNom du fichier tel qu'il sera affiché au destinataire.
files[].sizeintegerOuiTaille en octets. Doit correspondre au fichier réel uploadé.
files[].mime_typestringNonType MIME (ex. application/pdf). Défaut : application/octet-stream.
expires_in_hoursintegerNonDurée de vie en heures. Si omis, la valeur par défaut du plan s'applique.
max_downloadsintegerNonNombre maximum de téléchargements autorisés. Sandbox : plafonné à 5.
passwordstringNonMot de passe de protection du lien de partage (haché côté serveur).
transfer_titlestringNonTitre lisible du transfert, affiché dans la console et au destinataire.
notesstringNonNote ou message joint au transfert.
recipientstringNonAdresse e-mail du destinataire (déclenche l'envoi d'une notification).
notify_opensbooleanNonSi true, une notification est envoyée à chaque ouverture du lien.
require_totpbooleanNonSi true, génère un secret TOTP renvoyé dans totp_secret.
allow_downloadbooleanNonSi false, les fichiers sont consultables mais non téléchargeables.
auto_deletebooleanNonSi true, le transfert est supprimé après le premier téléchargement.
custom_slugstringNonSlug personnalisé pour l'URL de partage (ex. mon-contrat-2026).
watermark_enabledbooleanNonActive le tatouage numérique sur les fichiers visualisés.
watermark_textstringNonTexte du tatouage numérique (email, identifiant...).
geo_allowlistarrayNonCodes pays ISO 3166-1 alpha-2 autorisés (ex. ["FR","DE"]).
geo_blocklistarrayNonCodes pays ISO 3166-1 alpha-2 bloqués.
scheduled_forstringNonDate ISO 8601 d'activation différée du transfert.
encryption_modestringNonMode de chiffrement. Valeur par défaut : chiffrement géré par Coffrify (AES-256-GCM).
folder_idstringNonIdentifiant du dossier cible dans la console.

Exemples d'appel

curl -X POST https://api.coffrify.com/v1/transfers \
-H "Authorization: Bearer cof_test_votreclé" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"files": [
{ "name": "rapport-annuel.pdf", "size": 204800, "mime_type": "application/pdf" }
],
"transfer_title": "Rapport annuel 2026",
"expires_in_hours": 72,
"max_downloads": 3,
"recipient": "destinataire@exemple.com"
}'

Réponse

En cas de succès, l'API retourne un HTTP 201 avec l'objet suivant. Le champ upload_urls contient une entrée par fichier déclaré : vous devez effectuer un PUT vers chaque url avec les en-têtes headers fournis. Le champ share_url est le lien public prêt à être transmis au destinataire.

{
"transfer": {
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"short_code": "xK9mPq",
"transfer_title": "Rapport annuel 2026",
"status": "active",
"expires_at": "2026-06-09T14:32:00.000Z",
"max_downloads": 3,
"total_downloads": 0,
"scan_status": "pending",
"encryption_mode": "managed",
"created_at": "2026-06-06T14:32:00.000Z"
},
"upload_urls": [
{
"file_id": "rapport-annuel.pdf",
"url": "https://coffrify-transfer.s3.fr-par.scw.cloud/a1b2c3d4/rapport-annuel.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=...&X-Amz-Expires=900&X-Amz-Signature=...",
"headers": {
"Content-Type": "application/pdf"
}
}
],
"share_url": "https://files.coffrify.com/xK9mPq",
"totp_secret": null
}

Récupérer un transfert existant

Après avoir uploadé vos fichiers, vous pouvez vérifier l'état du transfert (notamment le scan_status mis à jour par l'antivirus asynchrone) via GET /v1/transfers/{id}. La réponse inclut le champ files avec les métadonnées de chaque fichier (id, file_name, file_size, file_type, created_at).

$ curl https://api.coffrify.com/v1/transfers/a1b2c3d4-e5f6-7890-abcd-ef1234567890 \
-H "Authorization: Bearer cof_test_votreclé"

Obtenir une URL de téléchargement admin

Pour récupérer un fichier côté serveur (agent, automatisation, archivage) sans passer par le lien public ni incrémenter le compteur total_downloads, utilisez POST /v1/transfers/{id}/download-url. Le scope requis est transfers:download. Vous pouvez cibler un fichier précis via file_id, ou omettre ce champ pour obtenir une URL par fichier. Le paramètre expires_in_seconds contrôle la durée de validité de l'URL présignée (60 à 86400 secondes, défaut 3600).

// POST /v1/transfers/{id}/download-url
// Body : { "file_id": "uuid-du-fichier", "expires_in_seconds": 3600 }
 
// Réponse :
{
"transfer_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"short_code": "xK9mPq",
"expires_in_seconds": 3600,
"expires_at": "2026-06-06T15:32:00.000Z",
"files": [
{
"file_id": "f0e1d2c3-b4a5-6789-0123-456789abcdef",
"file_name": "rapport-annuel.pdf",
"file_size": 204800,
"file_type": "application/pdf",
"download_url": "https://coffrify-transfer.s3.fr-par.scw.cloud/a1b2c3d4/rapport-annuel.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&..."
}
],
"note": "These URLs bypass the public share + password gate AND do NOT increment total_downloads. For admin/agent operational use only."
}

Idempotence

L'API Coffrify supporte l'idempotence sur les requêtes POST. Envoyez un en-tête Idempotency-Key: <uuid> unique par tentative logique. Si la même clé est rejouée dans la fenêtre de validité, vous recevez la réponse originale avec l'en-tête X-Coffrify-Idempotent-Replay: true, sans créer de doublon. C'est indispensable en cas de timeout réseau ou de retry automatique dans votre pipeline.

Erreurs

HTTPCode d'erreurQuandRésolution
400validation_errorCorps absent ou files[] vide.Vérifiez que le body est un objet JSON valide contenant un tableau files non vide.
401missing_api_keyEn-tête Authorization absent.Ajoutez Authorization: Bearer cof_test_… à la requête.
401invalid_api_keyClé mal formée ou révoquée.Vérifiez la clé dans la console. Préfixes valides : cof_test_, cof_live_, cof_sandbox_.
401expired_api_keyClé expirée.Générez une nouvelle clé dans les paramètres de l'espace de travail.
403scope_missingLa clé ne possède pas le scope transfers:write (ou transfers:read / transfers:download).Éditez les scopes de la clé ou créez-en une nouvelle avec les scopes requis.
403ip_not_allowedL'IP appelante n'est pas dans la liste d'autorisation de la clé.Ajoutez l'IP dans les paramètres de la clé API.
404not_foundTransfert introuvable ou appartenant à un autre environnement.Vérifiez l'ID et l'environnement de la clé utilisée (sandbox vs live/test).
410not_foundTransfert supprimé (status deleted).Le transfert a été supprimé et ne peut plus être accédé.
422validation_errorSandbox : dépassement des limites (10 fichiers, 10 Mo/fichier).Réduisez la taille ou le nombre de fichiers, ou passez en live.
429rate_limitedQuota de requêtes dépassé pour l'espace de travail.Respectez les en-têtes X-RateLimit-Remaining et Retry-After.
429rate_limitedSandbox : 25 transferts par 24 h dépassés.Attendez la remise à zéro ou passez en environnement live/test.
500internal_errorErreur interne du serveur.Notez le request_id dans la réponse et contactez le support.
503internal_errorCredentials Scaleway manquants sur ce déploiement.Vérifiez la configuration des variables d'environnement du déploiement.

Voir aussi

  • Référence POST /v1/transfers
  • Référence GET /v1/transfers/{id}
  • Référence DELETE /v1/transfers/{id}
  • Référence POST /v1/transfers/{id}/download-url
  • Premiers pas avec l'API
  • Gestion des dossiers
  • Webhooks : être notifié des événements
  • Rate limits et quotas
  • Gestion des erreurs
Continuer

Autres tutoriels à suivre