---
slug: "yandex-eda-vendor"
name: "Яндекс Еда Vendor API"
vendor: "Яндекс"
industry: "retail"
docsUrl: "https://yandex.ru/dev/eda-vendor/doc/ru/ref/"
version: 2
updatedAt: "2026-10-24"
---

# Яндекс Еда Vendor API

Отрасль: Ритейл и e-commerce. Актуально на 2026-10-24.

API интеграции ресторанов и сетей с Яндекс Едой по моделям Yandex (доставка Яндекс Еды) и Marketplace (доставка партнёра). Большую часть методов реализует партнёр на своей стороне — Яндекс Еда вызывает их как клиент: получает меню и стоп-листы, список заведений, зоны доставки и график, передаёт заказы и их статусы. Отдельный блок Vendor Management Integration API — push-методы, которые вызывает партнёр: блокировка ресторанов, запуск обновления меню, история заказов, ответы на отзывы.

## Сценарии

### Принимать заказы Яндекс Еды в своей системе

Заказы из Яндекс Еды сразу попадают на кассу или кухню ресторана. Особенность API: эти методы реализуешь ты, а Яндекс Еда вызывает их на твоём сервере.

1. Реализуй выдачу токена: POST /security/oauth/token принимает form-urlencoded client_id, client_secret, grant_type и scope (read, write) и возвращает токен. Дальше Яндекс Еда передаёт его как Authorization: Bearer <token> — проверяй его в каждом запросе.
2. Реализуй приём заказа: POST /order с моделью application/vnd.eats.order.v2+json. Тип заказа — YandexOrder (везёт курьер Яндекс Еды), MarketplaceOrder (везёт ресторан) или PickupOrder (самовывоз). Создай заказ у себя и верни orderId (лучше UUID4) и result. Неподдерживаемая версия модели — ответ 406.
3. Реализуй статус: GET /order/{orderId}/status. Статусы идут только вперёд: NEW → ACCEPTED_BY_RESTAURANT → COOKING → READY → TAKEN_BY_COURIER → DELIVERED; в CANCELLED — из любого.
4. Реализуй приём статусов от Яндекс Еды: PUT /order/{orderId}/status с status (TAKEN_BY_COURIER, DELIVERED или CANCELLED), reason и updatedAt — ответ 204. Отмену Яндекс Еда обычно присылает через DELETE /order/{orderId} с eatsId и comment.
5. Даты — RFC3339 с долями секунд. Сохраняй eatsId — сквозной ID заказа в Яндекс Еде, он нужен для сверки и поддержки.

```python
import uuid
from datetime import datetime, timezone
from flask import Flask, request, jsonify, abort

app = Flask(__name__)
ORDERS = {}

def now():
    return datetime.now(timezone.utc).isoformat(timespec="milliseconds")

@app.before_request
def auth():
    if request.path != "/security/oauth/token" and request.headers.get("Authorization") != f"Bearer {TOKEN}":
        abort(401)

@app.post("/security/oauth/token")
def token():
    if request.form.get("client_id") != CLIENT_ID or request.form.get("client_secret") != CLIENT_SECRET:
        abort(401)
    return jsonify(access_token=TOKEN, token_type="bearer", expires_in=3600)

@app.post("/order")
def create_order():
    order = request.get_json()
    order_id = str(uuid.uuid4())
    ORDERS[order_id] = {"eatsId": order.get("eatsId"), "status": "NEW", "updatedAt": now(), "payload": order}
    send_to_kitchen(order_id, order)                  # твоя касса или кухонный экран
    return jsonify(result="OK", orderId=order_id)

@app.get("/order/<order_id>/status")
def order_status(order_id):
    o = ORDERS.get(order_id) or abort(404)
    return jsonify(status=o["status"], updatedAt=o["updatedAt"])

@app.put("/order/<order_id>/status")
def status_from_eda(order_id):
    o = ORDERS.get(order_id) or abort(404)
    o.update(status=request.get_json()["status"], updatedAt=now())
    return "", 204

@app.delete("/order/<order_id>")
def cancel(order_id):
    o = ORDERS.get(order_id) or abort(404)
    o.update(status="CANCELLED", updatedAt=now())
    return "", 200
```

### Отдавать меню и стоп-лист

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

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"}'
```

### Временно закрыть ресторан и сверить заказы

Кухня перегружена или ресторан закрыт на санитарный день — приём заказов останавливается из твоей системы. В конце месяца заказы сверяются с кассой.

1. Заблокируй приём заказов: POST /block на dc-partner.eda.yandex.net с vendorInfo (какие рестораны), from, to (без него блокировка бессрочная), message (причина) и tag. Заголовки — Authorization и Partner-Name.
2. Сними блокировку методом unblock, когда ресторан снова готов. Статус блокировок отдаёт отдельный метод статуса.
3. Для сверки выгрузи историю: POST /v1/orders-history с origin_ids (рестораны и тип доставки), from и to в RFC3339 и pagination. В ответе до 1000 заказов, история хранится 180 дней — выгружай ежемесячно.

```bash
curl -s -X POST https://dc-partner.eda.yandex.net/block \
  -H "Authorization: Bearer $PUSH_TOKEN" -H 'Partner-Name: <partner_name>' \
  -H 'Content-Type: application/json' \
  -d '{
        "vendorInfo": <рестораны в формате из документации метода>,
        "from": "2026-10-25T10:00:00.000+03:00",
        "to": "2026-10-25T23:00:00.000+03:00",
        "message": "Санитарный день",
        "tag": "<тег блокировки>"
      }'
```

## Базовые 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`.

## Методы

### POST /security/oauth/token — Выдача токена (реализует партнёр)

Тело — `application/x-www-form-urlencoded` в одну строку.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `client_id` | body | string | да | Идентификатор клиента |
| `client_secret` | body | string | да | Секрет |
| `grant_type` | body | string | да | Тип доступа |
| `scope` | body | string | да | Права доступа (read, write) |

### 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 /order — Создание заказа в системе ресторана (реализует партнёр)

Модель запроса — `application/vnd.eats.order.v2+json`; схемы `YandexOrder` (доставка Яндекс Еды), `MarketplaceOrder` (доставка партнёра), `PickupOrder` (самовывоз). В ответе — `orderId` (рекомендуется UUID4) и `result`.

### GET /order/{orderId}/status — Статус заказа (реализует партнёр)

Статусы: `NEW` → `ACCEPTED_BY_RESTAURANT` → `COOKING` → `READY` → `TAKEN_BY_COURIER` → `DELIVERED`; в `CANCELLED` — из любого статуса.

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

### PUT /order/{orderId}/status — Обновление статуса со стороны Яндекс Еды (реализует партнёр)

Ответ `204`. Отмену Яндекс Еда обычно передаёт через `DELETE /order/{orderId}`.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `orderId` | path | string | да | ID заказа в системе партнёра |
| `status` | body | string | да | TAKEN_BY_COURIER, DELIVERED или CANCELLED |
| `attributes` | body | array | нет | Доп. атрибуты, например признак оплаты при отмене |
| `comment` | body | string | нет | Комментарий |
| `reason` | body | string | нет | Причина отмены (только для CANCELLED) |
| `updatedAt` | body | string | нет | Время смены статуса, RFC3339 с долями секунд |

### DELETE /order/{orderId} — Отмена заказа (реализует партнёр)

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `orderId` | path | string | да | ID заказа в системе партнёра |
| `eatsId` | body | string | да | Сквозной ID заказа в Яндекс Еде |
| `comment` | body | string | нет | Причина отмены |

### 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 |

### POST /block — Блокировка ресторанов

Хост `dc-partner.eda.yandex.net`. Разблокировка — `POST /unblock`, статус блокировок — `POST /v2/status`.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `Authorization` | header | string | нет | Токен |
| `Partner-Name` | header | string | нет | Имя партнёра |
| `vendorInfo` | body | array | да | Рестораны для блокировки |
| `from` | body | string | да | Начало блокировки |
| `to` | body | string | нет | Окончание; без него — навсегда |
| `message` | body | string | нет | Причина блокировки |
| `tag` | body | string | да | Тег блокировки |

### POST /v1/orders-history — История заказов

Хост `dc-partner.eda.yandex.net`. До 1000 заказов в ответе; история хранится 180 дней.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `origin_ids` | body | array | да | Рестораны партнёра и тип доставки в них |
| `from` | body | string | да | С какой даты, RFC3339 |
| `to` | body | string | да | По какую дату, RFC3339 |
| `service` | body | array | нет | Сервисы, для которых вернуть заказы |
| `status` | body | array | нет | Фильтр по статусам |
| `pagination` | body | object | да | Пагинация |

## Нюансы

- Направление вызовов: методы меню, заказов, ресторанов, зон доставки и графика реализует партнёр, а Яндекс Еда их вызывает; 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`) и валидации кода курьера.

## Ошибки

| Код | Описание |
|---|---|
| `400` | Некорректный запрос |
| `401` | Нет авторизации |
| `404` | Объект не найден |
| `406` | Неподдерживаемая версия модели (POST /order) |
| `500` | Внутренняя ошибка |

## Источники

- [API для интеграции сервиса Яндекс Еда](https://yandex.ru/dev/eda-vendor/doc/ru/ref/)
- [Спецификация OpenAPI](https://yandex.ru/dev/eda-vendor/doc/ru/ref/external-api.openapi.json)
- [Vendor Management Integration API](https://yandex.ru/dev/eda-vendor/doc/ru/ref/Vendor-Management-Integration-API/)

---

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