Вход через Telegram и Max
вместо пароля и OAuth

Authorization Code flow, QR для десктопа, кросс-девайс polling. Пользователь кликает ссылку, подтверждает в боте — у вас на руках его имя, username и subscriber_id.

· Rate limit 5 сессий/час, коды TTL 300 сек, GETDEL атомарно

1 Сканирование QR
2 Подтверждение в боте
3 Код + автоподписка
Пользователь вошёл
⌛ Ожидаем подтверждение…
POST /v1/auth/session PKCE · GETDEL атомарно
3
варианта: ссылка / сессия / QR
300 сек
TTL одноразового кода
Bonus
автоподписка на ваши уведомления
PKCE
готовый OAuth 2.0 под капотом

Без нас

Почему свой OAuth через бота — это дорого

Authorization Code flow с state

Параметр state для CSRF, хранилище с TTL, одноразовые коды, атомарное GETDEL против TOCTOU — реализовать корректно непросто.

QR-polling для desktop

Пользователь на десктопе, бот на мобильном. Нужен механизм: показать QR, ждать подтверждения, не падать после 5 минут — сессии, polling, экспирация.

Rate limit и брутфорс

Без лимитов на создание сессий сайт превратится в генератор ссылок. Нужен sliding window rate limit на проект и на IP.

Что внутри

Три флоу авторизации в одном API

Статические ссылки

Простой случай — ссылка t.me/bot?start=auth_SLUG. Один клик → подтверждение → ваш callback_url?code=...

Сессии с state

POST /v1/auth/session с вашим state. Возвращает session_id и ссылки на ботов. state дойдёт обратно с кодом — привяжете к своей браузерной сессии.

QR + polling

Desktop-логин: QR со ссылкой + polling GET /v1/auth/session/:id/status каждые 2-3 секунды. Когда пользователь подтвердит на телефоне — получите code.

Автоподписка после логина

ensure_subscribed() после подтверждения добавляет пользователя в подписчики проекта — дальше можно отправлять ему уведомления без доп. действий.

GETDEL атомарно

Lua-скрипт GET+DEL предотвращает повторное использование кода между двумя запросами (TOCTOU-safe).

Webhook auth.completed

Событие прилетает сразу после подтверждения. Не обязаны ждать, пока пользователь вернётся на сайт — можете разблокировать его бэкенд немедленно.

Как это работает

Authorization Code flow за 3 шага

01

Пользователь кликает ссылку

Ссылка ведёт в @zapnotybot или Max-бот с deep link auth_SLUG. Бот показывает «Войти в ваш проект?» с кнопками Да/Отмена.

02

Подтверждение в боте

Нажатие «Да» → автоподписка на уведомления + генерация одноразового кода в Redis. Бот редактирует сообщение на «Авторизация подтверждена ✅».

03

Callback с кодом

Ваш callback_url?code=CODE. POST /v1/auth/verify атомарно съедает код и возвращает данные: subscriber_id, first_name, username, lang.

FAQ

Частые вопросы

Telegram Login Widget требует собственного бота, настройки домена и не поддерживает Max. Zapnoty — SaaS-слой: вы получаете оба канала, автоподписку на ваши уведомления и готовый API сессий.

Max работает без VPN в РФ. Если пользователь на десктопе без Telegram — даём ему QR для Max и ссылку в браузере. Авторизация проходит в любом случае.

subscriber_id (UUID), channel (telegram/max), first_name, username, lang (ru/en), tags (массив). Email и телефон — не передаются (их нет у Telegram/Max).

Код одноразовый — GETDEL через Lua-скрипт делает его невалидным сразу после verify. TTL 300 секунд. Rate limit 5 сессий в час на проект.

1 кредит за успешную авторизацию (подтверждение в боте). На бесплатном тарифе — до 100 в месяц, на базовом — до 700.

Да. Если сотрудники уже в Telegram или Max — логин через мессенджер быстрее и удобнее классических корпоративных OAuth.

Бесплатный старт

Подключите за 5 минут

Без привязки карты. 100 кредитов в месяц бесплатно — этого хватит, чтобы попробовать все возможности.