Skip to content

Subscription Verification

Get Subscription Levels

levels = await client.subscriptions.get_levels("my_blog")
for level in levels:
    print(f"{level.name}: {level.price} {level.currency} (free={level.is_free})")

Verify a User's Subscription

status = await client.subscriptions.verify_subscription("my_blog", "user_id")

if status.is_subscribed:
    print(f"Level: {status.level.name}")
    print(f"Paid: {status.is_paid}")
    print(f"Price: {status.price} {status.currency}")
else:
    print("Not subscribed")

SubscriptionStatus Fields

Field Type Description
is_subscribed bool Whether the user has an active subscription
level SubscriptionLevel \| None The subscription level (if subscribed)
expires_at datetime \| None When the subscription expires
is_paid bool Whether this is a paid (non-free) subscription
price int \| None Level price
currency str \| None Price currency

List Subscribers

# All subscribers
data = await client.subscriptions.get_subscribers("my_blog", limit=50)

# Filter by level
data = await client.subscriptions.get_subscribers("my_blog", level_id=123)

Async Iterator

async for subscriber in client.subscriptions.iter_subscribers("my_blog"):
    print(subscriber)

Integration Example: Telegram Bot

from aiogram import Router
from aiogram.filters import Command
from boostylib import BoostyClient

router = Router()
boosty = BoostyClient(access_token="...")

@router.message(Command("check"))
async def check_sub(message):
    boosty_id = await db.get_boosty_id(message.from_user.id)
    if not boosty_id:
        await message.answer("Link your Boosty account first: /link")
        return

    status = await boosty.subscriptions.verify_subscription("my_blog", boosty_id)
    if status.is_subscribed and status.is_paid:
        await message.answer(f"Active: {status.level.name}")
    else:
        await message.answer("No active subscription")