Adset.ProAdset.ProKnowledge base
This article is currently available in Russian only.View in Russian

Офферы

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

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