# Яндекс Еда Vendor API: Отдавать меню и стоп-лист

Сценарий из mcp-everything. Актуально на 2026-10-24.

Меню и недоступные позиции в Яндекс Еде совпадают с кассой — без ручного редактирования в кабинете.

1. Реализуй список заведений: GET /restaurants — ID ресторанов в твоей системе.
2. Реализуй меню: GET /menu/{restaurantId}/composition с моделью application/vnd.eats.menu.composition.v2+json. Позиции с ошибками — слишком длинные названия, цена 0.00 — Яндекс Еда может пропустить, поэтому валидируй меню до отдачи.
3. Реализуй стоп-лист: GET /menu/{restaurantId}/availability — позиции, недоступные прямо сейчас (application/vnd.eats.menu.availability.v2+json).
4. Чтобы изменения применились сразу, а не при следующем плановом опросе, сам инициируй обновление. Получи токен на стороне Яндекс Еды: POST /oauth2/token на dc-partner.eda.yandex.net с client_id и client_secret. Затем вызови POST /menu/import/initiation с restaurantId и operationType = menu (меню) или menu_stop_list (стоп-лист), передав заголовки Authorization и Partner-Name.

```bash
EDA=https://dc-partner.eda.yandex.net

PUSH_TOKEN=$(curl -s -X POST "$EDA/oauth2/token" \
  -d client_id=<client_id> -d client_secret=<client_secret> | jq -r .access_token)

# Позиция закончилась на кухне — просим Яндекс Еду перечитать стоп-лист
curl -s -X POST "$EDA/menu/import/initiation" \
  -H "Authorization: Bearer $PUSH_TOKEN" -H 'Partner-Name: <partner_name>' \
  -H 'Content-Type: application/json' \
  -d '{"restaurantId": "msk-tverskaya-7", "operationType": "menu_stop_list"}'
```

## Базовые URL

- Боевой (push-методы Vendor Management Integration API): `https://dc-partner.eda.yandex.net`
- Методы меню, заказов, ресторанов, зон и графика размещаются на сервере партнёра (: `{host}`

## Авторизация

Тип: OAuth 2.0

На своей стороне партнёр реализует OAuth 2.0 `client_credentials`: метод `POST /security/oauth/token` выдаёт токен по `client_id`, `client_secret`, `grant_type` и `scope` (`read`, `write`). Яндекс Еда передаёт токен в каждом запросе как `Authorization: Bearer token`.

Для push-методов партнёр получает токен на стороне Яндекс Еды (`POST /oauth2/token` на `dc-partner.eda.yandex.net`) и передаёт заголовки `Authorization` и `Partner-Name`.

## Методы сценария

### GET /restaurants — Список заведений партнёра (реализует партнёр)

Возвращает заведения партнёра.

### GET /menu/{restaurantId}/composition — Актуальное меню ресторана (реализует партнёр)

Актуальная модель ответа — `application/vnd.eats.menu.composition.v2+json`. Позиции с несоответствиями (слишком длинная строка, цена 0.00) могут быть проигнорированы.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `restaurantId` | path | string | да | ID ресторана в системе партнёра |

### GET /menu/{restaurantId}/availability — Недоступные позиции меню (реализует партнёр)

Стоп-лист на текущий момент; модель ответа — `application/vnd.eats.menu.availability.v2+json`.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `restaurantId` | path | string | да | ID ресторана в системе партнёра |

### POST /oauth2/token — Токен для push-методов

Хост `dc-partner.eda.yandex.net`, тело `application/x-www-form-urlencoded`.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `client_id` | body | string | да | Идентификатор клиента |
| `client_secret` | body | string | да | Секретный ключ |

### POST /menu/import/initiation — Запуск обновления меню и стоп-листов

Хост `dc-partner.eda.yandex.net`.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `Authorization` | header | string | нет | Токен, полученный на стороне Яндекс Еды |
| `Partner-Name` | header | string | нет | Имя партнёра |
| `restaurantId` | body | string | да | ID ресторана в системе партнёра |
| `operationType` | body | string | нет | menu, menu_stop_list или promo |

## Нюансы

- Направление вызовов: методы меню, заказов, ресторанов, зон доставки и графика реализует партнёр, а Яндекс Еда их вызывает; push-методы вызывает партнёр на `dc-partner.eda.yandex.net`.
- Модели запросов и ответов версионируются через `Content-Type`/`Accept`: `application/vnd.eats.order.v2+json`, `application/vnd.eats.menu.composition.v2+json` и т. п.
- Статус заказа меняется только вперёд по цепочке; приготовленный заказ нельзя снова сделать новым.
- Даты — RFC3339 с дробной частью секунд.
- Есть также методы отзывов (`POST /v1/feedback`, `POST /feedback-answer`), зон доставки (`GET /places/{restaurantId}/zones`), графика работы (`GET /places/{restaurantId}/schedule`) и валидации кода курьера.

## Другие сценарии

- [Принимать заказы Яндекс Еды в своей системе](https://mcp-everything.ru/integrations/yandex-eda-vendor/scenarios/prinimat-zakazy-yandeks-edy-v-svoey.md)
- [Временно закрыть ресторан и сверить заказы](https://mcp-everything.ru/integrations/yandex-eda-vendor/scenarios/vremenno-zakryt-restoran-i-sverit-zakazy.md)

---

Если этого недостаточно — официальная документация: https://yandex.ru/dev/eda-vendor/doc/ru/ref/
Вся интеграция одним документом: https://mcp-everything.ru/integrations/yandex-eda-vendor.md
