v1 · REST + Вебхуки

Документация для разработчиков

Создавайте приложения для клиентов, курьеров и мерчантов на одном API. Читайте и изменяйте рестораны, меню, заказы и курьеров; получайте события в реальном времени через подписанные webhooks. Всё ограничено владельцем токена.

🛍️ приложение для клиента 🛵 Приложение водителя 🧑‍🍳 Приложение для мерчанта

Разрабатываете для маркетплейса? Документация для разработчиков приложений →  ·  Документация для разработчиков тем →

Новинка наш Dev MCP-сервер превращает любой AI-инструмент с поддержкой MCP в эксперта по платформе. learn_platform подготавливает его, get_liquid_reference даёт ему авторитетный белый список и validate_theme запускает собственные проверки маркетплейса на его выводе — полный цикл изучение → сборка → проверка без выхода из редактора. Подключение одной командой →

Начало работы

Создайте API-токен в панели управления в разделе API-токены и Webhook. Выберите read и/или write права и скопируйте токен — он показывается только один раз.

Базовый URL: https://www.menubarcode.com/api/v1

Быстрая проверка, что ваш токен работает:

curl https://www.menubarcode.com/api/v1/restaurants \
  -H "Authorization: Bearer YOUR_TOKEN"
Корень GET https://www.menubarcode.com/api/v1 возвращает машиночитаемый индекс доступных конечных точек (авторизация не требуется). Машиночитаемая спецификация OpenAPI 3.1 (JSON) — генерируется из работающего маршрутизатора, поэтому всегда совпадает с развёрнутым API.

Аутентификация

Отправляйте токен как заголовок Bearer в каждом запросе:

Authorization: Bearer YOUR_TOKEN

Для быстрых тестов вы можете вместо этого передавать ?api_token=YOUR_TOKEN как параметр запроса, но заголовок настоятельно предпочтительнее, чтобы токены не попадали в логи.

ПравоПрава
readВсе GET конечные точки (каждый ресурс).
writeВсе изменяющие конечные точки (а как надмножество — и все чтения).

Ограниченные токены

Помимо грубых read/write, токен можно ограничить конкретными ресурсами с помощью resource:action прав. Ресурсы: restaurants, menu, orders, customers, analytics, drivers, webhooks; Действия read, write. Выберите их при создании токена в панели управления.

Пример токенаМожет делать
["orders:write"]Только чтение + запись заказов (интеграция POS).
["menu:read"]Только чтение меню; больше ничего.
["orders:read","analytics:read"]Панель отчётности.

Правила охвата: * даёт всё; область :write также даёт своё :read; грубые read/write ведут себя как *:read / *:write. Запрос без необходимой области возвращает 403. Устаревшие read/write токены не затрагиваются.

Токены хранятся в хешированном виде (SHA-256) и могут иметь необязательный срок действия. Отзывайте любой токен мгновенно из панели управления.

Ограничения частоты

API допускает 120 запросов в минуту на токен. При превышении возвращается 429 Too Many Requests с Retry-After заголовком. Стандартные заголовки лимита частоты включаются в каждый ответ:

X-RateLimit-Limit: 120
X-RateLimit-Remaining: 118

Ошибки

Каждая ошибка на /api/v1 маршруте возвращает стандартные HTTP-коды статуса и единый JSON-конверт — понятное человеку message, стабильное машинное code, и (при валидации) по полям errors Карта

{ "message": "Invalid or expired token.", "code": "unauthenticated" }

{ "message": "The given data was invalid.",
  "code": "validation_failed",
  "errors": { "title": ["The title field is required."] } }
СтатусcodeЗначение
401unauthenticatedОтсутствующий, недействительный или истёкший токен.
403forbiddenУ токена нет необходимого права/области.
404not_foundРесурс не найден или не принадлежит токену.
422validation_failedВалидация не пройдена (см. errors).
429rate_limitedПревышен лимит частоты.
Разбирайте машинный code, а не человеческий message — сообщения могут быть переформулированы или локализованы; коды стабильны.
Запрос ресурса, которым вы не владеете, возвращает 404, не 403 — API никогда не подтверждает существование данных другого владельца.

Пагинация

Конечные точки-списки возвращают конверты с пагинацией в стиле Laravel. Используйте ?page= параметр запроса для перехода по страницам.

{
  "data": [ ... ],
  "current_page": 1,
  "last_page": 3,
  "per_page": 20,
  "total": 47
}

Чтение ресторанов и меню

GET /restaurants

Список ресторанов, принадлежащих токену, с пагинацией (20 на страницу).

{
  "data": [
    { "id": 12, "title": "Nova Bistro", "slug": "nova-bistro",
      "url": "https://.../nova-bistro", "template": "linen",
      "created_at": "2026-06-01T10:22:00+00:00" }
  ],
  "current_page": 1, "last_page": 1, "total": 1
}
GET /restaurants/{id}

Один ресторан с его категориями меню и числом позиций.

GET /restaurants/{id}/menu

Полное активное меню, сгруппированное по категориям.

[
  { "id": 3, "name": "Starters",
    "items": [
      { "id": 88, "name": "Bruschetta", "price": 6.50,
        "is_sold_out": false, "is_popular": true, "is_vegan": true,
        "is_halal": true, "calories": 210 }
    ]
  }
]

Заказы

GET /restaurants/{id}/orders

Заказы, сначала новые, с пагинацией (30/страница). Фильтруйте через ?status=.

GET /restaurants/{id}/orders/{orderId}

Полная информация о заказе с позициями, опциями, курьером и хронологией доставки.

POST /restaurants/{id}/orders Написать

Создать заказ — вот как приложение для клиента отправляет корзину (токен хранится на бэкенде мерчанта). Каждая позиция проверяется по актуальному меню ресторана; распроданные или чужие позиции отклоняют весь заказ (422). Срабатывает order.created и возвращает полный заказ, включая его track_token.

curl -X POST https://www.menubarcode.com/api/v1/restaurants/12/orders \
  -H "Authorization: Bearer YOUR_TOKEN" -H "Content-Type: application/json" \
  -d '{
    "type": "delivery",
    "customer_name": "A. Idriss",
    "phone": "+15551234567",
    "address": "9 Cedar Road",
    "tip_amount": 3.00,
    "note": "Ring the bell",
    "source": "customer_app",
    "items": [
      { "item_id": 88, "quantity": 2, "variation": 5, "extras": [12], "note": "no onion" },
      { "item_id": 91, "quantity": 1 }
    ]
  }'

Заказ type является одним из on-table, takeaway, delivery. для on-table передайте table_number; для delivery передайте address.

Идемпотентность. Отправьте Idempotency-Key заголовок (или тело client_uuid) при любом вызове создания заказа. Повтор с тем же ключом возвращает исходный заказ и никогда не создаёт дубликат — безопасно при потерянных ответах и офлайн-повторах. Ключи ограничены рамками ресторана.

PUT /restaurants/{id}/orders/{orderId}/status Написать

Обновить статус кухни (new|preparing|ready|delivered|completed|cancelled). Срабатывает order.status_changed.

Storefront API (токен на ресторан)

Отдельный публичный API, аутентифицируемый через токен витрины на ресторан отправляемый как X-Storefront-Token (не Bearer-токен владельца). Выпускайте их из панели управления; каждый токен всегда может достичь только своего ресторана. Область чтения — menu:read; для оформления заказов нужна область order:write Область действия

GET /storefront/menu

Полное меню ресторана токена (варианты, опции, группы, галерея).

GET /storefront/restaurant

Базовая информация о ресторане токена.

POST /storefront/orders order:write

Отправить корзину от имени гостя. Ценообразование на сервере и не оплачен (гость платит при получении); takeaway или on-table только. Каждая позиция проверяется по актуальному меню — распроданные или чужие позиции отклоняют весь заказ (422). Лимиты: 40 позиций/заказ, 30 шт./строка. Необязательно coupon_code применяет скидку владельца на стороне сервера. Срабатывает order.created и возвращает track_token + continue_url.

curl -X POST https://www.menubarcode.com/api/v1/storefront/orders \
  -H "X-Storefront-Token: YOUR_STOREFRONT_TOKEN" -H "Content-Type: application/json" \
  -d '{
    "type": "takeaway",
    "customer_name": "A. Idriss",
    "phone": "+15551234567",
    "coupon_code": "WELCOME10",
    "items": [
      { "item_id": 88, "quantity": 2, "variation": 5, "extras": [12] },
      { "item_id": 91, "quantity": 1 }
    ]
  }'

Аналитика и клиенты

GET /restaurants/{id}/analytics

Сводка продаж за период (?from=YYYY-MM-DD&to=YYYY-MM-DD, по умолчанию последние 30 дней): число заказов по статусу/типу, валовая и оплаченная выручка, средний чек и топ позиций.

{
  "range": { "from": "2026-06-02", "to": "2026-07-02" },
  "orders": { "total": 214, "paid": 198, "by_status": {...}, "by_type": {...} },
  "revenue": { "gross": 8420.50, "paid": 7990.00, "avg_order_value": 39.35 },
  "top_items": [ { "item_id": 88, "name": "Margherita", "quantity": 143 } ]
}
GET /restaurants/{id}/customers

Список клиентов ресторана (CRM), с пагинацией. Фильтруйте через ?search=.

Управление курьерами Написать

Курьеры принадлежат вам и (необязательно) одному ресторану. Создание или ротация курьера возвращает необработанный токен курьера ровно один раз — передайте его приложению курьера; они аутентифицируются с ним (см. ниже).

GET /drivers
POST /drivers
curl -X POST https://www.menubarcode.com/api/v1/drivers \
  -H "Authorization: Bearer YOUR_TOKEN" -H "Content-Type: application/json" \
  -d '{"name":"Alex","phone":"+15550001111","restaurant_id":12}'

# → { "id": 7, "name": "Alex", ..., "token": "RAW_DRIVER_TOKEN_SHOWN_ONCE" }
PUT /drivers/{id}
DELETE /drivers/{id}
POST /drivers/{id}/rotate-token

Аннулирует старый токен и возвращает новый.

Назначить и отслеживать доставку

GET /restaurants/{id}/deliveries

Заказы на доставку, фильтруемые по ?delivery_status= и ?driver_id=.

POST /restaurants/{id}/orders/{orderId}/assign Написать

Назначить курьера {"driver_id": 7}. Задаёт delivery_status=assigned и срабатывает order.driver_assigned.

PUT /restaurants/{id}/orders/{orderId}/delivery-status Написать

Переопределить этап доставки: pending | assigned | picked_up | out_for_delivery | delivered | failed.

API приложения для водителей

Приложение курьера аутентифицируется через Токен водителя (не токен владельца), выпущенный выше. Базовый путь https://www.menubarcode.com/api/v1/driver. Каждый ответ ограничен этим одним курьером.

Authorization: Bearer RAW_DRIVER_TOKEN
GET /driver/me

Профиль аутентифицированного курьера.

GET /driver/deliveries

Заказы, назначенные этому курьеру. Добавьте ?active=1 чтобы скрыть доставленные/неудачные.

PUT /driver/deliveries/{orderId}/status

Продвинуть доставку: {"delivery_status":"out_for_delivery"} затем "delivered" или "picked_up" / "failed", необязательно note). Срабатывают те же webhooks, что и у конечной точки владельца.

PUT /driver/location

Отправить текущую позицию: {"lat":25.2048,"lng":55.2708}. Показывается в отслеживании клиента, пока заказ в пути.

Аккаунты клиентов

A автономное приложение для клиента аутентифицирует своих пользователей токеном на клиента (в стиле Sanctum: несколько устройств, отзываемых по отдельности). Токен владельца не задействован. Клиенты ограничены рамками ресторана, поэтому авторизация находится под /restaurants/{id}/customer/…. Сначала просмотрите меню через публичную конечную точку:

GET /menu/{restaurantId} Публичный

Активное меню, сгруппированное по категориям (распроданные позиции опущены). Без авторизации.

Регистрация / вход

POST /restaurants/{id}/customer/register
POST /restaurants/{id}/customer/login
curl -X POST https://www.menubarcode.com/api/v1/restaurants/12/customer/login \
  -H "Content-Type: application/json" \
  -d '{"email":"sam@example.com","password":"secret123","device":"iPhone 15"}'

# → { "token": "RAW_CUSTOMER_TOKEN", "customer": { "id": 42, "name": "Sam", ... } }

Без пароля (SMS OTP)

POST /restaurants/{id}/customer/otp/request
POST /restaurants/{id}/customer/otp/verify

Запросите код для номера телефона, затем подтвердите его. Verify находит или создаёт клиента и возвращает токен. Конечные точки авторизации имеют лимит частоты (вход/регистрация 10/мин, запрос OTP 6/мин).

API приложения для клиентов

Аутентифицируйтесь токеном клиента. Базовый путь https://www.menubarcode.com/api/v1/customer. Всё ограничено аутентифицированным клиентом — тело заказа никогда не может подделать id другого клиента.

Authorization: Bearer RAW_CUSTOMER_TOKEN
GET /customer/me
PUT /customer/me

Чтение / обновление профиля (имя, email, телефон, день рождения, согласия).

POST /customer/orders

Оформить заказ от имени этого клиента (та же структура позиций, что и у конечной точки создания мерчанта; личность берётся из токена). Возвращает заказ с его track_token.

GET /customer/orders

Собственная история заказов клиента, с пагинацией.

GET /customer/addresses
POST /customer/addresses
DELETE /customer/addresses/{id}

Сохранённые адреса доставки (первый становится основным; поддерживает lat/lng).

POST /customer/logout

Отзывает токен, использованный для запроса (только это устройство).

Отслеживание заказа Публичный

Без авторизации — доступ ограничен неугадываемым track_token (возвращается при создании заказа). Это обеспечивает работу приложение для клиента экрана отслеживания в реальном времени.

GET /track/{token}
{
  "id": 5501, "status": "preparing", "delivery_status": "out_for_delivery",
  "is_paid": true, "total": 42.00,
  "timeline": { "preparing_at": "...", "out_for_delivery_at": "..." },
  "items": [ { "name": "Margherita", "quantity": 2 } ],
  "driver": { "name": "Alex", "lat": 25.2, "lng": 55.27, "location_updated_at": "..." }
}

Блок курьера (с координатами в реальном времени) появляется только после того, как заказ забран / в пути.

Вход для сотрудников

A приложения для персонала (POS / KDS / официант) аутентифицирует каждого сотрудника токеном на сотрудника. Два пути повторяют панель управления: email + пароль или быстрый числовой PIN-код для общих кухонных планшетов. Сотрудники ограничены рамками ресторана.

POST /restaurants/{id}/staff/login
POST /restaurants/{id}/staff/pin
curl -X POST https://www.menubarcode.com/api/v1/restaurants/12/staff/pin \
  -H "Content-Type: application/json" -d '{"pin":"4321","device":"Kitchen iPad"}'

# → { "token": "RAW_STAFF_TOKEN",
#     "staff": { "id": 3, "role": "kitchen", "permissions": ["kds"] } }

Ответ перечисляет действующие Разрешения — подмножество orders, menu_edit, coupons, analytics, kds, customers производные от их роли (менеджер / кассир / кухня / официант) плюс любые переопределения на сотрудника. Конечные точки ограничены правами (403 иначе).

API приложения для персонала

Аутентифицируйтесь токеном сотрудника. Базовый путь https://www.menubarcode.com/api/v1/staff. Все действия ограничены рестораном сотрудника.

Authorization: Bearer RAW_STAFF_TOKEN
GET /staff/me

Профиль с ролью и списком прав.

GET /staff/orders orders
PUT /staff/orders/{orderId}/status orders

Список заказов и обновление статуса кухни. Требует orders права.

GET /staff/kds kds

Актуальные кухонные тикеты, сгруппированные по заказу, отфильтрованные по станции сотрудника (или ?station_id=). Показывает только позиции, ещё queued|preparing|ready.

PUT /staff/kds/items/{itemId}/bump kds
PUT /staff/kds/items/{itemId}/recall kds

Продвинуть (queued → preparing → ready → served) или откатить на один статус KDS. Статус родительского заказа синхронизируется автоматически.

POST /staff/menu/items menu_edit
PUT /staff/menu/items/{itemId} menu_edit
DELETE /staff/menu/items/{itemId} menu_edit
PATCH /staff/menu/items/{itemId}/sold-out menu_edit
POST /staff/menu/categories menu_edit

Редактируйте меню из зала (менеджеры). Те же payload, что и у конечных точек меню мерчанта, ограниченные рестораном сотрудника.

GET /staff/analytics analytics

Сводка продаж для ресторана сотрудника (та же структура, что и у конечной точки аналитики мерчанта; ?from=&to=).

POST /staff/logout

Отзывает токен этого устройства.

Webhooks — настройка

Регистрируйте конечные точки из панели управления в разделе API-токены и Webhook. Выберите, какие события получает каждая конечная точка. При сохранении вы получаете для каждой конечной точки Секрет подписи; используйте Тест кнопку, чтобы отправить ping. Приостановите конечную точку, чтобы остановить доставку, не теряя её секрет.

Ваша конечная точка должна отвечать статусом 2xx быстро (в течение 10 с). Любой другой статус — или таймаут — считается неудачей и повторяется.

Конечными точками также можно управлять программно (для REST-Hooks в Zapier/Make) с webhooks:write токеном:

GET    /api/v1/webhook-endpoints            # list your endpoints
POST   /api/v1/webhook-endpoints            # {"url":"https://…","events":["order.created"]} → 201 {id, secret, …}
DELETE /api/v1/webhook-endpoints/{id}       # unsubscribe → 204

Значение secret возвращается только при создании — сохраните его для проверки подписи. url должна быть публичной HTTPS-конечной точкой (с защитой от SSRF); events должно быть из списка ниже (или *).

События webhook

СобытиеСрабатывает, когда
order.createdОформлен новый заказ (из панели или API).
order.status_changedИзменяется статус кухни заказа (панель, POS или API).
order.paidЗаказ отмечен как полностью оплаченный (шлюз или разделённый счёт).
order.driver_assignedКурьер назначен на доставку.
order.out_for_deliveryКурьер в пути к клиенту.
order.deliveredДоставка завершена.
order.delivery_failedДоставку не удалось завершить.
refund.completedВозврат средств по заказу выполнен.
reservation.createdСоздаётся бронирование стола.
reservation.cancelledБронирование столика отменено.
customer.createdСоздаётся новая запись клиента.
shift.openedОткрыта смена кассы / POS.
shift.closedКассовая / POS-смена закрыта.
menu.updatedПозиция меню или категория создана, обновлена или удалена (на любой поверхности). Payload: {restaurant_id, change, entity, id}.
entitlement.changedПраво на функцию предоставлено или отозвано для рабочего пространства (смена плана, дополнение, установка/удаление приложения, переопределение админом). Payload: {action, feature_key, source_type, source_id, user_id, occurred_at} где action равно granted или revoked.
subscription.*Жизненный цикл подписки: subscription.paused, .resumed, .renewed, .expired, .plan_changed, .past_due, .expiring, .trial_ending.
app.uninstalledПриложение маркетплейса удалено (доставляется на конечную точку приложения).
*Подписаться на все события выше.
pingОтправляется кнопкой Тест для проверки связи.

Доставка не удалась, пока ваша конечная точка была недоступна? Используйте Повторить доставку на любой строке в журнале «Недавние доставки» панели, чтобы снова поставить её в очередь с новым webhook-id.

Payload webhook

Каждая доставка — это POST с этим JSON-конвертом и этими заголовками:

POST /your-endpoint HTTP/1.1
Content-Type: application/json
webhook-id: msg_a1b2c3d4e5f6g7h8i9j0k1l2
webhook-timestamp: 1751472240
webhook-signature: v1,K5f...base64...==
X-Webhook-Event: order.created          (legacy)
X-Webhook-Signature: 9a3f...hex...      (legacy, HMAC of body only)

{
  "id": "msg_a1b2c3d4e5f6g7h8i9j0k1l2",
  "event": "order.created",
  "created_at": "2026-07-02T18:04:00+00:00",
  "data": { "order_id": 5501, "total": "42.00" }
}

Значение id уникален для каждой доставки. Поскольку повторы используют тот же id, используйте его, чтобы сделать ваш обработчик идемпотентным.

Проверка подписи

Значение webhook-signature заголовок — это HMAC-SHA256 в кодировке base64, вычисленный над {id}.{timestamp}.{body} с использованием секрета подписи вашей конечной точки. Привязка id и метки времени к подписи и делает перехваченный запрос защищённым от повторного воспроизведения. Отклоняйте любой запрос, чей webhook-timestamp старше примерно 5 минут.

PHP

$secret  = 'whsec_from_dashboard';
$id      = $_SERVER['HTTP_WEBHOOK_ID'];
$ts      = $_SERVER['HTTP_WEBHOOK_TIMESTAMP'];
$body    = file_get_contents('php://input');
$sent    = explode(',', $_SERVER['HTTP_WEBHOOK_SIGNATURE'])[1] ?? '';

if (abs(time() - (int) $ts) > 300) { http_response_code(400); exit; }

$expected = base64_encode(hash_hmac('sha256', "$id.$ts.$body", $secret, true));
if (!hash_equals($expected, $sent)) { http_response_code(401); exit; }

// verified — process $body
http_response_code(200);

Node.js

const crypto = require('crypto');

function verify(req, secret) {
  const id  = req.headers['webhook-id'];
  const ts  = req.headers['webhook-timestamp'];
  const sig = (req.headers['webhook-signature'] || '').split(',')[1];
  if (Math.abs(Date.now() / 1000 - Number(ts)) > 300) return false;

  const expected = crypto
    .createHmac('sha256', secret)
    .update(`${id}.${ts}.${req.rawBody}`)
    .digest('base64');

  return crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(sig || ''));
}
устаревший X-Webhook-Signature заголовок (простой HMAC-SHA256 тела, hex) также отправляется для обратной совместимости. Новым интеграциям следует использовать webhook-signature.

Повторы и журнал доставок

Доставка асинхронна и повторяется при неудаче с экспоненциальной задержкой плюс джиттер: примерно 1m → 5m → 15m → 1h (всего до 5 попыток). Каждая попытка — успешная или неудачная — фиксируется в журнале доставок вашей панели с её HTTP-статусом, номером попытки и фрагментом ответа.

Доставка происходит хотя бы один раз. Устраняйте дубликаты по webhook-id чтобы обрабатывать случайные повторы.

Серверы MCP

Новинка одностраничное руководство по настройке «скопируй и вставь» для каждого клиента находится по адресу /mcp — команды установки для каждого клиента, диплинки в один клик, каталог инструментов и примеры промптов. Эта страница остаётся подробным справочником.

Пять серверов Model Context Protocol соединяют AI-агентов (ChatGPT, Claude, Cursor) с платформой — выберите тот, что подходит вашей аудитории. Все используют JSON-RPC 2.0 поверх HTTP и согласуют версии протокола 2024-11-05 / 2025-03-26 / 2025-06-18.

СерверКонечная точкаАудиторияАутентификацияИнструменты
Adminhttps://www.menubarcode.com/mcpВладельцы магазинов — управление магазиномТокен API (Bearer)23
Storefronthttps://www.menubarcode.com/mcp/storefrontАгент гостя — покупки и заказы в одном магазинеТокен витрины (область агента)12
Customerhttps://www.menubarcode.com/mcp/customerАвторизованный гость — его собственные заказыТокен клиента (вход по OTP)5
Cataloghttps://www.menubarcode.com/mcp/catalogКто угодно — поиск магазинов по всей платформеПубличный3
Devhttps://www.menubarcode.com/mcp/devAI-инструменты для кода — сборка тем/интеграцийПубличный7

Быстрый старт: перейти к Admin, Catalog, Customer, или Dev. Сервер витрины использует тот же шаблон подключения, что и Admin, с X-Storefront-Token заголовком вместо Bearer-токена.

MCP-сервер (Admin)

AI-клиент с поддержкой MCP (Claude, ChatGPT, Cursor) может управлять вашим рестораном на естественном языке, используя те же API-токены. Направьте его на:

POST https://www.menubarcode.com/mcp JSON-RPC 2.0

Аутентифицируйтесь через Authorization: Bearer YOUR_TOKEN. Каждый инструмент объявляет нужное ему точечное право (resource:action); устаревший read токен покрывает каждый :read инструмент, а write покрывает всё. Все вызовы ограничены вашими ресторанами и имеют лимит частоты. Инструменты, на которые у вас нет права, скрыты из tools/list.

Подключение (Claude Code)

claude mcp add --transport http platform-admin https://www.menubarcode.com/mcp \
  --header "Authorization: Bearer YOUR_TOKEN"

Список инструментов

curl -X POST https://www.menubarcode.com/mcp \
  -H "Authorization: Bearer YOUR_TOKEN" -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

Вызвать инструмент (например, добавить позицию меню)

curl -X POST https://www.menubarcode.com/mcp \
  -H "Authorization: Bearer YOUR_TOKEN" -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/call",
       "params":{"name":"add_menu_item",
                 "arguments":{"restaurant_id":12,"name":"Latte","price":4.5}}}'

Инструменты

ИнструментПравоЧто делает
list_restaurantsreadРестораны, которыми вы владеете.
get_menureadКатегории и позиции ресторана.
list_categoriesmenu:readКатегории с числом позиций.
add_categorymenu:writeСоздать категорию.
update_categorymenu:writeПереименовать / переупорядочить категорию.
delete_categorymenu:writeУдалить категорию (отклоняется, если в ней есть позиции).
add_menu_itemwriteСоздать позицию меню (с проверкой лимита плана).
update_menu_itemwriteИзменить название/цену/описание товара.
delete_menu_itemmenu:writeБезвозвратно удалить товар.
set_item_availabilitymenu:writeОтметить позицию в наличии/распродано (переключатель 86).
list_ordersorders:readЗаказы, сначала новые; фильтры по статусу/дате/поиску.
get_orderorders:readПолная информация о заказе, включая позиции.
update_order_statuswriteПродвинуть статус кухни заказа.
list_customerscustomers:read + crm_suiteСписок CRM; поиск по имени/телефону/email. Скрыт из tools/list без права.
get_customercustomers:read + crm_suiteПолная запись одного клиента. Скрыта из tools/list без права.
sales_reportanalytics:readВыручка + число заказов + топ позиций за период.
get_restaurant_settingsrestaurants:readСнимок профиля и настроек заказа.
update_business_hoursrestaurants:writeЗадать текст часов работы.
list_couponsorders:readВаши купоны на скидку.
create_couponorders:writeСоздать процентный/фиксированный купон.
update_couponorders:writeИзменить купон.
delete_couponorders:writeУдалить купон.

Catalog MCP (поиск ресторанов)

Публичный MCP-сервер только для чтения, позволяющий AI-агентам находить рестораны и блюда по всей платформе, а затем переходить по диплинку в конкретный магазин для заказа. Без авторизации, с лимитом частоты.

POST https://www.menubarcode.com/mcp/catalog JSON-RPC 2.0 · public

Подключение (Claude Code)

claude mcp add --transport http platform-catalog https://www.menubarcode.com/mcp/catalog
ИнструментЧто делает
search_storesНайти рестораны по ключевому слову/городу (name, address, menu_url, подсказка storefront_mcp).
search_itemsНайти блюда по всем магазинам (query/dietary/max_price/city), сгруппированные по магазину.
get_storeПолная публичная информация об одном магазине по slug или id.
list_starter_menusПредустановленные стартовые меню, из которых новый магазин может создать начальные данные (кафе, пиццерия, бургерная, пекарня, лаунж).

Появляются только активные, публично перечисленные магазины; владельцы могут отказаться в настройках магазина. Контактные данные владельца никогда не возвращаются. Чтобы оформить заказ, используйте storefront MCP магазина с агентским токеном на магазин.

Customer Account MCP

Позволяет AI-ассистенту гостя читать, отслеживать и повторять свои собственные заказы. Аутентификация через токен на клиента из существующего входа по OTP; личность клиента берётся только из токена — телефон или id клиента никогда не принимаются как аргумент.

POST https://www.menubarcode.com/mcp/customer JSON-RPC 2.0 · customer token

Получить токен (поток OTP)

# 1) request a one-time code (sent to the customer's phone)
curl -X POST https://www.menubarcode.com/api/v1/restaurants/12/customer/otp/request \
  -H "Content-Type: application/json" -d '{"phone":"+15551234567"}'

# 2) verify the code → returns a customer bearer token
curl -X POST https://www.menubarcode.com/api/v1/restaurants/12/customer/otp/verify \
  -H "Content-Type: application/json" -d '{"phone":"+15551234567","code":"123456"}'

Подключение (Claude Code)

claude mcp add --transport http my-orders https://www.menubarcode.com/mcp/customer \
  --header "Authorization: Bearer CUSTOMER_TOKEN"
ИнструментЧто делает
my_ordersВаши недавние заказы (сначала самые новые).
order_detailПолная информация + позиции для одного из ваших заказов.
track_orderАктуальный статус по id заказа или токену отслеживания.
reorderПересобрать прошлый заказ как черновик корзины (пропускает распроданные позиции).
my_profileВаше имя, телефон и число заказов.
my_bookingsВаши собственные бронирования номеров в этом заведении (код, статус, даты, тип номера, итого).
curl -X POST https://www.menubarcode.com/mcp/customer \
  -H "Authorization: Bearer CUSTOMER_TOKEN" -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call",
       "params":{"name":"my_orders","arguments":{"limit":5}}}'

Подключите свой AI-редактор

Создаёте тему или интеграцию с Claude Code, Cursor или VS Code? Направьте их на публичный Dev MCP-сервер — ваш AI-инструмент получает актуальную документацию платформы, сгенерированный белый список Liquid и серверную проверку тем. Токен не нужен.

POST https://www.menubarcode.com/mcp/dev JSON-RPC 2.0 · public

Claude Code

claude mcp add --transport http platform-dev https://www.menubarcode.com/mcp/dev

Cursor.cursor/mcp.json

{ "mcpServers": { "platform-dev": { "url": "https://www.menubarcode.com/mcp/dev" } } }

VS Code.vscode/mcp.json

{ "servers": { "platform-dev": { "type": "http", "url": "https://www.menubarcode.com/mcp/dev" } } }

Инструменты learn_platform (начните здесь), search_docs / fetch_full_doc, get_liquid_reference, get_section_schema, validate_theme, list_webhook_events. Рекомендуемый рабочий процесс агента: изучение → сборка → проверка → доставка.

Аутентифицированный MCP-сервер выше (https://www.menubarcode.com/mcp) работает с данными вашего ресторана; этот отдаёт документацию и проверку и безопасен для публичного доступа.

Список изменений

ДатаИзменить
2026-08-20Релиз гостиничной PMS + рост: refund.completed, reservation.created, reservation.cancelled, customer.created, shift.opened, shift.closed события вебхуков; регистрация push-устройств персонала + 2fa эндпоинты; новые инструменты MCP hotel_availability, my_bookings, list_starter_menus, list_webhook_events.
2026-07-28Сгенерированный маршрутизатором индекс обнаружения + спецификация OpenAPI 3.1 (всегда соответствует развёрнутому API); Idempotency-Key при создании заказа; лимиты частоты API на токен; subscription.* + app.uninstalled события webhook + доставка Повторить доставку.
2026-07-07Публичный Dev MCP-сервер для AI-инструментов кода: поиск по актуальной документации, сгенерированный справочник Liquid, серверная проверка тем.
2026-07-02Точечные области токенов (resource:action); конечные точки редактирования меню сотрудниками + аналитики.
2026-07-02Приложение для сотрудников: авторизация токеном на сотрудника (пароль + PIN), контроль ролей и прав, статус заказа, KDS bump/recall.
2026-07-02Автономное приложение для клиента: авторизация токеном на клиента (регистрация/вход/OTP), профиль, оформление заказа + история, сохранённые адреса, просмотр публичного меню.
2026-07-02Полный API управления: CRUD меню, создание заказов, курьеры + жизненный цикл доставки, API токенов приложения курьера, публичное отслеживание заказов, аналитика продаж, клиенты. Новые события webhook для доставки.
2026-07-02Доставка webhook через очередь с повторами; подпись по Standard-Webhooks (webhook-id/timestamp/signature); order.paid событие; публичная документация.
2026-06-26Первоначальный REST API v1, токены и конечные точки webhook.

Назад к Menubarcode

Menubarcode API v1 · Базовый URL https://www.menubarcode.com/api/v1

Свяжитесь с нами

Подписывайтесь на нас