{"name":"Яндекс Еда Vendor API","vendor":"Яндекс","industry":"retail","summary":"API интеграции ресторанов и сетей с Яндекс Едой по моделям Yandex (доставка Яндекс Еды) и Marketplace (доставка партнёра). Большую часть методов реализует партнёр на своей стороне — Яндекс Еда вызывает их как клиент: получает меню и стоп-листы, список заведений, зоны доставки и график, передаёт заказы и их статусы. Отдельный блок Vendor Management Integration API — push-методы, которые вызывает партнёр: блокировка ресторанов, запуск обновления меню, история заказов, ответы на отзывы.","docsUrl":"https://yandex.ru/dev/eda-vendor/doc/ru/ref/","coverage":{"included":[],"excluded":[]},"scenarios":[{"id":"prinimat-zakazy-yandeks-edy-v-svoey","title":"Принимать заказы Яндекс Еды в своей системе","summary":"Заказы из Яндекс Еды сразу попадают на кассу или кухню ресторана. Особенность API: эти методы реализуешь ты, а Яндекс Еда вызывает их на твоём сервере.","steps":["Реализуй выдачу токена: POST /security/oauth/token принимает form-urlencoded client_id, client_secret, grant_type и scope (read, write) и возвращает токен. Дальше Яндекс Еда передаёт его как Authorization: Bearer <token> — проверяй его в каждом запросе.","Реализуй приём заказа: POST /order с моделью application/vnd.eats.order.v2+json. Тип заказа — YandexOrder (везёт курьер Яндекс Еды), MarketplaceOrder (везёт ресторан) или PickupOrder (самовывоз). Создай заказ у себя и верни orderId (лучше UUID4) и result. Неподдерживаемая версия модели — ответ 406.","Реализуй статус: GET /order/{orderId}/status. Статусы идут только вперёд: NEW → ACCEPTED_BY_RESTAURANT → COOKING → READY → TAKEN_BY_COURIER → DELIVERED; в CANCELLED — из любого.","Реализуй приём статусов от Яндекс Еды: PUT /order/{orderId}/status с status (TAKEN_BY_COURIER, DELIVERED или CANCELLED), reason и updatedAt — ответ 204. Отмену Яндекс Еда обычно присылает через DELETE /order/{orderId} с eatsId и comment.","Даты — RFC3339 с долями секунд. Сохраняй eatsId — сквозной ID заказа в Яндекс Еде, он нужен для сверки и поддержки."],"code":"import uuid\nfrom datetime import datetime, timezone\nfrom flask import Flask, request, jsonify, abort\n\napp = Flask(__name__)\nORDERS = {}\n\ndef now():\n    return datetime.now(timezone.utc).isoformat(timespec=\"milliseconds\")\n\n@app.before_request\ndef auth():\n    if request.path != \"/security/oauth/token\" and request.headers.get(\"Authorization\") != f\"Bearer {TOKEN}\":\n        abort(401)\n\n@app.post(\"/security/oauth/token\")\ndef token():\n    if request.form.get(\"client_id\") != CLIENT_ID or request.form.get(\"client_secret\") != CLIENT_SECRET:\n        abort(401)\n    return jsonify(access_token=TOKEN, token_type=\"bearer\", expires_in=3600)\n\n@app.post(\"/order\")\ndef create_order():\n    order = request.get_json()\n    order_id = str(uuid.uuid4())\n    ORDERS[order_id] = {\"eatsId\": order.get(\"eatsId\"), \"status\": \"NEW\", \"updatedAt\": now(), \"payload\": order}\n    send_to_kitchen(order_id, order)                  # твоя касса или кухонный экран\n    return jsonify(result=\"OK\", orderId=order_id)\n\n@app.get(\"/order/<order_id>/status\")\ndef order_status(order_id):\n    o = ORDERS.get(order_id) or abort(404)\n    return jsonify(status=o[\"status\"], updatedAt=o[\"updatedAt\"])\n\n@app.put(\"/order/<order_id>/status\")\ndef status_from_eda(order_id):\n    o = ORDERS.get(order_id) or abort(404)\n    o.update(status=request.get_json()[\"status\"], updatedAt=now())\n    return \"\", 204\n\n@app.delete(\"/order/<order_id>\")\ndef cancel(order_id):\n    o = ORDERS.get(order_id) or abort(404)\n    o.update(status=\"CANCELLED\", updatedAt=now())\n    return \"\", 200","language":"python","methods":["POST /security/oauth/token","POST /order","GET /order/{orderId}/status","PUT /order/{orderId}/status","DELETE /order/{orderId}"]},{"id":"otdavat-menyu-i-stop-list","title":"Отдавать меню и стоп-лист","summary":"Меню и недоступные позиции в Яндекс Еде совпадают с кассой — без ручного редактирования в кабинете.","steps":["Реализуй список заведений: GET /restaurants — ID ресторанов в твоей системе.","Реализуй меню: GET /menu/{restaurantId}/composition с моделью application/vnd.eats.menu.composition.v2+json. Позиции с ошибками — слишком длинные названия, цена 0.00 — Яндекс Еда может пропустить, поэтому валидируй меню до отдачи.","Реализуй стоп-лист: GET /menu/{restaurantId}/availability — позиции, недоступные прямо сейчас (application/vnd.eats.menu.availability.v2+json).","Чтобы изменения применились сразу, а не при следующем плановом опросе, сам инициируй обновление. Получи токен на стороне Яндекс Еды: 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."],"code":"EDA=https://dc-partner.eda.yandex.net\n\nPUSH_TOKEN=$(curl -s -X POST \"$EDA/oauth2/token\" \\\n  -d client_id=<client_id> -d client_secret=<client_secret> | jq -r .access_token)\n\n# Позиция закончилась на кухне — просим Яндекс Еду перечитать стоп-лист\ncurl -s -X POST \"$EDA/menu/import/initiation\" \\\n  -H \"Authorization: Bearer $PUSH_TOKEN\" -H 'Partner-Name: <partner_name>' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"restaurantId\": \"msk-tverskaya-7\", \"operationType\": \"menu_stop_list\"}'","language":"bash","methods":["GET /restaurants","GET /menu/{restaurantId}/composition","GET /menu/{restaurantId}/availability","POST /oauth2/token","POST /menu/import/initiation"]},{"id":"vremenno-zakryt-restoran-i-sverit-zakazy","title":"Временно закрыть ресторан и сверить заказы","summary":"Кухня перегружена или ресторан закрыт на санитарный день — приём заказов останавливается из твоей системы. В конце месяца заказы сверяются с кассой.","steps":["Заблокируй приём заказов: POST /block на dc-partner.eda.yandex.net с vendorInfo (какие рестораны), from, to (без него блокировка бессрочная), message (причина) и tag. Заголовки — Authorization и Partner-Name.","Сними блокировку методом unblock, когда ресторан снова готов. Статус блокировок отдаёт отдельный метод статуса.","Для сверки выгрузи историю: POST /v1/orders-history с origin_ids (рестораны и тип доставки), from и to в RFC3339 и pagination. В ответе до 1000 заказов, история хранится 180 дней — выгружай ежемесячно."],"code":"curl -s -X POST https://dc-partner.eda.yandex.net/block \\\n  -H \"Authorization: Bearer $PUSH_TOKEN\" -H 'Partner-Name: <partner_name>' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n        \"vendorInfo\": <рестораны в формате из документации метода>,\n        \"from\": \"2026-10-25T10:00:00.000+03:00\",\n        \"to\": \"2026-10-25T23:00:00.000+03:00\",\n        \"message\": \"Санитарный день\",\n        \"tag\": \"<тег блокировки>\"\n      }'","language":"bash","methods":["POST /block","POST /v1/orders-history"]}],"baseUrls":[{"label":"Боевой (push-методы Vendor Management Integration API)","url":"https://dc-partner.eda.yandex.net"},{"label":"Методы меню, заказов, ресторанов, зон и графика размещаются на сервере партнёра (","url":"{host}"}],"auth":{"type":"oauth2","description":"На своей стороне партнёр реализует OAuth 2.0 `client_credentials`: метод `POST /security/oauth/token` выдаёт токен по `client_id`, `client_secret`, `grant_type` и `scope` (`read`, `write`). Яндекс Еда передаёт токен в каждом запросе как `Authorization: Bearer token`.\n\nДля push-методов партнёр получает токен на стороне Яндекс Еды (`POST /oauth2/token` на `dc-partner.eda.yandex.net`) и передаёт заголовки `Authorization` и `Partner-Name`.","example":""},"methods":[{"id":"POST /security/oauth/token","title":"Выдача токена (реализует партнёр)","httpMethod":"POST","path":"/security/oauth/token","description":"Тело — `application/x-www-form-urlencoded` в одну строку.","params":[{"name":"client_id","in":"body","type":"string","required":true,"description":"Идентификатор клиента"},{"name":"client_secret","in":"body","type":"string","required":true,"description":"Секрет"},{"name":"grant_type","in":"body","type":"string","required":true,"description":"Тип доступа"},{"name":"scope","in":"body","type":"string","required":true,"description":"Права доступа (read, write)"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"GET /restaurants","title":"Список заведений партнёра (реализует партнёр)","httpMethod":"GET","path":"/restaurants","description":"Возвращает заведения партнёра.","params":[],"requestExample":"","responseExample":"","docsUrl":""},{"id":"GET /menu/{restaurantId}/composition","title":"Актуальное меню ресторана (реализует партнёр)","httpMethod":"GET","path":"/menu/{restaurantId}/composition","description":"Актуальная модель ответа — `application/vnd.eats.menu.composition.v2+json`. Позиции с несоответствиями (слишком длинная строка, цена 0.00) могут быть проигнорированы.","params":[{"name":"restaurantId","in":"path","type":"string","required":true,"description":"ID ресторана в системе партнёра"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"GET /menu/{restaurantId}/availability","title":"Недоступные позиции меню (реализует партнёр)","httpMethod":"GET","path":"/menu/{restaurantId}/availability","description":"Стоп-лист на текущий момент; модель ответа — `application/vnd.eats.menu.availability.v2+json`.","params":[{"name":"restaurantId","in":"path","type":"string","required":true,"description":"ID ресторана в системе партнёра"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"POST /order","title":"Создание заказа в системе ресторана (реализует партнёр)","httpMethod":"POST","path":"/order","description":"Модель запроса — `application/vnd.eats.order.v2+json`; схемы `YandexOrder` (доставка Яндекс Еды), `MarketplaceOrder` (доставка партнёра), `PickupOrder` (самовывоз). В ответе — `orderId` (рекомендуется UUID4) и `result`.","params":[],"requestExample":"","responseExample":"","docsUrl":""},{"id":"GET /order/{orderId}/status","title":"Статус заказа (реализует партнёр)","httpMethod":"GET","path":"/order/{orderId}/status","description":"Статусы: `NEW` → `ACCEPTED_BY_RESTAURANT` → `COOKING` → `READY` → `TAKEN_BY_COURIER` → `DELIVERED`; в `CANCELLED` — из любого статуса.","params":[{"name":"orderId","in":"path","type":"string","required":true,"description":"ID заказа в системе партнёра"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"PUT /order/{orderId}/status","title":"Обновление статуса со стороны Яндекс Еды (реализует партнёр)","httpMethod":"PUT","path":"/order/{orderId}/status","description":"Ответ `204`. Отмену Яндекс Еда обычно передаёт через `DELETE /order/{orderId}`.","params":[{"name":"orderId","in":"path","type":"string","required":true,"description":"ID заказа в системе партнёра"},{"name":"status","in":"body","type":"string","required":true,"description":"TAKEN_BY_COURIER, DELIVERED или CANCELLED"},{"name":"attributes","in":"body","type":"array","required":false,"description":"Доп. атрибуты, например признак оплаты при отмене"},{"name":"comment","in":"body","type":"string","required":false,"description":"Комментарий"},{"name":"reason","in":"body","type":"string","required":false,"description":"Причина отмены (только для CANCELLED)"},{"name":"updatedAt","in":"body","type":"string","required":false,"description":"Время смены статуса, RFC3339 с долями секунд"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"DELETE /order/{orderId}","title":"Отмена заказа (реализует партнёр)","httpMethod":"DELETE","path":"/order/{orderId}","description":"","params":[{"name":"orderId","in":"path","type":"string","required":true,"description":"ID заказа в системе партнёра"},{"name":"eatsId","in":"body","type":"string","required":true,"description":"Сквозной ID заказа в Яндекс Еде"},{"name":"comment","in":"body","type":"string","required":false,"description":"Причина отмены"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"POST /oauth2/token","title":"Токен для push-методов","httpMethod":"POST","path":"/oauth2/token","description":"Хост `dc-partner.eda.yandex.net`, тело `application/x-www-form-urlencoded`.","params":[{"name":"client_id","in":"body","type":"string","required":true,"description":"Идентификатор клиента"},{"name":"client_secret","in":"body","type":"string","required":true,"description":"Секретный ключ"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"POST /menu/import/initiation","title":"Запуск обновления меню и стоп-листов","httpMethod":"POST","path":"/menu/import/initiation","description":"Хост `dc-partner.eda.yandex.net`.","params":[{"name":"Authorization","in":"header","type":"string","required":false,"description":"Токен, полученный на стороне Яндекс Еды"},{"name":"Partner-Name","in":"header","type":"string","required":false,"description":"Имя партнёра"},{"name":"restaurantId","in":"body","type":"string","required":true,"description":"ID ресторана в системе партнёра"},{"name":"operationType","in":"body","type":"string","required":false,"description":"menu, menu_stop_list или promo"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"POST /block","title":"Блокировка ресторанов","httpMethod":"POST","path":"/block","description":"Хост `dc-partner.eda.yandex.net`. Разблокировка — `POST /unblock`, статус блокировок — `POST /v2/status`.","params":[{"name":"Authorization","in":"header","type":"string","required":false,"description":"Токен"},{"name":"Partner-Name","in":"header","type":"string","required":false,"description":"Имя партнёра"},{"name":"vendorInfo","in":"body","type":"array","required":true,"description":"Рестораны для блокировки"},{"name":"from","in":"body","type":"string","required":true,"description":"Начало блокировки"},{"name":"to","in":"body","type":"string","required":false,"description":"Окончание; без него — навсегда"},{"name":"message","in":"body","type":"string","required":false,"description":"Причина блокировки"},{"name":"tag","in":"body","type":"string","required":true,"description":"Тег блокировки"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"POST /v1/orders-history","title":"История заказов","httpMethod":"POST","path":"/v1/orders-history","description":"Хост `dc-partner.eda.yandex.net`. До 1000 заказов в ответе; история хранится 180 дней.","params":[{"name":"origin_ids","in":"body","type":"array","required":true,"description":"Рестораны партнёра и тип доставки в них"},{"name":"from","in":"body","type":"string","required":true,"description":"С какой даты, RFC3339"},{"name":"to","in":"body","type":"string","required":true,"description":"По какую дату, RFC3339"},{"name":"service","in":"body","type":"array","required":false,"description":"Сервисы, для которых вернуть заказы"},{"name":"status","in":"body","type":"array","required":false,"description":"Фильтр по статусам"},{"name":"pagination","in":"body","type":"object","required":true,"description":"Пагинация"}],"requestExample":"","responseExample":"","docsUrl":""}],"codeExamples":[],"errors":[{"code":"400","description":"Некорректный запрос"},{"code":"401","description":"Нет авторизации"},{"code":"404","description":"Объект не найден"},{"code":"406","description":"Неподдерживаемая версия модели (POST /order)"},{"code":"500","description":"Внутренняя ошибка"}],"limits":"","gotchas":["Направление вызовов: методы меню, заказов, ресторанов, зон доставки и графика реализует партнёр, а Яндекс Еда их вызывает; 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`) и валидации кода курьера."],"slug":"yandex-eda-vendor","version":2,"updatedAt":"2026-10-24T17:05:40.585Z","sources":[{"title":"API для интеграции сервиса Яндекс Еда","url":"https://yandex.ru/dev/eda-vendor/doc/ru/ref/","kind":"research","addedAt":"2026-10-17T07:09:52.566Z"},{"title":"Спецификация OpenAPI","url":"https://yandex.ru/dev/eda-vendor/doc/ru/ref/external-api.openapi.json","kind":"research","addedAt":"2026-10-17T07:09:52.566Z"},{"title":"Vendor Management Integration API","url":"https://yandex.ru/dev/eda-vendor/doc/ru/ref/Vendor-Management-Integration-API/","kind":"research","addedAt":"2026-10-17T07:09:52.566Z"},{"title":"Вставленный текст","url":"","kind":"import","addedAt":"2026-10-17T07:09:52.566Z"},{"title":"scenarios-yandex-eda-vendor.md","url":"","kind":"import","addedAt":"2026-10-24T17:05:29.891Z"}],"logoUrl":null}