Adset.ProAdset.ProKnowledge base
Home/Публичное HTTP API/Партнёрские сети (CPA)

Партнёрские сети (CPA)

Партнёрская сеть (CPA-сеть) — справочник рекламодателей, с которыми работает команда: название, валюта выплат, маппинг статусов постбэков на события трекера, макросы постбэка и шаблон параметров для ссылок. Офферы и потоки всегда принадлежат какой-то CPA-сети. В кабинете это раздел Трекер → Aff. Networks (см. Aff. Networks (Партнёрские сети) и Статусы конверсий и настройка postback).

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

Скоупы

Скоуп Доступ В дефолте PAT
api:cpa чтение CPA-сетей и CPA-шаблонов да
api:cpa:write создание и правка CPA-сетей нет

Эндпойнты

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

Права cpa:list, cpa:read, cpa:create есть у всех ролей. cpa:update нет у BUYER — для его токена PATCH /api/cpa/{id} вернёт 403 forbidden даже при наличии скоупа api:cpa:write. Видимость: ADMIN — все сети, остальные роли — сети своей команды (BUYER — свои и доступные по настройкам доступа). Чужая сеть → 404.

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

Поля
Фильтры filter[...] name, team, user, isActive, lastLoginAt, created, updated, tags
Сортировка sort name, isActive, created, updated
Populate по умолчанию user (name, email, avatar), team (name), tags
curl -G 'https://adset.pro/api/cpa' \
  -H 'Authorization: Bearer pat_…' \
  --data-urlencode 'pageSize=100' \
  --data-urlencode 'sort=name:asc' \
  --data-urlencode 'filter[isActive]=true'

Объект CPA-сети

Поле Тип Описание
id string ObjectId
name string название (обязательно при создании), до 255 символов
description string описание, до 2000 символов
shortName string короткое имя, до 50 символов; по нему распознаются входящие постбэки
isActive boolean по умолчанию true
currency string ISO-код валюты выплат (USD, EUR, …), по умолчанию USD; доход конвертируется в USD по курсу
paramTemplate string строка GET-параметров, которая дописывается к URL потоков этой сети, например sub1={click_id}&sub2={campaign_id}
statuses объект маппинг статусов партнёрки на события трекера (см. ниже)
postbackMacros объект имена параметров постбэка партнёрки (см. ниже)
acceptDuplicates boolean принимать повторные постбэки с тем же click_id и статусом (по умолчанию false)
acceptDuplicatesFor string[] для каких событий разрешены дубли; по умолчанию ["CPA_HOLD", "CPA_ACCEPT"]; допустимы также CPA_REDEP, CPA_DECLINE, CPA_TRASH
user, team id | объект владелец и команда
tags[] id[] | объекты теги
created, updated date только чтение

statuses — маппинг статусов

Значения — строки, которые партнёрка присылает в параметре статуса постбэка. Каждое поле соответствует событию трекера:

Поле Событие трекера По умолчанию Смысл
hold CPA_HOLD hold регистрация / лид в холде
accept CPA_ACCEPT accept первый депозит, выплата подтверждена
redep CPA_REDEP "" повторный депозит
decline CPA_DECLINE decline отклонён
trash CPA_TRASH trash мусорная регистрация

postbackMacros — параметры постбэка

Как называются параметры в постбэке партнёрки, из которых трекер берёт данные:

Поле Что содержит По умолчанию
clickId имя параметра с click_id трекера ""
status имя параметра со статусом конверсии ""
revenue имя параметра с суммой выплаты "0"
currency имя параметра с валютой или фиксированная валюта "USD"
externalId имя параметра с внешним id конверсии (для дедупликации) ""

POST /api/cpa — создать CPA-сеть

Обязательное поле — name. Владелец и команда по умолчанию берутся из токена; ADMIN обязан передать team и/или user (иначе 400). Заполнять statuses и postbackMacros вручную необязательно — удобнее взять их из CPA-шаблона нужной партнёрки.

// POST /api/cpa
{
  "name": "Casino Partners",
  "shortName": "casinop",
  "description": "Прямой рекламодатель, выплаты в EUR",
  "currency": "EUR",
  "paramTemplate": "sub1={click_id}&sub2={campaign_id}",
  "statuses": { "hold": "lead", "accept": "sale", "redep": "redeposit", "decline": "rejected", "trash": "trash" },
  "postbackMacros": { "clickId": "sub1", "status": "status", "revenue": "payout", "currency": "EUR", "externalId": "conversion_id" },
  "acceptDuplicates": false,
  "tags": []
}

Ответ — 201 Created, заголовок Location: /cpa/{id}:

{
  "data": {
    "id": "6704b1c2d3e4f5a6b7c8d9e0",
    "name": "Casino Partners",
    "description": "Прямой рекламодатель, выплаты в EUR",
    "shortName": "casinop",
    "isActive": true,
    "statuses": { "accept": "sale", "redep": "redeposit", "hold": "lead", "decline": "rejected", "trash": "trash" },
    "postbackMacros": { "clickId": "sub1", "status": "status", "revenue": "payout", "currency": "EUR", "externalId": "conversion_id" },
    "currency": "EUR",
    "paramTemplate": "sub1={click_id}&sub2={campaign_id}",
    "acceptDuplicates": false,
    "acceptDuplicatesFor": ["CPA_HOLD", "CPA_ACCEPT"],
    "user": "64a0…",
    "team": "64b0…",
    "tags": [],
    "created": "2026-10-13T10:00:00.000Z",
    "updated": "2026-10-13T10:00:00.000Z"
  },
  "traceId": "01HX…"
}

PATCH /api/cpa/{id} — изменить CPA-сеть

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

Флаг ?changeAllUrl=true

Если в теле меняется paramTemplate, флаг каскадно обновляет url всех потоков этой CPA-сети:

  • у сети не было шаблона — новый дописывается к URL через ? или &;
  • шаблон был — его вхождение в URL заменяется на новое.

Без флага меняется только сама сеть, URL потоков остаются прежними. Потоки обновляются в пределах видимости владельца токена.

# сменить шаблон параметров и прокинуть его во все потоки сети
curl -X PATCH 'https://adset.pro/api/cpa/6704b1c2d3e4f5a6b7c8d9e0?changeAllUrl=true' \
  -H 'Authorization: Bearer pat_…' \
  -H 'Content-Type: application/json' \
  -d '{ "paramTemplate": "sub1={click_id}&sub2={campaign_id}&sub3={source_id}" }'

Было: https://partner.example/offer?aff=123&sub1={click_id}&sub2={campaign_id} → стало: https://partner.example/offer?aff=123&sub1={click_id}&sub2={campaign_id}&sub3={source_id}.

Ошибки

HTTP Когда
400 validationError ADMIN-токен создаёт сеть без team/user
403 forbidden + Insufficient OAuth scope. Required: api:cpa:write у токена нет write-скоупа
403 forbidden BUYER вызывает PATCH /api/cpa/{id} — у роли нет права cpa:update
404 notFound сети нет или она принадлежит другой команде
422 validationError нет name, неизвестная currency, значение acceptDuplicatesFor вне списка событий

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