Chaque requête adressée à api.coffrify.com/v1 doit être authentifiée via un en-tête Authorization: Bearer <clé>. L'API valide la clé à chaque appel : elle vérifie son hash SHA-256, son cycle de vie (révoquée, expirée, quota max d'usages atteint), la liste d'IP autorisées si elle est définie, puis contrôle que la clé porte le scope requis par l'endpoint. Aucune session, aucun cookie, aucun OAuth n'est nécessaire pour les intégrations serveur-à-serveur.
Endpoints de gestion des clés
GET/v1/api-keysListe toutes les clés API du workspace (métadonnées uniquement, jamais la valeur brute).POST/v1/api-keysCrée une nouvelle clé API. La valeur brute est retournée une seule fois dans le champ `key`.Authentification requise
Ces deux endpoints requièrent le scope api_keys:manage. Ce scope est classé risque élevé dans le catalogue Coffrify : il déclenche un step-up d'authentification lors de la création (voir section "Création d'une clé" ci-dessous). Seules les clés de type full (cof_live_*, cof_test_*) peuvent porter ce scope. Les clés restreintes (cof_rk_live_*, cof_rk_test_*) ne peuvent jamais l'obtenir.
Formats de clés acceptés
L'API reconnaît six familles de préfixes. Utilisez toujours le bon type pour votre contexte :
| Préfixe | Type | Usage recommandé |
|---|---|---|
cof_live_<hex64> | Clé full production | Backend serveur, automatisations critiques |
cof_test_<hex64> | Clé full test | CI/CD, environnement de staging |
cof_sandbox_<hex64> | Clé full sandbox (expire 24h) | Démos, POC éphémères |
cof_rk_live_<hex64> | Clé restreinte production | Microservices, scopes limités en prod |
cof_rk_test_<hex64> | Clé restreinte test | Microservices en staging |
cof_mcp_live_<hex64> | Token MCP production | Intégration Claude Desktop, Cursor, agents IA |
Catalogue des 43 scopes
Chaque scope correspond à une permission fine. L'API applique une hiérarchie : un scope large (workspace:manage) satisfait automatiquement les scopes plus fins qu'il couvre (members:read, analytics:read, audit:read, billing:read, etc.). Le wildcard * accorde toutes les permissions (uniquement disponible en session dashboard).
| Scope | Catégorie | Risque | Description |
|---|---|---|---|
transfers:read | Transferts | Faible | Lister et lire les transferts |
transfers:write | Transferts | Moyen | Créer et mettre à jour des transferts |
transfers:download | Transferts | Moyen | Générer des liens de téléchargement |
downloads:read | Transferts | Faible | Historique des téléchargements |
collections:read | Transferts | Faible | Lire les collections |
collections:write | Transferts | Moyen | Créer/modifier des collections |
collections:manage | Transferts | Moyen | Supprimer et administrer des collections |
folders:read | Transferts | Faible | Lire les dossiers |
folders:write | Transferts | Moyen | Créer/modifier des dossiers |
folders:manage | Transferts | Moyen | Supprimer et administrer des dossiers |
magic_links:manage | Transferts | Moyen | Créer et révoquer des magic-links |
rooms:read | Transferts | Faible | Lire les data rooms |
rooms:manage | Transferts | Moyen | Créer/supprimer des data rooms |
templates:read | Transferts | Faible | Lire les modèles |
templates:manage | Transferts | Moyen | Gérer les modèles |
address_book:read | Transferts | Faible | Lire les destinataires |
address_book:manage | Transferts | Moyen | Gérer les destinataires |
members:read | Membres | Faible | Lister les membres du workspace |
members:invite | Membres | Moyen | Inviter de nouveaux membres |
members:manage | Membres | Élevé | Modifier les rôles, retirer des membres |
audit:read | Sécurité | Faible | Consulter le journal d'audit |
audit:export | Sécurité | Élevé | Exporter le journal d'audit (RGPD) |
sessions:read | Sécurité | Faible | Lister les sessions actives |
sessions:manage | Sécurité | Élevé | Révoquer des sessions |
mfa:read | Sécurité | Faible | Lire le statut MFA |
gdpr:request | Sécurité | Faible | Soumettre une demande RGPD |
gdpr:export | Sécurité | Élevé | Exporter les données RGPD |
alerts:read | Sécurité | Faible | Lire les alertes |
alerts:manage | Sécurité | Moyen | Créer/modifier des alertes |
analytics:read | Analytics | Faible | Statistiques d'usage |
quotas:read | Analytics | Faible | Consulter les quotas |
workspace:read | Workspace | Faible | Lire les paramètres du workspace |
workspace:manage | Workspace | Élevé | Administrer le workspace (god-mode) |
workspace:billing | Workspace | Élevé | Accès complet à la facturation |
api_keys:manage | Workspace | Élevé | Créer/révoquer des clés API |
api_tokens:manage | Workspace | Élevé | Créer/révoquer des tokens MCP |
webhooks:read | Workspace | Faible | Lire les webhooks |
webhooks:manage | Workspace | Moyen | Créer/modifier des webhooks |
branding:manage | Workspace | Moyen | Personnaliser le branding |
domains:manage | Workspace | Élevé | Gérer les domaines personnalisés |
notifications:read | Workspace | Faible | Lire les notifications |
notifications:write | Workspace | Faible | Marquer des notifications |
notifications:manage | Workspace | Moyen | Administrer les notifications |
billing:read | Facturation | Faible | Lire l'abonnement et les factures |
Corps de la requête (POST /v1/api-keys)
| Champ | Type | Requis | Description |
|---|---|---|---|
name | string | Oui | Nom lisible de la clé (affiché dans le dashboard) |
description | string | Non | Description libre (mémorandum, usage) |
environment | "live" | "test" | Non | Défaut : "live". Choisir "test" pour le staging |
key_type | "full" | "restricted" | Non | Défaut : "full". "restricted" interdit les scopes admin |
scopes | string[] | Non | Défaut : ["transfers:read", "transfers:write"]. Liste des scopes accordés |
expires_in_days | integer | Non | Expiration de la clé en jours à partir de maintenant |
allowed_ips | string[] | Non | Liste CIDR/IP autorisées (ex : ["203.0.113.0/24"]) |
max_uses | integer | Non | Nombre maximum d'appels autorisés (quota absolu) |
mfa_code | string | Conditionnel | Code TOTP à 6 chiffres, requis pour tout scope à risque élevé si MFA activé |
confirm_sensitive | boolean | Conditionnel | true requis pour les scopes à risque élevé si MFA non activé |
Exemples d'appels
Réponse (201 Created)
La valeur brute de la clé (key) n'est retournée qu'une seule fois dans cette réponse. Elle n'est jamais stockée en clair : seul son hash SHA-256 est conservé en base. Sauvegardez-la immédiatement dans votre gestionnaire de secrets.
La réponse GET /v1/api-keys retourne la même structure pour chaque clé mais sans le champ key, remplacé par le préfixe visible (key_prefix). Elle inclut également les champs is_active, used_count, last_used_at et revoked_at.
En-têtes de réponse
Chaque réponse inclut systématiquement ces en-têtes, quel que soit le résultat :
| En-tête | Exemple | Description |
|---|---|---|
X-Request-Id | req_01hwxyz | Identifiant unique de la requête (à transmettre au support) |
X-Coffrify-Api-Version | 2026-05-14 | Version de l'API qui a traité la requête |
X-RateLimit-Limit | 300 | Quota par minute pour cette classe d'endpoint |
X-RateLimit-Remaining | 297 | Appels restants dans la fenêtre courante |
X-RateLimit-Reset | 1749214800 | Timestamp Unix de réinitialisation du compteur |
X-RateLimit-Policy | 300;w=60 | Politique RFC 8941 (limite;fenêtre en secondes) |
Retry-After | 12 | Présent uniquement en cas de 429, délai d'attente en secondes |
Step-up MFA pour les scopes à risque élevé
Créer une clé full ou incluant un scope à risque élevé (ex : api_keys:manage, workspace:manage, members:manage, audit:export, gdpr:export, sessions:manage, domains:manage, workspace:billing) déclenche un step-up obligatoire. Deux cas selon la configuration MFA du compte :
- MFA activé (TOTP) : fournir
mfa_codeavec le code à 6 chiffres de l'application d'authentification. Un code de récupération (8+ caractères) est aussi accepté. - MFA non activé : fournir
confirm_sensitive: truedans le corps. L'API logge l'action et retourne un avertissement. Il est fortement conseillé d'activer le MFA (Paramètres du compte) pour passer au flux TOTP.
Erreurs
| HTTP | Code d'erreur | Quand | Résolution |
|---|---|---|---|
401 | missing_api_key | Aucun en-tête Authorization et aucune session cookie valide | Ajouter Authorization: Bearer cof_live_... |
401 | invalid_api_key | Clé non trouvée en base ou préfixe non reconnu | Vérifier la valeur copiée, elle doit commencer par cof_live_, cof_test_, cof_rk_* ou cof_mcp_* |
401 | expired_api_key | La clé a dépassé son expires_at | Créer une nouvelle clé avec une expiration plus longue |
401 | revoked_api_key | La clé a été révoquée ou désactivée (is_active = false) | Créer une nouvelle clé ou réactiver depuis le dashboard |
401 | mfa_required | Scope sensible demandé, MFA activé mais mfa_code absent ou invalide | Fournir le code TOTP valide dans mfa_code |
401 | confirm_required | Scope sensible demandé, MFA non activé, confirm_sensitive absent | Passer confirm_sensitive: true ou activer le MFA |
403 | scope_missing | La clé ne porte pas le scope requis par l'endpoint | Créer une nouvelle clé avec les bons scopes |
403 | ip_not_allowed | L'IP source n'est pas dans allowed_ips de la clé | Vérifier l'IP d'émission ou supprimer la restriction |
400 | validation_error | Champ name manquant, scope interdit sur une clé restreinte, etc. | Lire le champ message de l'erreur pour le détail exact |
429 | rate_limited | Quota par minute dépassé pour la classe d'endpoint (read/write/expensive) | Attendre Retry-After secondes ou passer à un plan supérieur |
429 | rate_limited | max_uses atteint sur la clé | Créer une nouvelle clé avec un quota plus élevé ou sans limite |
500 | internal_error | Erreur interne (base de données, etc.) | Réessayer avec un backoff exponentiel et contacter le support si persistant |
Toutes les erreurs suivent le format { "error": { "code": "...", "message": "...", "details": {...} } }. Le champ details est présent sur mfa_required et confirm_required pour lister les sensitive_scopes en cause.
Bonnes pratiques
Voir aussi
- Votre premier transfert via l'API
- Idempotency : rejouer des requêtes en toute sécurité
- Webhooks : recevoir des événements en temps réel
- Gestion des rate-limits et quotas
- Tokens MCP : connecter Claude Desktop et Cursor
- Référence complète : GET /v1/api-keys
- Référence complète : POST /v1/api-keys