---
slug: "dodo-is"
name: "Dodo IS API"
vendor: "Dodo Brands"
industry: "retail"
docsUrl: "https://docs.dodois.io/"
version: 2
updatedAt: "2026-10-24"
---

# Dodo IS 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.

```bash
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.

```python
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 увеличь интервал.

```bash
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.

```bash
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.

```bash
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

- Боевой (Россия, Додо Пицца): `https://api.dodois.io/dodopizza/ru`
- Боевой (Россия, Drinkit): `https://api.dodois.io/drinkit/ru`
- Тестовый (mock-сервер): `https://stoplight.io/mocks/dodo-brands/dodo-is/51665679`
- Для других стран: `https://api.dodois.io/dodopizza/{kz,by,kg,uz,tj}`

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

Тип: OAuth 2.0

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

- Авторизация: `https://auth.dodois.io/connect/authorize`
- Токен и обновление: `https://auth.dodois.io/connect/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 |

## Нюансы

- Постраничные методы: увеличивайте `skip` на число полученных записей, пока в ответе не придёт `isEndOfListReached = true`.
- Списки UUID (`units` и др.) — через запятую без пробелов; во многих методах не больше 30 заведений за запрос.
- Доступ к данным ограничен ролями пользователя и его заведениями — scope `user.role:read` нужен почти везде.
- Также есть Auth API (заведения и роли пользователя по токену) и Marketplace API (доступ пользователя к платным функциям приложения).
- Статус работы API: `https://status.dodois.io/`.

## Ошибки

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

## Источники

- [Документация Dodo IS API](https://docs.dodois.io/)
- [Dodo IS API — базовые URL](https://docs.dodois.io/docs/dodo-is/90fc31544cd42-dodo-is-api)
- [Заведения](https://docs.dodois.io/docs/dodo-is/88554db5564c2-zavedeniya-informacziya-o-zavedeniyah)
- [Доставка → Статистика](https://docs.dodois.io/docs/dodo-is/6149483e4dfb1-dostavka-statistika)
- [Учёт → Продажи](https://docs.dodois.io/docs/dodo-is/5cdae1cb7443f-uchyot-prodazhi)
- [Команда → Список сотрудников](https://docs.dodois.io/docs/dodo-is/33e626f47ca51-komanda-spisok-sotrudnikov)

---

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