S
Swiptor
REST API · v1 Beta

Swiptor API Reference

Bearer-аутентификация, JSON-ответы, понятные коды ошибок. Никаких SDK не нужно — достаточно стандартного HTTP-клиента. На каждый endpoint есть deep-link якорь, скопируйте — и поделитесь с разработчиком.

  • https://api.swiptor.com/api/v1
  • 13 endpoint'ов
  • Header «Auth: …»
  • JSON · UTF-8
  • TLS 1.3
На этой странице

Введение

С чего начать интеграцию

Swiptor API устроен как набор HTTP-endpoint'ов. Базовый URL — https://api.swiptor.com/api/v1. Каждый запрос отдаёт JSON-конверт со status / code / data, чтобы ваша интеграция могла одинаково разбирать любой ответ.

Аутентификация

Заголовок Auth и два типа ключа

API_KEY

Для бота-партнёра

Header «Auth: API_…». Используется во всех publisher-endpoint'ах. Получается в кабинете при подключении бота. Ротация — в один клик.

SECRET

Для рекламного кабинета

Header «Auth: SECRET_…». Используется advertiser API, баланс, общая аналитика. Хранится только в backend, в браузер не отдаётся.

Auth: API_a1b2c3d4e5f6...

Структура ответов

Единый конверт для успеха, предупреждений и ошибок

Все ответы используют один и тот же конверт. Поле code — машинно-читаемый идентификатор в UPPER_SNAKE_CASE. Поле message опционально и появляется только когда есть динамический контекст (например, «Min withdrawal is $10»).

Успех · HTTP 200ok
{
  "status": "ok",
  "code": "OK",
  "data": { ... }
}
Ошибка · HTTP 4xx / 5xxerror
{
  "status": "error",
  "code": "INVALID_BOT_TOKEN",
  "message": "Telegram rejected the bot token."
}

AI-промт: внедрить Swiptor в бота

Готовый рецепт для ChatGPT / Claude / Cursor. Скопируйте, добавьте свой код бота — и AI напишет полный жизненный цикл интеграции: gate перед задачей, верификация подписки, пост-роллы.

Вставить вChatGPTClaudeCursorCody
Help me wire the Swiptor REST API into my Telegram bot so the bot earns money from confirmed subscribers.

API CONTRACT
  Base URL: https://api.swiptor.com/api/v1
  Auth:     send header "Auth: API_…" on every call (the publisher key issued for the bot).
  Body:     application/json.
  Response: { "status": "ok"|"warning"|"error", "code": "UPPER_SNAKE_CODE", "data": {...}? , "message": "..."? }.
  Read the "code" field as the source of truth and map it to your own user-facing text.

THE ONE ENDPOINT — BEHAVIOUR PICKED BY "action"

POST /publisher/get-tasks
  { "chat_id": <int>, "user_id": <int>, "action": "<see below>",
    "language_code": "ru|en|uz", "get_links": true }
Each call re-checks Telegram for every pending sponsor on the same bot and
atomically records + charges any newly confirmed subscription. The operation
is idempotent — calling it 1× or 50× produces the same money flow.

  • action="subscribe" (default)
      Standard OP gate. The sponsor set is pinned to the user for cache_minutes;
      re-calling within the window returns the same set. Ideal for a one-off
      "subscribe to continue" screen.

  • action="newtask"
      No caching at all. Every call rebuilds the sponsor list from scratch.
      Use this when you want a brand-new selection on every task; verify
      subscriptions via POST /publisher/get-user-subscriptions.

  • action="task"
      Hybrid. Same shape as subscribe, but the cache is cleared the moment
      every sponsor is confirmed — so the NEXT task pulls a fresh set.
      Use for repeat-flow bots (AI Q&A, downloads, GDZ).

  • action="view"
      Post-roll, AFTER the user already got their value. Swiptor itself
      delivers the ad post to chat_id through your bot's token — your
      bot does NOT send anything. Response is { "SendPostResult": <int> }
      where the enum is:
        0 Undefined         1 Success          2 RevokedTokenError
        3 UserForbiddenError 4 ToManyRequestsError 5 OtherBotApiError
        6 OtherError        7 AdLimited        8 NoAds
        9 BotIsNotEnabled  10 Banned          11 InReview
      Just log everything except 1 — and re-call later if 4/6.

Telegram-boost requests are merged into sponsors[] automatically for Premium
users on every subscribe/newtask/task call — there is no separate boost action.

OUTCOMES
  code "OK"                     → nothing to show right now (subscribe/newtask/task).
  code "SUBSCRIPTIONS_REQUIRED"  → for subscribe/newtask/task — sponsors[] with
                                   { order_id (= ads_id), link, resource_name,
                                   button_text, resource_logo?, status }.
  code "SEND_POST_RESULT"        → for view — SendPostResult enum (see above).
Re-call the same endpoint after the user returns from the sponsor links —
the platform detects the subscription and credits the bot owner; no separate
verify or confirm step exists.

ERROR HANDLING
  - HTTP 2xx → trust the envelope code, branch on it.
  - HTTP 5xx / 503 → retry up to 4 times with exponential backoff (0.5 / 1 / 2 / 4 s);
    keep the same Idempotency-Key header (UUID v4) across retries.
  - HTTP 4xx → terminal: log the code, do not retry.
  - Network timeout → treat as 5xx and retry.
  - If retries are exhausted, fail OPEN: let the user finish their task and log the error.
    Do not punish the user for our outage.

IMPLEMENT THE FOLLOWING (write the code, do not just outline it):
  • A small SwiptorClient with one async method get_tasks(action, …) that owns
    the HTTP session, the Auth header, a fresh Idempotency-Key per request,
    and the retry loop. action selects the behaviour.
  • A reusable @require_subscription guard (middleware / decorator / hook —
    whatever fits the framework I tell you) that wraps a task handler with
    get_tasks(action="task"), renders the sponsor keyboard on
    "SUBSCRIPTIONS_REQUIRED", and re-calls the same endpoint when the user
    returns from the sponsor links.
  • A fire-and-forget get_tasks(action="view") after every successful task
    completion so the user sees the ad post without blocking the task reply.

HOUSEKEEPING
  • Keep the Auth key server-side only. Never embed it in mini-app bundles or logs.
  • For inline keyboards, render sponsor.button_text and sponsor.link as-is.
  • Localise your own copy (Ru/Uz/En); Swiptor responses are language-neutral codes.

Live reference with curl / Node / Python / Go examples for every endpoint:
https://swiptor.com/api-docs

When you answer, target my stack (I'll tell you next which one). Produce production-ready
code with the client + middleware + handler glue, then a 3–5 bullet wiring summary.

Промт собирается из живого реестра endpoint'ов — любое обновление API автоматически попадает сюда. После вставки добавьте 2–3 строки про свой стек (aiogram / telegraf / grammy и т.д.) — и попросите написать client + handler + middleware.

Publisher API

Endpoint'ы, которые дёргает бот-партнёр: подбор спонсоров, верификация подписки, информация о пользователе.

5 endpoint'ов
POST/publisher/get-tasks

Получить очередь задач для пользователя

Единственный endpoint, нужный боту-партнёру. Возвращает следующую партию задач для конкретного пользователя — действие определяется полем action: «subscribe» (стандартный OP-гейт), «task» (OP перед каждой задачей с автосбросом кеша после подтверждения), «view» (пост-экшн рекламный пост) или «boost» (Telegram-буст). Платформа сама верифицирует Telegram и фиксирует+оплачивает выполненные подписки на каждом вызове — отдельных verify-запросов не требуется.

API_KEY
Параметры запроса
ПолеТипОбяз.Описание
chat_idintyesID чата с пользователем (обычно равен user_id для личных).
user_idintyesTelegram user ID, для которого подбираем задачи.
language_codestringnoКод языка пользователя — uz / ru / en.
actionstringnoКакую задачу подбираем. «subscribe» (по-умолчанию) — список спонсоров закрепляется за пользователем на cache_minutes; верификация — повторными вызовами с тем же user_id. «newtask» — без кеша: каждый вызов пересобирает список с нуля; проверять статус следует через /get-user-subscriptions. «task» — гибрид: тот же набор, но кеш сбрасывается, как только все подписки подтверждены, так что следующий вызов сразу подберёт новых спонсоров. «view» — пост-экшн с серверной доставкой: Swiptor САМ отправит рекламный пост в chat_id через токен вашего бота, ответ — числовой SendPostResult (0..11). Запросы Telegram-буста автоматически подмешиваются в sponsors[] для Premium-пользователей при subscribe/newtask/task — отдельного action для этого нет.
get_linksboolnoТолько для action=subscribe|task. Если true — в ответе вернётся sponsors[] с готовыми ссылками; иначе бот сам шлёт OP-сообщение через свой токен.
Запрос
curl -X POST https://api.swiptor.com/api/v1/publisher/get-tasks \
  -H "Auth: API_..." \
  -H "Content-Type: application/json" \
  -d '{
    "chat_id": 123456,
    "user_id": 123456,
    "language_code": "ru",
    "action": "subscribe",
    "get_links": true
  }'
https://api.swiptor.com/api/v1/publisher/get-tasks
Ответ200 OK
// action=subscribe | newtask | task — orders + бусты (для Premium) вместе
{
  "status": "warning",
  "code": "SUBSCRIPTIONS_REQUIRED",
  "sponsors": [
    {
      "order_id": "8421",
      "resource_id": "-1001234567",
      "type": "channel",
      "link": "https://t.me/+AbCdEfGhIj",
      "status": "unsubscribed",
      "available_now": true,
      "button_text": "Подписаться",
      "resource_name": "Krypta News",
      "resource_logo": "https://swiptor.com/logos/ch_1024.png"
    }
  ]
}

// action=view — серверная доставка через токен вашего бота
// SendPostResult enum:
//   0 Undefined  · 1 Success           · 2 RevokedTokenError
//   3 UserForbiddenError · 4 ToManyRequestsError · 5 OtherBotApiError
//   6 OtherError · 7 AdLimited         · 8 NoAds
//   9 BotIsNotEnabled · 10 Banned       · 11 InReview
{
  "status": "ok",
  "code": "SEND_POST_RESULT",
  "SendPostResult": 1
}

// нечего показывать (для subscribe/newtask/task)
{ "status": "ok", "code": "OK" }
POST/publisher/check-ads

Предпроверка наличия рекламы

Лёгкий preflight: показывает, есть ли подходящие активные заказы для конкретного пользователя прямо сейчас. Полезно, чтобы не открывать UI блока спонсоров впустую.

API_KEY
Параметры запроса
ПолеТипОбяз.Описание
chat_idintyesID чата с пользователем.
user_idintyesTelegram user ID.
Запрос
curl -X POST https://api.swiptor.com/api/v1/publisher/check-ads \
  -H "Auth: API_..." \
  -H "Content-Type: application/json" \
  -d '{ "chat_id": 123456, "user_id": 123456 }'
https://api.swiptor.com/api/v1/publisher/check-ads
Ответ200 OK
{
  "status": true,
  "has_ads": true,
  "post": {
    "ads_id": "view_137",
    "type": "view",
    "media_url": "https://swiptor.com/posts/view_137.jpg",
    "caption": "Промо-баннер партнёра",
    "buttons": [
      { "text": "Открыть", "url": "https://t.me/+AbCdEfGhIj" }
    ]
  }
}
POST/publisher/bots

Управление ботами (add / update / info)

Единый endpoint для регистрации, обновления и получения информации о ваших ботах-партнёрах. Действие выбирается полем action. Возвращает API_KEY бота при action=add — этим ключом затем дёргается /get-tasks (единственный обязательный публичный endpoint для подписочной механики).

SECRET
Параметры запроса
ПолеТипОбяз.Описание
actionstringyesОдно из: add · update · info.
bot_tokenstringnoТолько для action=add. Токен бота из BotFather.
bot_idintnoTelegram ID бота (update / info).
max_sponsorsintnoСколько спонсоров возвращать пользователю (1–10). По умолч. 4.
cache_minutesintnoКеш спонсорского набора, минут (5–4320). По умолч. 180.
get_linksboolnoВозвращать готовые ссылки или дать Swiptor самому слать блок ОП.
is_onboolnoТолько для action=update. Включить/выключить бота в Swiptor.
forbidden_themesarraynoТемы рекламы, которые нельзя показывать у вас (коды из /common/filters).
Запрос
curl -X POST https://api.swiptor.com/api/v1/publisher/bots \
  -H "Auth: SECRET_..." \
  -H "Content-Type: application/json" \
  -d '{
    "action": "add",
    "bot_token": "123456:ABC-...",
    "max_sponsors": 3
  }'
https://api.swiptor.com/api/v1/publisher/bots
Ответ200 OK
{
  "status": "ok",
  "code": "OK",
  "data": {
    "bot_id": 123456789,
    "api_key": "API_a1b2c3...",
    "max_sponsors": 3,
    "cache_minutes": 180,
    "is_on": true
  }
}
POST/publisher/get-user-subscriptions

История подписок пользователя

Возвращает полную историю подписок пользователя на спонсорские ресурсы у вашего бота — даты подписки/отписки, статус, оплачено вам как паблишеру. Подходит для cabinet-стиля «мои действия» внутри вашего бота.

API_KEY
Параметры запроса
ПолеТипОбяз.Описание
user_idintyesTelegram user ID.
start_datestringnoISO дата от какой включительно (YYYY-MM-DD).
end_datestringnoISO дата до какой включительно.
statusstringnoФильтр: joined · left · kicked · notgetted · pending. По умолч. все.
limitintnoСколько записей вернуть (1–200). По умолч. 50.
Запрос
curl -X POST https://api.swiptor.com/api/v1/publisher/get-user-subscriptions \
  -H "Auth: API_..." \
  -H "Content-Type: application/json" \
  -d '{ "user_id": 123456, "status": "joined", "limit": 20 }'
https://api.swiptor.com/api/v1/publisher/get-user-subscriptions
Ответ200 OK
{
  "status": "ok",
  "code": "OK",
  "data": {
    "user_id": 123456,
    "total": 2,
    "subscriptions": [
      {
        "ads_id": 8421,
        "resource_name": "Crypto News",
        "resource_logo": "https://t.me/i/userpic/.../crypto.jpg",
        "button_text": "Подписаться",
        "status": "joined",
        "subscribe_date": "2026-05-10T09:30:00Z",
        "unsubscribe_date": null,
        "available_now": true
      }
    ]
  }
}
POST/publisher/get-user-info

Профиль пользователя по Telegram ID

Возвращает свод всего, что Swiptor знает о пользователе: язык, регион, премиум, возрастная группа, наличие подозрительных признаков. Используется, чтобы решать показывать ли спонсорский слот именно ему.

API_KEY
Параметры запроса
ПолеТипОбяз.Описание
user_idintyesTelegram user ID.
Запрос
curl -X POST https://api.swiptor.com/api/v1/publisher/get-user-info \
  -H "Auth: API_..." \
  -H "Content-Type: application/json" \
  -d '{ "user_id": 123456 }'
https://api.swiptor.com/api/v1/publisher/get-user-info
Ответ200 OK
{
  "status": "ok",
  "code": "OK",
  "data": {
    "user_id": 123456,
    "first_name": "Alex",
    "username": "alex",
    "lang_code": "ru",
    "is_premium": false,
    "age_category": "18-25",
    "country": "RU",
    "city": "moscow",
    "is_suspicious": false,
    "ip_address": null
  }
}

Advertiser API

Управление рекламными заказами из бэкенда: создание, обновление, статус, архивирование.

4 endpoint'ов
POST/advertiser/orders

Создать рекламный заказ

Создаёт заказ из advertiser-кабинета. ads_type выбирает мастер-тип: channel (подписки + показы), bot (запуски), resource (внешняя ссылка без проверки). Через user_parameters задаётся узкий таргетинг по гео, языку, полу, возрасту, устройству.

SECRET
Параметры запроса
ПолеТипОбяз.Описание
actionstringyesДолжно быть «create».
linkstringyesСсылка на ваш канал/бот/ресурс.
ads_typestringyeschannel · bot · resource.
quantity_allintyesЦелевой объём (10..10 000 000).
pricestringyesСтавка за единицу в USD, например «0.02».
user_parametersobjectnogender · ages · countries · languages · devicestype · devicesos · only_premium · has_photo · has_username · has_bio.
Запрос
curl -X POST https://api.swiptor.com/api/v1/advertiser/orders \
  -H "Auth: SECRET_..." \
  -H "Content-Type: application/json" \
  -d '{
    "action": "create",
    "link": "https://t.me/+AbCdEfGhIj",
    "ads_type": "channel",
    "quantity_all": 1000,
    "price": 0.02,
    "user_parameters": {
      "countries": ["UZ", "KZ"],
      "languages": ["ru"],
      "ages": [18, 19, 20, 21, 22, 23, 24]
    }
  }'
https://api.swiptor.com/api/v1/advertiser/orders
Ответ200 OK
{
  "status": "ok",
  "code": 200,
  "message": "Order created and sent for moderation",
  "response": {
    "order_id": 8421,
    "price_breakdown": {
      "base_price": 0.02,
      "filter_coefficient": 1.2,
      "total_advertiser_price": 0.024,
      "filter_extra_service_profit": 0.004,
      "service_base_commission": 0.004,
      "service_total_profit": 0.008,
      "publisher_payment": 0.016,
      "applied_filters": ["countries", "languages", "ages"]
    }
  }
}
POST/advertiser/orders

Узнать статус заказа

Возвращает текущее состояние заказа: сколько действий выполнено, сколько потрачено в USD, активен ли заказ. Работает с тем же путём — отличается полем action: «info».

SECRET
Параметры запроса
ПолеТипОбяз.Описание
actionstringyesДолжно быть «info».
order_idintyesID ранее созданного заказа.
Запрос
curl -X POST https://api.swiptor.com/api/v1/advertiser/orders \
  -H "Auth: SECRET_..." \
  -H "Content-Type: application/json" \
  -d '{ "action": "info", "order_id": 8421 }'
https://api.swiptor.com/api/v1/advertiser/orders
Ответ200 OK
{
  "status": "ok",
  "code": 200,
  "message": "Order info retrieved",
  "response": {
    "order_id": 8421,
    "status": "Processing",
    "reason": null,
    "link": "https://t.me/+AbCdEfGhIj",
    "name": "Krypta News",
    "ads_type": "channel",
    "track_unsubscriptions": true,
    "quantity_all": 1000,
    "quantity_day": 200,
    "quantity_now": 684,
    "remains": 316,
    "is_on": 1,
    "in_archive": 0,
    "old_price": 0.02,
    "real_price": 0.024,
    "user_parameters": { "countries": [], "languages": [], "ages": [], "gender": "all" },
    "order_schedule": { "start_datetime": null, "start_time": null, "end_time": null, "excluded_days": [] },
    "coefficients": { "total": 1.2, "applied": ["countries", "languages", "ages"] },
    "forbidden_themes": [],
    "created_at": "2026-05-01T10:23:00"
  }
}
POST/advertiser/orders

Изменение заказа (action: update)

Меняет любые поля заказа: цели, фильтры, расписание, бюджет. Те же путь и метод, что и для create — отличается полем action.

SECRET
Параметры запроса
ПолеТипОбяз.Описание
actionstringyesВсегда «update».
order_idintyesID заказа.
target_quantityintnoНовая цель по числу подписчиков.
daily_limitintnoДневной лимит, шт. 0 — без лимита.
price_per_subscriberdecimalnoНовая цена за подписчика в USD.
is_onboolnoВключить (true) или поставить на паузу (false).
filtersobjectnoНабор фильтров целевой аудитории — см. /common/filters для значений.
Запрос
curl -X POST https://api.swiptor.com/api/v1/advertiser/orders \
  -H "Auth: SECRET_..." \
  -H "Content-Type: application/json" \
  -d '{
    "action": "update",
    "order_id": 8421,
    "daily_limit": 200,
    "is_on": true
  }'
https://api.swiptor.com/api/v1/advertiser/orders
Ответ200 OK
{
  "status": "ok",
  "code": "OK",
  "data": { "order_id": 8421, "updated_fields": ["daily_limit", "is_on"] }
}
POST/advertiser/orders

Архивирование заказа (action: delete)

Мягко удаляет заказ — он больше не подбирается публишерам, но история подписок и взаиморасчёты остаются для отчётности. Восстановить можно через интерфейс или action=update is_on=true.

SECRET
Параметры запроса
ПолеТипОбяз.Описание
actionstringyesВсегда «delete».
order_idintyesID заказа.
Запрос
curl -X POST https://api.swiptor.com/api/v1/advertiser/orders \
  -H "Auth: SECRET_..." \
  -H "Content-Type: application/json" \
  -d '{ "action": "delete", "order_id": 8421 }'
https://api.swiptor.com/api/v1/advertiser/orders
Ответ200 OK
{ "status": "ok", "code": "OK", "data": { "order_id": 8421, "archived_at": "2026-05-17T11:00:00Z" } }

Общие методы

Баланс, справочник фильтров и коэффициентов, агрегированная статистика, исключения. Доступно и под SECRET, и под API_KEY.

4 endpoint'ов
GET/balance

Баланс кабинета

Возвращает текущий доступный баланс, заблокированную часть (на ОП-заказах) и сумму к выводу. Работает и под SECRET, и под API_KEY — выдаёт баланс владельца ключа.

API_KEY · SECRET
Запрос
curl https://api.swiptor.com/api/v1/balance -H "Auth: SECRET_..."
https://api.swiptor.com/api/v1/balance
Ответ200 OK
{
  "status": "ok",
  "code": "OK",
  "data": {
    "balance": 124.50,
    "locked": 12.00,
    "withdraw_available": 112.50,
    "earned": 480.10,
    "spent": 355.60,
    "currency": "USD"
  }
}
GET/common/filters

Справочник фильтров и коэффициентов

Возвращает каталог доступных значений для фильтров заказа (страны, города, языки, возрастные группы, типы устройств) с долей аудитории и категорийными коэффициентами, которые умножают цену. Endpoint публичный — без Auth тоже работает.

API_KEY · SECRET
Запрос
curl https://api.swiptor.com/api/v1/common/filters
https://api.swiptor.com/api/v1/common/filters
Ответ200 OK
{
  "status": true,
  "filters": {
    "ads": {
      "countries": [
        { "id": 1, "code": "RU", "name_en": "Russia", "percentage": 38.4, "cities": [] }
      ],
      "languages": [{ "id": 1, "code": "ru", "name_en": "Russian", "percentage": 41.2 }],
      "cities": [
        { "id": 11, "code": "moscow", "country_id": 1, "country_code": "RU", "name_en": "Moscow", "percentage": 30.55 }
      ],
      "ages": [{ "id": 5, "code": "18_25", "min_age": 18, "max_age": 25, "percentage": 32.1 }],
      "age_variants": [
        { "ids": ["5", "6"], "name": "18-25, > 25", "coefficient": 2.5 }
      ],
      "devicestype": [{ "id": 1, "code": "smartphone", "percentage": 86.0 }],
      "devicesos": [{ "id": 1, "code": "android", "percentage": 62.0 }],
      "forbidden_themes": [
        { "id": 12, "code": "music", "name_en": "Music", "percentage": 16.5 }
      ]
    },
    "bots": {
      "forbidden_themes": [
        { "id": 7, "code": "crypto", "name_en": "Crypto", "percentage": 7.06 }
      ]
    },
    "coefficients": {
      "countries": 1.1, "cities": 1.2, "languages": 1.05,
      "premium": 1.5, "device_type": 1.1, "device_os": 1.1
    }
  }
}
GET/common/statistic

Статистика (publisher / advertiser)

Возвращает агрегированную статистику по выбранной сущности: ваш кабинет, отдельный бот, заказ, источник. Поле action определяет, что именно агрегировать.

API_KEY · SECRET
Параметры запроса
ПолеТипОбяз.Описание
actionstringyesallorders · order · source · allbots · bot · sponsor · boost_order · view_order · …
order_idintnoНужен для action в {order, source, boost_order, view_order}.
bot_idintnoНужен для action в {bot, sponsor}.
start_datestringnoISO дата от — YYYY-MM-DD.
end_datestringnoISO дата до — YYYY-MM-DD.
Запрос
curl 'https://api.swiptor.com/api/v1/common/statistic?action=order&order_id=8421&start_date=2026-05-01' \
  -H "Auth: SECRET_..."
https://api.swiptor.com/api/v1/common/statistic
Ответ200 OK
{
  "labels": ["12.05", "13.05", "14.05"],
  "subscribers": [42, 58, 61],
  "unsubscribed": [3, 4, 2],
  "spent": [1.02, 1.42, 1.50]
}
POST/common/toggle-exclusion

Исключения (sponsor / бот)

Позволяет advertiser-у запретить показ его заказа в конкретном боте, или publisher-у скрыть из своего бота конкретного спонсора. Поведение определяется action + context.

API_KEY · SECRET
Параметры запроса
ПолеТипОбяз.Описание
actionstringyes«exclude» или «activate».
contextstringyes«advertiser» или «publisher».
order_idintyesID заказа.
bot_idintnoID бота (для advertiser context обязателен).
Запрос
curl -X POST 'https://api.swiptor.com/api/v1/common/toggle-exclusion?action=exclude&context=advertiser&order_id=8421&bot_id=42' \
  -H "Auth: SECRET_..."
https://api.swiptor.com/api/v1/common/toggle-exclusion
Ответ200 OK
{ "status": true, "message": "Bot excluded" }

Не нашли нужный endpoint?

Напишите в поддержку — добавим в следующем апдейте API. Если интегрируете большой каталог, мы делаем индивидуальный sandbox и аккаунт-менеджера на время запуска.