Партнерські мережі (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 поза списком подій |
Пов'язані статті
- CPA-шаблони — готові
statuses,postbackMacrosіparamTemplateпопулярних партнерок - Офери та Потоки — дочірні сутності мережі
- Статуси конверсій і налаштування postback — як партнерка має надсилати постбеки
- Підключення нової CPA (партнерки) з нуля
