Клиент
Клиент появляется с первым счётом или пробным периодом и дальше живёт под вашимclient_id. Всё о нём — GET /clients/{client_id}:
subscription: null — подписки у клиента не было ни разу. Список всех клиентов с фильтром по статусу — GET /clients.
Клиент, заблокированный платформой, отвечает 403 API_CLIENT_BLOCKED на всех ручках клиента, а trial_available у него false.
Экран подключения
После оплаты клиенту нужно две вещи: приложение и подписка в нём.- Приложение.
GET /appsотдаёт платформы, приложения со ссылками на установку и рекомендованное приложение (recommended_app_id). Ключ вdownloads—platform_id. - Подписка в приложении. Для каждого приложения в
subscription.connectуже собраны:connect_url— адрес для кнопки «Открыть в приложении». Это https-страница, которая открывает приложение с подпиской: Telegram и браузеры не открывают ссылки приложений напрямую.qr_payload— строка для QR-кода, если клиент подключает другое устройство.supports_manual_url— приложение принимаетsubscription_url, вставленную вручную.
subscription_url отдаётся и у истёкшей подписки: после продления ссылка та же, переподключать ничего не нужно.
Устройства
GET …/devices— подключённые устройства и лимитdevices_limit(null— без ограничения). Без подписки список пуст. Если платформа не ответила —503 SERVICE_UNAVAILABLE: пустой список всегда значит «устройств нет», а не сбой.DELETE …/devices/{device_id}— отключить устройство и освободить место под новое.device_id— HWID из списка; в пути он URL-кодируется (encodeURIComponentв JavaScript,urllib.parse.quote(device_id, safe="")в Python).- Места не хватает — докупить устройства счётом с
purpose: devices, см. Тарифы и деньги.
Перевыпуск ссылки
Ссылка подписки утекла или клиент передал её посторонним —POST …/rotate-link. Старая ссылка перестаёт работать сразу на всех устройствах, клиент добавляет новую подписку в приложение заново.
- Не чаще раза в час на клиента: иначе
429 LINK_ROTATE_TOO_SOON, пауза — в заголовкеRetry-After. - Нужна действующая подписка — иначе
400 NO_ACTIVE_SUBSCRIPTION.
Пробный период
POST …/trial выдаёт пробный период, если он включён вашему аккаунту (trial_enabled в GET /account); включает его платформа по запросу менеджеру.
- Клиента нет — заводится.
- Выдаётся один раз: если у клиента уже была подписка —
409 TRIAL_ALREADY_USED. Проверить заранее —trial_availableу клиента. - Суточный лимит пробных периодов на аккаунт —
429 TRIAL_DAILY_LIMIT. 503 SERVICE_UNAVAILABLE— пробный период не выдан, запрос можно повторить.
Документы клиента
Клиент покупает у вас, а исполнитель услуги — платформа, поэтому пользовательское соглашение и политику конфиденциальности ведёт она.GET /documents отдаёт ссылки на готовые страницы под названием вашего сервиса:
Мини-апп и сайт
- Ключ хранится только на сервере. Мини-апп и сайт ходят к вашему серверу, а тот — к API.
- Клиента в мини-аппе Telegram узнавайте на своём сервере по подписанным данным запуска (
initData) и передавайте в API его id какclient_id. - Кнопку оплаты открывайте ссылкой
payment_url, кнопку подключения —connect_url: обе — обычные https-адреса.

