> ## Documentation Index
> Fetch the complete documentation index at: https://onlytraffic.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Переход со старого API

> Как перенести интеграцию с partner.onlytraffic.com (включая формат ?do=) на Marketer API v2 на partners.onlytraffic.com: новые URL, аутентификация и соответствие полей.

Marketer API переехал на новый хост. Старый API на `partner.onlytraffic.com` будет отключён, вместе со старым форматом запросов `?do=`. Редиректа со старого хоста не будет: интеграции нужно обновить.

| | Старый API | Новый API |
| - | - | - |
| Хост | `https://partner.onlytraffic.com` | `https://partners.onlytraffic.com` |
| Формат | `/api/marketer?do=campaigns` или `/api/marketer/...` | только `/api/marketer/...` |

<Warning>Не рассчитывайте на HTTP-редиректы со старого хоста. Большинство HTTP-клиентов после редиректа превращают `POST` в `GET` без тела и сбрасывают заголовок `Authorization` при смене хоста, поэтому такой запрос теряет и параметры, и ключ.</Warning>

## Что нужно изменить

<Steps>
  <Step title="Смените хост">
    Если вы уже вызываете пути `/api/marketer/...`, меняется только хост: `partner.onlytraffic.com` → `partners.onlytraffic.com`. Пути, параметры и ответы те же. Вместо старого `/api/marketer/cpl/orders` используйте `/api/marketer/cpl/campaigns`.

    Если вы используете `?do=...`, смотрите [соответствие ниже](#формат-do): эндпоинты и поля ответа изменились.
  </Step>

  <Step title="Передавайте ключ в заголовке">
    Создайте новый ключ в **Tools -> API** ([partners.onlytraffic.com/tools/api](https://partners.onlytraffic.com/tools/api)) и передавайте его в заголовке `Authorization` (как есть или в форме `Bearer`). Если интеграция только читает данные, используйте ключ **Read-only**.

    Старый ключ (`XXXXX-XXXXX-XXXXX-XXXXX`) продолжает работать на новом хосте, пока вы его не удалите, но мы рекомендуем перейти на новый ключ. Подробнее на странице [Аутентификация](/docs/ru/partners/api/authentication).
  </Step>

  <Step title="Обновите параметры и разбор ответа">
    Нужно только для формата `?do=`. Используйте таблицы по эндпоинтам ниже.
  </Step>
</Steps>

## Формат `?do=`

### Эндпоинты

| Старый (`?do=`) | Новый эндпоинт |
| - | - |
| `campaigns` | [`GET /api/marketer/revshare/campaigns`](/docs/ru/partners/api/campaigns) для RevShare-кампаний, [`GET /api/marketer/cpl/campaigns`](/docs/ru/partners/api/cpl-campaigns) для CPL-кампаний |
| `transactions` | [`GET /api/marketer/revshare/transactions`](/docs/ru/partners/api/transactions) |
| `subscribers` | [`GET /api/marketer/subscribers`](/docs/ru/partners/api/referred-subscribers) |
| `cpc_orders`, `ppc_orders` | [`GET /api/marketer/cpc/orders`](/docs/ru/partners/api/cpc-orders) |
| `cpl_orders` | [`GET /api/marketer/cpl/campaigns`](/docs/ru/partners/api/cpl-campaigns) |

### Общие изменения

* **Методы.** Эндпоинты чтения принимают и `GET` (параметры в query string), и `POST` (JSON или form body), так что JSON-тело можно продолжать отправлять.
* **Пагинация.** `limit` по умолчанию теперь `50`, допустимый диапазон `1`–`1000` (было `10` и `10`–`1000`). Если вы рассчитываете на определённый размер страницы, передавайте `limit` явно.
* **Фильтр по модели.** `onlyfans_id` теперь называется `of_account_id`, и в параметрах, и в ответах.
* **Идентификаторы.** Объекты идентифицируются публичными строковыми id (`revc_…`, `cplo_…` и т.д.) вместо числовых внутренних id. Эндпоинты записи принимают только публичные id.
* **Даты.** У каждой даты два поля: строка ISO 8601 (`created_at`) и Unix timestamp (`created_at_ts`). Старых числовых полей (`date_create`, `date_add`, ...) больше нет.
* **Обёртка ответа и коды ошибок** не изменились: `status`, `data`, `error_code`, `message`.

### Кампании

Старый `campaigns` возвращал RevShare- и CPL-кампании одним списком с разделением по `commission_type`. Теперь это отдельные эндпоинты: RevShare в `/revshare/campaigns`, CPL в `/cpl/campaigns`. Фильтр `offer_id` относится к `/cpl/campaigns`.

**RevShare** (`/api/marketer/revshare/campaigns`):

| Старое поле | Новое поле |
| - | - |
| `id` (int) | удалено, используйте `campaign_id` |
| `public_id` | `campaign_id` |
| `onlyfans_id` | `of_account_id` |
| `onlyfans_url` | `of_username` |
| `commission_type` | удалено (здесь всегда RevShare) |
| `commission_data.income` | `income` |
| `commission_data.income_today` | `income_today` |
| `commission_data.revenue` | `revenue` |
| `date_create` | `created_at` / `created_at_ts` |
| `date_finish` | `finished_at` / `finished_at_ts` |
| `date_update` | `changed_at` / `changed_at_ts` |
| `name`, `url`, `visits`, `subscribers`, `subscribers_today`, `tags`, `onlyfans_account` | без изменений |
| — | новые: `status` (`active` / `completed`), `revshare_percent` |

Значения `type` переименованы:

| Старое | Новое |
| - | - |
| `by_date` | `date` |
| `by_link` | `link` |
| `free_trial` | `trial` |
| `smart_link` | `smartlink` |
| `ot_tracking_ftl` | `smartlink_trial` |
| `ot_tracking_trial` | `smartlink_tracking` |
| `limited_link` | `shared_link` |
| `limited_free_trial` | `shared_trial` |

Параметр `status` (`active` / `completed`) новый; без него, как и раньше, возвращаются только активные кампании.

**CPL** (`/api/marketer/cpl/campaigns`):

| Старое поле (`commission_type: cpl`) | Новое поле |
| - | - |
| `commission_data.order_public_id` | `order_id` |
| `commission_data.order_id` (int) | удалено, используйте `order_id` |
| `commission_data.offer_id` | `offer_id` |
| `commission_data.quantity` | `quantity_ordered` |
| `commission_data.price` | `price_per_subscriber` |
| `commission_data.autorenewal_enabled` | `auto_renewal.enabled` |
| `onlyfans_id` | `of_account_id` |
| `onlyfans_url` | `of_username` |

Полный объект, включая прогресс поставки и заработок, описан на странице [CPL-кампании](/docs/ru/partners/api/cpl-campaigns).

### Транзакции

| Старое поле | Новое поле |
| - | - |
| `id` (int, внутренний) | `of_transaction_id` (строка, id транзакции в OnlyFans) |
| `campaign_id` (int) | удалено, используйте `campaign_id` |
| `campaign_public_id` | `campaign_id` |
| `subscriber_id` | `of_user_id` |
| `onlyfans_id` | `of_account_id` |
| `is_undo` | `is_refunded`, а также `status` (`processed` / `refunded`) и `refunded_at` / `refunded_at_ts` |
| `date` (int) | `date` (строка ISO) / `date_ts` |
| `type`, `amount`, `revenue` | без изменений |
| — | новое: `of_user_name` |

Новые фильтры: `of_account_id`, `campaign_id`, `from`, `to`, `status`.

### Подписчики

| Старое поле | Новое поле |
| - | - |
| `id` | `of_user_id` |
| `campaign_id` (int) | удалено |
| `campaign_public_id` | `campaign.public_id` (для CPL-подписчиков это id CPL-кампании, `cplo_…`) |
| — | `campaign.type` (`revshare` / `cpl`) |
| `onlyfans_id` | `of_account_id` |
| `url` | удалено, профиль: `https://onlyfans.com/u{of_user_id}` |
| `revenue` | `amount_spent` |
| `date_subscribe` | `subscribed_at` / `subscribed_at_ts` |
| `name` | без изменений |
| — | новое: `badges` |

Сортировка: пара `sort` + `order` заменена одним параметром `sort`: `subscribed_at_desc` (по умолчанию) или `subscribed_at_asc`. Сортировка по `revenue` больше недоступна. Новые фильтры: `of_account_id`, `campaign_id`, `campaign_type`, `from`, `to`.

### CPC-заказы

| Старое поле | Новое поле |
| - | - |
| `id` (int) | удалено, используйте `order_id` |
| `public_id` | `order_id` |
| `model` | `creative` |
| `model.onlyfans_id` | `creative.of_account_id` (а также `of_account_id` у заказа) |
| `model.likes` | удалено |
| `campaign.url` | `url` |
| `campaign.clicks_ordered` | `clicks.ordered` |
| `campaign.clicks_delivered` | `clicks.delivered` |
| `campaign.price_per_click` | `price_per_click` |
| `campaign.date_start` | `date_start` |
| `campaign.date_finish` | `date_finish` |
| `date_add` | `created_at` / `created_at_ts` |
| — | новые: `status`, `total_earned` |

Без фильтра `status`, как и раньше, возвращаются только активные заказы. Новые фильтры: `status` (`waiting` / `active` / `rejected` / `completed`) и `creative_public_id`.

## Пример

<CodeGroup>
  ```bash Старый API theme={null}
  curl -X POST "https://partner.onlytraffic.com/api/marketer?do=cpc_orders" \
    -H "Authorization: XXXXX-XXXXX-XXXXX-XXXXX" \
    -H "Content-Type: application/json" \
    -d '{"offset": 0, "limit": 100}'
  ```

  ```bash Новый API theme={null}
  curl "https://partners.onlytraffic.com/api/marketer/cpc/orders?offset=0&limit=100" \
    -H "Authorization: ot_partners_your-new-key"
  ```
</CodeGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.