Adset.ProAdset.ProKnowledge base

Потоки

Поток — конкретная ссылка оффера, на которую трекер отправляет посетителя: внешний URL партнёрки, внутренний лендинг или Telegram-канал через бота. Один оффер может иметь несколько потоков (разные лендинги, гео, PWA). В кампании потоки собираются в наборы sets[].flows[]. В кабинете это раздел Трекер → Ссылки на оффер (см. Ссылки на оффер).

Получение токена, общий формат ответов, параметры списков и ошибки — в головной статье раздела.

Скоупы

Скоуп Доступ В дефолте PAT
api:flows чтение: список и карточка потока да
api:flows:write создание и правка нет

Эндпойнты

Метод Путь Скоуп RBAC-право
GET /api/flows api:flows flow:list
POST /api/flows api:flows:write flow:create
GET /api/flows/{id} api:flows flow:read
PATCH /api/flows/{id} api:flows:write flow:update

Все права есть у всех ролей. Видимость: ADMIN — все потоки, TEAM_OWNER/TEAM_LEAD/TECH — потоки команды, BUYER — свои и доступные по настройкам доступа. Чужой поток → 404.

Параметры списка GET /api/flows

Поля
Фильтры filter[...] _id, cpa, offer, team, user, name, hostingType, url, isActive, created, updated, tags
Сортировка sort name, hostingType, url, isActive, created, updated
Populate по умолчанию user (name, email, avatar), team (name), cpa (name), offer (name, country), tags
# все активные внешние потоки оффера
curl -G 'https://adset.pro/api/flows' \
  -H 'Authorization: Bearer pat_…' \
  --data-urlencode 'pageSize=100' \
  --data-urlencode 'filter[offer]=6650f0e1d2c3b4a5f6e7d8c8' \
  --data-urlencode 'filter[hostingType]=external' \
  --data-urlencode 'filter[isActive]=true'
# найти потоки по домену в URL
curl -G 'https://adset.pro/api/flows' \
  -H 'Authorization: Bearer pat_…' \
  --data-urlencode 'filter[url][contains]=partner.example'

Объект потока

Поле Тип Описание
id string ObjectId
name string название (обязательно при создании)
description string описание
isActive boolean по умолчанию true
cpa id | { id, name } партнёрская сеть (обязательно при создании)
offer id | { id, name, country } оффер (обязательно при создании)
hostingType external | internal | telegram куда ведёт поток: внешняя ссылка; внутренний лендинг из конструктора; Telegram-канал с атрибуцией через бота. По умолчанию external
url string целевой URL. Обязателен и должен быть валидным для external; для internal и telegram может быть пустым. Макросы — в фигурных скобках, например {click_id}
landing id | null лендинг для hostingType = internal
refference id | объект | null родительский поток, из которого берётся маппинг click_id (для связанных потоков)
telegram объект настройки Telegram-атрибуции: { bot, channelId, welcomeMessage, attributionWindowDays, inviteLink }; attributionWindowDays — 1–7, по умолчанию 2
user, team id | объект владелец и команда
tags[] id[] | объекты теги
created, updated date только чтение

Объект telegram присутствует в ответе всегда, даже у внешних потоков — с пустыми значениями по умолчанию.

POST /api/flows — создать поток

Обязательные поля: name, cpa, offer. Сеть и оффер должны быть доступны владельцу токена (иначе 404). Команда и владелец по умолчанию наследуются от CPA-сети.

// POST /api/flows
{
  "name": "DE — landing v1",
  "cpa": "65f0a1b2c3d4e5f6a7b8c9d0",
  "offer": "6650f0e1d2c3b4a5f6e7d8c8",
  "hostingType": "external",
  "url": "https://partner.example/offer?aff=123&sub1={click_id}",
  "description": "",
  "isActive": true,
  "tags": []
}

Назначение владельца:

Роль токена Что учитывается
ADMIN user и team из тела, если переданы оба; иначе — владелец и команда CPA-сети
TEAM_OWNER, TEAM_LEAD, TECH user из тела (команда — от CPA-сети)
BUYER всегда становится владельцем сам

Ответ — 201 Created, заголовок Location: /flows/{id}, тело — объект потока в конверте { data, traceId }.

Для hostingType = internal передайте landing (id лендинга); для telegram — объект telegram с bot и channelId, ссылка-приглашение генерируется ботом (см. Атрибуция трафика в Telegram-каналы).

PATCH /api/flows/{id} — изменить поток

Все поля необязательны; передавайте только то, что меняете — остальное сохраняется.

// PATCH /api/flows/6650f0e1d2c3b4a5f6e7d8c9
{
  "name": "DE — landing v2",
  "url": "https://partner.example/offer?aff=123&sub1={click_id}&sub2={campaign_id}",
  "isActive": false,
  "hostingType": "external",
  "tags": ["66a0…"]
}

Другие изменяемые поля: description, refference (id родительского потока или null), landing, telegram{…}, user (смена владельца — только на пользователя, доступного владельцу токена).

Ответ 200 OK:

{
  "data": {
    "id": "6650f0e1d2c3b4a5f6e7d8c9",
    "name": "DE — landing v2",
    "description": "",
    "isActive": false,
    "url": "https://partner.example/offer?aff=123&sub1={click_id}&sub2={campaign_id}",
    "hostingType": "external",
    "refference": null,
    "landing": null,
    "telegram": { "bot": null, "channelId": null, "welcomeMessage": "", "attributionWindowDays": 2, "inviteLink": null },
    "cpa": "65f0a1b2c3d4e5f6a7b8c9d0",
    "offer": "6650f0e1d2c3b4a5f6e7d8c8",
    "user": "64a0…",
    "team": "64b0…",
    "tags": ["66a0…"],
    "created": "2026-09-20T10:00:00.000Z",
    "updated": "2026-10-13T10:05:00.000Z"
  },
  "traceId": "01HX…"
}

Массовая замена домена в URL потоков и смена сети с подстановкой шаблона параметров делаются другими способами: первое — только в кабинете, второе — через PATCH /api/cpa/{id}?changeAllUrl=true.

Ошибки

HTTP Когда
403 forbidden + Insufficient OAuth scope. Required: api:flows:write PAT с дефолтными read-скоупами вызывает POST/PATCH
404 notFound потока нет или он чужой; cpa/offer/user недоступны владельцу токена
422 validationError нет name, cpa или offer; hostingType вне списка; невалидный url у потока external (Flow Url not valid в details[]); attributionWindowDays вне 1–7

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