Публичный API
Как устроен Public API
Возможности, ответственность систем и схема обмена.
Обновлено 20 августа 2026Что можно подключить
MenuLab Public API v1 предназначен для server-to-server интеграций: сайтов ресторанов, мобильных приложений, агрегаторов и внешних CRM. Через API интеграция может получить меню, создать и прочитать заказ, передать онлайн-оплату, отменить заказ и синхронизировать возврат.
Базовый URL примеров:
https://<домен-ресторана>/api/v1
Как распределена ответственность
| Система | За что отвечает |
|---|---|
| Внешняя интеграция | Создаёт заказ, хранит свой external_id, принимает принадлежащую ей онлайн-оплату и вызывает API эквайера для возврата |
| MenuLab | Ведёт заказ, производство, выдачу, бонусы, кассовые/POS-возвраты и состояние платежа в учёте |
| Webhook | Оперативно сообщает внешней системе об изменениях заказа и запросах возврата |
Если онлайн-платёж принят интеграцией через YooKassa или другого провайдера, MenuLab не обращается к этому провайдеру напрямую. При отмене MenuLab создаёт запрос возврата, интеграция возвращает деньги и подтверждает результат в Public API.
Источник отмены не влияет на контракт: заказ можно отменить через API или в POS MenuLab. В обоих случаях владелец внешнего платежа получает
payment.refund.requested.
Для наличных, карты курьеру и терминала возврат выполняется в кассе/POS, а создавший
заказ API-клиент получает ту же цепочку событий только для синхронизации. Поля
payment_owner: menulab_pos и action_required: false запрещают повторно обращаться
к YooKassa.
Рекомендуемая последовательность
- Создайте в MenuLab API-клиента подходящего типа.
- Сохраните API key, API secret и webhook secret на backend.
- Настройте HTTPS webhook URL.
- Создавайте заказы с уникальным
external_id. - Передавайте подтверждённую онлайн-оплату через
mark-paid. - Обрабатывайте события заказов и возвратов.
- Перед production пройдите приёмочный тест целиком.
Версионирование
Версия включена в URL (/api/v1). Интеграция не должна строить логику на неизвестных полях ответа: MenuLab может добавлять новые необязательные поля без изменения версии. Удаление поля или изменение его смысла требует отдельного совместимого перехода.