Перейти к основному содержимому

Получение данных

Ключ коннектора открывает не только запись, но и чтение: из Октопуса можно забрать карточки клиентов, состав сегментов, достижения целей и сводную аналитику. Так собранный маркетологом сегмент попадает в вашу CRM, учётную систему или BI.

Все методы здесь — GET, кроме запуска экспорта сегмента. Адрес, авторизация и формат ответа — как у остальных методов, см. введение.

GET /api/users?limit=50 HTTP/1.1
Host: api.octopuscdp.ru
Authorization: Bearer oct-1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d
Параметры-массивы

Параметры filter, order и select у клиентов передаются в строке запроса в виде массива: filter[SEGMENT_ID]=12, order[DATE_REGISTER]=DESC, select[]=ID&select[]=EMAIL.


Два идентификатора клиента

У клиента два идентификатора, и в методах чтения их важно не путать:

ИдентификаторОткудаГде используется
XML_IDВаш ID, который вы передали в /users/syncВо всех методах передачи данных
IDНомер карточки в CDP. Приходит в ответе /users/sync в поле user_idВ методах чтения: адрес /api/users/{id}, состав сегмента USERS, USER_ID в достижениях целей

Клиент по вашему идентификатору ищется фильтром: GET /api/users?filter[XML_ID]=1042&include_slaves=true&select[]=ID&select[]=XML_ID. Запрашивайте XML_ID в select — по нему полученные карточки сопоставляются с вашими записями.

Кого список не показывает

По умолчанию в выдаче нет двух групп клиентов:

  • подчинённых карточек — если карточка объединена с дубликатом, показывается только основная. Чтобы получить и подчинённые, добавьте include_slaves=true;
  • клиентов в стоп-листе — их количество приходит в blocked_total, а при фильтре по сегменту скрываются и клиенты, вручную исключённые из этого сегмента.

Клиенты

Список клиентов

GET /api/users?limit=50&offset=0&filter[SEGMENT_ID]=12&select[]=ID&select[]=XML_ID&select[]=EMAIL&select[]=NAME&select[]=SEGMENTS
ПараметрОбязательноОписание
limitнетСколько записей вернуть. По умолчанию 50
offsetнетСмещение для постраничной выборки. По умолчанию 0
selectнетКакие поля вернуть. По умолчанию ID, LOGIN, NAME, LAST_NAME, EMAIL. * — все стандартные и дополнительные поля (UF_*)
filterнетУсловия отбора по полям карточки. Перед именем поля можно ставить операторы сравнения: =, !, <, >, % (частичное совпадение)
searchнетПоиск по имени, телефону, e-mail, логину и названию сегментов, без учёта регистра
orderнетСортировка. По умолчанию — сначала новые: order[DATE_REGISTER]=DESC
include_slavesнетtrue — показывать и подчинённые карточки объединённых клиентов. По умолчанию они скрыты

Полезные фильтры:

ФильтрЧто отбирает
filter[SEGMENT_ID]=12Клиентов сегмента с номером 12
filter[XML_ID]=1042Клиента по вашему идентификатору
filter[EMAIL]=ivanovПо e-mail, частичное совпадение
filter[PHONE]=9123456789По телефону
filter[>=DATE_REGISTER]=2026-09-01Зарегистрированных начиная с даты

Вычисляемые поля, которые можно запросить в select:

ПолеЧто возвращает
SEGMENTSСегменты, в которых состоит клиент: номер, название, цвет
AGEВозраст по дате рождения
DAYS_UNTIL_BIRTHDAYСколько дней до ближайшего дня рождения
LAST_ACTIVITY_DATETIMEВремя последнего визита на сайт
SESSID, IP_ADDRESS, USER_AGENTДанные последнего визита
{
"success": true,
"data": {
"items": [
{
"ID": "317",
"XML_ID": "1042",
"EMAIL": "ivanov@example.ru",
"NAME": "Иван",
"IN_STOP_LIST": false,
"EXCLUDED_FROM_SEGMENT": false,
"SEGMENTS": [
{ "id": 12, "name": "Покупали куртки", "color": "#3B82F6" }
]
}
],
"count": 1,
"total": 1,
"blocked_total": 0
}
}
Поле ответаОписание
itemsКарточки клиентов с запрошенными полями
countСколько записей в этом ответе
totalСколько всего клиентов подходит под фильтр, без учёта стоп-листа
blocked_totalСколько подходящих клиентов в стоп-листе — в items их нет
IN_STOP_LIST, EXCLUDED_FROM_SEGMENTСлужебные флаги глобального стоп-листа и исключения из сегмента. Такие клиенты в выдачу не попадают, поэтому в items флаги всегда false

Требования и особенности:

  • выбирайте постранично: увеличивайте offset на limit, пока не получите все total записей;
  • даты в ответе приходят в формате ISO 8601: 2026-09-15T09:41:00+03:00;
  • запрашивайте в select только нужные поля — ответ получится быстрее и меньше.

Один клиент

GET /api/users/317

Возвращает карточку клиента по его номеру в CDP (ID), не по вашему идентификатору. Параметр select — как у списка; по умолчанию возвращаются все поля карточки.

HTTP-кодПричина
400Некорректный номер клиента
404Клиент не найден

Сегменты

Список сегментов

GET /api/segments?select=ID,NAME,SEGMENT_TYPE,USER_COUNT&active=Y
ПараметрОбязательноОписание
selectнетПоля через запятую. По умолчанию все. USER_COUNT — число клиентов в сегменте, USERS — массив их номеров в CDP
activeнетY — только активные сегменты, N — только неактивные
searchнетПоиск по названию
filterнетОтбор по полям сегмента, например filter[IS_ARCHIVED]=N
orderнетСортировка, например order[NAME]=ASC. Можно сортировать и по USER_COUNT
limit, offsetнетПостраничная выборка. По умолчанию 50 и 0
{
"success": true,
"data": {
"items": [
{ "ID": "12", "NAME": "Покупали куртки", "SEGMENT_TYPE": "online", "USER_COUNT": 150 }
],
"count": 1,
"total": 10
}
}
ПолеОписание
IDНомер сегмента — его передают в filter[SEGMENT_ID] при выборке клиентов
NAME, DESCRIPTIONНазвание и описание
ACTIVEАктивен ли сегмент: Y/N
SEGMENT_TYPEonline — пересчитывается сам, static — фиксированный список, recalculated — пересчитывается по расписанию
LAST_RECALCULATION_DATEКогда сегмент пересчитывался последний раз
IS_ARCHIVED, IS_TESTСегмент в архиве; тестовый сегмент для проверки рассылок
USER_COUNT, USERSЧисло клиентов и их номера в CDP — только если запрошены в select

Один сегмент

GET /api/segments/12?select=ID,NAME,USER_COUNT,USERS

Возвращает сегмент с запрошенными полями. Ошибки: 400 — не указан номер, 404 — сегмент не найден.

Как забрать клиентов сегмента

USERS возвращает только номера карточек. Если нужны контакты и поля клиентов, выбирайте их через список клиентов с filter[SEGMENT_ID] — так вы сразу получите нужные поля, включая XML_ID.

Экспорт сегмента в файл

Если нужен файл, а не JSON, — например, для ручной загрузки в другую систему, — сформируйте экспорт и скачайте его.

1. Сформируйте файл:

POST /api/segments/12/export
{ "format": "csv" }
ПолеОбязательноОписание
formatнетxlsx или csv. По умолчанию xlsx
{
"success": true,
"message": "Экспорт завершён",
"data": {
"segment_id": 12,
"segment_name": "Покупали куртки",
"format": "csv",
"file_name": "segment_12_1789123456.csv",
"total_users": 150
}
}

2. Скачайте файл:

GET /api/segments/exportDownload/?id=12

Ответ — сам файл, а не JSON. Отдаётся последний сформированный файл этого сегмента.

Требования и особенности:

  • экспорт одного сегмента можно запускать не чаще раза в 60 секунд;
  • сначала дождитесь ответа на запуск экспорта, затем скачивайте — иначе получите предыдущий файл.

Достижения целей

GET /api/goals/12/results?date_from=2026-09-01 00:00:00&date_to=2026-09-30 23:59:59&limit=100

Возвращает все достижения цели с номером 12: кто, когда и с какими данными её достиг. Номер цели маркетолог берёт в кабинете, в разделе целей.

ПараметрОбязательноОписание
date_from, date_toнетПериод в формате ГГГГ-ММ-ДД ЧЧ:ММ:СС
user_idнетТолько достижения клиента с этим номером в CDP
session_idнетТолько достижения в этой сессии
limit, offsetнетПостраничная выборка. Если limit не передан, возвращаются все достижения
orderнетСортировка. По умолчанию — сначала новые: order[DATE_HIT]=DESC
{
"success": true,
"data": {
"items": [
{
"ID": "1001",
"GOAL_ID": "12",
"USER_ID": 317,
"SESSION_ID": "a1b2c3d4e5f60718",
"DATE_HIT": "2026-09-18T10:20:00+03:00",
"ADDITIONAL_DATA": { "form": "callback" }
}
],
"count": 1,
"total": 528
}
}

USER_ID — номер клиента в CDP; может быть пустым, если посетитель не опознан. ADDITIONAL_DATA — то, что вы передали в additional_data при достижении цели.

Ошибки: 400 — не указан номер цели, 404 — цель не найдена.

Выгружайте с ограничением

Без limit метод отдаёт все достижения разом. Для частых целей задавайте период и limit, иначе ответ будет большим.


Аналитика

Сводные показатели проекта за период — те же, что на дашборде кабинета.

GET /api/analytics?period=month&date=2026-09
ПараметрОбязательноОписание
periodдаday — день, month — месяц, range — произвольный период
dateдля day и monthДень ГГГГ-ММ-ДД или месяц ГГГГ-ММ
date_from, date_toдля rangeНачало и конец периода, ГГГГ-ММ-ДД

При неверном period или без нужных дат — ошибка 400.

Ответ состоит из блоков:

БлокЧто внутри
kpiВыручка (revenue), средний чек, конверсия в покупку, брошенные корзины прямо сейчас, доли оплаченных и отменённых заказов
clientsНовые и повторные покупатели, конверсия в первый заказ, доля повторных покупок
activityУникальные посетители по часам (для day) или по дням
devicesПосетители по типу устройства: desktop, mobile, tablet
marketingРассылки по каналам: отправлено, доставлено, прочитано, клики, конверсия, заказы и выручка. Внутри канала — разбивка по сценариям и их шагам
{
"success": true,
"code": 200,
"data": {
"kpi": {
"revenue": { "value": "37 439", "delta": null },
"average_check": { "value": "6 239", "delta": null },
"conversion": { "value": 26, "delta": null }
},
"clients": {
"new": { "value": 4, "delta": null },
"returning": { "value": 3, "delta": null }
}
}
}

Требования и особенности:

  • каждая метрика — объект { "value": ..., "delta": ... }. delta — изменение в процентах к тому же периоду прошлого года, null, если данных за прошлый год нет;
  • денежные значения приходят строкой с пробелами между разрядами: "37 439". Перед расчётами уберите пробелы и приведите к числу;
  • проценты и счётчики приходят целыми числами;
  • заказы привязываются к рассылке по последнему касанию: для e-mail — по клику по ссылке, для SMS — по доставке. Окно атрибуции по умолчанию — 7 дней для e-mail и 3 дня для SMS;
  • данные за прошедшие дни берутся из кеша, за текущий день считаются в момент запроса.

Что дальше