AploDelivery Partner API — портал разработчика · v2 (2026-10-16)

Жизненный цикл заказа

Работает

Заказ несёт два независимых поля состояния, которые легко перепутать:

Плюс отдельное поле cancelState, которое описывает попытку отмены и не является частью основной цепочки state — см. Отмену заказа.

Диаграмма состояний state

stateDiagram-v2
    [*] --> queued: POST /v1/orders (201)
    queued --> claimed: плагин на кассе забирает заказ (claim)
    queued --> cancelled: партнёр отменяет ДО claim (POST .../cancel)
    claimed --> prepared
    claimed --> rejected_final: плагин не смог подготовить заказ
    prepared --> create_sending
    prepared --> rejected_final: плагин не смог отправить заказ
    create_sending --> created_verified: iiko подтвердил создание
    create_sending --> reconciliation_required: ответ iiko не получен однозначно
    reconciliation_required --> created_verified: сверка подтвердила создание
    reconciliation_required --> manual_review: сверка не смогла подтвердить
    created_verified --> [*]
    rejected_final --> [*]
    manual_review --> [*]
    cancelled --> [*]

Важные свойства, которых нет на схеме, но которые нужно знать:

Значения state и подписи для пользователя

stateПодпись в UI (RU)Смысл
queued«Принят»заказ создан в AploDelivery, ждёт, пока плагин на кассе его заберёт
claimed«Взято в обработку»плагин забрал заказ, готовит к отправке
prepared«Подготовлен к отправке»заказ прошёл маппинг товаров/адреса, готов уйти в iiko
create_sending«Передаётся в ресторан»запрос создания уже отправлен в iiko, ответ ещё не подтверждён
created_verified«Создан в ресторане»заказ подтверждённо существует в iiko, дальше действует deliveryStatus
reconciliation_required«Требует сверки»ответ iiko неоднозначен, идёт автоматическая сверка
manual_review«На ручной проверке»сверка не смогла подтвердить создание автоматически, нужен человек
rejected_final«Отклонён»заказ не был создан, дальнейших действий по нему нет
cancelled«Отменён»заказ отменён партнёром до того, как его забрал плагин

Диаграмма deliveryStatus

deliveryStatus начинает заполняться только после state = created_verified и обновляется плагином при каждом опросе кассы:

stateDiagram-v2
    [*] --> Unconfirmed
    Unconfirmed --> New
    New --> Waiting
    Waiting --> OnWay
    OnWay --> Delivered
    Delivered --> Closed
    New --> Cancelled
    Unconfirmed --> Cancelled
    Closed --> [*]
    Cancelled --> [*]
deliveryStatusПодпись в UI (RU)
Unconfirmed«Статус не подтверждён»
New«Новый»
CookingStarted«Готовится»
CookingCompleted«Приготовлен»
Waiting«Ожидает»
OnWay«В пути»
Delivered«Доставлен»
Closed«Закрыт»
Cancelled«Отменён»

Диаграмма выше показывает типичный порядок на практике. Сервер не проверяет, что переход между конкретными значениями допустим — он принимает любое валидное значение enum и применяет его как текущее, если его occurredAt не старше уже сохранённого (см. «Порядок и идемпотентность» ниже). Единственное жёсткое правило — Delivered, Closed и Cancelled терминальны (domain.DeliveryStatus.Terminal()): именно на них плагин прекращает опрашивать заказ. Не пишите на своей стороне строгий валидатор переходов между статусами доставки — он будет ломаться на реальных данных из iiko.

Важно: CookingStarted/CookingCompleted на текущих кассах не приходят

Кассы ВиЛ сейчас работают на iiko Front API V8 8.7, где у DeliveryStatus только семь значений: Unconfirmed, New, Waiting, OnWay, Delivered, Closed, Cancelled. Сервер AploDelivery технически принимает и CookingStarted, и CookingCompleted — они есть в контракте на будущее (более новая версия iiko Front API их поддерживает), — но установленный сейчас плагин их не отправляет. Между «Новый» и «Ожидает» заказ фактически готовится, но отдельного события об этом партнёр не получит.

Практическое следствие: не проектируйте UI-шаг, который блокируется ожиданием CookingStarted/CookingCompleted. Переход New → Waiting — это и есть сигнал «кухня закончила и заказ ждёт курьера/самовывоза» на текущей версии касс.

Порядок и идемпотентность обновлений

Плагин перестаёт опрашивать статус доставки конкретного заказа через 48 часов после создания, даже если тот так и не дошёл до терминального статуса — на практике это касается только аномально зависших заказов, но если вы видите заказ без обновлений deliveryStatus больше двух суток, дальнейших автоматических обновлений уже не будет.

Как узнать текущее состояние

Связанное