# r_keeper Delivery API: Подключить сайт и загрузить меню

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

Сайт или приложение доставки показывает актуальное меню ресторана на r_keeper — с ценами, КБЖУ и стоп-листом.

1. В админке r_keeper Delivery создай подключение: «Интеграции» → «Подключение по API». Выбери заведения и представление меню. В карточке появятся Client ID и Client Secret.
2. Получи токен: POST /connect/token на хосте auth-delivery.ucs.ru, form-urlencoded, с client_Id, client_secret, grant_type = client_credentials и scopes = orders. Токен живёт 3600 секунд — обновляй его заранее.
3. Получи список заведений: GET /orders/api/v1/orderSources/{orderSourceId}/restaurants, где orderSourceId — твой Client ID. В result[] — id, name, actualAddress и state. Показывай только active.
4. Загрузи меню: GET /orders/api/v1/menu/view с restaurantId. В result — categories, products, ingredients. У каждого продукта есть isContainInStopList — такие позиции скрывай или помечай.
5. Ошибка licence_not_found означает, что у ресторана нет лицензии «R-Keeper модуль Delivery_Api».

```bash
TOKEN=$(curl -s -X POST https://auth-delivery.ucs.ru/connect/token \
  -d client_Id=<client_id> -d client_secret=<client_secret> \
  -d grant_type=client_credentials -d scopes=orders | jq -r .access_token)

curl -s "https://delivery.ucs.ru/orders/api/v1/orderSources/<client_id>/restaurants" \
  -H "Authorization: Bearer $TOKEN"

curl -s -G "https://delivery.ucs.ru/orders/api/v1/menu/view" \
  -H "Authorization: Bearer $TOKEN" -d restaurantId=<restaurant_guid>
```

## Базовые URL

- Боевой: `https://delivery.ucs.ru`
- Авторизация: `https://auth-delivery.ucs.ru`

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

Тип: OAuth 2.0

В админке: «Интеграции» → «Подключение по API» → добавить подключение (заведения, представление меню, GUID валют для онлайн-оплаты). В карточке появятся Client ID (16 символов) и Client Secret (128 символов).

Токен получают запросом `POST https://auth-delivery.ucs.ru/connect/token` (`application/x-www-form-urlencoded`) с параметрами `client_Id`, `client_secret`, `grant_type=client_credentials`, `scopes=orders`. Токен (JWT) действует 3600 секунд и передаётся во всех запросах:

```
Authorization: Bearer eyJhbGciOiJSUzI....aXHgrHV-I
```

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

### POST /connect/token — Получение токена

Хост `auth-delivery.ucs.ru`.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `client_Id` | body | string | да | Client ID подключения |
| `client_secret` | body | string | да | Client Secret подключения |
| `grant_type` | body | string | да | client_credentials |
| `scopes` | body | string | да | orders |

### GET /orders/api/v1/orderSources/{orderSourceId}/restaurants — Список заведений

В ответе `result[]`: `id`, `objectId`, `name`, `actualAddress`, `state` (`active`/`noActive`).

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `orderSourceId` | path | string | да | Ваш Client ID |

### GET /orders/api/v1/menu/view — Актуальное меню

Без `restaurantId` возвращается меню по умолчанию (представление меню назначается в карточке подключения). В `result`: `categories`, `products` (с `isContainInStopList`, ценой, КБЖУ), `ingredientsSchemes`, `ingredientsGroups`, `ingredients`.

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

## Нюансы

- `expectedAt` передаётся обязательно с часовым поясом, например `2021-06-16T14:03:42.504+03:00`.
- Позиции заказа ссылаются на ID блюд и ингредиентов из представления меню, назначенного подключению; блюдо в стоп-листе или неверная цена дают ошибку `order_validation`.
- Push-уведомления о статусах настраиваются в админке: внешний API (URL и токен в заголовке) + шаблон в разделе «Коммуникации» с каналом API и условием (например, статус «Передан на кухню»). При ошибке доставки — повтор, неотправленные события хранятся в очереди.
- Есть также методы изменения заказа, оплаты и завершения, предоплаты, справочники стран, городов, валют и курьеров.

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

- [Передать заказ с сайта в ресторан](https://mcp-everything.ru/integrations/r-keeper-delivery/scenarios/peredat-zakaz-s-sayta-v-restoran.md)
- [Отслеживать статусы заказов](https://mcp-everything.ru/integrations/r-keeper-delivery/scenarios/otslezhivat-statusy-zakazov.md)
- [Отменить заказ](https://mcp-everything.ru/integrations/r-keeper-delivery/scenarios/otmenit-zakaz.md)

---

Если этого недостаточно — официальная документация: https://docs.rkeeper.ru/delivery/vozmoyonosti-api-4041552.html
Вся интеграция одним документом: https://mcp-everything.ru/integrations/r-keeper-delivery.md
