RKDash API
REST API с версией /api/v1 и дата-версией контракта 2026-09-15 (заголовок X-Api-Version, текущая версия — 1.3.0). Формат ответов — JSON, ошибок — application/problem+json по RFC 7807.
/api/v1/openapiПервый запрос за 5 минут
- Войдите в панель → Настройки → API → «Выпустить ключ». Выберите тестовый режим (
rk_test_…) и области доступа, напримерread:dishesиread:checks. - Скопируйте ключ: он показывается один раз.
- Сделайте запрос — сначала по меню, затем по чекам.
# список блюд с фудкостом выше 40% (себестоимость посчитана)
curl -s -H "Authorization: Bearer rk_test_ВАШ_КЛЮЧ" \
"https://rkdash.com/api/v1/dishes?limit=3&filter[foodcost_gt]=40"
# чеки за период
curl -s -H "Authorization: Bearer rk_test_ВАШ_КЛЮЧ" \
"https://rkdash.com/api/v1/checks?date_from=2026-09-01&date_to=2026-09-15&limit=5"Ключ можно передавать и заголовком X-Api-Key. Ответ содержит X-Request-Id — по нему находится запись в журнале «Настройки → API».
Попробовать здесь
Вставьте тестовый ключ и отправьте запрос прямо со страницы — он уйдёт в живой API этого стенда. Ключ хранится в localStorage браузера и через сервер документации не идёт.
GET /api/v1/restaurants?limit=3Ключи и области доступа
Ключ живёт в одном рабочем пространстве и несёт набор областей. Проверка идёт на каждом вызове: ключ без области отвечает 403 insufficient_scope.
| Область | Что открывает | Раздел |
|---|---|---|
| read:restaurants | Чтение списка заведений | Заведения |
| write:restaurants | Изменение заведений | Заведения |
| read:dishes | Чтение меню и фудкоста | Меню |
| write:prices | Изменение цен блюд | Меню |
| read:checks | Чтение чеков и продаж | Продажи |
| read:waiters | Чтение официантов и их статистики | Персонал |
| read:stock | Чтение склада | Склад |
| write:stock | Приходы и списания | Склад |
| read:dashboards | Чтение дашбордов и их данных | Дашборды |
| read:integrations | Чтение интеграций | Интеграции |
| write:integrations | Подключение интеграций | Интеграции |
| ai:ask | Вопросы к AI-агенту по данным | AI |
| read:webhooks | Чтение подписок на события | Вебхуки |
| write:webhooks | Управление вебхуками | Вебхуки |
| read:kanban | Чтение доски задач | Адаптер агента |
| write:kanban | Создание и движение карточек | Адаптер агента |
| write:dashboards | Создание и правка дашбордов | Адаптер агента |
| read:agents | Список цифровых сотрудников | Адаптер агента |
| write:agents | Управление агентами и задачами | Адаптер агента |
| run:ops | Запуск обменов, сканов и рассылок | Адаптер агента |
| read:audit | Чтение журнала действий | Адаптер агента |
| adapter:control | Управление самим адаптером (только владелец) | Адаптер агента |
Ротация: «Вращать» выпускает новый ключ, старый продолжает работать до отзыва — интегратор успевает разложить ключ, не ловя отказ. Отзыв действует сразу.
Общие правила: страницы, фильтры, сортировка, повторы
# пагинация курсором
GET /api/v1/checks?limit=50&cursor=c_eyJvIjo1MH0
→ { "data": [...], "meta": { "hasMore": true, "nextCursor": "c_...", "total": 10172 } }
# фильтры: filter[поле], операторы _gt/_gte/_lt/_lte/_ne/_contains/_in
GET /api/v1/dishes?filter[foodcost_gt]=40&filter[category]=Супы
# сортировка: минус — по убыванию
GET /api/v1/dishes?sort=-revenue
# повтор POST: тот же Idempotency-Key вернёт прежний ответ, другое тело — 409
curl -X PATCH -H "Idempotency-Key: 7f2c1a90" -H "Authorization: Bearer $KEY" \
-H "Content-Type: application/json" -d '{"price": 520}' \
https://rkdash.com/api/v1/dishes/dish_.../price
# смена версии контракта
curl -H "X-Api-Version: 2026-09-15" ...Размер страницы — от 1 до 200, по умолчанию 50. Неизвестное поле фильтра или сортировки — ошибка 422 со списком допустимых, а не молча пустой результат.
Вебхуки
Подписчик получает POST с телом события. Подпись — X-Rkdash-Signature: t=<время>,v1=<HMAC-SHA256(secret, "время.тело")>. Не доставленные события повторяются трижды (сразу, через минуту и через пять), весь путь виден в журнале доставок.
curl -X POST -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
-d '{"url":"https://example.com/hook","events":["dish.updated","check.created","stock.low"]}' \
https://rkdash.com/api/v1/webhooks
# журнал доставок
curl -H "Authorization: Bearer $KEY" https://rkdash.com/api/v1/webhooks/wh_.../deliveriesСобытие check.created появляется после обмена с учётной системой (сканер сравнивает витрину с прошлым состоянием), stock.low — когда сальдо движений по позиции уходит ниже порога, заданного при внесении движения.
Справочник методов
Полная спецификация — /api/v1/openapi (OpenAPI 3.1). Файл openapi.yaml лежит в репозитории; из него собраны SDK @rkdash/api (TypeScript) и rkdash (Python).
Заведения
/api/v1/restaurantsСписок заведенийread:restaurantsЗаведения из витрины: R-Keeper отдаёт рестораны, iiko — подразделения. Метрики считаются за указанный период.
curl -H "Authorization: Bearer $RKDASH_KEY" "https://rkdash.com/api/v1/restaurants?limit=3"/api/v1/restaurantsДобавить заведение в реестрwrite:restaurantsСоздаёт запись реестра: город, адрес, комментарий. Если заведение уже приходит из учётной системы, запись связывается с ним по `sourceKey`.
/api/v1/restaurants/{id}Заведение по идентификаторуread:restaurants/api/v1/restaurants/{id}Изменить заведениеwrite:restaurantsМеняет поля реестра. Заведения из учётной системы правятся только здесь, не в источнике.
Меню
/api/v1/dishesСписок блюд с фудкостомread:dishesВыручка и количество — из продаж, себестоимость порции — из расчёта StoreHouse. `foodcostPct = null` означает, что себестоимость по позиции не рассчитана: это не ноль.
curl -H "Authorization: Bearer $RKDASH_KEY" "https://rkdash.com/api/v1/dishes?filter[foodcost_gt]=40&limit=3"/api/v1/dishes/{id}Блюдо: карточка, история цен, продажи по днямread:dishes/api/v1/dishes/{id}/priceСогласовать новую цену блюдаwrite:pricesRKDash — аналитическая витрина, а не учётная система: изменение сохраняется в журнал согласованных изменений с причиной и автором, уходит в учётную систему ближайшим обменом и порождает событие `dish.updated`.
curl -X PATCH -H "Authorization: Bearer $RKDASH_KEY" -H "Idempotency-Key: 7f2c" -H "Content-Type: application/json" -d '{"price": 520, "reason": "рост закупки"}' https://rkdash.com/api/v1/dishes/dish_.../priceПродажи
/api/v1/checksЧеки за периодread:checksЧек собирается из строк продаж: сумма чека всегда сходится с продажами.
curl -H "Authorization: Bearer $RKDASH_KEY" "https://rkdash.com/api/v1/checks?date_from=2026-09-01&date_to=2026-09-15&limit=5"/api/v1/checks/{id}Чек с составомread:checksПерсонал
/api/v1/waitersОфицианты за периодread:waitersВыручка, число чеков и средний чек по каждому сотруднику.
/api/v1/waiters/{id}/statsСтатистика официантаread:waitersСводка, выручка по дням, распределение по часам и топ блюд.
Склад
/api/v1/stockДвижения склада за периодread:stockРасход по номенклатуре R-Keeper, расход продуктов iiko и движения, внесённые через API. Остатков StoreHouse в витрине нет — поле `balanceAvailable` всегда `false`, и это указано в `note`.
/api/v1/stock/movementsПриход или списаниеwrite:stockЗаписывает движение в журнал склада. Если передать `lowThreshold`, позиция попадает под правило «низкий остаток»: при уходе сальдо ниже порога приходит событие `stock.low`.
Дашборды
/api/v1/dashboardsДашборды конструктораread:dashboards/api/v1/dashboards/{id}/dataДанные виджетов дашбордаread:dashboardsКаждый виджет считается тем же кодом, что рисует панель, — цифры совпадают.
Интеграции
/api/v1/integrationsСервисы предприятияread:integrationsСписок сервисов платформы MCP с признаком подключённого доступа.
/api/v1/integrations/{slug}/connectПодключить сервисwrite:integrationsСохраняет доступы к учётной системе: платформа проверяет связь и возвращает результат проверки. Секреты обратно не отдаются.
Доска
/api/v1/cardsКарточки доски задачread:kanbanДоска одна на панель и агента: карточка, созданная через API, сразу видна в интерфейсе и доступна диспетчеру цифровых сотрудников. Показ `include` не поддерживается — состав плоский.
curl -H "Authorization: Bearer ***" "https://rkdash.com/api/v1/cards?filter[status]=new&limit=5"/api/v1/agent-tasksЗадачи, которые ждут исполнителяread:kanbanТо же, что видно на доске, но глазами агента: что назначено на него и ещё не начато. Нужен агенту на своём сервере — платформа не всегда может достучаться до него сама, а забрать задачу он может этим запросом.
curl -H "Authorization: Bearer ***" "https://rkdash.com/api/v1/agent-tasks?filter[assignee]=analyst&limit=5"/api/v1/cards/{id}Карточка по идентификаторуread:kanban/api/v1/cardsЗавести задачу на доскеwrite:kanbanСоздаёт карточку в `kanban.db` — том же файле, из которого живёт канбан. Исполнитель берётся из /agents: неизвестный профиль отклоняется, чтобы задача не повисла без исполнителя.
curl -X POST -H "Authorization: Bearer ***" -H "Idempotency-Key: 4f1a" -H "Content-Type: application/json" -d '{"title": "Проверить фудкост за неделю", "assigneeId": "analyst"}' https://rkdash.com/api/v1/cards/api/v1/cards/{id}Двинуть карточку: статус, приоритет, исполнительwrite:kanbanТо же, что перетаскивание карточки в панели: `in_progress` — «взял в работу», `done` — задача закрыта.
/api/v1/cards/{id}/commentsЛента карточкиread:kanbanКомментарии людей и итоговые отчёты агентов в одном порядке — то, что видно в ленте карточки в панели.
/api/v1/cards/{id}/commentsКомментарий к карточкеwrite:kanbanОтчёт агента по задаче: автор по умолчанию — исполнитель карточки. Появление комментария порождает событие `card.commented`.
curl -X POST -H "Authorization: Bearer ***" -H "Idempotency-Key: 9c2" -H "Content-Type: application/json" -d '{"content": "Фудкост пересчитан, отчёт во вложении"}' https://rkdash.com/api/v1/cards/t_.../comments/api/v1/cards/{id}Убрать карточку с доскиwrite:kanbanАрхивация: карточка уходит с доски, история задачи сохраняется в базе.
Агенты
/api/v1/agentsИсполнители задачread:agentsЦифровые сотрудники выполняют работу по ресторану, профили разработки — доработку платформы. Значение `id` подставляется в `assigneeId` карточки.
AI
/api/v1/ai/askСпросить агента о данныхai:askВопрос на русском уходит агенту `rkdash`: в ответе текст и готовая поверхность A2UI — блоки дашборда, которые можно отрисовать у себя.
curl -X POST -H "Authorization: Bearer $RKDASH_KEY" -H "Content-Type: application/json" -d '{"question":"Какая выручка за август?","threadId":"demo-1"}' https://rkdash.com/api/v1/ai/askВебхуки
/api/v1/webhooksПодписки на событияread:webhooks/api/v1/webhooksПодписаться на событияwrite:webhooksОтдаёт секрет подписи — он показывается один раз при создании.
/api/v1/webhooks/{id}Подписка по идентификаторуread:webhooks/api/v1/webhooks/{id}Изменить подпискуwrite:webhooks/api/v1/webhooks/{id}Удалить подпискуwrite:webhooks/api/v1/webhooks/{id}/deliveries/{deliveryId}/replayПовторить доставку событияwrite:webhooksВозвращает запись журнала в очередь и выполняет попытку сразу. Новой записи не создаётся: в интерфейсе приёмника не появляется дубль.
/api/v1/events/streamЖивой поток событий (SSE)read:webhooksСобытие приходит в панель и активную сессию агента без перезагрузки. Живой канал и доставка вебхукам — один и тот же момент. Ключ передаётся в заголовке Authorization.
/api/v1/webhooks/{id}/deliveriesЖурнал доставокread:webhooksВидно, куда и с каким результатом ушло каждое событие, включая повторные попытки.