Кампанії
Кампанія — точка входу трафіку в трекер: трекінгове посилання, домен, джерело, сети потоків (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 - Кампанії та потоки, Налаштування кампанії — сенс полів в інтерфейсі
