Кампании
Кампания — точка входа трафика в трекер: трекинговая ссылка, домен, источник, наборы потоков (sets) с фильтрами и весами, white page и настройки редиректа. Через API можно получать список кампаний, читать кампанию целиком, создавать новые и править существующие — то же, что раздел Трекер → Кампании в кабинете (см. Кампании и потоки и Настройки кампании).
Получение токена, общий формат ответов, параметры списков и ошибки — в головной статье раздела.
Скоупы
| Скоуп | Доступ | В дефолте PAT |
|---|---|---|
api:campaigns |
чтение: список и карточка кампании | да |
api:campaigns:write |
создание и правка | нет |
Эндпойнты
| Метод | Путь | Скоуп | RBAC-право |
|---|---|---|---|
GET |
/api/campaigns |
api:campaigns |
campaigns:list |
POST |
/api/campaigns |
api:campaigns:write |
campaigns:create |
GET |
/api/campaigns/{id} |
api:campaigns |
campaigns:read |
PATCH |
/api/campaigns/{id} |
api:campaigns:write |
campaigns:update |
Все четыре права есть у всех ролей. Видимость: ADMIN — все кампании, TEAM_OWNER/TEAM_LEAD/TECH — кампании команды, BUYER — свои. Чужая кампания → 404.
Параметры списка GET /api/campaigns
| Поля | |
|---|---|
Фильтры filter[...] |
_id, name, isActive, status, domain, source, user, team, tags, created, updated, sets.settings.pixels |
Сортировка sort |
name, isActive, status, user, team, created, updated |
| Populate по умолчанию | user (name, email, avatar), team (name), domain (domain, status, isActive), source (name), groups (name, type), sets.flows.pwa, sets.flows.landing, sets.flows.postlanding, sets.settings.pixels, tags (name, color) |
В списке ссылки sets.flows.cpa / offer / flow приходят строковыми id; в карточке GET /api/campaigns/{id} они развёрнуты в короткие объекты { id, name } (у flow — ещё isActive, hostingType), а также развёрнут whitePageSystem.
# активные кампании команды на домене, по дате обновления
curl -G 'https://adset.pro/api/campaigns' \
-H 'Authorization: Bearer pat_…' \
--data-urlencode 'pageSize=100' \
--data-urlencode 'sort=updated:desc' \
--data-urlencode 'filter[isActive]=true' \
--data-urlencode 'filter[domain]=6650f0e1d2c3b4a5f6e7d8c9'
Объект кампании
| Поле | Тип | Описание |
|---|---|---|
id |
string | ObjectId |
name |
string | название (обязательно при создании) |
alias |
string | null | короткий идентификатор в публичной ссылке https://{domain}/{alias}; до 35 символов, только латиница и цифры, уникален глобально. Без alias кампания доступна по /track/{id}/ads |
isActive |
boolean | включена ли кампания (по умолчанию true) |
status |
draft | complete |
только чтение: после любого сохранения — complete |
user, team |
id | объект | владелец и команда |
sets[] |
массив | наборы потоков (см. ниже) |
domain |
id | объект | null | домен кампании |
source |
id | объект | null | источник трафика |
trackingUrl |
string | null | только чтение: готовая трекинговая ссылка |
whitePageType |
none | url | system |
тип white page (по умолчанию none) |
whitePage |
string | null | URL внешней white page (для url) |
whitePageSystem |
id | объект | null | системная white page (для system) |
backButtonEnable |
boolean | подмена кнопки «назад» (по умолчанию false) |
disableTrackWhiteList |
boolean | отключить white-list трекера (по умолчанию false) |
groups[] |
id[] | объекты | группы push-уведомлений: до 3, не более одной системной |
group |
id | объект | null | устаревшее поле — первый элемент groups, оставлено для совместимости |
tags[] |
id[] | объекты | теги |
stickyFlow |
boolean | закреплять поток за посетителем (по умолчанию false) |
stickyFlowSkipInactive |
boolean | пропускать выключенный закреплённый поток |
stickyFlowKeepClickId |
boolean | сохранять click_id при повторных визитах |
redirectMethod |
http | meta | js | empty_referrer | double_meta | form_submit | iframe |
метод редиректа на целевой URL (по умолчанию http = 302), см. Методы редиректа трафика |
trafficPricingType |
CPC | CPM | CPA |
модель тарификации входящего трафика (по умолчанию CPC) |
cpaPricingEvent |
CPA_ACCEPT | CPA_HOLD | PWA_INSTALL | null |
событие, за которое платится при trafficPricingType = CPA |
cpaPricingValue |
number | null | стоимость события при CPA, ≥ 0 |
sourcePostbackSampleRate |
number | доля конверсий (0–100 %), отправляемых в пиксель источника; по умолчанию 100 |
sourcePostbackRevenueSampleRate |
number | доля выплат (0–300 %), отправляемых в пиксель источника; по умолчанию 100 |
created, updated |
date | только чтение |
Набор потоков sets[]
{
"id": "…", // только чтение
"name": "main",
"settings": {
"pixels": ["66a0…"], // id пикселей набора (в ответе могут быть объектами)
"enablePixelsAsJs": false,
"applyMode": "AND", // AND | OR — как объединяются фильтры
"filters": [
{ "type": "headers", "key": "user_country", "op": "IN", "values": ["DE", "AT"] }
]
},
"flows": [
{
"cpa": "65f0…", // обязательно
"offer": "6650…", // обязательно
"flow": "6650…", // обязательно
"weight": 100, // вес ротации, по умолчанию 100
"isActive": true,
"pwa": null, // id PWA или null
"pwaType": "internal", // internal | external | ios-app
"landing": null, // id лендинга или null
"landingAsPwa": false,
"postlanding": null // id постлендинга или null
}
]
}
Фильтры набора: type ∈ event | headers | query | date | data, op ∈ IN | NOT_IN | BETWEEN | EXIST | NOT_EXIST, values — массив строк. Ключи фильтров — те же, что в UI, см. Справочник фильтров кампаний трекера.
POST /api/campaigns — создать кампанию
Обязательное поле одно — name. Команда берётся из токена; если у владельца токена нет команды и team не передан, вернётся 400. Для ADMIN-токена team и/или user обязательны — иначе 400.
// POST /api/campaigns
{
"name": "DE — push casino",
"alias": "depushcasino", // необязательно; латиница и цифры, ≤ 35, глобально уникален
"isActive": true,
"domain": "6650f0e1d2c3b4a5f6e7d8c9",
"source": "6650f0e1d2c3b4a5f6e7d8c8",
"redirectMethod": "http",
"trafficPricingType": "CPC",
"sets": [
{
"name": "main",
"settings": { "pixels": [], "filters": [], "applyMode": "AND" },
"flows": [
{ "cpa": "65f0a1b2c3d4e5f6a7b8c9d0", "offer": "6650f0e1d2c3b4a5f6e7d8c7", "flow": "6650f0e1d2c3b4a5f6e7d8c6" }
]
}
],
"tags": []
}
Правила:
- Без
setsкампания создаётся пустой — трафик по ней никуда не пойдёт, пока не добавить наборы. - Внутри
sets[].flows[]поляcpa,offer,flowобязательны;pwa,landing,postlanding— необязательные ссылки. alias: занят другой кампанией →400 Alias already used; содержит символы кроме латиницы и цифр →400 Alias may contain only latin letters and digits.groups— до 3 id, не более одной системной группы.user(владелец) учитывается только для ролей, которые могут назначать владельца; BUYER всегда становится владельцем сам.
Ответ — 201 Created, заголовок Location: /campaigns/{id}, тело — полный объект кампании в конверте { data, traceId }:
{
"data": {
"id": "6704a1b2c3d4e5f6a7b8c9d0",
"name": "DE — push casino",
"alias": "depushcasino",
"isActive": true,
"status": "draft",
"user": { "id": "64a0…", "name": "Buyer One", "email": "[email protected]", "avatar": null },
"team": { "id": "64b0…", "name": "Team A" },
"sets": [ { "id": "6704…", "name": "main", "settings": { "pixels": [], "enablePixelsAsJs": false, "filters": [], "applyMode": "AND" },
"flows": [ { "id": "6704…", "cpa": "65f0…", "offer": "6650…", "flow": "6650…", "weight": 100, "isActive": true,
"pwa": null, "pwaType": "internal", "landing": null, "landingAsPwa": false, "postlanding": null } ] } ],
"domain": { "id": "6650…", "domain": "track.example.com", "status": "active", "isActive": true },
"source": { "id": "6650…", "name": "Facebook", "isActive": true },
"trackingUrl": "https://track.example.com/depushcasino",
"whitePageType": "none", "whitePage": null, "whitePageSystem": null,
"backButtonEnable": false, "disableTrackWhiteList": false,
"group": null, "groups": [], "tags": [],
"stickyFlow": false, "stickyFlowSkipInactive": false, "stickyFlowKeepClickId": false,
"redirectMethod": "http",
"trafficPricingType": "CPC", "cpaPricingEvent": null, "cpaPricingValue": null,
"sourcePostbackSampleRate": 100, "sourcePostbackRevenueSampleRate": 100,
"created": "2026-10-13T10:00:00.000Z", "updated": "2026-10-13T10:00:00.000Z"
},
"traceId": "01HX…"
}
PATCH /api/campaigns/{id} — изменить кампанию
Все поля необязательны; передавайте только то, что меняете. Ответ 200 OK с полным объектом.
Особенности:
setsзаменяются целиком. Чтобы изменить один поток, передайте полный массив наборов, а не дельту. Потоки изsetsпроверяются на доступность владельцу токена.statusв теле игнорируется — любойPATCHпереводит кампанию вcomplete(черновик считается завершённым после первого сохранения).- BUYER не может сменить владельца: поле
userдля него отбрасывается. aliasпри изменении проверяется по тем же правилам, что при создании; неизменённый alias старой кампании со спецсимволами (-,_) можно передавать как есть.
# выключить кампанию и сменить метод редиректа
curl -X PATCH 'https://adset.pro/api/campaigns/6704a1b2c3d4e5f6a7b8c9d0' \
-H 'Authorization: Bearer pat_…' \
-H 'Content-Type: application/json' \
-d '{ "isActive": false, "redirectMethod": "js" }'
Ошибки
| HTTP | Когда |
|---|---|
400 validationError |
Invalid credentials, need teamId — у владельца токена нет команды и team не передан; Alias already used; Alias may contain only latin letters and digits; ADMIN не указал team/user |
403 forbidden + Insufficient OAuth scope. Required: api:campaigns:write |
PAT с дефолтными read-скоупами вызывает POST/PATCH |
404 notFound |
кампании нет или она принадлежит другой команде/пользователю |
422 validationError |
нет name, неверный enum (redirectMethod, whitePageType, trafficPricingType), sets[].flows[] без cpa/offer/flow, alias длиннее 35 символов |
Связанные статьи
- Публичное HTTP API — токены, скоупы, параметры списков, формат ошибок
- Потоки, Офферы, Партнёрские сети (CPA) — сущности, на которые ссылаются
sets[].flows[] - Домены — выбор домена для поля
domain - Кампании и потоки, Настройки кампании — смысл полей в интерфейсе
