Потоки
Поток — конкретная ссылка оффера, на которую трекер отправляет посетителя: внешний 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 |
Связанные статьи
- Офферы и Партнёрские сети (CPA) — родительские сущности
- Кампании — где потоки подключаются в
sets[].flows[] - Ссылки на оффер и Макросы (placeholders) — макросы для
url
