Офферы
Оффер — предложение рекламодателя внутри партнёрской сети: гео, тип выплаты, фиксированная ставка, 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[] - Офферы — смысл полей в интерфейсе
