EVIR API
API для выдачи спонсорских карточек в Telegram-боте
Ваш сервер получает assignments от EVIR, отправляет карточку через Telegram и подтверждает только доказанный этап доставки.
- Base URL: https://evir.bot/api/v1
- JSON over HTTPS
- Повтор delivery без двойного расчёта
Авторизация
Владелец создаёт подключение в EVIR и один раз получает ключ. Ключ хранится только на backend вашего бота.
Authorization: Bearer EVIR_API_KEY
Content-Type: application/jsonНомер подключения можно передать в публичной ссылке на инструкцию. API key, токен Telegram и webhook secret — нельзя.
Основной поток
1. Проверка
POST /integrations/{projectId}/ping — убедиться, что ключ относится к активному проекту.
2. Получение
POST /integrations/{projectId}/next с recipientId и limit от 1 до 10.
3. Отправка
Отправить полученную карточку через Telegram без изменения защищённых URL.
4. Подтверждение
После подтверждённой отправки вызвать endpoint, который соответствует productType.
Публичные endpoints подключения
POST /integrations/{projectId}/pingПроверить ключ
Тело: {}. Ответ подтверждает активное подключение.
POST /integrations/{projectId}/nextПолучить карточки
Тело: recipientId, limit и необязательный isPremium. Пустой assignments означает, что сейчас предложений нет.
POST /integrations/{projectId}/deliveries/{id}/servedПодтвердить отправку
Для показа это расчётное событие. Для перехода и bot-ОП — только подтверждение контакта перед последующим действием.
POST /integrations/{projectId}/deliveries/{id}/qualifyПодтвердить channel-ОП
Используется для действия пользователя в ОП канала с тем же recipientId.
POST /integrations/{projectId}/startПередать запуск
Используется для совместимого сценария атрибуции /start с recipientId и startParam.
Минимальный запрос
const response = await fetch(
'https://evir.bot/api/v1/integrations/PROJECT_ID/next',
{
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.EVIR_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({ recipientId: String(user.id), limit: 3 }),
},
);
const { data } = await response.json();Не вызывайте /served, если Telegram доказанно отклонил отправку. При timeout с неизвестным результатом не пересылайте карточку автоматически.
Ошибки и повторы
401 / 403
Проверьте ключ, подключение и допуск нужного SDK-формата.
404
Подключение или delivery не найдены, либо пятиминутный срок подтверждения закончился.
409
Состояние изменилось. Прочитайте code и requiredAction, затем обновите данные.
429 / 5xx
Учтите Retry-After и повторите запрос для того же recipient или delivery. Не создавайте новую отправку при неизвестном результате Telegram.
Коротко и по делу
Что часто спрашивают
Откройте вопрос, чтобы увидеть ответ. Больше технических деталей — в документации.
Все вопросыМожно вызывать API из frontend?
Нет. EVIR API key должен оставаться на сервере вашего бота.
Что делать, если assignments пустой?
Показать обычный сценарий бота или настроенный empty state. Пустой результат не является ошибкой.
Можно повторить served?
Да. Повторите POST для того же delivery id. Уже рассчитанный результат не создаёт второе списание или начисление.
EVIR внутри Telegram