🔗
Transferts·Intermédiaire·7 min

Générer une URL de téléchargement signée et éphémère

Obtenez en un appel POST une URL S3 pré-signée à durée de vie configurable pour télécharger n'importe quel fichier d'un transfert, sans passer par la porte publique ni incrémenter le compteur de téléchargements.

Télécharger en PDF

L'endpoint POST /v1/transfers/{id}/download-url génère une ou plusieurs URL S3 pré-signées (AWS4-HMAC-SHA256) pointant directement vers les fichiers stockés dans l'espace Scaleway Object Storage de Coffrify. Ces URLs sont éphémères : leur durée de vie est strictement bornée entre 60 secondes et 24 heures. Elles court-circuitent la porte de partage public (mot de passe, lien expirable) et n'incrémentent pas le compteur total_downloads du transfert. Cet endpoint est réservé aux usages opérationnels côté serveur : agents, pipelines d'archivage, intégrations MCP ou scripts de sauvegarde.

POST/v1/transfers/{id}/download-urlGénère une URL S3 pré-signée éphémère pour un ou tous les fichiers d'un transfert. Ne décompte pas de téléchargement. Scope requis : transfers:download.GET/v1/transfers/{id}/downloadsListe les événements de téléchargement enregistrés pour un transfert (IP, navigateur, pays, durée, octets transférés). Scope requis : downloads:read. Paramètres : limit (max 500, défaut 100) et offset.

Authentification

Les deux endpoints exigent une clé API transmise dans l'en-tête Authorization: Bearer <clé>. Le format accepté est cof_live_… (production) ou cof_test_… (sandbox). Le scope transfers:download est requis pour POST /download-url ; le scope downloads:read est requis pour GET /downloads. Toute requête avec une clé invalide, révoquée ou dépourvue du scope adéquat retourne une erreur 401 ou 403.

Corps de la requête

Le corps précise le fichier visé (ou tous) et la durée de validité souhaitée. Le tableau ci-dessous détaille les champs acceptés.

ChampTypeRequisDescription
file_idstringNonIdentifiant UUID d'un fichier spécifique du transfert. Si omis, l'API retourne une URL pour chaque fichier du transfert.
expires_in_secondsintegerNonDurée de vie de l'URL en secondes. Défaut : 3 600 (1 h). Minimum : 60. Maximum : 86 400 (24 h). Toute valeur hors plage est silencieusement clampée.

Exemples de code

L'exemple ci-dessous génère une URL pré-signée puis l'utilise immédiatement pour télécharger le fichier. À exécuter côté serveur uniquement. Choisissez votre langage.

# Générer une URL valable 10 minutes pour un fichier précis
curl -X POST https://api.coffrify.com/v1/transfers/trf_01HXYZ123/download-url \
-H "Authorization: Bearer cof_live_sk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"file_id": "f8a2c3d4-1234-5678-abcd-ef0123456789",
"expires_in_seconds": 600
}'

Réponse

La réponse renvoie l'URL signée, sa durée de validité (expires_in_seconds) et son échéance (expires_at). Au-delà, l'URL devient inutilisable : régénérez-en une au besoin.

{
"transfer_id": "trf_01HXYZ123",
"short_code": "abc123",
"expires_in_seconds": 600,
"expires_at": "2026-06-06T12:10:00.000Z",
"files": [
{
"file_id": "f8a2c3d4-1234-5678-abcd-ef0123456789",
"file_name": "rapport-annuel-2025.pdf",
"file_size": 2048576,
"file_type": "application/pdf",
"download_url": "https://coffrify-transfer.s3.fr-par.scw.cloud/trf_01HXYZ123/rapport-annuel-2025.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=...&X-Amz-Expires=600&X-Amz-Signature=..."
}
],
"note": "These URLs bypass the public share + password gate AND do NOT increment total_downloads. For admin/agent operational use only."
}

Erreurs

Les erreurs portent sur le transfert introuvable, le scope manquant (transfers:download) ou un fichier inexistant. Le tableau ci-dessous indique la résolution.

HTTPCodeQuandRésolution
401missing_api_key / invalid_api_keyEn-tête Authorization absent ou clé malformée.Vérifiez que l'en-tête Authorization: Bearer cof_live_… est bien présent et que la clé est active.
403scope_missingLa clé API ne possède pas le scope transfers:download (POST) ou downloads:read (GET).Régénérez la clé en cochant le scope requis depuis la console Coffrify.
404not_foundLe transfert n'existe pas dans votre workspace, ou le file_id fourni n'appartient pas au transfert.Vérifiez les identifiants du transfert et du fichier. Assurez-vous que le transfert appartient au workspace authentifié.
410not_foundLe transfert a le statut deleted.Il n'est plus possible de générer des URLs pour un transfert supprimé. Utilisez un transfert actif.
429rate_limitedLe quota de requêtes par minute du workspace est dépassé sur les endpoints write.Consultez les en-têtes X-RateLimit-Remaining et Retry-After, puis réessayez après le délai indiqué.
503internal_errorLes identifiants Scaleway ne sont pas configurés sur ce déploiement.Contactez le support Coffrify : les variables d'environnement Scaleway sont manquantes côté serveur.
Continuer

Autres tutoriels à suivre