Admin API: кампании
Методы Admin API для кампаний: список, создание, изменение, архив, копия, доступ, проверка целей, журналы кликов и конверсий, группы.
На странице 15 методов для работы с кампаниями. Всем методам нужен токен с доступом Полный доступ (full) в заголовке Api-Key. Авторизация описана на странице Admin API: обзор и авторизация, общий формат запросов и ошибок — на странице Формат запросов, ответов и ошибок.
Объект кампании
Методы создания, чтения, изменения и копирования возвращают один и тот же объект. Поля из таблицы передаются в теле при создании и изменении.
| Поле | Тип | Обязательность | Описание |
|---|---|---|---|
name | строка | да, при создании | Название кампании |
alias | строка | нет | Первая часть пути ссылки кампании. Латинские буквы, цифры, _ и -, от 1 до 64 символов. Нельзя начинать с _, запрещены health, click, clk, cloak, api. Пустой alias при создании заменяется случайным из 7 символов |
domain_id | UUID или null | нет | Домен кампании |
traffic_source_id | UUID или null | нет | Источник трафика |
cost_model | строка | нет | cpc, cpuc, cpm, cpa, cps или revshare. По умолчанию cpc. См. Модели расхода кампании |
cost_value | число | нет | Цена в USD, не меньше 0. Для revshare — процент от 0 до 100 |
traffic_loss | целое | нет | Недошедший трафик в процентах, от 0 до 99 |
rotation | строка | нет | Выбор среди обычных потоков: weight — по весу, position — первый подошедший по порядку. По умолчанию weight |
uniqueness_method | строка | нет | none, ip, ip_ua или param. По умолчанию none |
uniqueness_ttl | целое | нет | Срок уникальности в часах. 0 — 24 часа |
uniqueness_param | строка | нет | Имя параметра ссылки для метода param |
binding | логическое | нет | Привязка посетителя |
binding_depth | строка | нет | stream, lander или offer. По умолчанию stream |
binding_ttl | целое | нет | Срок привязки в часах, от 0 до 8760. 0 — срок уникальности |
group_name | строка | нет | Название группы |
cloaking | логическое | нет | Включает клоаку |
cloak_config | объект | нет | Настройки клоаки. По умолчанию {} |
params | массив | нет | Параметры ссылки: объекты с полями name, param, value. По умолчанию [] |
s2s_postbacks | массив | нет | До 20 объектов с полями status, url, disabled. См. S2S-постбеки кампании и источника |
state | строка | нет | active, paused или archived. По умолчанию active |
В s2s_postbacks поле status — статус без пробелов до 32 символов или * для всех статусов. Поле url — полный адрес http:// или https:// до 2048 символов без пробелов.
Поля только для чтения:
id— идентификатор кампании, UUID;seq— порядковый номер, тот же, что в колонке ID в панели;workspace_id— идентификатор команды;owner_id— владелец. При создании по токену — создатель токена, из тела запроса не принимается;created_at— момент создания;can_edit— может ли пользователь менять кампанию, есть в ответах списка и чтения.
Чтение
Список кампаний
GET /api/v1/campaigns
Возвращает кампании команды, новые первыми.
| Параметр | Тип | Обязательность | Описание |
|---|---|---|---|
state | строка | нет | Только кампании в этом статусе: active, paused или archived |
limit | целое | нет | Размер страницы, по умолчанию 50. 0 — все кампании |
offset | целое | нет | Сколько кампаний пропустить, по умолчанию 0 |
Ответ 200: объект с массивом items и числом total — сколько кампаний подходит под условия без учёта limit.
curl "https://panel.example.com/api/v1/campaigns?state=active&limit=100" \
-H "Api-Key: <токен>"Получить кампанию
GET /api/v1/campaigns/{id}
Возвращает одну кампанию по её id. Ответ 200 — объект кампании. Ошибка: 404 not_found.
Создание и изменение
Создать кампанию
POST /api/v1/campaigns
Создаёт кампанию. Обязательно только поле name, остальные получают значения по умолчанию из таблицы выше.
curl -X POST https://panel.example.com/api/v1/campaigns \
-H "Api-Key: <токен>" \
-H "Content-Type: application/json" \
-d '{"name":"FB · Sweeps US","cost_model":"cpc","cost_value":0.05,"uniqueness_method":"ip_ua","uniqueness_ttl":24,"group_name":"Sweeps"}'Ответ 201 — объект созданной кампании с присвоенными id, seq и alias. Ошибки: 400 bad_request, 409 conflict, 422 validation — тексты в разделе Ошибки.
Потоки добавляются отдельными методами — см. Admin API: потоки.
Изменить кампанию
PUT /api/v1/campaigns/{id}
Меняет переданные поля. Поля, которых нет в теле, сохраняют прежние значения.
- Список
s2s_postbacksменяется, только если передан массив. Переданный массив заменяет список целиком, пустой массив удаляет все адреса. - Массив
paramsи объектcloak_configтоже заменяются целиком.
curl -X PUT https://panel.example.com/api/v1/campaigns/5b0c6a1e-3d0f-4a52-9c1b-7f2f1f3f8a10 \
-H "Api-Key: <токен>" \
-H "Content-Type: application/json" \
-d '{"state":"paused"}'Ответ 200 — объект кампании после изменения. Ошибки: 400 bad_request, 404 not_found, 409 conflict, 422 validation.
После смены alias старая ссылка перестаёт работать. В статусах paused и archived ссылка кампании отвечает 404.
Архивировать кампанию
DELETE /api/v1/campaigns/{id}
Переводит кампанию в статус archived. Запись, потоки и статистика сохраняются, кампания появляется в корзине. Ответ 204 без тела. Ошибка: 404 not_found.
Вернуть кампанию можно методом восстановления из корзины или запросом PUT с {"state":"active"}. Что происходит с трафиком — на странице Архив и корзина кампаний.
Клонировать кампанию
POST /api/v1/campaigns/{id}/clone
Создаёт копию кампании со всеми потоками. Тело не нужно.
- К названию добавляется
· копия. aliasгенерируется случайный.- Копия создаётся в статусе
paused, потоки сохраняют свои статусы. - Владелец, домен, источник, параметры и постбеки переносятся без изменений.
Ответ 201 — объект новой кампании. Ошибки: 404 not_found; 422 validation, если в потоках есть неизвестный фильтр либо недоступный оффер или лендинг.
Доступ сотрудников
Доступ даёт сотруднику просмотр кампании и её статистики. Подробнее — на странице Доступ к кампаниям и «Поделиться».
Кому открыта кампания
GET /api/v1/campaigns/{id}/shares
Ответ 200: объект с массивом user_ids — идентификаторы пользователей, которым открыт просмотр. Ошибка: 404 not_found.
Задать список доступа
POST /api/v1/campaigns/{id}/shares
Заменяет список целиком.
| Поле | Тип | Обязательность | Описание |
|---|---|---|---|
user_ids | массив UUID | нет | Новый полный список. Пустой массив или запрос без поля закрывает доступ всем. Идентификаторы не из этой команды пропускаются |
Ответ 204 без тела. Ошибки: 400 bad_request, 404 not_found. Идентификаторы пользователей возвращает список из Admin API: пользователи.
Проверка целей
Что означают проверки и сообщения — на странице Диагностика и мониторинг целей кампании.
Проверить конфигурацию целей
GET /api/v1/campaigns/{id}/target-health
Проверяет офферы и лендинги активных потоков без запросов в сеть: существует ли цель, задан ли адрес, загружен ли архив локальной страницы.
Ответ 200: массив items и network_checked со значением false. Поля элемента:
stream— название потока;kind—offer,landerилиstream;id,name— идентификатор и название цели. У элемента сkindstreamвidстоит идентификатор потока,nameпустое;state—ok,warningилиerror;message— пояснение, напримерКонфигурация доступнаилиОффер не активен.
Ошибка: 404 not_found.
Состояние мониторинга
GET /api/v1/campaigns/{id}/target-monitor
Ответ 200: enabled — включён ли мониторинг, и runs — до 20 последних проверок, новые первыми. У проверки есть id, checked_at и items в том же формате, что у target-health. После запроса по сети в элементе появляются http_status и duration_ms — время ответа в миллисекундах. Ошибка: 404 not_found.
Включить или выключить мониторинг
PUT /api/v1/campaigns/{id}/target-monitor
| Поле | Тип | Обязательность | Описание |
|---|---|---|---|
enabled | логическое | да | true — включить, false — выключить |
Ответ 200 — тот же объект, что у метода состояния. Ошибки: 404 not_found; 422 validation с текстом нужно enabled: true или false.
Журналы кликов и конверсий
Оба журнала отдают записи за период, новые первыми. Общие параметры:
| Параметр | Тип | Обязательность | Описание |
|---|---|---|---|
from | дата и время | нет | Начало периода в формате RFC 3339, например 2026-10-01T00:00:00Z. По умолчанию — 24 часа назад |
to | дата и время | нет | Конец периода в том же формате. По умолчанию — текущий момент |
limit | целое | нет | Размер страницы от 1 до 1000, по умолчанию 100 |
page | целое | нет | Номер страницы с 1 |
Значение from или to в другом формате не учитывается: берётся значение по умолчанию.
Ответ 200: массив items, total — число записей, подходящих под условия запроса, limit — размер страницы.
Ошибки обоих методов: 404 not_found; 400 report_error — запрос к статистике не выполнен, причина в message; 503 no_analytics — статистика недоступна.
Журнал кликов
GET /api/v1/campaigns/{id}/clicks
Дополнительные параметры:
| Параметр | Тип | Обязательность | Описание |
|---|---|---|---|
subid | строка | нет | Поиск по части идентификатора клика |
stream | UUID | нет | Только клики этого потока |
Поля клика: subid, ts, ip, campaign_id, stream_id, source_id, offer_id, lander_id, country, region, city, isp, connection_type, device_type, os, os_version, browser, browser_version, user_agent, referrer, lang, is_bot, is_unique, cost, sub_ids, tokens.
sub_ids и tokens — объекты «имя — значение». Значения token, access_token, capi_token, sub_id_12 и значения, которые начинаются с EAA, заменены на ***.
curl "https://panel.example.com/api/v1/campaigns/5b0c6a1e-3d0f-4a52-9c1b-7f2f1f3f8a10/clicks?from=2026-10-01T00:00:00Z&to=2026-10-02T00:00:00Z&limit=500&page=1" \
-H "Api-Key: <токен>"Поиск клика по всем кампаниям — на странице Admin API: логи и диагностика.
Журнал конверсий
GET /api/v1/campaigns/{id}/conversions
Каждая конверсия показана одной строкой с последним статусом. Конверсию определяет пара «клик и txid».
Поля конверсии: subid, ts — время последнего изменения, status, payout, revenue, offer_id, txid.
Группы кампаний
Группа — текстовая метка в поле group_name. Назначить группу кампании можно методом изменения кампании. Методы ниже меняют метку сразу у всех кампаний группы.
Переименовать группу
PUT /api/v1/campaign-groups?name=<текущее название>
В строке запроса name — текущее название группы, в теле name — новое. Оба обязательны. Если новое название совпадает с существующей группой, группы объединяются.
curl -X PUT "https://panel.example.com/api/v1/campaign-groups?name=Sweeps" \
-H "Api-Key: <токен>" \
-H "Content-Type: application/json" \
-d '{"name":"Sweeps US"}'Ответ 200: {"updated": 3} — число изменённых кампаний. Ошибка: 422 validation.
Удалить группу
DELETE /api/v1/campaign-groups?name=<название>
Снимает метку с кампаний группы. Сами кампании остаются. Ответ 200: объект с полем updated. Ошибка: 422 validation с текстом name обязателен.
Ошибки
Общие коды — на странице Формат запросов, ответов и ошибок. Сообщения методов этой страницы:
| Код | Сообщение | Причина |
|---|---|---|
400 bad_request | invalid json | Тело запроса не разобрано |
400 bad_request | некорректный идентификатор или значение | id в адресе или в теле — не UUID |
404 not_found | resource not found | Кампании с таким id нет |
409 conflict | кампания с таким alias уже есть | alias занят другой кампанией |
422 validation | name is required | Пустое name при создании |
422 validation | alias: только латиница, цифры, _ и -, до 64 символов (без /) | Недопустимый alias, в том числе пустой при изменении |
422 validation | alias «api» зарезервирован — выберите другой | alias начинается с _ или входит в список запрещённых |
422 validation | неизвестная модель стоимости | cost_model не из списка |
422 validation | цена должна быть от 0 до 1 000 000 000 | cost_value меньше 0 или больше 1 000 000 000 |
422 validation | RevShare должен быть от 0 до 100% | cost_value больше 100 при revshare |
422 validation | traffic_loss должен быть от 0 до 99 | traffic_loss вне диапазона |
422 validation | binding_depth: stream, lander или offer | Другое значение binding_depth |
422 validation | Срок привязки: от 0 до 8760 часов (0 — срок уникальности) | binding_ttl вне диапазона |
422 validation | Не больше 20 S2S-постбеков на кампанию | В s2s_postbacks больше 20 строк |
422 validation | Постбек кампании №1: … | Ошибка в статусе или адресе строки с этим номером |
422 validation | выбранный домен недоступен | Домена с таким domain_id нет в команде |
422 validation | name обязателен | В строке запроса методов групп нет name |
422 validation | новое имя группы обязательно, некорректное тело запроса | В теле переименования группы нет name или тело не разобрано |
422 validation | нужно enabled: true или false | В теле метода мониторинга нет enabled или тело не разобрано |