Adset.ProAdset.ProKnowledge base
This article is currently available in Russian only.View in Russian

Кампании

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

Связанные статьи