Перейти к содержимому
Разделы документации
HTTP APIВыдача рекламы

Данные объявления

POST/api/v1/ad/fetch

Вариант без передачи текста ответа LLM: возвращает только объект объявления. Подходит, если ответ бота содержит пользовательские данные, которые вы не хотите передавать Sidekick.

Несколько форматов доступны через необязательное поле accept_formats в теле запроса. Передайте ["text", "image"] , чтобы получать рекламу с изображениями. Поле ответа ad.format показывает полученный формат. Клиенты, которые не передают accept_formats , продолжают получать только текст. Структура ответа сохраняется с добавлением поля format: "text" .

Авторизация

Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Тот же Bearer-токен, что и для /api/v1/ad. Создайте ключи в настройках паблишера.

Тело запроса

ПолеТипОписание
user_idобязательноnumberID пользователя Telegram (ctx.from.id): конечное число. Документация Telegram User
platform_idобязательноstringПубличный ID вашей площадки (plt_…). кабинета площадок
language_codeобязательноstringНепустой языковой тег IETF, например "en" или "ru". Обязателен, даже если Telegram не передал language_code; используйте язык, выбранный в боте. Документация Telegram User
is_premiumbooleanЕсть ли у пользователя Telegram Premium. По умолчанию false. Документация Telegram User
group_idnumberID чата Telegram (ctx.chat.id) для групп и супергрупп. Частота «1 реклама на N сообщений» и суточный лимит применяются к чату, а не к пользователю. В личных чатах не передавайте. Документация Telegram Chat
participants_countnumberНеотрицательное число участников группы. Вместе с group_id используется для фильтров по размеру группы и расчёта веса показа; в личных чатах игнорируется. Метод Telegram getChatMemberCount
group_namestringНеобязательное название группы. Проверяется как строка, но после разбора сейчас не используется рекламными маршрутами. Документация Telegram Chat
parse_modestringЕсли указан, добавляет в ответ ad_text_formatted: экранированный текст с гиперссылкой в выбранном режиме разметки.
accept_formatsstring[]Допустимые форматы: "text" и "image". Отсутствие поля или null означает ["text"]; пустой массив или значение другого типа даёт 400. Неизвестные элементы игнорируются; запасной вариант — ["text"]. Rich-форматы доступны только в POST /api/v1/ad.
platformstringТип площадки. По умолчанию: "telegram".

Обязательные поля.

Пример запроса — несколько форматов

POST /api/v1/ad/fetch
{
"user_id": 12345,
"platform_id": "plt_abc",
"language_code": "en",
"accept_formats": [
"text",
"image"
],
"parse_mode": "HTML"
}

Ответ — текстовая реклама

200 OK
{
"has_ad": true,
"impression_id": "imp_a8f3d2c1e9b7",
"ad": {
"format": "text",
"ad_text": "💡 Try Cursor — AI editor for developers",
"ad_url": "https://sidekick-ads.com/api/v1/click/imp_a8f3d2c1e9b7",
"button_text": "Try Cursor →",
"button_url": "https://sidekick-ads.com/api/v1/click/imp_a8f3d2c1e9b7",
"ad_text_formatted": "<a href=\"https://sidekick-ads.com/api/v1/click/imp_a8f3d2c1e9b7\">💡 Try Cursor — AI editor for developers</a>"
}
}

ad_text — исходный текст кампании. ad_text_formatted присутствует, только если parse_mode задан в запросе, и содержит экранированный текст с гиперссылкой для выбранного режима разметки. ad_url и button_url сейчас совпадают, но сохранены отдельно для совместимости с будущими изменениями.

Ответ — реклама с изображением

200 OK
{
"has_ad": true,
"impression_id": "imp_xxx",
"ad": {
"format": "image",
"ad_text": "Try Sidekick",
"ad_text_formatted": "<a href=\"https://sidekick-ads.com/api/v1/click/imp_xxx\">Try Sidekick</a>",
"ad_url": "https://sidekick-ads.com/api/v1/click/imp_xxx",
"button_text": "Try",
"button_url": "https://sidekick-ads.com/api/v1/click/imp_xxx",
"media_type": "photo",
"image_url": "https://cdn.example.com/sidekick/ad.jpg",
"image_mime": "image/jpeg"
}
}

У рекламы с изображением те же основные поля, что и у текстовой: ad_text, ad_text_formatted, ad_url, button_text, button_url. Проверяйте format === "image" , когда нужно отправить медиа: прочитайте image_url и media_type, затем используйте sendPhoto (для "photo") или sendAnimation (для "animation", применяется для GIF и MP4 без звука). Используйте ad_text_formatted как подпись Telegram, чтобы добавить кликабельную ссылку рядом с inline-кнопкой.

Ответ — рекламы нет

200 OK
{ "has_ad": false, "impression_id": null, "ad": null }

Если подходящей кампании нет или ещё не достигнута нужная частота показа, оба поля равны null. Отправьте исходный ответ LLM без изменений.

Ответы с ошибкой

СтатусЗначение
400Обязательное поле отсутствует, значение поля некорректно или platform_id не указывает на площадку этого аккаунта. Для accept_formats допустим непустой массив или null.
401API-ключ отсутствует или недействителен.