Admin API: потоки
Методы Admin API для потоков кампании: список, создание, изменение, порядок, копия, шаблоны и импорт, пробный расчёт, счётчики лимитов и статистика.
14 методов для работы с потоками кампании. Все они требуют токен с доступом Полный доступ (full). Авторизация описана на странице Admin API: обзор и авторизация, общий формат запросов и ошибок — на странице Формат запросов, ответов и ошибок.
Объект потока
Этот объект возвращают и принимают методы создания и изменения, возвращают список и копирование.
| Поле | Тип | Описание |
|---|---|---|
id | строка, UUID | Идентификатор потока. Назначает трекер |
campaign_id | строка, UUID | Кампания потока. Берётся из адреса запроса |
name | строка | Название потока |
type | строка | Тип: regular — Обычный, forced — Перехватывающий, default — Замыкающий |
action_type | строка | Действие потока, см. ниже |
action_payload | объект | Параметры действия |
weight | целое | Вес в ротации обычных потоков |
position | целое | Позиция в списке, меньшее значение — выше |
state | строка | active — поток работает, paused — на паузе |
mode | строка | and или or — логика условий, когда группы не заданы |
filters | массив | Условия отбора, см. ниже |
schedule | объект или null | Расписание: days — дни от 1 (понедельник) до 7 (воскресенье), from и to — время ЧЧ:ММ, tz — часовой пояс, например Europe/Warsaw |
offers | массив или null | Офферы потока: id оффера и доля share |
landers | массив или null | Лендинги потока: id лендинга и доля share |
click_limits | объект или null | Лимиты кликов: hourly, daily, total — целые от 0 до 1 000 000 000 000, 0 — без лимита; timezone — часовой пояс, по умолчанию UTC |
У потока без офферов или лендингов поля offers и landers равны null. Доля share, если её не передать, равна 100; явный 0 исключает элемент из ротации. Подробнее о долях — на странице Ротация и сплит-тесты, о расписании и лимитах — на странице Расписание и лимиты кликов потока.
Действие и его параметры
action_type | Действие в панели | Ключи action_payload |
|---|---|---|
offers | Оффер | — |
landing | Лендинг | — |
funnel | Воронка ленд→оффер | offer_selection: before или after |
redirect | Прямой URL | url — адрес; redirect_type: redirect, meta, js, direct или double_meta |
html | HTML | html — код страницы |
text | Показать текст | text — текст |
campaign | Передать в кампанию | campaign — alias кампании |
404 | Заглушка 404 | — |
nothing | Ничего (204) | — |
Что делает каждое действие и способ редиректа — на странице Действия потока и способы редиректа.
Фильтры
Каждый элемент массива filters — одно условие:
| Поле | Тип | Описание |
|---|---|---|
type | строка | Поле условия: geo, country, region, city, device, os, os_version, browser, browser_version, isp, connection, lang, user_agent, referer, empty_referer, bot, proxy, ip, ad_campaign_id, creative_id, keyword, sub_id_1 … sub_id_30 |
op | строка | Оператор: in, not_in, eq, ne, regex. Для ip оператор regex не принимается |
values | массив строк | Значения для сравнения |
group | целое | Номер группы, от 1 |
Условия с одним номером группы объединяются по ИЛИ, группы между собой — по И. Если ни у одного условия group не задан, условия объединяются по полю mode. Формат значений каждого поля — на странице Фильтры потока.
Потоки кампании
Список потоков
GET /api/v1/campaigns/{id}/streams
Возвращает массив потоков кампании по возрастанию position. {id} — идентификатор кампании. Ошибка: 404 — кампания не найдена.
Создать поток
POST /api/v1/campaigns/{id}/streams
Создаёт поток в кампании {id}. Тело — объект потока.
| Поле | Обязательность | По умолчанию |
|---|---|---|
action_type | да | — |
name | нет | пустая строка |
type | нет | regular |
state | нет | active |
mode | нет | and |
weight, position | нет | 0 |
action_payload, filters, schedule, offers, landers, click_limits | нет | не заданы |
curl -X POST https://panel.example.com/api/v1/campaigns/3f2a1c9e-5b7d-4e8a-9c1f-0a2b3c4d5e6f/streams \
-H "Api-Key: <токен>" \
-H "Content-Type: application/json" \
-d '{
"name": "US mobile",
"type": "regular",
"action_type": "offers",
"weight": 100,
"position": 1,
"filters": [
{"type": "geo", "op": "in", "values": ["US"], "group": 1},
{"type": "device", "op": "in", "values": ["mobile"], "group": 2}
],
"offers": [{"id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f", "share": 100}],
"click_limits": {"daily": 5000, "timezone": "Europe/Warsaw"}
}'Ответ — код 201 и объект потока с новым id. В нём стоят те значения, которые вы передали: значения по умолчанию видны в списке потоков.
Передавайте weight явно. При ротации по весу обычный поток с весом 0 получает трафик, только когда вес 0 у всех подошедших обычных потоков. Панель по умолчанию ставит вес 100.
Ошибки:
400bad_request— тело не разобрано как JSON-объект;404not_found— кампания не найдена;422validation—action_type is required;неизвестный тип или оператор фильтра: <тип>;Лимиты кликов: целые числа от 0 до 1 000 000 000 000;Неизвестный часовой пояс лимита;оффер недоступен: <id>;лендинг недоступен: <id>.
Изменить поток
PUT /api/v1/streams/{id}
Меняет поток {id}. Передавайте только те поля, которые нужно изменить: остальные сохраняются. Переданное поле заменяется целиком. Чтобы поменять один ключ в action_payload или один оффер в offers, получите поток из списка, измените объект и отправьте его полностью. null в schedule или click_limits снимает расписание или лимиты.
curl -X PUT https://panel.example.com/api/v1/streams/b7e6d5c4-3a2f-4b1e-9d0c-8f7e6d5c4b3a \
-H "Api-Key: <токен>" \
-H "Content-Type: application/json" \
-d '{"state": "paused"}'Ответ — код 200 и объект потока со всеми полями. Ошибки 400 и 422 те же, что при создании, кроме action_type is required; 404 — поток не найден. Перенести поток в другую кампанию этим методом нельзя.
Удалить поток
DELETE /api/v1/streams/{id}
Удаляет поток. Ответ — код 204 без тела. Ошибка: 404 — поток не найден.
Удалённый поток не попадает в корзину и не восстанавливается. Чтобы временно снять трафик, поставьте поток на паузу методом изменения.
Задать порядок потоков
POST /api/v1/campaigns/{id}/streams/reorder
Расставляет потоки кампании по списку.
| Поле | Тип | Обязательность | Описание |
|---|---|---|---|
ids | массив UUID | да | Идентификаторы потоков в нужном порядке |
Первый поток списка получает position 0, второй — 1 и так далее. Потоки, которых нет в списке, сохраняют прежнюю позицию. Идентификаторы потоков других кампаний пропускаются. Ответ — код 204 без тела. Ошибки: 400 — тело не разобрано или в списке не UUID; 404 — кампания не найдена.
Скопировать поток
POST /api/v1/streams/{id}/clone
Создаёт копию потока в той же кампании. Тело не нужно. Копия получает название с добавкой « · копия», состояние paused и позицию после последнего потока; офферы, лендинги, фильтры, расписание и лимиты переносятся. Ответ — код 201 и объект нового потока. Ошибки: 404 — поток не найден; 422 — условие, оффер или лендинг исходного потока не прошли проверку.
Шаблоны и импорт
Как шаблоны и файлы выглядят в панели — на странице Шаблоны, экспорт и импорт потоков.
Выгрузить поток в файл
GET /api/v1/streams/{id}/export
Возвращает переносимое описание потока. Ответ — код 200, заголовок Content-Disposition с именем файла stream-<id>.json и тело:
{
"format": "tracker-stream",
"version": 1,
"stream": {"id": "", "campaign_id": "", "name": "US mobile", "type": "regular", "action_type": "offers", "state": "paused", "position": 0}
}В stream — все поля объекта потока, в примере показана часть. Идентификаторы потока и кампании пустые, состояние — paused, позиция — 0. В action_payload остаются только ключи из таблицы действий. Ошибка: 404 — поток не найден.
Проверить файл перед импортом
POST /api/v1/campaigns/{id}/stream-import/preview
Проверяет файл шаблона для кампании {id} и возвращает готовый черновик. Поток при этом не создаётся.
| Поле | Тип | Обязательность | Описание |
|---|---|---|---|
format | строка | да | tracker-stream |
version | целое | да | 1 |
stream | объект | да | Объект потока: name от 1 до 160 символов, type и action_type из таблиц выше |
Ответ — код 200 и объект потока в состоянии paused с позицией после последнего потока кампании. Чтобы создать поток, отправьте этот объект методом «Создать поток».
Ошибки: 400 — Не удалось прочитать файл шаблона; 404 — кампания не найдена; 422 — файл не прошёл проверку, в message стоит причина, например Нужен шаблон tracker-stream версии 1 или Шаблон больше 256 КиБ. Все пределы файла — в разделе Ограничения файла.
Сохранить поток как шаблон
POST /api/v1/streams/{id}/templates
Сохраняет настройки потока {id} в личную библиотеку шаблонов пользователя, который создал токен.
| Поле | Тип | Обязательность | Описание |
|---|---|---|---|
name | строка | да | Название шаблона, от 1 до 120 символов |
Ответ — код 201 и объект шаблона: id, name, definition — то же описание, что отдаёт выгрузка в файл, created_at. Ошибки: 400 — Некорректный запрос; 404 — поток не найден; 422 — Название шаблона: от 1 до 120 символов или поток не прошёл проверку шаблона.
Список шаблонов
GET /api/v1/stream-templates
Возвращает массив шаблонов создателя токена, новые — первыми. Поля элемента: id, name, definition, created_at. Шаблоны других пользователей в список не входят.
Удалить шаблон
DELETE /api/v1/stream-templates/{id}
Удаляет шаблон из библиотеки создателя токена. Ответ — код 204 без тела. Ошибка: 404 — шаблон не найден. Потоки, созданные из шаблона, не меняются.
Пробный расчёт
POST /api/v1/campaigns/{id}/routing-preview
Показывает, какой поток кампании получит посетитель с заданными параметрами. Клик не записывается, счётчики лимитов не меняются. Все поля необязательны, регистр букв в именах полей не учитывается.
| Поле | Тип | Описание |
|---|---|---|
IP | строка | IP-адрес посетителя |
Country | строка | Код страны, например US |
Region, City | строка | Регион и город |
Device, OS, Browser | строка | Устройство, ОС и браузер, например mobile, Android, Chrome |
Lang | строка | Язык браузера |
ISP, Connection | строка | Провайдер и тип подключения |
Referrer, UserAgent | строка | Реферер и User-Agent |
Bot | логическое | Считать посетителя ботом |
Whitepage | логическое | Расчёт для отсеянного трафика: участвуют только замыкающие потоки |
At | строка, RFC 3339 | Момент расчёта для расписания и лимитов. По умолчанию — текущее время |
SubIDs | объект | Значения sub_id: ключи sub_id_1 … sub_id_30 |
Tokens | объект | Значения параметров клика: ключи ad_campaign_id, creative_id, keyword |
curl -X POST https://panel.example.com/api/v1/campaigns/3f2a1c9e-5b7d-4e8a-9c1f-0a2b3c4d5e6f/routing-preview \
-H "Api-Key: <токен>" \
-H "Content-Type: application/json" \
-d '{"Country": "US", "Device": "mobile", "OS": "Android", "Browser": "Chrome", "SubIDs": {"sub_id_1": "fb"}}'Ответ — код 200:
streams— потоки кампании. У каждого:id,name,type,weight,position;eligible— подходит ли поток посетителю;filters— результат каждого условия в порядке массиваfiltersпотока;selected—trueу выбранного потока;reason— пояснение текстом.campaign_stateиrotation— состояние и режим ротации кампании.at— момент, на который сделан расчёт.
Значения reason и порядок чтения результата — на странице Проверка выбора потока. Ошибки: 400 — тело не разобрано; 404 — кампания не найдена; 422 — invalid IP.
Счётчики и статистика
Счётчики лимитов потока
GET /api/v1/streams/{id}/click-limits
Возвращает, сколько входов учтено в лимитах потока: hourly — за текущий час, daily — за текущие сутки, total — всего. Час и сутки считаются в часовом поясе лимитов потока; если лимиты не заданы — в UTC. Ошибки: 404 — поток не найден; 503 с кодом unavailable — Счётчики временно недоступны, повторите запрос позже.
Клики по потокам кампании
GET /api/v1/campaigns/{id}/stream-stats
Возвращает клики и уникальные клики по потокам кампании за период.
| Параметр | Тип | Описание |
|---|---|---|
from | строка, RFC 3339 | Начало периода. По умолчанию — 24 часа назад |
to | строка, RFC 3339 | Конец периода. По умолчанию — текущее время |
Ответ — код 200 и объект с массивом items. У элемента три поля: stream_id, clicks, uniques. Потоков без кликов за период в массиве нет. Значение не в формате RFC 3339 заменяется значением по умолчанию. Ошибки: 404 — кампания не найдена; 400 с кодом report_error — запрос статистики не выполнен.
Другие показатели по потокам стройте методом отчётов с группировкой stream — см. Admin API: отчёты.
Ошибки
| Код | code | Когда |
|---|---|---|
400 | bad_request | Тело не JSON-объект, либо идентификатор в адресе или в теле — не UUID |
404 | not_found | Кампания, поток или шаблон не найдены в вашей команде |
422 | validation | Значение не прошло проверку; причина — в message |
503 | unavailable | Счётчики лимитов временно недоступны |
оффер недоступен или лендинг недоступен
Оффера или лендинга с таким id нет в команде. Проверяются только новые элементы: те, что уже были в потоке, при изменении не перепроверяются.
Изменения не видны в трафике
Изменения через API действуют сразу. Убедитесь, что поток в состоянии active: копия и поток из импорта создаются в состоянии paused.