📄
Prise en main·Débutant·10 min

Authentification : clés API et scopes

Créez, sécurisez et gérez vos clés API Coffrify pour autoriser chaque appel avec les permissions exactes dont votre intégration a besoin.

Télécharger en PDF

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éfixeTypeUsage recommandé
cof_live_<hex64>Clé full productionBackend serveur, automatisations critiques
cof_test_<hex64>Clé full testCI/CD, environnement de staging
cof_sandbox_<hex64>Clé full sandbox (expire 24h)Démos, POC éphémères
cof_rk_live_<hex64>Clé restreinte productionMicroservices, scopes limités en prod
cof_rk_test_<hex64>Clé restreinte testMicroservices en staging
cof_mcp_live_<hex64>Token MCP productionInté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).

ScopeCatégorieRisqueDescription
transfers:readTransfertsFaibleLister et lire les transferts
transfers:writeTransfertsMoyenCréer et mettre à jour des transferts
transfers:downloadTransfertsMoyenGénérer des liens de téléchargement
downloads:readTransfertsFaibleHistorique des téléchargements
collections:readTransfertsFaibleLire les collections
collections:writeTransfertsMoyenCréer/modifier des collections
collections:manageTransfertsMoyenSupprimer et administrer des collections
folders:readTransfertsFaibleLire les dossiers
folders:writeTransfertsMoyenCréer/modifier des dossiers
folders:manageTransfertsMoyenSupprimer et administrer des dossiers
magic_links:manageTransfertsMoyenCréer et révoquer des magic-links
rooms:readTransfertsFaibleLire les data rooms
rooms:manageTransfertsMoyenCréer/supprimer des data rooms
templates:readTransfertsFaibleLire les modèles
templates:manageTransfertsMoyenGérer les modèles
address_book:readTransfertsFaibleLire les destinataires
address_book:manageTransfertsMoyenGérer les destinataires
members:readMembresFaibleLister les membres du workspace
members:inviteMembresMoyenInviter de nouveaux membres
members:manageMembresÉlevéModifier les rôles, retirer des membres
audit:readSécuritéFaibleConsulter le journal d'audit
audit:exportSécuritéÉlevéExporter le journal d'audit (RGPD)
sessions:readSécuritéFaibleLister les sessions actives
sessions:manageSécuritéÉlevéRévoquer des sessions
mfa:readSécuritéFaibleLire le statut MFA
gdpr:requestSécuritéFaibleSoumettre une demande RGPD
gdpr:exportSécuritéÉlevéExporter les données RGPD
alerts:readSécuritéFaibleLire les alertes
alerts:manageSécuritéMoyenCréer/modifier des alertes
analytics:readAnalyticsFaibleStatistiques d'usage
quotas:readAnalyticsFaibleConsulter les quotas
workspace:readWorkspaceFaibleLire les paramètres du workspace
workspace:manageWorkspaceÉlevéAdministrer le workspace (god-mode)
workspace:billingWorkspaceÉlevéAccès complet à la facturation
api_keys:manageWorkspaceÉlevéCréer/révoquer des clés API
api_tokens:manageWorkspaceÉlevéCréer/révoquer des tokens MCP
webhooks:readWorkspaceFaibleLire les webhooks
webhooks:manageWorkspaceMoyenCréer/modifier des webhooks
branding:manageWorkspaceMoyenPersonnaliser le branding
domains:manageWorkspaceÉlevéGérer les domaines personnalisés
notifications:readWorkspaceFaibleLire les notifications
notifications:writeWorkspaceFaibleMarquer des notifications
notifications:manageWorkspaceMoyenAdministrer les notifications
billing:readFacturationFaibleLire l'abonnement et les factures

Corps de la requête (POST /v1/api-keys)

ChampTypeRequisDescription
namestringOuiNom lisible de la clé (affiché dans le dashboard)
descriptionstringNonDescription libre (mémorandum, usage)
environment"live" | "test"NonDéfaut : "live". Choisir "test" pour le staging
key_type"full" | "restricted"NonDéfaut : "full". "restricted" interdit les scopes admin
scopesstring[]NonDéfaut : ["transfers:read", "transfers:write"]. Liste des scopes accordés
expires_in_daysintegerNonExpiration de la clé en jours à partir de maintenant
allowed_ipsstring[]NonListe CIDR/IP autorisées (ex : ["203.0.113.0/24"])
max_usesintegerNonNombre maximum d'appels autorisés (quota absolu)
mfa_codestringConditionnelCode TOTP à 6 chiffres, requis pour tout scope à risque élevé si MFA activé
confirm_sensitivebooleanConditionneltrue requis pour les scopes à risque élevé si MFA non activé

Exemples d'appels

# Créer une clé restreinte pour lire et créer des transferts
curl -X POST https://api.coffrify.com/v1/api-keys \
-H "Authorization: Bearer cof_live_<votre_cle>" \
-H "Content-Type: application/json" \
-d '{
"name": "CI pipeline - transferts",
"description": "Clé utilisée par le pipeline GitHub Actions",
"environment": "live",
"key_type": "restricted",
"scopes": ["transfers:read", "transfers:write"],
"expires_in_days": 90
}'

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.

{
"id": "ak_01hwxyz",
"name": "CI pipeline - transferts",
"description": "Clé utilisée par le pipeline GitHub Actions",
"key_prefix": "cof_rk_live_a3f9c12b...",
"key_type": "restricted",
"scopes": ["transfers:read", "transfers:write"],
"environment": "live",
"allowed_ips": null,
"expires_at": "2026-09-04T00:00:00.000Z",
"max_uses": null,
"created_at": "2026-06-06T14:23:11.000Z",
"key": "cof_rk_live_a3f9c12b7e4d8f3a...",
"warning": "Save this key now - it will not be shown again."
}

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êteExempleDescription
X-Request-Idreq_01hwxyzIdentifiant unique de la requête (à transmettre au support)
X-Coffrify-Api-Version2026-05-14Version de l'API qui a traité la requête
X-RateLimit-Limit300Quota par minute pour cette classe d'endpoint
X-RateLimit-Remaining297Appels restants dans la fenêtre courante
X-RateLimit-Reset1749214800Timestamp Unix de réinitialisation du compteur
X-RateLimit-Policy300;w=60Politique RFC 8941 (limite;fenêtre en secondes)
Retry-After12Pré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_code avec 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: true dans 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.
# Exemple avec step-up TOTP pour une clé full (scopes admin)
curl -X POST https://api.coffrify.com/v1/api-keys \
-H "Authorization: Bearer cof_live_<votre_cle>" \
-H "Content-Type: application/json" \
-d '{
"name": "Admin automation",
"environment": "live",
"key_type": "full",
"scopes": ["workspace:manage", "members:manage"],
"mfa_code": "482019"
}'

Erreurs

HTTPCode d'erreurQuandRésolution
401missing_api_keyAucun en-tête Authorization et aucune session cookie valideAjouter Authorization: Bearer cof_live_...
401invalid_api_keyClé non trouvée en base ou préfixe non reconnuVérifier la valeur copiée, elle doit commencer par cof_live_, cof_test_, cof_rk_* ou cof_mcp_*
401expired_api_keyLa clé a dépassé son expires_atCréer une nouvelle clé avec une expiration plus longue
401revoked_api_keyLa clé a été révoquée ou désactivée (is_active = false)Créer une nouvelle clé ou réactiver depuis le dashboard
401mfa_requiredScope sensible demandé, MFA activé mais mfa_code absent ou invalideFournir le code TOTP valide dans mfa_code
401confirm_requiredScope sensible demandé, MFA non activé, confirm_sensitive absentPasser confirm_sensitive: true ou activer le MFA
403scope_missingLa clé ne porte pas le scope requis par l'endpointCréer une nouvelle clé avec les bons scopes
403ip_not_allowedL'IP source n'est pas dans allowed_ips de la cléVérifier l'IP d'émission ou supprimer la restriction
400validation_errorChamp name manquant, scope interdit sur une clé restreinte, etc.Lire le champ message de l'erreur pour le détail exact
429rate_limitedQuota par minute dépassé pour la classe d'endpoint (read/write/expensive)Attendre Retry-After secondes ou passer à un plan supérieur
429rate_limitedmax_uses atteint sur la cléCréer une nouvelle clé avec un quota plus élevé ou sans limite
500internal_errorErreur 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.

{
"error": {
"code": "mfa_required",
"message": "MFA code required for sensitive scopes",
"details": {
"sensitive_scopes": ["workspace:manage"],
"mfa_method": "totp"
}
}
}

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
Continuer

Autres tutoriels à suivre