Chaque fois que vous envoyez un POST vers l'API Coffrify, un réseau instable peut interrompre la connexion avant que vous receviez la réponse. Sans mécanisme de protection, relancer la requête crée un second transfert ou une seconde boîte de dépôt. L'en-tête Idempotency-Key résout ce problème : si vous renvoyez exactement le même corps avec la même clé, l'API vous restitue la réponse originale sans exécuter l'opération une deuxième fois.
/v1/transfersCrée un transfert et retourne les URLs d'upload signées. Idempotent via Idempotency-Key.POST/v1/requestsCrée une boîte de dépôt (request inbox). Idempotent via Idempotency-Key.Authentification
Tous les appels mutatifs requièrent une clé API avec le scope transfers:write. Passez votre clé dans l'en-tête Authorization: Bearer <clé>. Le format des clés est cof_live_… en production, cof_test_… en test, et cof_sandbox_… en sandbox. L'idempotence est isolée par workspace et par clé API : deux workspaces différents peuvent réutiliser les mêmes valeurs d'Idempotency-Key sans interférence.
Comment fonctionne l'Idempotency-Key
Lors du premier appel, l'API stocke un verrou associant votre clé, votre workspace, votre clé API et un hash SHA-256 du corps de la requête. La réponse (statut, corps, en-têtes) est persistée à l'issue du traitement. Lors d'un second appel avec la même clé : si le corps est identique, la réponse stockée est retournée immédiatement avec l'en-tête X-Coffrify-Idempotent-Replay: true. Si le corps diffère, l'API répond 409 idempotency_conflict pour vous alerter d'un conflit de paramètres.
| Scénario | Comportement | En-tête de réponse |
|---|---|---|
| Première requête | Traitement normal, réponse stockée | (aucun) |
| Relance, même corps | Réponse originale rejouée (201) | X-Coffrify-Idempotent-Replay: true |
| Relance, corps différent | Erreur 409 idempotency_conflict | (aucun) |
| Requête en cours (lock) | Erreur 409 idempotency_in_progress | (aucun) |
Exemple : créer un transfert de façon idempotente
Réponse
Que la réponse soit originale ou rejouée, le corps est identique. Seul l'en-tête X-Coffrify-Idempotent-Replay: true distingue un replay. Le statut HTTP retourné est 201 Created dans les deux cas.
Erreurs
| Code HTTP | Code erreur | Quand | Résolution |
|---|---|---|---|
| 400 | validation_error | La valeur de l'Idempotency-Key fait moins de 8 ou plus de 255 caractères. | Utilisez une valeur UUIDv4 (36 caractères, toujours valide). |
| 409 | idempotency_conflict | La même clé a déjà été utilisée avec un corps de requête différent. | Générez une nouvelle clé UUIDv4 pour cette nouvelle opération. |
| 409 | idempotency_in_progress | Une autre requête avec la même clé est en cours de traitement. | Attendez quelques secondes et relancez avec la même clé. |
| 401 | invalid_api_key | Clé API absente, expirée ou révoquée. | Vérifiez votre clé cof_live_… ou cof_test_… dans la console. |
| 403 | scope_missing | La clé API ne possède pas le scope transfers:write. | Recréez une clé avec le scope transfers:write dans la console. |
| 429 | rate_limited | Quota de requêtes par minute dépassé. | Respectez l'en-tête Retry-After retourné dans la réponse. |
Voir aussi
- Créer votre premier transfert
- Créer une boîte de dépôt (Request Inbox)
- Gestion des erreurs et retry
- Rate limiting : quotas et en-têtes
- Référence complète de l'endpoint POST /v1/transfers