Chaque réponse d'erreur de l'API Coffrify suit un format Stripe-style prévisible : un objet error imbriqué contenant un code machine-lisible, un message humain, un champ optionnel param (champ invalide) et un doc_url. Toutes les réponses incluent un header X-Request-Id pour corréler vos logs avec les traces Coffrify. En cas de doute, l'endpoint GET /v1/diagnostics/error/{code} fournit pour chaque code son explication complète, sa catégorie (tool_error, plan_or_quota, server_error) et ses étapes de résolution concrètes. En parallèle, GET /v1/status/services vous permet de vérifier l'état opérationnel de chaque composant Coffrify avant d'ouvrir un ticket support.
/v1/diagnostics/error/{code}Retourne l'explication, la catégorie et les next_steps pour un code d'erreur donné. Aucun scope requis.GET/v1/status/servicesRetourne l'état de chaque service Coffrify (operational, degraded, partial_outage, major_outage, maintenance) et un overall_status agrégé.Authentification
Les deux endpoints de diagnostic nécessitent un header Authorization: Bearer <clé>. Les préfixes valides sont cof_live_…, cof_test_…, cof_sandbox_… (clés complètes), cof_rk_live_… / cof_rk_test_… (clés restreintes) et cof_mcp_live_… / cof_mcp_test_… (tokens MCP). La clé est validée pour le rate-limiting uniquement : aucun `requiredScope` n'est imposé sur ces endpoints. Un token avec un scope minimal comme transfers:read suffit.
Format standard d'une réponse d'erreur
Toutes les erreurs partagent cette enveloppe : un objet error avec un code stable (à tester) et un message lisible (à journaliser). Branchez votre logique sur le code, pas sur la chaîne du message.
Catalogue des codes d'erreur
Le tableau ci-dessous recense les codes réellement renvoyés, leur statut HTTP et leur catégorie. Un même statut HTTP (par exemple 403) peut couvrir plusieurs code distincts, à traiter différemment.
| Code | HTTP | Catégorie | Quand | Résolution |
|---|---|---|---|---|
| missing_api_key | 401 | tool_error | Aucun header Authorization ni cookie de session valide | Ajouter Authorization: Bearer cof_live_… à chaque requête |
| invalid_api_key | 401 | tool_error | Préfixe non reconnu ou clé absente de la base | Vérifier la variable d'environnement, régénérer sur /developer/api-keys |
| expired_api_key | 401 | tool_error | Clé dépassant sa date d'expiration (webhook api_key.expired émis automatiquement) | Régénérer une clé sans expiration ou activer la rotation automatique |
| revoked_api_key | 401 | tool_error | Clé révoquée ou désactivée dans le dashboard | Créer une nouvelle clé et la déployer dans vos environnements |
| ip_not_allowed | 403 | tool_error | IP appelante absente de la liste blanche de la clé | Ajouter l'IP côté console ou utiliser une clé sans restriction d'IP |
| scope_missing | 403 | tool_error | Token sans le scope requis par l'endpoint (requiredScope du handler) | Réémettre un token MCP ou une clé API avec le scope manquant |
| rate_limited | 429 | plan_or_quota | Quota req/min dépassé sur la classe read, write ou expensive | Lire Retry-After, retry exponentiel, upgrader vers Ultra (6000 req/min) |
| idempotency_conflict | 409 | tool_error | Même Idempotency-Key reçue avec un corps différent | Utiliser une nouvelle clé d'idempotence pour ce nouvel appel |
| idempotency_in_progress | 409 | tool_error | Requête avec cette clé encore en cours | Patienter quelques secondes puis réessayer |
| validation_error | 422 | tool_error | Corps JSON invalide ou champ requis manquant (voir error.param) | Corriger le champ signalé dans error.param |
| payload_too_large | 413 | tool_error | Corps de requête trop volumineux | Réduire la charge utile ou utiliser l'upload multipart |
| not_found | 404 | tool_error | ID inexistant dans ce workspace (Coffrify ne révèle pas les IDs d'autres workspaces) | Vérifier l'ID dans le dashboard, utiliser la pagination cursor |
| forbidden | 403 | tool_error | Workspace non trouvé pour cet utilisateur | Vérifier l'appartenance au workspace ou le cookie cf-workspace-id |
| conflict | 409 | tool_error | État déjà terminal (approbation déjà validée, etc.) | Relire l'état de la ressource avant d'agir (v1.3) |
| feature_not_available | 402 | plan_or_quota | Fonctionnalité (SSO, SCIM, domaine custom…) hors du plan actuel | Consulter coffrify_list_pricing_plans ou upgrader |
| mfa_required | 403 | tool_error | MFA obligatoire pour émettre des clés à scopes sensibles (v1.4) | Activer le MFA et compléter la vérification step-up |
| internal_error | 500 | server_error | Erreur interne Coffrify inattendue | Retry avec backoff, signaler sur GitHub si persistant |
Appeler le catalogue de diagnostic
Plutôt que de coder en dur ces explications, vous pouvez les obtenir à la volée via /v1/diagnostics/error/{code}. Les exemples ci-dessous montrent comment l'appeler.
Réponse du catalogue
La réponse fournit un title, une explication et des next_steps pour le code demandé. Idéal pour afficher un message d'aide contextuel à vos utilisateurs ou enrichir vos logs.
Headers de rate-limiting et de traçabilité
Au-delà du corps, plusieurs en-têtes accompagnent chaque réponse. Notez surtout X-Request-Id (à fournir au support) et les en-têtes de quota, listés ci-dessous.
| Header | Valeur typique | Usage |
|---|---|---|
X-Request-Id | req_9f3b2a… | Identifiant unique de la requête. À communiquer au support Coffrify pour toute investigation. |
X-Coffrify-Api-Version | 2026-05-14 | Version de l'API ayant traité la requête. |
X-RateLimit-Limit | 600 | Quota total de requêtes autorisées sur la fenêtre glissante de 60 s. |
X-RateLimit-Remaining | 42 | Requêtes restantes dans la fenêtre courante. |
X-RateLimit-Reset | 1749200000 | Timestamp Unix de réinitialisation du compteur. |
Retry-After | 37 | Présent uniquement sur les 429. Secondes à attendre avant de réessayer. |
X-Coffrify-Idempotent-Replay | true | Présent si la réponse est rejouée depuis le cache d'idempotence. |
Voir aussi
- Premiers pas avec l'API Coffrify
- Authentification et gestion des clés API
- Rate limiting et idempotence
- Scopes et permissions des tokens MCP
- Recevoir des événements avec les Webhooks
- Référence complète des erreurs