Обработка ошибок
Справочник ошибок API Lamoda. Формат ответа и коды ошибок различаются для Lamoda B2B Platform Partner API и Lamoda Seller Partner API. Убедитесь, что вы используете правильный раздел для вашего API.
Lamoda B2B Platform Partner API
REST API возвращает стандартные HTTP-коды состояния и структурированное тело ошибки с строковым кодом.
Структура ответа с ошибкой
{
"error": {
"code": "VALIDATION_FAILED",
"message": "Проверьте переданные данные",
"details": [
{
"field": "sellerId",
"issue": "Обязательное поле"
},
{
"field": "images[0].order",
"issue": "Должно быть положительным числом"
}
]
}
}
Поля ответа:
error.code— строковый машиночитаемый код (см. таблицу ниже)error.message— человекочитаемое описание ошибкиerror.details— массив подробностей валидации (может отсутствовать). Каждый элемент содержитfield(путь к полю) иissue(описание проблемы)
Коды ошибок REST API
| HTTP-статус | Код в error.code | Описание | Что делать |
| 400 |
VALIDATION_FAILED
|
Ошибка валидации данных |
Проверьте поля в details и исправьте запрос
|
| 401 |
UNAUTHORIZED
|
Токен отсутствует, истёк или невалиден |
Обновите токен через POST /auth/token
|
| 403 |
FORBIDDEN
|
Недостаточно прав для операции | Проверьте scope токена у вашего менеджера |
| 404 |
NOT_FOUND
|
Запрашиваемый ресурс не найден | Проверьте идентификатор ресурса |
| 503 |
SERVICE_UNAVAILABLE
|
Сервис временно недоступен | Повторите запрос через 5–30 секунд с экспоненциальной задержкой |
Примеры ответов REST API
400 — ошибка валидации:
{
"error": {
"code": "VALIDATION_FAILED",
"message": "Invalid sellerId",
"details": [
{ "field": "sellerId", "issue": "Обязательное поле" }
]
}
}
401 — токен невалиден:
{
"error": {
"code": "UNAUTHORIZED",
"message": "Токен отсутствует или невалиден"
}
}
404 — ресурс не найден:
{
"error": {
"code": "NOT_FOUND",
"message": "Not Found"
}
}
503 — сервис недоступен:
{
"error": {
"code": "SERVICE_UNAVAILABLE",
"message": "Сервис временно недоступен"
}
}
Lamoda Seller Partner API (JSON-RPC 2.0)
Lamoda Seller Partner API всегда возвращает HTTP 200 и использует числовые коды ошибок в теле JSON-RPC ответа.
Структура ответа с ошибкой
{
"jsonrpc": "2.0",
"id": "550e8400-e29b-41d4-a716-446655440000",
"error": {
"code": -32600,
"message": "validation failure list: seller_id is required",
"data": {
"errors": [
{ "field": "seller_id", "message": "is required" }
]
}
}
}
Поля ответа:
error.code— числовой код ошибки (см. таблицу ниже)error.message— человекочитаемое описаниеerror.data— дополнительные данные (может отсутствовать). Для ошибок валидации содержит массивerrorsс полямиfieldиmessage
Коды ошибок JSON-RPC
| Код | Название | Описание | Что делать |
-32600
|
Invalid Request | Ошибка валидации параметров запроса | Проверьте формат и обязательные поля |
-32601
|
Method not found | Указанный метод не существует | Проверьте имя метода в OpenAPI-спецификации |
-32602
|
Invalid params | Параметры запроса не прошли валидацию |
Проверьте error.data.errors для деталей
|
-32603
|
Internal error | Внутренняя ошибка сервера | Повторите запрос через 5–30 секунд |
-32000
|
Server error | Серверная ошибка (общая) | Повторите запрос через 5–30 секунд |
-32001
|
Unauthorized | Токен отсутствует, истёк или невалиден |
Обновите токен через POST /jsonrpc/v1/tokens.create
|
-32003
|
Forbidden | Недостаточно прав для выполнения операции | Проверьте scope токена у менеджера |
-32004
|
Not found | Запрашиваемый ресурс не найден | Проверьте идентификатор ресурса |
-32015...N
|
Validation error | Расширенные ошибки валидации бизнес-логики |
Проверьте error.data для деталей
|
50401
|
Invalid grant | Невалидные учётные данные при получении токена | Проверьте client_id и client_secret |
50403
|
Access denied | Доступ запрещён | Проверьте scope и права партнёра |
Маппинг JSON-RPC → REST
Если вы мигрируете с Lamoda Seller Partner API на Lamoda B2B Platform Partner API, используйте эту таблицу для сопоставления кодов:
| JSON-RPC код | REST HTTP-статус | REST код (error.code) |
-32600, -32602, -32015...N
|
400 |
VALIDATION_FAILED
|
-32001
|
401 |
UNAUTHORIZED
|
-32003
|
403 |
FORBIDDEN
|
-32004
|
404 |
NOT_FOUND
|
-32000, -32601, -32603
|
503 |
SERVICE_UNAVAILABLE
|
| Остальные коды | 503 |
SERVICE_UNAVAILABLE
|
Бизнес-ошибки
Помимо системных кодов, API возвращает бизнес-ошибки в поле message. Ниже — наиболее частые.
Авторизация и партнёры
| Сообщение (EN) | Сообщение (RU) | Причина |
Partner not found
|
Партнер не найден | Неверные credentials или партнёр не активирован |
Country is not enabled for partner
|
Страна недоступна для партнера | Попытка работать со страной, не включённой для партнёра |
Товары (номенклатура)
| Сообщение (EN) | Сообщение (RU) | Причина |
Nomenclature was not found
|
Товар не найден | SKU не существует в системе |
Nomenclature sell value in processing
|
Изменения в процессе обработки, попробуйте позже | Предыдущее изменение ещё обрабатывается |
Цены
| Сообщение (EN) | Сообщение (RU) | Причина |
Price is required if country is enabled
|
Введите цену | Не указана цена для активной страны |
Price must be rounded up to tens
|
Цена должна быть кратна 10 | Для России цена должна быть кратна 10 (без копеек) |
The sale price value is greater 20% or less 95% of price
|
Недопустимая цена с учётом скидки | Скидочная цена (sale_price) должна составлять от 20% до 95% от основной цены (price), то есть скидка — от 5% до 80% |
Missed RU nomenclature sell value
|
Не установлена цена для страны RU | Для работы с BY/KZ сначала нужно установить цену для России |
Auto conversion not enabled for country
|
Автоконвертация недоступна для страны | Автоматическая конвертация валюты не включена |
Скидки и акции
| Сообщение (EN) | Сообщение (RU) | Причина |
Sale date is required when sale price is present
|
Необходимо указать период скидки | При установке скидочной цены обязательны даты начала и окончания |
Sale start date is greater then sale end date
|
Период скидки указан неверно | Дата начала скидки позже даты окончания |
Валидации полей
Правила валидации цен
| Правило | Значение | Пример |
| Кратность для RU | Кратна 10 |
1990, 1995
|
| Минимум | ≥ 10 |
5
|
| Максимум | ≤ 99 999 990 | — |
| Скидочная цена (sale_price) | От 20% до 95% от price (скидка от 5% до 80%) | price=1000, sale_price=100 (скидка 90%) |
Формула скидки: sale_price ≥ price × 0.20 и sale_price ≤ price × 0.95. Например, для цены 1000 ₽ допустимая скидочная цена — от 200 до 950 ₽.
Форматы идентификаторов
| Поле | Формат | Пример |
seller_sku
|
Буквы, цифры, _-/.
|
SHOE-001-BLK
|
lamoda_sku
|
Генерируется Lamoda |
MP002XM0ABCD01
|
barcode
|
EAN-13 |
4607001234567
|
Доступные страны
| Код | Страна | Статус |
RU
|
Россия | Активна |
BY
|
Беларусь | Активна |
KZ
|
Казахстан | Активна |
UA
|
Украина | Deprecated |
Как обрабатывать ошибки
Lamoda B2B Platform Partner API
def handle_rest_error(response):
"""Обработка ошибок Lamoda B2B Platform Partner API"""
if response.status_code == 200:
return response.json() # Успех
error = response.json().get("error", {})
code = error.get("code", "") # Строка: "VALIDATION_FAILED", "UNAUTHORIZED", ...
message = error.get("message", "")
details = error.get("details", []) # Массив {field, issue}
if code == "UNAUTHORIZED":
# Токен истёк — обновляем
refresh_token()
return retry_request()
elif code == "VALIDATION_FAILED":
for detail in details:
print(f"Поле {detail['field']}: {detail['issue']}")
raise ValidationError(message)
elif code == "NOT_FOUND":
raise NotFoundError(message)
elif code == "SERVICE_UNAVAILABLE":
# Внутренняя ошибка — повторяем с задержкой
time.sleep(5)
return retry_request()
raise APIError(f"Ошибка {code}: {message}")
Lamoda Seller Partner API
def handle_jsonrpc_error(response):
"""Обработка ошибок Lamoda Seller Partner API"""
data = response.json() # HTTP всегда 200
error = data.get("error")
if error is None:
return data.get("result") # Успех
code = error.get("code") # Число: -32600, -32001, ...
message = error.get("message", "")
error_data = error.get("data") # Объект с errors[]
if code == -32001:
# Unauthorized — обновляем токен
refresh_token()
return retry_request()
elif code in (-32600, -32602) or (-32015 - 1000 <= code <= -32015):
# Ошибка валидации — смотрим детали
if error_data and "errors" in error_data:
for err in error_data["errors"]:
print(f"Поле {err['field']}: {err['message']}")
raise ValidationError(message)
elif code in (-32000, -32603):
# Серверная ошибка — повторяем с задержкой
time.sleep(5)
return retry_request()
raise APIError(f"Ошибка {code}: {message}")
См. также
Помогла эта информация?
Спасибо за отзыв