L'API Coffrify propose trois primitives complémentaires pour organiser vos transferts. Les dossiers (/v1/folders) sont de simples étiquettes de couleur que vous assignez à un transfert : ils n'affectent pas le lien public mais facilitent le filtrage en tableau de bord. Les collections (/v1/collections) sont des vitrines partageables qui regroupent plusieurs transferts en sections ordonnées, avec une page publique personnalisable (logo, couleur, filigrane). Les coffres (/v1/coffres) vont plus loin : ce sont des espaces sécurisés avec contrôle d'accès par e-mail ou mot de passe, NDA intégré, journalisation des vues et invitation de guests nominals. Ces trois ressources coexistent dans le même workspace et s'adressent à des cas d'usage distincts.
Endpoints couverts
Les trois primitives se répartissent sur autant de familles d'endpoints : /v1/folders pour les dossiers, /v1/collections pour les collections publiques et /v1/coffres pour les espaces sécurisés. En voici la liste complète.
/v1/foldersListe tous les dossiers du workspace courant.POST/v1/foldersCrée un dossier nommé et coloré.PATCH/v1/folders/{id}Renomme ou recolore un dossier existant.DELETE/v1/folders/{id}Supprime un dossier (les transferts qu'il contenait deviennent non classés).PUT/v1/transfers/{id}/folderAssigne un transfert à un dossier.DELETE/v1/transfers/{id}/folderRetire un transfert de son dossier (non classé).GET/v1/collectionsListe toutes les collections.POST/v1/collectionsCrée une collection (vitrine publique de transferts).GET/v1/collections/{id}Récupère une collection avec ses sections et items.PATCH/v1/collections/{id}Met à jour les métadonnées d'une collection.DELETE/v1/collections/{id}Supprime une collection (cascade sur items et sections)./v1/collections/{id}/itemsAjoute un transfert à une collection./v1/collections/{id}/sectionsCrée une section dans une collection.GET/v1/coffresListe tous les coffres du workspace.POST/v1/coffresCrée un coffre sécurisé.GET/v1/coffres/{id}Récupère un coffre avec ses sections et items imbriqués.PATCH/v1/coffres/{id}Met à jour les champs du coffre (titre, statut, sécurité, watermark, NDA).POST/v1/coffres/{id}/itemsAjoute un item au coffre (kind : transfer, external_url ou markdown).POST/v1/coffres/{id}/guestsInvite un guest nominatif par e-mail.Authentification et scopes
Toutes les requêtes doivent porter l'en-tête Authorization: Bearer <clé>. Les clés de test commencent par cof_test_…, les clés de production par cof_live_… et les clés sandbox par cof_sandbox_…. Les scopes requis par ressource sont les suivants : lecture des dossiers folders:read, création/modification/suppression de dossiers et assignation de transferts folders:manage ; lecture des collections collections:read, création/modification/suppression de collections et de leurs items collections:manage ; lecture des coffres et de leurs sections transfers:read, création/modification/suppression de coffres et de leurs items/sections transfers:write ; gestion des guests d'un coffre coffres:manage.
Partie 1 : Dossiers
Les dossiers sont le moyen le plus simple de classer vos transferts en interne. Ils n'affectent jamais l'URL publique d'un transfert : c'est purement organisationnel.
Créer un dossier et y ranger un transfert
La création d'un dossier ne demande qu'un nom et une couleur. Vous rangez ensuite un transfert dedans avec PUT /v1/transfers/{id}/folder. Voici les champs acceptés.
| Champ | Type | Requis | Description |
|---|---|---|---|
| name | string | Oui | Nom du dossier (sera tronqué si vide). |
| color | string | Non | Couleur hexadécimale (#007AFF par défaut). |
Réponse : création d'un dossier
La réponse renvoie l'id du dossier (à réutiliser pour y ranger des transferts), son name et sa color. Conservez l'id : c'est lui qui identifie le dossier dans tous les appels suivants.
Réponse : assignation d'un transfert à un dossier
Supprimer ou renommer un dossier
Un PATCH /v1/folders/{id} accepte name (string) et/ou color (string). Si aucun champ valide n'est fourni, l'API retourne 400 validation_error. Un DELETE /v1/folders/{id} supprime le dossier : les transferts qu'il contenait deviennent non classés (leur folder_id est mis à null automatiquement).
Partie 2 : Collections
Une collection est une page publique qui rassemble plusieurs transferts sous forme de liste ou de sections thématiques. Elle possède un slug unique dans le workspace (auto-calculé depuis name si absent), un logo, une couleur de couverture, une option de filigrane et une date d'expiration. Le champ is_active détermine si la page est accessible publiquement.
Corps de la requête : POST /v1/collections
Une collection se crée avec un nom et, optionnellement, une description et un mode d'affichage. Le slug public est généré automatiquement s'il n'est pas fourni. Voici les champs disponibles.
| Champ | Type | Requis | Description |
|---|---|---|---|
| name | string | Oui | Nom affiché de la collection. |
| slug | string | Non | Slug URL (auto-dérivé de name si absent, 64 chars max). |
| description | string | Non | Description courte en texte brut. |
| subtitle | string | Non | Sous-titre affiché sous le nom. |
| description_markdown | string | Non | Description longue en Markdown. |
| logo_url | string | Non | URL publique du logo. |
| cover_color | string | Non | Couleur hexadécimale de la bannière. |
| cover_image_url | string | Non | URL d'image de couverture. |
| is_active | boolean | Non | Active la page publique (true par défaut). |
| show_powered_by | boolean | Non | Affiche le badge Coffrify (true par défaut). |
| allow_download | boolean | Non | Autorise le téléchargement des fichiers (true par défaut). |
| watermark_enabled | boolean | Non | Active le filigrane sur les documents (false par défaut). |
| expires_at | string (ISO 8601) | Non | Date d'expiration de la collection. |
Réponse : GET /v1/collections/{id}
La lecture d'une collection renvoie ses métadonnées ainsi que ses sections et ses items imbriqués. C'est la structure exacte que rend la page publique correspondante.
Partie 3 : Coffres
Les coffres (/v1/coffres) sont des espaces de partage sécurisés conçus pour des échanges sensibles : due diligence, M&A, livraisons contractuelles. Ils prennent en charge la protection par mot de passe (hashé SHA-256 côté API), la vérification e-mail, la liste blanche d'adresses (allowed_emails), un NDA intégré (require_nda + nda_text), un filigrane configurable et des guests nominatifs. Chaque coffre possède un statut draft, active ou archived.
Corps de la requête : POST /v1/coffres
Un coffre se distingue d'une collection par ses options de confidentialité (mot de passe, watermark, NDA, accès nominatif). Le tableau ci-dessous détaille les champs de création.
| Champ | Type | Requis | Description |
|---|---|---|---|
| title | string | Oui | Titre du coffre. |
| slug | string | Non | Slug URL (auto-généré si absent, unicité garantie dans le workspace). |
| description | string | Non | Description courte. |
| cover_color | string | Non | Couleur hex 6 chiffres, ex. #5d50ec (défaut). |
| cover_emoji | string | Non | Emoji de couverture (défaut : 🗄️). |
| status | string | Non | draft (défaut) ou active. |
| password | string | Non | Mot de passe en clair (haché SHA-256 avant stockage, active is_password_protected). |
| require_email_verification | boolean | Non | Demande une vérification e-mail aux visiteurs. |
| allowed_emails | array[string] | Non | Liste blanche d'adresses e-mail autorisées. |
| watermark_enabled | boolean | Non | Active le filigrane sur les fichiers. |
| watermark_text | string | Non | Texte personnalisé du filigrane. |
| require_nda | boolean | Non | Affiche un NDA à accepter avant l'accès. |
| nda_text | string | Non | Contenu textuel du NDA. |
| expires_at | string (ISO 8601) | Non | Date d'expiration du coffre. |
Réponse : GET /v1/coffres/{id}
La réponse expose le coffre complet, avec son slug, son title et ses items imbriqués. Notez les champs de sécurité (statut, protections) qui conditionnent l'accès des invités.
Réponse : invitation d'un guest
L'invitation crée un accès nominatif au statut pending jusqu'à ce que l'invité l'accepte. Chaque guest est tracé individuellement, ce qui permet de révoquer un accès sans impacter les autres.
Erreurs communes
Ces erreurs valent pour les trois familles d'endpoints. Un 404 signale le plus souvent un identifiant appartenant à un autre workspace ou environnement (l'isolation est stricte).
| Code HTTP | Code API | Quand | Résolution |
|---|---|---|---|
| 400 | validation_error | Champ obligatoire absent ou invalide (ex. name vide, cover_color non hexadécimal, kind inconnu). | Vérifiez les champs requis et leurs formats (hex 6 chiffres pour les couleurs, kind parmi transfer, external_url, markdown). |
| 400 | validation_error | Aucun champ valide envoyé dans un PATCH. | Incluez au moins un champ modifiable dans le corps. |
| 400 | validation_error | Invitation sur un coffre archivé. | Passez le coffre à active avant d'inviter des guests. |
| 401 | unauthorized | Clé API absente ou invalide. | Vérifiez l'en-tête Authorization: Bearer cof_live_…. |
| 403 | forbidden | Scope manquant (ex. folders:manage ou coffres:manage). | Créez une clé avec les scopes nécessaires ou contactez l'administrateur du workspace. |
| 404 | not_found | Ressource introuvable dans le workspace (dossier, collection, coffre, transfert ou section). | Vérifiez que l'ID appartient bien au workspace de la clé API. |
| 409 | validation_error | Slug de collection déjà utilisé dans le workspace. | Choisissez un slug différent ou laissez l'auto-génération (omettez le champ slug). |
| 409 | validation_error | Transfert déjà présent dans la collection. | Le même transfert ne peut apparaître qu'une fois par collection. |
| 500 | internal_error | Erreur base de données inattendue. | Retentez la requête. Si l'erreur persiste, contactez le support avec le request_id de la réponse. |
Voir aussi
- Créer et envoyer un transfert
- Sécuriser un transfert : mot de passe, expiration, RGPD
- Analytiques et téléchargements
- Référence API complète, Dossiers
- Référence API complète, Collections
- Référence API complète, Coffres