Il arrive que le réseau coupe une requête sans que vous sachiez si elle est arrivée. Pour relancer un POST sans exécuter (ni payer) le travail deux fois, envoyez un en-tête Idempotency-Key - une valeur unique par opération logique. Un UUID convient parfaitement.
curl -X POST https://developers.grem.capital/api/v1/valuation/express \
-H "Authorization: Bearer gsk_live_xxx" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 3f1c8a90-1e2b-4c77-9a10-2b6d0f9e4a11" \
-d '{"propertyCategory":"apartment","addressText":"Torstraße 12, Berlin","totalArea":64}'
Fonctionnement
- La première requête avec une clé s'exécute normalement ; sa réponse réussie est enregistrée.
- Une nouvelle tentative avec la même clé renvoie la réponse enregistrée : l'outil n'est pas relancé et n'est pas facturé une seconde fois.
- Tant que la première requête est en cours, une deuxième requête avec la même clé reçoit
409avectitle: idempotency_conflict. Patientez et réessayez avec la même clé. - Si la première requête a échoué, la clé est libérée - une nouvelle tentative avec elle s'exécute à nouveau. Une requête qui n'a jamais atteint le service (connexion refusée) libère également la clé.
- Après un délai dépassé (
502 provider_error) d'un outil, d'une création d'annonce ou d'une création de lead, la clé reste réservée pendant 15 minutes, afin qu'une nouvelle tentative ne puisse pas exécuter le travail deux fois. Vérifiez le résultat avant de répéter :GET /workspour les outils,GET /objectsetGET /leadspour les créations. Les résultats de l'amélioration de photos, des sites et des brouillons ne sont pas conservés dansGET /works- vérifiez-les dans l'espace personnel ou parmi vos annonces. Une répétition après ces 15 minutes exécute à nouveau le travail (et sa facturation). - L'évaluation express fait exception : après un délai dépassé, la clé est libérée - répétez-la immédiatement avec la même clé, une évaluation terminée est renvoyée gratuitement : ni l'évaluation ni l'appel d'API ne sont facturés à nouveau.
524signifie que le réseau situé devant l'API a coupé une réponse qui n'avait pas commencé dans les ~100 secondes ; le travail continue. Après524et504, la clé n'est pas libérée : répétez avec la même clé - le résultat terminé est renvoyé sans seconde facturation, et tant que le premier appel est en cours, vous recevez409. Lancez plutôt les évaluations express et de loyer avecPrefer: respond-async: la tâche est renvoyée immédiatement.- Un plan d'étage ou une vérification de rapport lancés avec
Prefer: respond-asyncpeuvent se terminer enfailedaveccode: interrupted(un redémarrage du service a interrompu la tâche). Rien n'est facturé et la clé est libérée : renvoyez la même requête avec la même clé - les fichiers sont envoyés à nouveau, sans seconde facturation. Le SDK le fait automatiquement. - Une clé est mémorisée pendant 24 heures et est liée à votre clé d'API et à l'opération - la méthode plus le chemin réel : des valeurs identiques sous des clés d'API différentes, la même clé sur un autre outil, ou
POST /objects/propertyetPOST /objects/rentalsont des requêtes différentes.
Le corps de la nouvelle tentative n'est pas comparé à celui de la première requête. Si vous envoyez une requête différente avec une clé déjà utilisée, vous recevez la réponse à la première. Utilisez une nouvelle clé pour chaque nouvelle opération.
Où elle s'applique
| Requête | |
|---|---|
POST /valuation/express et chaque outil (POST /valuation/report, POST /content/generate, POST /flyer/create, etc.) | oui |
POST /objects/{kind} - créer une annonce | oui |
POST /leads - créer un lead | oui |
POST /match/leads/{id}/events - un événement Swipe Match | oui ; la clé doit correspondre à ^[A-Za-z0-9_.:-]{8,128}$, sinon elle est ignorée |
POST /uploads, POST /chat/messages, POST /valuation/review/jobs/{id}/confirm | non (le chat utilise clientMessageId à cet effet) |
Dans le SDK, la clé est le dernier argument d'une méthode.
Voir aussi
- Erreurs - quoi relancer et quand.
- Limites et facturation - ce qui est facturé.