Отрасль: Ритейл и e-commerce. Актуально на 2026-10-24.
API модуля доставки r_keeper Delivery для внешних источников заказов (сайт, мобильное приложение, агрегатор): получение меню, создание заказов на доставку и самовывоз, поиск и получение заказов, отмена, список заведений, справочник причин отмены. Подключение создаётся в административной панели r_keeper Delivery; для работы нужна лицензия «R-Keeper модуль Delivery_Api».
Сайт или приложение доставки показывает актуальное меню ресторана на r_keeper — с ценами, КБЖУ и стоп-листом.
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>
Заказ на доставку или самовывоз сразу попадает в r_keeper — без звонка оператору.
curl -s -X POST https://delivery.ucs.ru/orders/api/v1/orders \
-H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
-d '{
"restaurantId": "<restaurant_guid>",
"expeditionType": "delivery",
"dishList": [{"id": "<dish_guid>", "quantity": 2}],
"paymentTypeId": "cash",
"changeFrom": 5000,
"soonest": true,
"guest": {"phone": "+79990001122", "firstName": "Анна"},
"address": {"cityName": "Москва", "street": "Тверская", "houseNumber": "7",
"apartmentNumber": "12", "fullAddress": "Москва, Тверская ул., д. 7, кв. 12"},
"persons": 2,
"comment": "Позвонить за 10 минут"
}'
Гость видит на сайте, что заказ принят, готовится или уже у курьера.
curl -s -G "https://delivery.ucs.ru/orders/api/v1/orders" \
-H "Authorization: Bearer $TOKEN" \
-d fromDate=2026-10-24T00:00:00+03:00 -d orderBy=updatedAt -d sortOrder=desc \
-d includeStatusIds=1 -d includeStatusIds=2 -d includeStatusIds=3
Гость отменил заказ в приложении — отмена уходит в ресторан с понятной причиной.
curl -s "https://delivery.ucs.ru/orders/api/v1/rejectionReasons" -H "Authorization: Bearer $TOKEN"
curl -s -X PUT "https://delivery.ucs.ru/orders/api/v1/orders/<orderId>/reject?restaurantId=<restaurant_guid>" \
-H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
-d '{"rejectionReasonId": "<reason_id>", "rejectionReasonText": ""}'
https://delivery.ucs.ruhttps://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
Хост 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 |
В ответе result[]: id, objectId, name, actualAddress, state (active/noActive).
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
orderSourceId |
path | string | да | Ваш Client ID |
Без restaurantId возвращается меню по умолчанию (представление меню назначается в карточке подключения). В result: categories, products (с isContainInStopList, ценой, КБЖУ), ingredientsSchemes, ingredientsGroups, ingredients.
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
restaurantId |
query | string | нет | ID заведения |
Ответ 201: {"result": {"orderId": "..."}}.
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
restaurantId |
body | string | да | GUID заведения |
expeditionType |
body | string | да | delivery или pickup |
dishList |
body | array | да | Состав заказа |
dishList[].id |
body | string | нет | GUID блюда из меню; обязателен, если нет externalId |
dishList[].quantity |
body | number | да | Количество |
dishList[].ingredients |
body | array | нет | Ингредиенты и модификаторы: id, quantity (больше 0) |
paymentTypeId |
body | string | да | cash, card или online |
paymentStatus |
body | string | нет | prepaid — только при paymentTypeId: online |
expectedAt |
body | string | нет | Время получения с часовым поясом; обязателен, если нет soonest |
soonest |
body | boolean | нет | «Как можно скорее» |
guest.phone |
body | string | да | Телефон гостя |
guest.firstName |
body | string | нет | Имя |
guest.lastName |
body | string | нет | Фамилия |
guest.email |
body | string | нет | |
address.cityName |
body | string | нет | Город (обязателен для доставки) |
address.street |
body | string | нет | Улица (для доставки, кроме адресов без улиц) |
address.houseNumber |
body | string | нет | Дом, до 200 символов (обязателен для доставки) |
address.fullAddress |
body | string | нет | Полный адрес, до 150 символов (обязателен для доставки) |
address.apartmentNumber |
body | string | нет | Квартира, до 20 символов |
address.lat |
body | number | нет | Широта |
address.lon |
body | number | нет | Долгота |
persons |
body | integer | нет | Число персон |
changeFrom |
body | number | нет | Сдача с суммы |
comment |
body | string | нет | Комментарий к заказу |
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
orderId |
path | string | да | Номер заказа |
В ответе result[]: orderId, restaurantId, orderStatusId, orderStatusName, даты, guest, суммы, expeditionType, address, courierName, dishList и др.
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
includeStatusIds |
query | array | нет | Статусы: 1 новый, 2 подтверждённый, 3 принят рестораном, 4 передан на кухню, 5 готовится, 6 приготовлен, 7 сборка, 8 собран, 9 у курьера, 10 в пути, 13 доставлен, 11 выполнен, 12 отменён |
sortOrder |
query | string | нет | asc или desc |
orderBy |
query | string | нет | updatedAt или expectedAt |
q |
query | string | нет | Поисковый запрос |
fromDate |
query | string | нет | Начало выборки (дата или дата-время) |
toDate |
query | string | нет | Конец выборки |
Ответ 200 OK. Если причины отмены выключены, передайте оба поля пустыми.
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
orderId |
path | string | да | Номер заказа |
restaurantId |
query | string | нет | ID заведения |
rejectionReasonId |
body | string | нет | ID причины отмены |
rejectionReasonText |
body | string | нет | Текст причины отмены |
В ответе result[]: id, reason, type, isPossibleDelete.
expectedAt передаётся обязательно с часовым поясом, например 2021-06-16T14:03:42.504+03:00.order_validation.| Код | Описание |
|---|---|
order_not_found |
Заказ не найден |
order_source_not_found |
Источник заказа не найден или выключен |
restaurant_not_found |
Заведение не найдено или не подключено к доставке |
order_source_not_found_for_restaurant |
Источник не привязан к заведению |
order_validation |
Ошибка валидации заказа (обязательные поля, меню, цены, стоп-лист) |
err_parse_request |
Ошибка разбора запроса (например, не указана причина отмены) |
err_unprocessable_entity |
Заказ уже выполнен |
rejection_reason_not_found |
Причина отмены не найдена |
status_change_forbidden |
Заказ уже завершён |
status_incorrect |
Недопустимый переход статуса |
dish_not_found |
Блюдо не найдено |
licence_not_found |
Нет лицензии на расширение |
Если этого недостаточно — официальная документация: https://docs.rkeeper.ru/delivery/vozmoyonosti-api-4041552.html JSON: https://mcp-everything.ru/api/integrations/r-keeper-delivery. MCP: https://mcp-everything.ru/mcp