---
slug: "roistat"
name: "Roistat REST API"
vendor: "Roistat"
industry: "marketing"
docsUrl: "https://help-en.roistat.com/API/methods/about/"
version: 2
updatedAt: "2026-10-24"
---

# Roistat REST API

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

API системы сквозной аналитики Roistat: проекты, отчёты аналитики по источникам и метрикам, сделки (выгрузка из CRM, список, статусы), прокси-лиды, коллтрекинг (номера, скрипты, звонки), события, визиты, маркетинговые каналы, баланс. Пути строятся по схеме «контекст / сервис / ресурс / метод», например `project/calltracking/phone/list`.

## Сценарии

### Выгрузить отчёт сквозной аналитики

Расходы, выручка и ROI по рекламным каналам — в свою BI-систему или отчёт.

1. Возьми ключ API в профиле Roistat и передавай его в заголовке Api-key. Номер проекта — параметр project в строке запроса; список проектов — GET /user/projects.
2. Запроси отчёт: POST /project/analytics/data с dimensions (например, marker_level_1 — канал), metrics (visits, leads, sales, revenue, marketing_cost и т. п.) и period.from / period.to с часовым поясом.
3. Для разбивки по времени добавь interval, для отбора — filters (field, operation, value).
4. По умолчанию все ответы, даже ошибки, приходят с HTTP 200 — проверяй status в теле или передай заголовок Use-Http-Code: 1. Лимит — 10 запросов в секунду и 5000 в час на проект.

```bash
curl -X POST "https://cloud.roistat.com/api/v1/project/analytics/data?project=12345" \
  -H "Api-key: $ROISTAT_KEY" -H 'Content-Type: application/json' -H 'Use-Http-Code: 1' \
  -d '{
        "dimensions": ["marker_level_1"],
        "metrics": ["visits", "leads", "sales", "revenue", "marketing_cost"],
        "period": {"from": "2026-10-01T00:00:00+0300", "to": "2026-10-23T23:59:59+0300"}
      }'
```

### Передать сделки из своей CRM

Если CRM не подключена штатно — выгружать сделки и статусы через API, чтобы Roistat считал выручку по каналам.

1. Один раз передай справочник статусов: POST /project/set-statuses — массив всех статусов с id, name и type (unused, in progress, paid, canceled). Передавай полный список: существующий id с новым именем переименует статус.
2. Выгружай сделки: POST /project/add-orders — массив сделок с id, name, date_create, status, price, cost и roistat — номером визита (его кладёт на сайт скрипт Roistat в куку roistat_visit).
3. В ответе uploaded, processed, saved и счётчики пропущенных — по ним видно, что не загрузилось.
4. Сменить статус одной сделки, созданной через API или цели, можно методом POST /project/integration/order/{orderId}/status/update.

```bash
curl -X POST "https://cloud.roistat.com/api/v1/project/add-orders?project=12345" \
  -H "Api-key: $ROISTAT_KEY" -H 'Content-Type: application/json' \
  -d '[{"id": "1042", "name": "Заказ №1042", "date_create": "2026-10-23 14:05", "status": "2", "price": "15000", "cost": "9000", "roistat": "345678"}]'
```

### Забирать заявки и звонки с источниками

Прокси-лиды и звонки коллтрекинга с привязкой к визиту и рекламному источнику.

1. Заявки за период: GET /project/proxy-leads с period в формате YYYY-MM-DD-YYYY-MM-DD. В ответе name, phone, email, roistat (визит) и order_id. Время — UTC.
2. Звонки: POST /project/calltracking/call/list с filters по дате, limit и extend = ["visit", "order"], чтобы сразу получить визит и сделку. В записи есть link — ссылка на запись разговора.
3. Номера коллтрекинга и их настройки — POST /project/calltracking/phone/list.
4. Полная цепочка визитов по конкретной сделке — GET /project/orders/{orderId}/info.

```bash
curl -G "https://cloud.roistat.com/api/v1/project/proxy-leads" \
  -H "Api-key: $ROISTAT_KEY" -d project=12345 -d period=2026-10-01-2026-10-23

curl -X POST "https://cloud.roistat.com/api/v1/project/calltracking/call/list?project=12345" \
  -H "Api-key: $ROISTAT_KEY" -H 'Content-Type: application/json' \
  -d '{"filters": {"and": [["date", ">", "2026-10-01T00:00:00+0000"]]}, "limit": 100, "extend": ["visit", "order"]}'
```

### Сверить сделки с выручкой

Проверить, какие сделки Roistat видит оплаченными и откуда они пришли.

1. Запроси сделки: POST /project/integration/order/list с filters (например, статус 1 — оплачен), limit и offset.
2. С extend = ["visit"] в каждой сделке будут полные данные визита — но такой запрос ограничен по частоте (при limit больше 100 — 5 в минуту), поэтому бери небольшие страницы.
3. Сравни revenue и status с данными своей учётной системы и при расхождении перевыгрузи сделку через POST /project/add-orders.

```bash
curl -X POST "https://cloud.roistat.com/api/v1/project/integration/order/list?project=12345" \
  -H "Api-key: $ROISTAT_KEY" -H 'Content-Type: application/json' \
  -d '{"filters": {"and": [["status", "=", "1"]]}, "limit": 100, "offset": 0}'
```

## Базовые URL

- Боевой: `https://cloud.roistat.com/api/v1`

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

Тип: API-ключ

Ключ API (один на пользователя, действует для всех его проектов) берётся в профиле: `https://cloud.roistat.com/user/profile/api`. Передаётся в заголовке `Api-key` (рекомендуется; параметр `key` в URL небезопасен). Номер проекта — в параметре `project` строки запроса; без него работают только `/user/projects` и `/account/project/create`.

```
curl 'https://cloud.roistat.com/api/v1/project/proxy-leads?project=12345&period=2021-07-07-2021-09-24' \
    --request GET \
    --header 'Content-type: application/json' \
    --header 'Api-key: {KEY}'
```

## Методы

### GET /user/projects — Проекты пользователя

В ответе `projects[]`: `id`, `name`, `profit`, `creation_date`, `currency`, `is_owner`.

### POST /project/analytics/data — Отчёт аналитики

Excel-вариант — `POST /project/analytics/data/export/excel` (без `interval` и `next_dimensions`).

В ответе `data[]`: `items` (строки с `metrics`, `dimensions`), `mean`, `dateFrom`, `dateTo`.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `project` | query | string | да | Номер проекта |
| `dimensions` | body | array | да | Группировки, например marker_level_1 |
| `metrics` | body | array | да | Метрики: имя или объект metric + attribution |
| `period.from` | body | string | да | Начало с часовым поясом, например 2016-07-01T00:00:00+0300 |
| `period.to` | body | string | да | Конец периода |
| `filters` | body | array | нет | Фильтры field, operation (>, <, =, <>, >=, <=, in), value |
| `interval` | body | string | нет | Разбивка периода XmYwZd |

### POST /project/integration/order/list — Список сделок

В ответе `data[]` (`id`, `source_type`, `creation_date`, `revenue`, `cost`, `visit_id`, `client_id`, `custom_fields`, `status`), `total`.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `project` | query | string | да | Номер проекта |
| `filters` | body | object | нет | Фильтры (and); статус: 0 в работе, 1 оплачен, 2 отменён |
| `extend` | body | array | нет | visit — вернуть полные данные визита |
| `limit` | body | integer | нет | Число сделок |
| `offset` | body | integer | нет | Смещение |

### POST /project/add-orders — Выгрузка сделок из CRM

Тело — массив сделок.

В ответе: `uploaded`, `processed`, `saved`, счётчики пропущенных (`skipped_by_status`, `skipped_because_not_changed` и др.).

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `project` | query | string | да | Номер проекта |
| `[].id` | body | string | нет | ID сделки в CRM |
| `[].name` | body | string | нет | Название сделки |
| `[].date_create` | body | string | нет | UNIX time или YYYY-MM-DD HH:MM |
| `[].status` | body | string | нет | ID статуса из set-statuses |
| `[].roistat` | body | string | нет | Номер визита Roistat |
| `[].price` | body | string | нет | Сумма (для выручки) |
| `[].cost` | body | string | нет | Себестоимость |
| `[].fields` | body | object | нет | Доп. поля, до 1000 символов каждое |

### POST /project/set-statuses — Выгрузка статусов сделок

Передавайте все статусы (существующие и новые) одним массивом; существующий ID с новым именем переименовывает статус.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `project` | query | string | да | Номер проекта |
| `[].id` | body | string | нет | ID статуса |
| `[].name` | body | string | нет | Название |
| `[].type` | body | string | нет | unused, in progress, paid, canceled |

### POST /project/integration/order/{orderId}/status/update — Смена статуса сделки

Только для интеграции через цели или API.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `orderId` | path | string | да | ID сделки |
| `project` | query | string | да | Номер проекта |
| `status_id` | body | string | нет | ID статуса в Roistat |

### GET /project/orders/{orderId}/info — Подробности сделки

Данные сделки, товары и полная цепочка визитов.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `orderId` | path | string | да | ID сделки |
| `project` | query | string | да | Номер проекта |

### GET /project/proxy-leads — Прокси-лиды за период

В ответе `ProxyLeads[]`: `id`, `title`, `text`, `name`, `phone`, `email`, `roistat` (визит), `creation_date` (UTC0), `order_id`.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `project` | query | string | да | Номер проекта |
| `period` | query | string | да | Период YYYY-MM-DD-YYYY-MM-DD |

### POST /project/calltracking/call/list — История звонков

Чтобы получить визит и сделку для каждого звонка, добавьте `visit` и `order` в `extend`. В записи звонка: `id`, `caller`, `callee`, `duration`, `status`, `date`, `link` (запись), `visit_id`, `order_id`.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `project` | query | string | да | Номер проекта |
| `filters` | body | object | нет | Фильтры (например, по диапазону дат в and) |
| `sort` | body | array | нет | Сортировка |
| `limit` | body | integer | нет | Число записей |
| `offset` | body | integer | нет | Смещение |
| `extend` | body | array | нет | visit, order |

### POST /project/calltracking/phone/list — Номера коллтрекинга

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `project` | query | string | да | Номер проекта |
| `filters` | body | object | нет | Фильтры |
| `limit` | body | integer | нет | Число записей |
| `offset` | body | integer | нет | Смещение |

## Нюансы

- По умолчанию все методы — POST; GET допускается для методов, оканчивающихся на `/list`, и для отдельных ресурсов (проекты, прокси-лиды, детали сделки).
- Тело — JSON или XML; поддерживается CORS; время по умолчанию — UTC+0.
- По умолчанию все ответы, включая ошибки, приходят с HTTP 200; заголовок `Use-Http-Code: 1` включает реальные HTTP-коды.
- Ответы содержат `data`, `total`, `status`.
- Список сделок с `extend: visit`: при `limit` больше 1000 — 1 запрос в минуту, больше 100 — 5, меньше 100 — 10; без `extend` — 20 в минуту.

## Ошибки

| Код | Описание |
|---|---|
| `incorrect_request` | 400 — некорректный запрос |
| `authentication_failed` | 401 — ошибка аутентификации |
| `authorization_failed` | 401 — ошибка авторизации |
| `insufficient_funds` | 402 — недостаточно средств |
| `option_not_available` | 402 — опция недоступна |
| `project_frozen` | 402 — проект заморожен |
| `access_denied` | 403 — доступ запрещён |
| `resource_not_found` | 404 — ресурс не найден |
| `resource_already_exists` | 409 — ресурс уже существует |
| `request_data_validation_error` | 422 — ошибка валидации данных |
| `request_limit_error` | 429 — превышен лимит запросов |
| `internal_error` | 500 — внутренняя ошибка |

## Ограничения

- 10 запросов в секунду и 5000 запросов в час на проект.

## Источники

- [Roistat REST API](https://help-en.roistat.com/API/methods/about/)
- [Projects](https://help-en.roistat.com/API/methods/projects/)
- [Analytics](https://help-en.roistat.com/API/methods/analytics/)
- [Orders](https://help-en.roistat.com/API/methods/orders/)
- [Proxy Leads](https://help-en.roistat.com/API/methods/proxy-leads/)
- [Calltracking](https://help-en.roistat.com/API/methods/calltracking/)

---

Если этого недостаточно — официальная документация: https://help-en.roistat.com/API/methods/about/
JSON: https://mcp-everything.ru/api/integrations/roistat. MCP: https://mcp-everything.ru/mcp
