Adset.ProAdset.ProKnowledge base

Кампанії

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

Пов'язані статті