☰ Меню · Ошибки
Начало работы

Ошибки

HTTP-статус показывает класс проблемы, а JSON в теле ответа говорит, что именно не так и, если дело в одном поле, в каком.

JSON
{
  "error": {
    "type": "invalid_request_error",
    "code": "parameter_invalid",
    "message": "consent: must be true: confirm the guest agreed to data processing",
    "param": "consent"
  },
  "request_id": "req_0d4d15b86c484738b46b"
}
error.typestring
Общий класс ошибки: invalid_request_error, authentication_error, permission_error, idempotency_error, rate_limit_error, api_error.
error.codestring
Стабильный машиночитаемый код, например member_not_found. Стройте логику на нём, а не на тексте сообщения.
error.messagestring
Пояснение для разработчика. Текст может меняться, не разбирайте его программно.
error.paramstring
Поле запроса, к которому относится ошибка, если оно есть.
request_idstring
Также приходит в заголовке X-Request-Id каждого ответа. Указывайте его, когда пишете нам.

HTTP-статусы

СтатусЗначениеЧто делать
200, 201Успех. 201 означает, что создан новый объект.
400Запрос составлен неверно или поле содержит недопустимое значение.Исправьте запрос. Повтор с тем же телом даст тот же ответ.
401Ключа нет, он неизвестен или отозван.Проверьте ключ.
402Запрос корректен, но выполнить его нельзя, например не хватает баланса.Покажите гостю сообщение, подробности есть в теле ответа.
403У ключа нет права, нужного для этого запроса.Используйте ключ с правом, указанным в сообщении.
404Участника, транзакции, блюда или заказа нет в этом заведении.Проверьте идентификатор.
409Конфликт: номер карты занят, переход статуса недопустим или баланс изменился во время запроса.Посмотрите код ошибки. При balance_conflict повторите запрос с тем же external_id.
429Слишком много запросов.Подождите столько секунд, сколько указано в Retry-After.
500, 502, 503Сбой на нашей стороне.Повторите запрос с нарастающей паузой и тем же external_id или Idempotency-Key. Повторно ничего не применится.

Частые коды

КодКогда возникает
parameter_invalidПоле не передано или имеет неверный формат. Смотрите param.
member_not_foundНет участника с таким номером карты, штрихкодом, телефоном или id.
card_number_takenЭтот номер карты уже есть у другого участника заведения.
insufficient_balanceredeem_amount больше баланса кэшбэка. Баланс указан в available.
redeem_not_supportedВ программе участника нет баланса кэшбэка, который можно списать.
visit_not_supportedВизит передан для программы с кэшбэком. Вместо него передайте чек с суммой.
no_reward_availableУ участника нет заработанной награды.
transaction_not_foundНет транзакции с таким external_id.
invalid_status_transitionЗаказ нельзя перевести из текущего статуса в переданный.
missing_scopeУ ключа нет нужного права.
hold_requiredЗаведение списывает кэшбэк только через резерв. Создайте его через POST /v1/holds.
hold_expired, hold_captured, hold_releasedРезерв больше нельзя использовать. Создайте новый.
register_id_requiredЗаведение нумерует чеки по кассам, поэтому register_id обязателен.
check_too_oldclosed_at старше, чем принимает заведение.
scan_requiredЗаведение принимает это только для карты, которую этот ключ недавно отсканировал.
refund_exceeds_checkВозврат больше, чем осталось от чека. Остаток указан в refundable.
adjustments_disabledЗаведение не разрешило корректировки баланса через API.
idempotency_key_reusedТот же Idempotency-Key использован с другим телом запроса.
rate_limitedСлишком много запросов с этим ключом.
Вопросы по интеграции: api@loyaltyfy.io. Отвечаем в течение одного рабочего дня.