Ошибки
Коды ответов и формат тела ошибки.
Ошибка всегда приходит в одном формате:
{
"error": {
"code": "validation_error",
"message": "Request validation failed.",
"details": { "issues": [] },
"requestId": "8f0c…"
}
}requestId дублируется в заголовке X-Request-Id. Присылайте его в
поддержку: по нему мы найдём запрос в логах.
| HTTP | code | Когда |
|---|---|---|
| 400 | bad_request | тело не парсится как JSON; или магазин не принял запись, причина в details.reason, если она есть |
| 400 | validation_error | поля не прошли проверку, список в details.issues; неизвестный код статуса в PATCH |
| 401 | unauthorized | ключа нет, он неверный, отозван или истёк |
| 402 | forbidden | тариф магазина не включает API, магазин или его владелец отключены |
| 403 | forbidden | у ключа нет нужного права |
| 404 | not_found | объекта нет в этом магазине |
| 409 | conflict | externalId занят заказом из другого источника |
| 413 | bad_request | тело запроса больше 1 МБ |
| 429 | rate_limited | превышен лимит, ждите Retry-After секунд |
| 500 | internal_error | сбой на нашей стороне |
Ответы 400, 404 и 409 повторять бесполезно: исправьте запрос. 429 и
500 повторяйте с паузой. Создание заказа идемпотентно по externalId,
поэтому повтор POST после 500 не создаст дубль.
Лимиты
7 запросов в секунду на ключ и 20 на все ключи магазина вместе. Успешные
ответы несут X-RateLimit-Limit, X-RateLimit-Remaining и
X-RateLimit-Reset (unix-время сброса). Ответ 401 их не содержит: лимит
считается после проверки ключа.
В заказе не больше 200 позиций, количество в позиции до 100 000, сумма заказа до 2 000 000 000 копеек.