Инструкция для администратора и разработчика внешнего сервиса. Это последовательная диагностика, а не обещание единственной причины по сообщению об ошибке. Рабочие доступы, платежи и кассовые документы не меняйте ради проверки. Сначала сохраните обезличенный пример и уточните используемую версию интеграции.
Как проявляется проблема
- API возвращает 400 при отправке данных.
- В журнале программы значения есть, но сервер считает поле отсутствующим.
Что проверить сначала
- Объект сериализован вместо массива или наоборот.
- Перепутаны тела похожих методов.
- Обязательное поле потеряно при построении запроса.
Быстрая диагностика
| Что наблюдаем | Что проверить | Как понять результат |
|---|---|---|
| 400 после отправки | Проверить фактическое тело JSON локальным парсером. | Ошибка синтаксиса — исправлять сериализацию. |
| Синтаксис исправен | Сравнить обязательные поля именно этого endpoint. | Расхождение модели — исправлять тип или вложенность. |
| Сбой только с одним товаром | Проверить, остаётся ли items массивом. | Один элемент должен сохранить требуемую структуру. |
Три точки наблюдения
Полная формулировка из статьи
Проверить фактическое тело JSON локальным парсером. Сравнить обязательные поля именно этого endpoint. Проверить, остаётся ли items массивом.

Маршрут диагностики
Маршрут проверок
Полная формулировка из статьи
Шаг 1. Сохраните URL метода, Content-Type и обезличенное тело непосредственно перед отправкой. Не заменяйте этот снимок распечаткой исходных переменных. Если библиотека сериализует данные автоматически, выясните, не передаётся ли уже готовая строка повторно как JSON-строка. Зафиксируйте также реальный HTTP-статус и текст ответа. Шаг 2. Проверьте синтаксис локальным JSON-парсером без обращения к ресторану. Лишняя запятая, незакрытая скобка и текст отладочного сообщения относятся к формату. Если синтаксис корректен, переходите к модели: валидный JSON может иметь неверную вложенность и оставаться недопустимым для конкретного метода. Шаг 4. Сравните типы значений: строка, число, логическое значение, объект и массив. Отдельно отметьте разницу между null, отсутствием поля и пустым объектом. Если элементы должны быть массивом, один элемент тоже не превращает их в одиночный объект. Исправляйте сериализатор, чтобы следующий запрос не вернул прежнюю ошибку. Шаг 6. Повторите проблемный вариант после исправления и добавьте проверку схемы перед отправкой в собственное приложение. Сообщение пользователю должно указывать понятное действие, а технический журнал — конкретный путь поля. Не показывайте гостю весь JSON и ключи подключения. Сохраните контрольный пример для следующего обновления библиотеки.
Скриншоты и фрагменты документации

Редакционная визуализация фрагмента OpenAPI, не скриншот интерфейса iikoCloud API — официальный справочник OpenAPI. Нажмите на изображение, чтобы открыть отдельно. Сверяйте источник с версией и настройками своей системы.

Редакционная визуализация фрагмента OpenAPI, не скриншот интерфейса iikoCloud API — официальный справочник OpenAPI. Нажмите на изображение, чтобы открыть отдельно. Сверяйте источник с версией и настройками своей системы.

Редакционная визуализация фрагмента OpenAPI, не скриншот интерфейса iikoCloud API — официальный справочник OpenAPI. Нажмите на изображение, чтобы открыть отдельно. Сверяйте источник с версией и настройками своей системы.
Пошаговое решение
Отмечайте выполненные проверки. Отметки действуют до перезагрузки страницы.

Иллюстрация рабочего процесса; сгенерированное фото, не интерфейс iiko. 
Иллюстрация рабочего процесса; сгенерированное фото, не интерфейс iiko.
Развилка результата
Полная формулировка из статьи
Критерий результата: Локальная проверка подтверждает синтаксис и модель, а согласованный контрольный запрос принимается выбранным методом. Проблемный вариант воспроизведён и больше не теряет поле после сериализации. Для команды отдельно проверен её конечный результат. Передача специалисту: Передайте поставщику один воспроизводимый пример: время с часовым поясом, используемый метод, версии компонентов и обезличенные запрос с ответом. Добавьте результат каждого шага и ожидаемое поведение. Не передавайте секреты в обычном журнале; укажите correlationId, если он получен.
Как понять, что проблема решена
Локальная проверка подтверждает синтаксис и модель, а согласованный контрольный запрос принимается выбранным методом. Проблемный вариант воспроизведён и больше не теряет поле после сериализации. Для команды отдельно проверен её конечный результат.
Как снизить риск повторения
Разделите модели запросов разных endpoints и проверяйте сериализацию на границе отправки. Не собирайте JSON конкатенацией пользовательского текста. При обновлении API проверяйте обязательные поля и допустимость null по используемому контракту.
Если проблема осталась
Передайте поставщику один воспроизводимый пример: время с часовым поясом, используемый метод, версии компонентов и обезличенные запрос с ответом. Добавьте результат каждого шага и ожидаемое поведение. Не передавайте секреты в обычном журнале; укажите correlationId, если он получен.
Что передать в поддержку
Скопируйте шаблон и заполните его без паролей, API-ключей, данных карт и сведений о гостях.
Проблема: iiko API: ошибка 400 — проверка JSON и обязательных полей Версия и компонент iiko: Ресторан / рабочее место: Время сбоя и часовой пояс: Точный текст сообщения: Что ожидалось / что произошло: Какие проверки выполнены: Результат каждой проверки: Идентификатор операции (если допустимо):
Где помогает Menu 360
Menu 360 интегрируется с iiko и позволяет использовать автоматические допродажи к заказу. Перед запуском проверьте, что добавленная позиция входит в корректный состав, а не теряется при сериализации. Цены задаются в самом Menu 360. Такой контроль полезнее красивого подтверждения, если касса получила другой набор блюд.
Вопросы и ответы
Валидный JSON исключает ошибку 400?
Нет. Парсер проверяет синтаксис, а API — ещё обязательные поля, вложенность и типы. Например, объект и массив одинаково допустимы как JSON, но конкретный endpoint может принимать только один из этих вариантов.
Нужно добавлять orderRequest, если так написал старый форум?
Только если такое поле есть в контракте вашего метода. Старый пример может относиться к другому API. Сначала сравните endpoint и схему; подгонка тела под случайное сообщение может скрыть настоящую ошибку сериализации.
Источники и применимость
Официальная документация служит основой проверки возможностей iiko. Последовательность диагностики и контрольные примеры разработаны редакцией Menu 360; это не подтверждение ошибки именно в вашей конфигурации.
Обсуждения похожих ситуаций
Вопросы пользователей подтверждают наличие похожих ситуаций. Советы в обсуждениях могут относиться к старым версиям или другому модулю.
- Обсуждение: iiko API: ошибка 400 — проверка JSON и обязательных полей
Автор описал ошибку отправки и затем указал на отсутствие квадратных скобок массива. Пример старого API, не универсальный текущий контракт.