Skip to main content

Клиент

Клиент появляется с первым счётом или пробным периодом и дальше живёт под вашим client_id. Всё о нём — GET /clients/{client_id}:
subscription: null — подписки у клиента не было ни разу. Список всех клиентов с фильтром по статусу — GET /clients. Клиент, заблокированный платформой, отвечает 403 API_CLIENT_BLOCKED на всех ручках клиента, а trial_available у него false.

Экран подключения

После оплаты клиенту нужно две вещи: приложение и подписка в нём.
  1. Приложение. GET /apps отдаёт платформы, приложения со ссылками на установку и рекомендованное приложение (recommended_app_id). Ключ в downloads — platform_id.
  2. Подписка в приложении. Для каждого приложения в 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-адреса.