Офери
Офер — пропозиція рекламодавця всередині партнерської мережі: гео, тип виплати, фіксована ставка, KPI, бонуси по країнах і денний кап. У одного офера може бути кілька потоків (посилань). В кабінеті це розділ Трекер → Офери (див. Офери).
Отримання токена, загальний формат відповідей, параметри списків і помилки — в головній статті розділу.
Скоупи
| Скоуп | Доступ | В дефолті PAT |
|---|---|---|
api:offers |
читання: список і картка офера | так |
api:offers:write |
створення і редагування | ні |
Ендпойнти
| Метод | Шлях | Скоуп | RBAC-право |
|---|---|---|---|
GET |
/api/offers |
api:offers |
offer:list |
POST |
/api/offers |
api:offers:write |
offer:create |
GET |
/api/offers/{id} |
api:offers |
offer:read |
PATCH |
/api/offers/{id}?flow= |
api:offers:write |
offer:update |
Усі права є у всіх ролей. Видимість: ADMIN — всі офери, TEAM_OWNER/TEAM_LEAD/TECH — офери команди, BUYER — свої і доступні за налаштуваннями доступу. Чужий офер → 404.
Параметри списку GET /api/offers
| Поля | |
|---|---|
Фільтри filter[...] |
cpa, team, user, name, country, type, isActive, language, tags |
Сортування sort |
name, isActive, created, updated, revenue |
| Populate за замовчуванням | user (name, email, avatar), team (name), cpa (name), tags |
# активні офери однієї CPA-мережі на DE/AT, дорожче 100
curl -G 'https://adset.pro/api/offers' \
-H 'Authorization: Bearer pat_…' \
--data-urlencode 'pageSize=100' \
--data-urlencode 'filter[cpa]=65f0a1b2c3d4e5f6a7b8c9d0' \
--data-urlencode 'filter[country][in]=DE,AT' \
--data-urlencode 'filter[isActive]=true' \
--data-urlencode 'sort=revenue:desc'
Об'єкт офера
| Поле | Тип | Опис |
|---|---|---|
id |
string | ObjectId |
name |
string | назва (обов'язково при створенні) |
description |
string | опис |
isActive |
boolean | за замовчуванням true |
cpa |
id | { id, name } |
партнерська мережа (обов'язково при створенні) |
type |
cpa | agency |
модель виплати: cpa — за кожен депозит за KPI; agency — комісія за трафік із заданою вартістю FTD і KPI. За замовчуванням cpa |
country[] |
string[] | ISO-2 коди гео (["DE", "AT"]) |
language |
string | мова офера, за замовчуванням en |
revenue |
number | фіксована виплата за FTD, за замовчуванням 0 |
usePostbackRevenue |
boolean | true (за замовчуванням) — брати суму з постбека, revenue підставляти тільки якщо постбек прислав 0; false — завжди використовувати revenue офера |
extOfferId |
string | id офера в кабінеті партнерки |
bonus[] |
об'єкти | бонуси по країнах: { country, value, value1, value2 }, використовуються макросами в пушах і лендингах |
kpi |
об'єкт | { baseLine, baseLineTimeFrame, commission, commissionTimeFrame, commissionRoi, avgReDeposits } — умови рекламодавця (числа, за замовчуванням 0) |
capacity |
об'єкт | денний кап: { isActive, dailyLimit, timeZone, alternative } — ліміт CPA_ACCEPT на добу, таймзона скидання лічильника і id потоку, куди йде трафік після досягнення капа |
user, team |
id | об'єкт | власник і команда |
tags[] |
id[] | об'єкти | теги |
created, updated |
date | тільки читання |
POST /api/offers — створити офер
Обов'язкові поля: name і cpa (id CPA-мережі, доступної власнику токена; інакше 404). Команда і власник за замовчуванням успадковуються від CPA-мережі.
// POST /api/offers
{
"name": "Casino X — DE",
"cpa": "65f0a1b2c3d4e5f6a7b8c9d0",
"type": "cpa",
"country": ["DE", "AT"],
"description": "Main DE offer",
"isActive": true,
"revenue": 120,
"usePostbackRevenue": true,
"extOfferId": "12345",
"bonus": [ { "country": "DE", "value": "100% до 500 €", "value1": "", "value2": "" } ],
"capacity": { "isActive": true, "dailyLimit": 50, "timeZone": "UTC", "alternative": null },
"tags": []
}
Призначення власника:
| Роль токена | Що враховується |
|---|---|
| ADMIN | user і team з тіла, якщо передані обидва; інакше — власник і команда CPA-мережі |
| TEAM_OWNER, TEAM_LEAD, TECH | user з тіла (команда — від CPA-мережі) |
| BUYER | завжди стає власником сам |
Відповідь — 201 Created, заголовок Location: /offers/{id}:
{
"data": {
"id": "6650f0e1d2c3b4a5f6e7d8c9",
"name": "Casino X — DE",
"description": "Main DE offer",
"isActive": true,
"country": ["DE", "AT"],
"bonus": [ { "country": "DE", "value": "100% до 500 €", "value1": "", "value2": "" } ],
"language": "en",
"type": "cpa",
"revenue": 120,
"usePostbackRevenue": true,
"capacity": { "isActive": true, "dailyLimit": 50, "timeZone": "UTC", "alternative": null },
"kpi": { "baseLine": 0, "baseLineTimeFrame": 0, "commission": 0, "commissionTimeFrame": 0, "commissionRoi": 0, "avgReDeposits": 0 },
"extOfferId": "12345",
"cpa": "65f0a1b2c3d4e5f6a7b8c9d0",
"user": "64a0…",
"team": "64b0…",
"tags": [],
"created": "2026-10-13T10:00:00.000Z",
"updated": "2026-10-13T10:00:00.000Z"
},
"traceId": "01HX…"
}
У списку і картці cpa, user, team приходять розгорнутими об'єктами (populate за замовчуванням); у відповіді на створення — рядковими id.
PATCH /api/offers/{id} — змінити офер
Усі поля необов'язкові; передавайте тільки те, що змінюєте — непередані значення зберігаються. Можна змінити cpa (перенести офер в іншу мережу) і user (змінити власника — тільки на користувача, доступного власнику токена).
Прапор ?flow=true
Якщо в тілі переданий новий власник user, прапор проставляє його всім потокам цього офера. Без прапора власник змінюється тільки у офера.
# передати офер і його потоки іншому байєру
curl -X PATCH 'https://adset.pro/api/offers/6650f0e1d2c3b4a5f6e7d8c9?flow=true' \
-H 'Authorization: Bearer pat_…' \
-H 'Content-Type: application/json' \
-d '{ "user": "64a1…" }'
# вимкнути офер і оновити кап
curl -X PATCH 'https://adset.pro/api/offers/6650f0e1d2c3b4a5f6e7d8c9' \
-H 'Authorization: Bearer pat_…' \
-H 'Content-Type: application/json' \
-d '{ "isActive": false, "capacity": { "isActive": true, "dailyLimit": 30, "timeZone": "Europe/Berlin", "alternative": null } }'
Відповідь 200 OK з повним об'єктом.
Помилки
| HTTP | Коли |
|---|---|
403 forbidden + Insufficient OAuth scope. Required: api:offers:write |
PAT з дефолтними read-скоупами викликає POST/PATCH |
404 notFound |
офера немає або він чужий; CPA-мережа з cpa недоступна власнику токена; користувач з user недоступний |
422 validationError |
немає name або cpa; type поза cpa/agency; bonus[].country не з 2 символів; capacity.dailyLimit < 0 |
Пов'язані статті
- Партнерські мережі (CPA) — батьківська сутність
- Потоки — посилання офера
- Кампанії — де офер використовується в
sets[].flows[] - Офери — сенс полів в інтерфейсі
