Requête exemple
Réponse exemple
Crée un nouveau coffre (espace de partage de documents) au sein du workspace authentifié. L'endpoint accepte au minimum un title et renvoie le coffre créé avec le statut HTTP 201. Comportement notable : si vous ne fournissez pas de slug, il est généré automatiquement à partir du titre (translittéré, mis en minuscules, tronqué à 48 caractères, suffixé d'un identifiant aléatoire) ; l'unicité du slug est garantie au sein du workspace, et en cas de collision un suffixe court de 4 caractères est ajouté. Le coffre est créé en statut draft par défaut, sauf si vous passez explicitement status: "active". Si un password est fourni, il est haché en SHA-256 côté serveur (jamais stocké en clair) et le coffre est automatiquement marqué comme protégé par mot de passe.
Authentification
Cet endpoint requiert une clé API valide (en-tête Authorization: Bearer cof_live_... ou cof_test_...) portant le scope transfers:write. Le coffre est rattaché au workspace et à l'utilisateur résolus à partir de la clé : les champs workspace_id et user_id sont déduits du contexte d'authentification et ne peuvent pas être surchargés via le corps de la requête. Une clé sans le scope requis reçoit une erreur 403 scope_missing.
Corps de la requête
Le corps doit être un objet JSON. Seul title est obligatoire ; tous les autres champs sont optionnels et appliquent des valeurs par défaut ou une validation stricte.
| Champ | Type | Requis | Description |
|---|---|---|---|
| title | string | Oui | Titre du coffre. Ne doit pas être vide (espaces ignorés). Sert aussi de base au slug auto-généré. |
| slug | string | Non | Slug personnalisé. Normalisé en minuscules, espaces convertis en tirets, caractères non alphanumériques retirés, tronqué à 60 caractères. Si absent, généré depuis le titre. Rendu unique dans le workspace. |
| description | string | Non | Description libre. Espaces de début/fin retirés ; une chaîne vide est convertie en null. |
| cover_color | string | Non | Couleur de couverture au format hexadécimal #RRGGBB. Toute valeur invalide est remplacée par la valeur par défaut #5d50ec. |
| cover_emoji | string | Non | Emoji de couverture. Par défaut 🗄️ si absent ou vide. |
| status | string | Non | Statut initial. Seule la valeur active est prise en compte ; toute autre valeur (ou absence) donne draft. |
| password | string | Non | Mot de passe d'accès. Haché en SHA-256 côté serveur. Sa présence force is_password_protected à true. |
| is_password_protected | boolean | Non | Active la protection par mot de passe. Mis automatiquement à true si password est fourni. |
| expires_at | string (ISO 8601) | Non | Date/heure d'expiration du coffre. Stockée telle quelle si fournie. |
| watermark_enabled | boolean | Non | Active le filigrane sur les documents. Pris en compte uniquement si booléen. |
| watermark_text | string | Non | Texte du filigrane. |
| require_nda | boolean | Non | Exige l'acceptation d'un NDA avant l'accès. |
| nda_text | string | Non | Texte du NDA présenté au visiteur. |
| require_email_verification | boolean | Non | Exige une vérification de l'e-mail du visiteur avant l'accès. |
| allowed_emails | string[] | Non | Liste d'adresses e-mail autorisées à accéder au coffre. Prise en compte uniquement si c'est un tableau. |
Réponse
En cas de succès, l'API renvoie 201 Created avec l'objet coffre créé. La réponse contient un sous-ensemble de champs : id (UUID du coffre), slug (slug final, éventuellement suffixé), title, description, cover_color, cover_emoji, status (draft ou active), view_count et unique_viewers (initialisés à 0), expires_at et created_at. Les champs sensibles comme password_hash ne sont jamais renvoyés. L'en-tête X-Request-Id est inclus pour le traçage, ainsi que les en-têtes X-RateLimit-*.
Erreurs
| Code | Statut HTTP | Quand | Comment résoudre |
|---|---|---|---|
| validation_error | 400 | Le corps n'est pas un objet JSON, ou title est absent / vide / non-chaîne. | Envoyez un corps JSON valide avec un title non vide. |
| missing_api_key | 401 | En-tête Authorization absent. | Ajoutez Authorization: Bearer cof_live_... (ou cof_test_...). |
| invalid_api_key | 401 | Clé API malformée, inconnue ou révoquée. | Vérifiez le préfixe et la validité de la clé dans la console. |
| scope_missing | 403 | La clé ne porte pas le scope transfers:write. | Régénérez une clé incluant le scope transfers:write. |
| rate_limited | 429 | Quota de requêtes par minute du workspace dépassé (classe write). | Respectez l'en-tête Retry-After puis réessayez ; voir la doc rate limits. |
| internal_error | 500 | Erreur d'insertion en base de données. | Réessayez ; si le problème persiste, contactez le support avec le request_id. |
Voir aussi
GET/v1/coffresListe les coffres du workspace (jusqu'à 200, triés du plus récent au plus ancien). Scope requis : transfers:read.POST/v1/coffres/{id}/sectionsAjoute une section organisationnelle à un coffre existant.POST/v1/coffres/{id}/itemsAjoute un document ou élément à un coffre existant.