Adset.ProAdset.ProKnowledge base

Офери

Офер — пропозиція рекламодавця всередині партнерської мережі: гео, тип виплати, фіксована ставка, 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

Пов'язані статті