Помилки
Помилки
Конверт помилки, коди статусів і семантика збоїв
Конверт помилки
Помилки API повертають стандартний JSON-конверт із читабельним полем detail
та стабільним, машинозчитуваним code:
Розгалужуйте обробку помилок за code (стабільним), а не за detail (текстом
для людини, який може змінюватися).
Ендпоінт обміну токена (POST /api/v1/auth/token/client) використовує
простішу форму для збоїв автентифікації: {"error": "Invalid credentials"} при
401. Кожен інший ендпоінт використовує конверт detail / code, наведений вище.
Коди статусів
Приклади
Помилки під час створення проти асинхронних збоїв
Існує два різні види «збою», і вони проявляються в різних місцях:
-
Помилки під час створення (HTTP) — запит відхиляється, і нічого не списується. Вони повертаються як
4xx/5xxіз конвертом помилки в момент, коли ви викликаєтеPOST /api/v1/orders. Приклад: товар, якого немає в наявності на момент створення, повертає400 validation_error(«Item is not available»). -
Асинхронні збої (термінальний статус) — замовлення було прийнято (
201,status: "pending"), і ваш баланс було списано, але виконання пізніше дало збій або було успішним лише частково. Це не HTTP-помилка. Натомість замовлення завершується термінальнимstatusfailed(зerror/error_message, наприкладOUT_OF_STOCK, і повнимrefund_amount) абоpartial(зrefund_amountза недоставлені одиниці). Ви дізнаєтеся про це зі свого webhook абоGET /api/v1/orders/{id}.
Правило: якщо ви отримали 201, замовлення існує та було списано — слідкуйте за
його status, а не за HTTP-відповіддю, щоб дізнатися результат. Якщо ви отримали
4xx, нічого не сталося, і ви можете безпечно виправити запит і повторити спробу.
Безпечне повторення спроб
Завжди надсилайте унікальний merchant_order_id у POST /api/v1/orders. Він
унікальний у межах акаунта, тож якщо повторна спроба (після таймауту чи 5xx)
використає те саме значення, ви випадково не розмістите дубльоване замовлення —
дублікат відхиляється з 400 validation_error.