Данные объявления
/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обязательно | number | ID пользователя Telegram (ctx.from.id): конечное число. Документация Telegram User → |
platform_idобязательно | string | Публичный ID вашей площадки (plt_…). кабинета площадок → |
language_codeобязательно | string | Непустой языковой тег IETF, например "en" или "ru". Обязателен, даже если Telegram не передал language_code; используйте язык, выбранный в боте. Документация Telegram User → |
is_premium | boolean | Есть ли у пользователя Telegram Premium. По умолчанию false. Документация Telegram User → |
group_id | number | ID чата Telegram (ctx.chat.id) для групп и супергрупп. Частота «1 реклама на N сообщений» и суточный лимит применяются к чату, а не к пользователю. В личных чатах не передавайте. Документация Telegram Chat → |
participants_count | number | Неотрицательное число участников группы. Вместе с group_id используется для фильтров по размеру группы и расчёта веса показа; в личных чатах игнорируется. Метод Telegram getChatMemberCount → |
group_name | string | Необязательное название группы. Проверяется как строка, но после разбора сейчас не используется рекламными маршрутами. Документация Telegram Chat → |
parse_mode | string | Если указан, добавляет в ответ ad_text_formatted: экранированный текст с гиперссылкой в выбранном режиме разметки. |
accept_formats | string[] | Допустимые форматы: "text" и "image". Отсутствие поля или null означает ["text"]; пустой массив или значение другого типа даёт 400. Неизвестные элементы игнорируются; запасной вариант — ["text"]. Rich-форматы доступны только в POST /api/v1/ad. |
platform | string | Тип площадки. По умолчанию: "telegram". |
Обязательные поля.
Пример запроса — несколько форматов
{"user_id": 12345,"platform_id": "plt_abc","language_code": "en","accept_formats": ["text","image"],"parse_mode": "HTML"}
Ответ — текстовая реклама
{"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 сейчас совпадают, но сохранены отдельно для совместимости с будущими изменениями.
Ответ — реклама с изображением
{"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-кнопкой.
Ответ — рекламы нет
{ "has_ad": false, "impression_id": null, "ad": null }
Если подходящей кампании нет или ещё не достигнута нужная частота показа, оба поля равны null. Отправьте исходный ответ LLM без изменений.
Ответы с ошибкой
| Статус | Значение |
|---|---|
400 | Обязательное поле отсутствует, значение поля некорректно или platform_id не указывает на площадку этого аккаунта. Для accept_formats допустим непустой массив или null. |
401 | API-ключ отсутствует или недействителен. |