Dodo IS API API

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

API информационной системы Dodo IS (Додо Пицца, Drinkit, донерные) для разработчиков расширений: заведения, статистика доставки и заказы курьеров, заказы, продажи и отмены, стоп-продажи, сотрудники и смены, складские остатки и финансовые продажи. Доступен для всех стран и концепций; для большинства методов нужна учётная запись пользователя Dodo IS. Почти все методы — GET с параметрами в строке запроса.

Сценарии

Собрать ежедневный отчёт по выручке пиццерий

Отчёт для партнёра-франчайзи: выручка каждой пиццерии по дням и каналам продаж — в таблицу, BI или чат.

  1. Создай приложение в кабинете разработчика Dodo IS и получи токен по OAuth 2.0 Authorization Code: https://auth.dodois.io/connect/authorize, затем https://auth.dodois.io/connect/token. Запроси scopes shared, user.role:read и offline_access, чтобы получать refresh_token и не просить вход каждый день.
  2. Узнай ID своих заведений: GET /units с countryId (например, RU) и businessId. Пагинация — skip и take.
  3. Запроси продажи: GET /finances/sales/units/daily с units (UUID через запятую без пробелов), fromDate и toDate. Данные агрегированы по дням, каналам продаж (Delivery, Dine-in, Takeaway), источникам заказа и способам оплаты.
  4. Базовый URL зависит от страны и бренда: для Додо Пиццы в России — https://api.dodois.io/dodopizza/ru, для Drinkit — https://api.dodois.io/drinkit/ru.
API=https://api.dodois.io/dodopizza/ru

curl -G "$API/units" -H "Authorization: Bearer $DODO_TOKEN" \
  -d countryId=RU -d businessId=<businessId> -d take=100

curl -G "$API/finances/sales/units/daily" -H "Authorization: Bearer $DODO_TOKEN" \
  -d units=<unit_uuid_1>,<unit_uuid_2> -d fromDate=2026-10-01 -d toDate=2026-10-23

Следить за скоростью доставки

Контроль сервиса: среднее время доставки по пиццериям и разбор конкретных долгих заказов.

  1. Получи scopes deliverystatistics и user.role:read.
  2. Сводные метрики за период: GET /delivery/statistics с units, from и to (ISO 8601).
  3. Детализация по каждому заказу курьеров: GET /delivery/couriers-orders с теми же units (до 30 заведений), from, to и страницами skip / take (до 1000). Время в ответе — UTC.
  4. Листай, увеличивая skip на число полученных записей, пока не придёт isEndOfListReached = true.
  5. Полные данные проблемного заказа — GET /orders с orderIds.
import requests

API = "https://api.dodois.io/dodopizza/ru"
H = {"Authorization": "Bearer <token>"}
params = {"units": "<unit_uuid>", "from": "2026-10-23T00:00:00", "to": "2026-10-24T00:00:00",
          "skip": 0, "take": 1000}

stats = requests.get(f"{API}/delivery/statistics", headers=H,
                     params={k: params[k] for k in ("units", "from", "to")}).json()

pages = []
while True:
    page = requests.get(f"{API}/delivery/couriers-orders", headers=H, params=params).json()
    pages.append(page)
    if page.get("isEndOfListReached", True):
        break
    params["skip"] += params["take"]

Получать уведомления о стоп-продажах

Управляющий сразу узнаёт, что в пиццерии закончился продукт и он в стопе, — а не из отзывов гостей.

  1. Получи scopes stopsales и user.role:read.
  2. Раз в несколько минут запрашивай стопы за текущий день: GET /production/stop-sales-products с units (до 30 UUID через запятую без пробелов), from и to.
  3. Стопы сгруппированы по пиццериям и продуктам. Сравни с предыдущим опросом и отправляй в чат только новые.
  4. Не опрашивай чаще, чем нужно: при ответе 429 увеличь интервал.
curl -G "https://api.dodois.io/dodopizza/ru/production/stop-sales-products" \
  -H "Authorization: Bearer $DODO_TOKEN" \
  -d units=<unit_uuid_1>,<unit_uuid_2> \
  -d from=2026-10-24T00:00:00 -d to=2026-10-24T23:59:59

Выгрузить смены сотрудников для расчёта зарплаты

Отработанные часы и доставленные заказы за период — в свою систему расчёта зарплаты или премий курьерам.

  1. Получи scopes staffshifts:read, staffmembers:read и user.role:read.
  2. Запроси смены: GET /staff/shifts с units, clockInFrom и clockInTo (смены выбираются по времени начала), при необходимости staffTypeName. В сменах — дневные, ночные и праздничные часы в минутах, доставленные заказы и расстояние.
  3. Листай по skip и take до isEndOfListReached = true.
  4. Имена и статусы сотрудников — GET /staff/members с units и statuses. Это персональные данные: храни их по правилам 152-ФЗ.
  5. Кто сейчас на смене — GET /staff/couriers-on-shift с units.
curl -G "https://api.dodois.io/dodopizza/ru/staff/shifts" \
  -H "Authorization: Bearer $DODO_TOKEN" \
  -d units=<unit_uuid> \
  -d clockInFrom=2026-10-01T00:00:00 -d clockInTo=2026-10-16T00:00:00 \
  -d skip=0 -d take=1000

Проверить складские остатки

Заказ сырья у поставщиков по фактическим остаткам, а не на глаз.

  1. Получи scopes accounting:read и user.role:read.
  2. Запроси остатки: GET /accounting/inventory-stocks с units, при необходимости stockItems или categories.
  3. По умолчанию приходят только позиции, подтверждённые ревизией. Расчётные остатки между ревизиями — includeUnconfirmed = true.
  4. Продукты, списанные на отменённые заказы, — GET /accounting/cancelled-sales с units, from и to.
curl -G "https://api.dodois.io/dodopizza/ru/accounting/inventory-stocks" \
  -H "Authorization: Bearer $DODO_TOKEN" \
  -d units=<unit_uuid> -d includeUnconfirmed=true -d take=1000

Базовые URL

Авторизация

Тип: OAuth 2.0

OAuth 2.0 Authorization Code. Приложение создаётся в личном кабинете разработчика; токен передаётся в заголовке Authorization: Bearer <token>.

Основные scopes: shared, orders, accounting:read, deliverystatistics, sales, stopsales, staffmembers:read, staffshifts:read, unit:read, user.role:read, offline_access (получение refresh_token).

Методы

GET /units — Информация о заведениях

Scope: shared.

Параметр Где Тип Обяз. Описание
countryId query string да Страна в формате ISO 3166-1 alpha-2
businessId query string да ID бизнеса (UUID)
unitTypes query string нет Типы заведений
unitStates query string нет Состояние заведения
units query string нет Заведения (UUID)
organizations query string нет Организации (UUID)
skip query integer нет Сколько записей пропустить, по умолчанию 0
take query integer нет Сколько записей выбрать, по умолчанию 100, максимум 1000

GET /delivery/statistics — Статистика доставки

Основные метрики доставки за период по пиццериям. Scopes: deliverystatistics, user.role:read.

Параметр Где Тип Обяз. Описание
units query string да Заведения (UUID через запятую)
from query string да Начало периода, ISO 8601
to query string да Конец периода, ISO 8601

GET /delivery/couriers-orders — Заказы курьеров

Метрики по каждому заказу курьеров; время в ответе — UTC. units — не больше 30. Scopes: deliverystatistics, user.role:read.

Параметр Где Тип Обяз. Описание
units query string да Заведения (UUID)
from query string да Начало периода, ISO 8601
to query string да Конец периода, ISO 8601
skip query integer нет Смещение, по умолчанию 0
take query integer нет Размер страницы, по умолчанию 100, максимум 1000

GET /orders — Заказы по идентификаторам

Не постраничный: возвращаются все найденные заказы, число ID ограничено; заказы недоступных заведений и неизвестные ID в ответ не попадают. Scopes: orders, user.role:read.

Параметр Где Тип Обяз. Описание
orderIds query string да ID заказов (UUID)

GET /accounting/sales — Продажи

Продажи за период включительно. Scopes: sales, user.role:read.

Параметр Где Тип Обяз. Описание
units query string да Заведения (UUID)
from query string да Начало периода, ISO 8601
to query string да Конец периода, ISO 8601
salesChannel query string нет Канал продажи
orderSource query string нет Источник заказа
skip query integer нет Смещение, по умолчанию 0
take query integer нет По умолчанию 100, максимум 1000

GET /accounting/cancelled-sales — Отмены заказов

Продукты, израсходованные на отменённые заказы. Scopes: accounting:read, user.role:read.

Параметр Где Тип Обяз. Описание
units query string да Заведения (UUID)
from query string да Начало периода, ISO 8601
to query string да Конец периода, ISO 8601
skip query integer нет Смещение
take query integer нет По умолчанию 100, максимум 1000

GET /production/stop-sales-products — Стоп-продажи по продуктам

Стопы сгруппированы по пиццериям и продуктам; в units — до 30 UUID через запятую без пробелов. Scopes: stopsales, user.role:read.

Параметр Где Тип Обяз. Описание
units query string да Заведения (UUID)
from query string да Начало периода, ISO 8601
to query string да Конец периода, ISO 8601

GET /staff/members — Список сотрудников

Сортировка по дате трудоустройства (hiredOn); содержит персональные данные. Scopes: staffmembers:read, user.role:read.

Параметр Где Тип Обяз. Описание
units query string нет Заведения (UUID)
staffType query string нет Тип сотрудников (одно значение)
statuses query string нет Статусы через запятую, например Dismissed, Suspended
hiredFrom query string нет Дата трудоустройства, с
hiredTo query string нет Дата трудоустройства, по
dismissedFrom query string нет Дата увольнения, с
dismissedTo query string нет Дата увольнения, по
lastModifiedFrom query string нет Дата изменения, с
lastModifiedTo query string нет Дата изменения, по
skip query integer нет Смещение
take query integer нет По умолчанию 100, максимум 1000

GET /staff/shifts — Смены сотрудников по пиццериям

Отработанное время (дневные, ночные, праздничные часы в минутах), доставленные заказы, расстояние. Смены выбираются по времени начала. Scopes: staffshifts:read, user.role:read.

Параметр Где Тип Обяз. Описание
units query string да Заведения (UUID)
clockInFrom query string да Начало периода, в который попадает начало смен
clockInTo query string да Конец периода
staffTypeName query string нет Тип сотрудника
skip query integer нет Смещение
take query integer нет По умолчанию 100, максимум 1000

GET /staff/couriers-on-shift — Курьеры на смене

В units — до 30 заведений. Scopes: staffshifts:read, user.role:read.

Параметр Где Тип Обяз. Описание
units query string да Заведения (UUID)
on query string нет Момент времени в прошлом; по умолчанию — текущий

GET /accounting/inventory-stocks — Складские остатки

По умолчанию — только позиции, подтверждённые ревизией (isConfirmed = true). Scopes: accounting:read, user.role:read.

Параметр Где Тип Обяз. Описание
units query string да Заведения (UUID)
stockItems query string нет Сырьё (UUID)
categories query string нет Категории сырья
includeUnconfirmed query boolean нет Включать расчётные остатки, по умолчанию false
skip query integer нет Смещение
take query integer нет Максимум 1000

GET /finances/sales/units/daily — Дневные продажи по заведениям

Агрегировано по дням, каналам продаж (Delivery, Dine-in, Takeaway), источникам заказа и методам оплаты. Scope: shared.

Параметр Где Тип Обяз. Описание
units query string да Заведения (UUID)
fromDate query string да Дата начала, ISO 8601
toDate query string да Дата конца, ISO 8601

Нюансы

Ошибки

Код Описание
400 Некорректные параметры запроса
401 Нет авторизации
403 Нет доступа к данным
429 Слишком много запросов
500 Внутренняя ошибка

Источники


Если этого недостаточно — официальная документация: https://docs.dodois.io/ JSON: https://mcp-everything.ru/api/integrations/dodo-is. MCP: https://mcp-everything.ru/mcp