Telegram Stars (XTR) — это внутренняя валюта Telegram, через которую боты и Mini Apps продают цифровые товары и подписки без подключения внешних эквайеров. С 2024 года это единственный способ официально монетизировать цифровой контент в Telegram, и в 2026 году Stars стал зрелой инфраструктурой: с возвратами, подписками, чеками и понятным выводом средств.
Ниже — полный разбор: как принимать Stars, как считать экономику с учётом комиссии Apple/Google и доли Telegram, как реализовать подписку, рефанды и связку с CRM, и какие ошибки чаще всего ловят разработчики на проде.
Что такое Telegram Stars и зачем они нужны
Stars — это аналог внутриигровой валюты на уровне всего мессенджера. Пользователь покупает Stars через App Store, Google Play или Fragment, а внутри ботов и Mini Apps тратит их на цифровые товары: подписку, доступ к каналу, разблокировку фичи в Mini App, виртуальные предметы.
Для разработчика плюсы простые: нет KYC по 115-ФЗ, нет договора с эквайером, нет PCI DSS, нет необходимости держать СБП-шлюз. Минус один — комиссия. Apple/Google забирают 30% при покупке Stars, Telegram оставляет себе ~30% от того, что дошло до бота, плюс комиссия за конвертацию в TON или фиат при выводе. На круг разработчик получает 50–55% от цены, которую заплатил пользователь.
Когда Stars подходят, а когда нет
Stars обязательны для любых цифровых товаров внутри Telegram: подписка на закрытый канал, премиум-функции в Mini App, доступ к курсу, виртуальные подарки. Использовать СБП или карты для этих случаев нельзя — Telegram заблокирует бота при жалобе.
Для физических товаров и услуг вне Telegram (доставка пиццы, запись в салон, билеты на офлайн-мероприятие) Stars наоборот не подходят: нужна обычная касса по 54-ФЗ, СБП, карты. Здесь работает классический sendInvoice с провайдером ЮKassa или CloudPayments.
sendInvoice со Stars: минимальный пример
В Bot API для Stars используется тот же sendInvoice, но с пустым provider_token и валютой XTR. Цена указывается в Stars (1 Star ≈ $0.013 в розничном эквиваленте, но во внутренних расчётах считаем целыми XTR).
from aiogram import Bot, Router, F
from aiogram.types import Message, LabeledPrice, PreCheckoutQuery
router = Router()
@router.message(F.text == "/buy_pro")
async def buy_pro(message: Message, bot: Bot):
await bot.send_invoice(
chat_id=message.chat.id,
title="PRO-доступ на 30 дней",
description="Безлимитные генерации, приоритетная очередь, экспорт в PDF.",
payload=f"pro_30d:{message.from_user.id}",
provider_token="", # для Stars — пусто
currency="XTR",
prices=[LabeledPrice(label="PRO 30 дней", amount=250)], # 250 Stars
)
payload — это ваш внутренний идентификатор заказа, он вернётся в successful_payment без изменений. Никогда не кладите туда секреты — он виден в логах Telegram.
Обработка pre_checkout и successful_payment
Telegram перед списанием Stars присылает pre_checkout_query: у вас есть 10 секунд, чтобы подтвердить или отклонить покупку (например, если товар уже распродан).
@router.pre_checkout_query()
async def precheckout(query: PreCheckoutQuery, bot: Bot):
order_id = query.invoice_payload
if not await orders.is_available(order_id):
await bot.answer_pre_checkout_query(
query.id,
ok=False,
error_message="К сожалению, товар закончился. Stars не списаны."
)
return
await bot.answer_pre_checkout_query(query.id, ok=True)
@router.message(F.successful_payment)
async def on_paid(message: Message):
sp = message.successful_payment
await orders.mark_paid(
payload=sp.invoice_payload,
charge_id=sp.telegram_payment_charge_id,
amount_xtr=sp.total_amount,
)
await message.answer("Готово! PRO активирован на 30 дней.")
telegram_payment_charge_id — это идентификатор, по которому потом делается рефанд. Сохраните его в БД рядом с заказом, без него возврат невозможен.
Подписки в Stars
С весны 2025 в Bot API появились Star subscriptions — рекуррентные списания каждые 30 дней без участия пользователя. Включаются параметром subscription_period: 2592000 в createInvoiceLink.
link = await bot.create_invoice_link(
title="PRO-подписка",
description="Доступ к расширенным функциям, 30 дней.",
payload="sub_pro",
currency="XTR",
prices=[LabeledPrice(label="PRO", amount=250)],
subscription_period=2592000,
)
Telegram сам списывает Stars каждые 30 дней. Если у пользователя не хватает Stars, подписка ставится на паузу, и вам прилетит апдейт chat_member с новым статусом или событие в successful_payment после пополнения.
| Тип продажи | Метод | provider_token | currency |
|---|---|---|---|
| Разовая покупка цифрового товара | sendInvoice | пусто | XTR |
| Подписка на 30 дней | createInvoiceLink + subscription_period | пусто | XTR |
| Физический товар | sendInvoice | токен ЮKassa | RUB |
| Услуга вне Telegram | sendInvoice | токен CloudPayments | RUB |
Возвраты: refundStarPayment
Возвращать Stars умеет любой бот, продавший товар. Метод — refundStarPayment, нужны user_id и telegram_payment_charge_id.
await bot.refund_star_payment(
user_id=user_id,
telegram_payment_charge_id=charge_id,
)
Stars вернутся пользователю мгновенно, у бота списываются с баланса. Возврат возможен в течение 21 дня — после этого срока Telegram уже выплатил вам средства, и вернуть их через API нельзя (только вручную через поддержку).
Экономика: сколько реально получит разработчик
Допустим, продаёте PRO-доступ за 250 Stars (≈ 350 ₽ в App Store на iOS, ≈ 320 ₽ в Google Play на Android, ≈ 290 ₽ через Fragment).
| Канал покупки | Цена для юзера | Apple/Google | Telegram | Вам на баланс | % от цены |
|---|---|---|---|---|---|
| iOS App Store | 350 ₽ | 105 ₽ (30%) | ~75 ₽ | ~170 ₽ | 48% |
| Google Play | 320 ₽ | 96 ₽ (30%) | ~70 ₽ | ~155 ₽ | 48% |
| Fragment (TON) | 290 ₽ | 0 ₽ | ~85 ₽ | ~205 ₽ | 70% |
Поэтому в боте полезно мягко подсказывать пользователям пополнять Stars через Fragment — там нет налога Apple/Google.
Вывод средств: TON или фиат
Stars выводятся:
- В TON через бота
@BotFather→/mybots → Payments → Withdraw Stars. Минимум 1000 Stars, комиссия сети TON (~0.1 TON), приходит на ваш кошелёк за 1–5 минут. - В фиат через Fragment по реквизитам юрлица/ИП. Доступно не во всех юрисдикциях, для РФ требуется иностранный счёт или счёт ИП в ОАЭ/Армении.
Большинство студий выводит в TON, а потом продаёт за рубли через P2P-биржи или OTC. Учтите валютный контроль и налог на доход.
Связка Stars с CRM и аналитикой
Каждый successful_payment отправляйте в очередь и оттуда в CRM (Bitrix24, amoCRM) и в аналитику. Минимальный payload:
async def on_paid(message: Message):
sp = message.successful_payment
await event_bus.publish("payment.success", {
"user_id": message.from_user.id,
"username": message.from_user.username,
"amount_xtr": sp.total_amount,
"charge_id": sp.telegram_payment_charge_id,
"payload": sp.invoice_payload,
"ts": int(time.time()),
})
В Yandex.Metrika из Mini App отправляйте цель purchase с goal_id через tgWebApp.sendData или прямой вызов ym(counterId, "reachGoal", "purchase", { value_xtr: 250 }). Так вы увидите ROI рекламы в Telegram Ads с точностью до объявления.
Топ-7 ошибок при работе со Stars
- Не проверяют
pre_checkout_queryи продают уже распроданный товар. - Кладут JWT или email в
payload— он логируется на стороне Telegram. - Не сохраняют
telegram_payment_charge_idи не могут сделать рефанд. - Используют Stars для физических товаров — получают блокировку бота.
- Забывают, что цена в
prices— это целые Stars, не дробные. - Не обрабатывают повторный
successful_payment(идемпотентность поcharge_id). - Считают, что 100 Stars = 100 ₽; реальный курс плавает в зависимости от канала покупки.
Итого
Telegram Stars в 2026 — рабочий и предсказуемый канал монетизации цифровых продуктов внутри Telegram. На круг разработчик получает 48–70% от цены покупки в зависимости от того, через что пользователь пополнил баланс. Главное — корректно обрабатывать pre-checkout, хранить charge_id для рефандов, грамотно нарезать тарифы и не пытаться продавать через Stars то, что Telegram считает услугами вне платформы.
Частые вопросы
Можно ли принимать Stars и рубли в одном боте?
Да, и это рекомендуемая схема. Stars — для цифровых товаров и подписок внутри Telegram, рубли через ЮKassa или CloudPayments — для услуг и физических товаров. В одном боте могут жить два разных sendInvoice: один с currency="XTR" и пустым provider_token, второй с currency="RUB" и реальным токеном эквайера. Главное — корректно различать их в successful_payment по payload и не путать в аналитике.
Что выгоднее: Stars или прямой эквайринг?
Зависит от среднего чека и аудитории. Для микроплатежей (50–500 ₽) и подписок Stars выгоднее: нет фикс-комиссии, мгновенное списание, нет необходимости в кассе и фискализации. Для крупных покупок (от 3000 ₽) выгоднее СБП через ЮKassa: комиссия 0.4–0.7% против эффективных 30–52% у Stars. Для смешанной модели — берите оба.
Как часто Telegram выплачивает Stars?
Заработанные Stars становятся доступны к выводу через 21 день после получения — это окно для рефандов. После этого вы видите их в @BotFather → Payments и можете вывести в TON в любой момент. Минимум для вывода — 1000 Stars. Комиссия сети TON около 0.1 TON, идёт за счёт получателя.
Можно ли вернуть Stars после 21 дня?
Через refundStarPayment — нет, метод вернёт ошибку PAYMENT_REFUND_EXPIRED. После 21 дня средства уже выплачены вам, и единственный путь — связаться с поддержкой Telegram через @BotSupport и согласовать ручной возврат. Поэтому полезно держать SLA по обработке жалоб в пределах двух недель.
Нужна ли касса по 54-ФЗ при продаже за Stars?
Если конечный получатель — ИП или ООО на территории РФ и пользователь — резидент, налоговая трактует это как доход и требует фискализации. На практике многие студии выводят Stars на иностранную юрисдикцию (ОАЭ, Армения, Кипр) и платят налог там. Если работаете через российское ИП — ставьте онлайн-кассу через АТОЛ или Бизнес.Ру и пробивайте чеки на каждую успешную транзакцию.
Как реализовать пробный период в подписке Stars?
В API Stars нет нативного trial. Реализуется на стороне бота: первые 7 дней просто выдаёте PRO-статус, на 7-й день присылаете createInvoiceLink с подпиской на 30 дней. Если пользователь не оплатил — возвращаете free-тариф. Альтернатива — продать первый период за 1 Star (≈1.5 ₽) и потом продлевать по полной цене, но Telegram может пометить это как манипуляцию.
Можно ли подарить Stars другому пользователю через бота?
Да, метод sendGift доступен с конца 2024 года. Бот может купить и отправить пользователю стандартный подарок из каталога Telegram за свои Stars. Это удобно для реферальных программ и розыгрышей: вместо промокода даёте подарок на 50 Stars. Учтите, что подарки тоже считаются расходом баланса бота.