🗂️
Data Rooms & Collections·Avancé·10 min

Créer des collections réutilisables depuis des templates

Apprenez à combiner les templates de transfert et les collections Coffrify pour industrialiser la distribution de vos data rooms M&A, juridiques ou financières.

Télécharger en PDF

Les collections Coffrify sont des vitrines partageables regroupant plusieurs transferts sous une URL unique. Les templates sont des presets de sécurité réutilisables (expiration, filigrane, chiffrement, etc.) qui standardisent chaque transfert produit. Ce guide vous montre comment enchaîner les deux : créer un template de référence, l'appliquer pour générer des transferts, puis les ajouter à une collection dédiée. Ce flux est idéal pour les data rooms M&A, les dossiers d'audit ou tout livrable récurrent.


Endpoints concernés

POST/v1/templatesCrée un template de transfert (preset de sécurité réutilisable).POST/v1/templates/{id}/applyInstancie un transfert à partir d'un template existant et retourne les URLs de mise en ligne.POST/v1/collectionsCrée une collection (vitrine partageable pouvant regrouper plusieurs transferts).
POST/v1/collections/{id}/itemsAjoute un transfert à une collection existante.
GET/v1/collections/{id}Récupère une collection avec ses items et ses sections.

Authentification

Toutes les requêtes exigent un en-tête Authorization: Bearer <clé> avec une clé API au format cof_live_… (production) ou cof_test_… (test). Les opérations de ce guide nécessitent les scopes templates:manage, templates:read, transfers:write, collections:manage et collections:read. Vérifiez que votre clé dispose bien de l'ensemble de ces scopes avant de commencer.

Étape 1 : créer le template de transfert

Un template centralise tous les paramètres de sécurité d'un type de transfert. Scope requis : templates:manage.

Corps de la requête – POST /v1/templates

ChampTypeRequisDescription
namestringOuiNom du template (affiché dans l'interface).
descriptionstringNonDescription libre du template.
is_defaultbooleanNonSi true, ce template est sélectionné par défaut. Défaut : false.
expires_in_hoursintegerNonDurée de vie du transfert en heures. Minimum 1. Défaut : 48.
max_downloadsinteger|nullNonNombre maximal de téléchargements. null = illimité.
passwordstring|nullNonMot de passe d'accès au transfert.
custom_slug_patternstring|nullNonPatron pour le slug court du transfert.
require_totpbooleanNonExige un code TOTP à l'accès. Défaut : false.
watermark_enabledbooleanNonActive le filigrane sur les fichiers. Défaut : false.
watermark_textstring|nullNonTexte du filigrane (si watermark_enabled est true).
burn_after_readbooleanNonSupprime le transfert après la première lecture. Défaut : false.
geo_allowliststring[]|nullNonCodes pays ISO-3166-1 alpha-2 autorisés (ex. ["FR","DE"]). null = aucune restriction.
encryption_modestringNonMode de chiffrement : server_side (défaut) ou autre valeur supportée.
password_enabledbooleanNonActive la protection par mot de passe. Défaut : false.
totp_enabledbooleanNonActive la vérification TOTP. Défaut : false.
require_signaturebooleanNonExige une signature électronique à l'accès. Défaut : false.
require_email_verificationbooleanNonExige une vérification par email. Défaut : false.
require_passkeybooleanNonExige une passkey. Défaut : false.
approval_requiredbooleanNonSoumet le transfert à un flux d'approbation. Défaut : false.
allow_replybooleanNonAutorise le destinataire à répondre. Défaut : false.
custom_messagestring|nullNonMessage personnalisé envoyé avec le transfert.
notification_emailstring|nullNonEmail de notification pour les événements du transfert.
curl -X POST https://api.coffrify.com/v1/templates \
-H "Authorization: Bearer cof_live_votre_cle" \
-H "Content-Type: application/json" \
-d '{
"name": "Data Room M&A – Standard",
"description": "Template sécurisé pour les data rooms M&A : filigrane, expiration 72h, signature obligatoire.",
"expires_in_hours": 72,
"watermark_enabled": true,
"watermark_text": "Confidentiel – {{recipient_email}}",
"require_signature": true,
"require_email_verification": true,
"approval_required": false,
"geo_allowlist": ["FR", "DE", "BE", "CH"]
}'

Réponse – template créé (201)

{
"id": "tpl_01j8z3kfcq0000000000000000",
"workspace_id": "ws_01j8z3kfcq0000000000000001",
"name": "Data Room M&A – Standard",
"description": "Template sécurisé pour les data rooms M&A.",
"is_default": false,
"expires_in_hours": 72,
"max_downloads": null,
"password": null,
"custom_slug_pattern": null,
"require_totp": false,
"watermark_enabled": true,
"watermark_text": "Confidentiel – {{recipient_email}}",
"burn_after_read": false,
"geo_allowlist": ["FR", "DE", "BE", "CH"],
"encryption_mode": "server_side",
"password_enabled": false,
"totp_enabled": false,
"require_signature": true,
"require_email_verification": true,
"require_passkey": false,
"approval_required": false,
"allow_reply": false,
"custom_message": null,
"notification_email": null,
"use_count": 0,
"created_at": "2026-06-06T09:00:00.000Z",
"updated_at": "2026-06-06T09:00:00.000Z"
}

Étape 2 : instancier un transfert depuis le template

L'appel POST /v1/templates/{id}/apply crée un transfert héritant de tous les paramètres du template. Vous pouvez surcharger certaines valeurs via overrides. Scope requis : transfers:write.

Corps de la requête – POST /v1/templates/{id}/apply

ChampTypeRequisDescription
filesobject[]OuiTableau de fichiers à uploader. Chaque objet doit contenir name (string), size (number) et optionnellement mime_type (string).
recipientstring|nullNonEmail ou identifiant du destinataire principal.
overridesobjectNonSurcharges ponctuelles des paramètres du template : expires_in_hours, watermark_enabled, watermark_text, burn_after_read, geo_allowlist.
curl -X POST https://api.coffrify.com/v1/templates/tpl_01j8z3kfcq0000000000000000/apply \
-H "Authorization: Bearer cof_live_votre_cle" \
-H "Content-Type: application/json" \
-d '{
"files": [
{ "name": "rapport-financier-2025.pdf", "size": 2048576, "mime_type": "application/pdf" },
{ "name": "annexe-juridique.pdf", "size": 512000, "mime_type": "application/pdf" }
],
"recipient": "auditeur@cabinet-exemple.fr",
"overrides": { "expires_in_hours": 48 }
}'

Réponse – transfert instancié (201)

{
"transfer": {
"id": "tr_01j8z4abc000000000000000001",
"short_code": "dr24x9",
"expires_at": "2026-06-08T09:00:00.000Z"
},
"upload_urls": [
{
"file_id": "rapport-financier-2025.pdf",
"url": "https://storage.coffrify.com/upload/signed-url-rapport"
},
{
"file_id": "annexe-juridique.pdf",
"url": "https://storage.coffrify.com/upload/signed-url-annexe"
}
],
"share_url": "https://files.coffrify.com/dr24x9"
}

Étape 3 : créer la collection

La collection regroupe vos transferts sous une URL partageable avec branding personnalisable. Scope requis : collections:manage.

Corps de la requête – POST /v1/collections

ChampTypeRequisDescription
namestringOuiNom affiché de la collection.
slugstringNonSlug URL (max 64 car., normalisé automatiquement). Si absent, dérivé du name.
descriptionstring|nullNonDescription courte de la collection.
subtitlestring|nullNonSous-titre affiché sous le nom.
description_markdownstring|nullNonDescription longue en Markdown.
logo_urlstring|nullNonURL du logo affiché en en-tête de la collection.
cover_colorstring|nullNonCouleur de couverture (hex, ex. #1a2b3c).
cover_image_urlstring|nullNonURL de l'image de couverture.
is_activebooleanNonRend la collection accessible publiquement. Défaut : true.
show_powered_bybooleanNonAffiche le badge Coffrify. Défaut : true.
allow_downloadbooleanNonAutorise le téléchargement des fichiers. Défaut : true.
watermark_enabledbooleanNonActive le filigrane au niveau de la collection. Défaut : false.
expires_atstring|nullNonDate d'expiration ISO-8601 de la collection. null = pas d'expiration.
curl -X POST https://api.coffrify.com/v1/collections \
-H "Authorization: Bearer cof_live_votre_cle" \
-H "Content-Type: application/json" \
-d '{
"name": "Data Room Acquisition Société ABC",
"slug": "acquisition-abc-2026",
"description": "Documents confidentiels – Due diligence Série B",
"cover_color": "#1a2b3c",
"watermark_enabled": true,
"allow_download": false,
"expires_at": "2026-07-01T00:00:00.000Z"
}'

Réponse – collection créée (201)

{
"id": "col_01j8z5xyz000000000000000001",
"slug": "acquisition-abc-2026",
"name": "Data Room Acquisition Société ABC",
"description": "Documents confidentiels – Due diligence Série B",
"subtitle": null,
"description_markdown": null,
"logo_url": null,
"cover_color": "#1a2b3c",
"cover_image_url": null,
"is_active": true,
"show_powered_by": true,
"allow_download": false,
"watermark_enabled": true,
"expires_at": "2026-07-01T00:00:00.000Z",
"created_at": "2026-06-06T09:05:00.000Z",
"updated_at": "2026-06-06T09:05:00.000Z"
}

Étape 4 : ajouter les transferts à la collection

Chaque transfert instancié à l'étape 2 peut être ajouté à la collection via POST /v1/collections/{id}/items. Le transfert doit appartenir au même workspace. Scope requis : collections:manage.

curl -X POST https://api.coffrify.com/v1/collections/col_01j8z5xyz000000000000000001/items \
-H "Authorization: Bearer cof_live_votre_cle" \
-H "Content-Type: application/json" \
-d '{
"transfer_id": "tr_01j8z4abc000000000000000001",
"label": "Rapport financier 2025",
"position": 1,
"is_visible": true
}'

Réponse – item ajouté (201)

{
"id": "citem_01j8z6pqr00000000000000001",
"transfer_id": "tr_01j8z4abc000000000000000001",
"section_id": null,
"position": 1,
"label": "Rapport financier 2025",
"description": null,
"is_visible": true,
"added_at": "2026-06-06T09:10:00.000Z"
}

Vérifier la collection complète

Appelez GET /v1/collections/{id} pour récupérer la collection avec l'ensemble de ses items et sections. Scope requis : collections:read.

{
"id": "col_01j8z5xyz000000000000000001",
"slug": "acquisition-abc-2026",
"name": "Data Room Acquisition Société ABC",
"description": "Documents confidentiels – Due diligence Série B",
"subtitle": null,
"description_markdown": null,
"logo_url": null,
"cover_color": "#1a2b3c",
"cover_image_url": null,
"is_active": true,
"show_powered_by": true,
"allow_download": false,
"watermark_enabled": true,
"expires_at": "2026-07-01T00:00:00.000Z",
"created_at": "2026-06-06T09:05:00.000Z",
"updated_at": "2026-06-06T09:05:00.000Z",
"items": [
{
"id": "citem_01j8z6pqr00000000000000001",
"transfer_id": "tr_01j8z4abc000000000000000001",
"section_id": null,
"position": 1,
"label": "Rapport financier 2025",
"description": null,
"is_visible": true,
"added_at": "2026-06-06T09:10:00.000Z"
},
{
"id": "citem_01j8z6pqr00000000000000002",
"transfer_id": "tr_01j8z4abc000000000000000002",
"section_id": null,
"position": 2,
"label": "Annexes juridiques",
"description": null,
"is_visible": true,
"added_at": "2026-06-06T09:10:30.000Z"
}
],
"sections": []
}

Erreurs

Code HTTPCode erreurQuandRésolution
400validation_errorname absent ou vide sur POST /v1/templates ou POST /v1/collections.Fournissez un champ name non vide.
400validation_errorSlug non dérivable (moins de 2 caractères après normalisation).Utilisez un name ou slug contenant au moins 2 caractères alphanumériques.
400validation_errorfiles[] absent ou vide sur POST /v1/templates/{id}/apply.Fournissez au moins un objet dans le tableau files.
400validation_errortransfer_id absent sur POST /v1/collections/{id}/items.Fournissez le champ transfer_id.
400validation_errorAucun champ patchable fourni sur PATCH.Fournissez au moins un champ modifiable dans le corps de la requête.
404not_foundTemplate, collection ou transfert introuvable dans le workspace.Vérifiez que l'ID appartient bien au workspace associé à la clé API.
409validation_errorSlug de collection déjà utilisé dans le workspace.Choisissez un slug différent ou laissez le champ vide pour un slug auto-généré.
409validation_errorLe transfert est déjà présent dans cette collection.Ce transfert a déjà été ajouté. Récupérez les items existants via GET /v1/collections/{id}/items.
500internal_errorErreur base de données ou Edge Function inaccessible.Réessayez après quelques secondes. Si l'erreur persiste, contactez le support Coffrify.

Voir aussi

Continuer

Autres tutoriels à suivre