Ошибки и ограничения

Формат ошибки

Все ошибки — один и тот же вид: HTTP-код и текст.

{ "message": "Торговая точка не найдена" }

Текст рассчитан на человека и годится для лога или сообщения оператору. Логику не стройте на его содержимом — опирайтесь на HTTP-код.

Коды ответов

КодЗначениеЧто делать
200Успех
400Ошибка в запросе или бизнес-правилеЧитайте message, исправляйте запрос
401Токен неверный или истёкПолучите новый токен и повторите
404Объект не найден или не принадлежит вашему брендуПроверьте идентификатор
409Действие невозможно в текущем состоянииНе повторяйте, состояние изменилось
429Превышен лимит запросовПодождите и повторите с задержкой
500Ошибка на нашей сторонеПовторите позже, при повторении — в поддержку

Типовые ошибки

Валидация

{ "message": "Поле Торговая точка обязательно для заполнения." }
{ "message": "Поле Торговая точка должно быть корректным UUID." }
{ "message": "Поле Тип заказа должно быть целым числом." }

Возвращается первая найденная ошибка, не список. Исправили — можете получить сообщение о следующей.

Точка и меню

СообщениеКодПричина
Торговая точка не найдена404point_id неверный или точка чужого бренда
Меню не найдено404Витрина не существует или закреплена за другим ключом
Для этого ключа не выбрано внешнее меню…409Заведение не выбрало витрину для ключа. Попросите сделать это в кабинете: Интеграции → API-ключи

Товары

СообщениеКодПричина
Товар 12345 не найден в меню400Товара нет у бренда или он снят с продажи
Товар в стоп-листе: Fanta 1 л400Позиция закончилась
Недостаточно по стоп-листу: Fanta 1 л (доступно 3)400Просите больше, чем осталось
Модификатор 3884 не найден в меню400Модификатор недоступен

Все три проверяются и в POST /orders/calculate — вызывайте его перед заказом, и пользователь увидит проблему раньше.

Заказ

СообщениеКодПричина
Тип оплаты недоступен на этой торговой точке400payment_type_id не настроен на точке
Не найден подтип заказа для выбранного типа400У заведения не настроен подтип, нужно обратиться к нему
Заказ не найден404Заказ не существует или чужого бренда
Заказ уже отменён409Повторная отмена
Заказ уже принят на точке, отмена возможна только через кассу409Касса забрала заказ
Дата предзаказа должна быть как минимум через 30 минут400scheduled_at слишком близко

Ограничения

ОграничениеЗначение
Запросов в минуту на токен1200
Запросов в минуту на /auth/token60
Время жизни токена30 дней
Размер тела запроса200 МБ
comment заказа500 символов
comment позиции255 символов
external_id255 символов

При превышении лимита — 429. Повторяйте с экспоненциальной задержкой: 1 с, 2 с, 4 с, 8 с.

Повторные попытки

Можно повторять безопасно: все GET-методы и POST /orders/calculate — они ничего не меняют.

POST /orders — повторяйте только с тем же external_id. Тогда повтор вернёт существующий заказ, а не создаст второй. Без external_id повтор создаст дубль.

Что повторять: 429, 500, таймауты, обрывы соединения. Что не повторять: 400, 404, 409 — они не изменятся сами; сначала исправьте запрос.

Изоляция данных

Ключ видит только данные своего бренда. Обращение к точке, меню или заказу другого заведения вернёт 404 — не 403, чтобы по коду ответа нельзя было выяснить, существует ли объект.

Поддержка

Не сходятся суммы, не приходят заказы, непонятная ошибка — обращайтесь в поддержку Mison. Приложите:

  • external_id и order_id заказа;
  • point_id;
  • время запроса с часовым поясом;
  • тело запроса и полученный ответ.