> ## 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.

# Write API

> Запускайте, останавливайте и обновляйте RevShare-кампании, принимайте, отклоняйте и останавливайте CPL-кампании и запускайте кампании на CPL-офферах клиентов тем же API-ключом, что и для чтения.

Write API позволяет делать из кода то, что вы делаете в личном кабинете партнёра: запускать, останавливать и обновлять RevShare-кампании, принимать, отклонять и останавливать CPL-кампании, а также начинать доставку на CPL-оффер клиента из Find Offers.

## Что входит

| Эндпоинт                                                                                    | Что он делает в кабинете                   |
| ------------------------------------------------------------------------------------------- | ------------------------------------------ |
| [`POST /api/marketer/revshare/campaigns/start`](/docs/ru/partners/api/revshare-campaign-start)   | RevShare offers -> **Start**               |
| [`POST /api/marketer/revshare/campaigns/stop`](/docs/ru/partners/api/revshare-campaign-stop)     | Campaigns -> **Stop**                      |
| [`POST /api/marketer/revshare/campaigns/update`](/docs/ru/partners/api/revshare-campaign-update) | Campaigns -> **Edit** (имя, заметка, теги) |
| [`POST /api/marketer/cpl/campaigns/accept`](/docs/ru/partners/api/cpl-campaign-accept)           | CPL campaigns -> **Accept**                |
| [`POST /api/marketer/cpl/campaigns/reject`](/docs/ru/partners/api/cpl-campaign-reject)           | CPL campaigns -> **Reject**                |
| [`POST /api/marketer/cpl/campaigns/stop`](/docs/ru/partners/api/cpl-campaign-stop)               | CPL campaigns -> **Stop**                  |
| [`POST /api/marketer/cpl/campaigns/start`](/docs/ru/partners/api/cpl-campaign-start)             | Find Offers -> **Start**                   |

Каждая запись — тонкий прокси к платформе: действуют те же проверки владельца, лимиты, кулдауны и сообщения валидации, что и в кабинете. Ничто здесь не тратит деньги; записи фиксируют обязательство по доставке, а не оплату.

## Правила

* **Ключ с полным доступом.** Ключ из **Tools -> API** должен быть ключом **Full**. Ключи Read-only получают `error_code` `403` с сообщением `This API key is read-only`.
* **POST с JSON-телом.** Отправляйте `Content-Type: application/json`. Тела в формате формы тоже принимаются.
* **Только публичные id.** `campaign_id` — это id вида `revc_…`, `order_id` — id CPL-кампании вида `cplo_…`, ровно в том виде, в каком их возвращают списочные эндпоинты. Числовые внутренние id отклоняются с `404`.
* **Лимит: 30 запросов в минуту** на аккаунт (общий для всех его ключей), отдельно от 120 в минуту для чтений. При превышении вы получаете `error_code` `429` и заголовок `Retry-After`.
* **Каждая запись возвращает обновлённый объект** в `data`, в том же формате, что и соответствующий списочный эндпоинт (`/api/marketer/revshare/campaigns` для кампаний, `/api/marketer/cpl/campaigns` для CPL-кампаний), так что локальную копию можно обновить без второго запроса. Некоторые ответы также содержат `message` с текстом подтверждения от платформы.

## Формат ответа

Все ответы возвращают HTTP `200`. Проверяйте `status`:

<CodeGroup>
  ```json Success theme={null}
  {
    "status": "success",
    "data": { "campaign_id": "revc_abc123", "status": "completed", ... }
  }
  ```

  ```json Error theme={null}
  {
    "status": "error",
    "error_code": 422,
    "message": "Please fill in all campaign fields"
  }
  ```
</CodeGroup>

## Запуски кампаний

Запуски кампаний (`revshare/campaigns/start`, `cpl/campaigns/start`) выполняются по одному на аккаунт, так же как в кабинете. Запуск, отправленный, пока выполняется другой, отвечает:

```json theme={null}
{
  "status": "error",
  "error_code": 429,
  "message": "Another campaign start is still running. Wait a few seconds and try again"
}
```

Подождите несколько секунд и повторите. Не повторяйте в плотном цикле: лимит на запись учитывает эти попытки.

## 503: сервис временно недоступен

Запись пересылается на платформу. Если платформа не отвечает вовремя, вы получаете `error_code` `503` с `message` `Service is temporarily unavailable`. Действие всё же могло быть применено. Перед повторным запуском кампании проверьте соответствующий эндпоинт чтения (`revshare/campaigns` с `of_account_id` или `cpl/campaigns` с `client_offer_id`), чтобы не запустить кампанию дважды.

## Пример

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST "https://partners.onlytraffic.com/api/marketer/revshare/campaigns/stop" \
    -H "Authorization: your-api-key-here" \
    -H "Content-Type: application/json" \
    -d '{"campaign_id": "revc_abc123"}'
  ```

  ```python Python theme={null}
  import requests

  response = requests.post(
      "https://partners.onlytraffic.com/api/marketer/revshare/campaigns/stop",
      headers={"Authorization": "your-api-key-here"},
      json={"campaign_id": "revc_abc123"}
  )
  data = response.json()
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch(
    "https://partners.onlytraffic.com/api/marketer/revshare/campaigns/stop",
    {
      method: "POST",
      headers: {
        "Authorization": "your-api-key-here",
        "Content-Type": "application/json"
      },
      body: JSON.stringify({ campaign_id: "revc_abc123" })
    }
  );
  const data = await response.json();
  ```
</CodeGroup>
