Мережа іноді обриває запит, і невідомо, чи дійшов він. Щоб повторити POST і не виконати (та не оплатити) роботу двічі, передайте заголовок Idempotency-Key - унікальне значення на кожну логічну операцію. Добре підходить UUID.
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}'
Як це працює
- Перший запит з ключем виконується звичайно, його успішна відповідь запам'ятовується.
- Повтор з тим самим ключем повертає збережену відповідь: інструмент не запускається вдруге і не списується вдруге.
- Поки перший запит ще виконується, другий запит з тим самим ключем отримує
409зtitle: idempotency_conflict. Дочекайтеся і повторіть з тим самим ключем. - Якщо перший запит завершився помилкою, ключ звільняється - повтор з ним виконається заново. Запит, який не дійшов до сервісу (відмова з'єднання), теж звільняє ключ.
- Після таймауту (
502 provider_error) інструмента, створення об'єкта або створення ліда ключ лишається зайнятим 15 хвилин, щоб повтор не виконав роботу вдруге. Перш ніж повторювати, перевірте результат: для інструментів -GET /works, для створення -GET /objectsіGET /leads. Результати покращення фото, сайту й чернетки вGET /worksне зберігаються - перевіряйте їх у кабінеті або серед своїх об'єктів. Повтор після 15 хвилин виконає роботу (і спише її) ще раз. - Виняток - експрес-оцінка: після таймауту ключ звільняється - повторіть її з тим самим ключем одразу, готова оцінка повернеться безкоштовно: ні оцінка, ні виклик API вдруге не списуються.
- Ключ пам'ятається 24 години і належить вашому API-ключу та операції - методу і фактичному шляху: однакові значення різних API-ключів, той самий ключ на іншому інструменті, а також
POST /objects/propertyіPOST /objects/rental- різні запити.
Тіло повтору не порівнюється з першим запитом. Якщо надіслати інший запит з уже використаним ключем, ви отримаєте відповідь на перший. Новий ключ - на кожну нову операцію.
Де діє
| Запит | |
|---|---|
POST /valuation/express і всі інструменти (POST /valuation/report, POST /content/generate, POST /flyer/create тощо) | так |
POST /objects/{kind} - створення об'єкта | так |
POST /leads - створення ліда | так |
POST /match/leads/{id}/events - подія Swipe Match | так; ключ має відповідати ^[A-Za-z0-9_.:-]{8,128}$, інакше він ігнорується |
POST /uploads, POST /chat/messages, POST /valuation/review/jobs/{id}/confirm | ні (у чату для цього є clientMessageId) |
У SDK ключ передається останнім аргументом методу.
Пов'язані статті
- Помилки - що повторювати і коли.
- Ліміти і оплата - що списується.