Working with Posts
Listing Posts
page = await client.posts.list_posts("my_blog", limit=10)
for post in page.data:
print(f"{post.id}: {post.title}")
Filtering
# By subscription level
page = await client.posts.list_posts("my_blog", level_id="premium_id")
# By date range (unix timestamps)
page = await client.posts.list_posts("my_blog", from_ts=1700000000, to_ts=1710000000)
# By tags
page = await client.posts.list_posts("my_blog", tags_ids=["devlog", "update"])
Async Iterator
Getting a Single Post
Creating Posts
Use PostBuilder for a fluent API:
Free Post
from boostylib.builders import PostBuilder
post = (
PostBuilder()
.title("Hello World")
.text("This is a free post for everyone!")
.free()
.build()
)
await client.posts.create_post("my_blog", post)
Post for a Subscription Level
levels = await client.subscriptions.get_levels("my_blog")
premium = next(l for l in levels if l.name == "Premium")
post = (
PostBuilder()
.title("Premium Content")
.text("Only for premium subscribers")
.access_level(level_id=str(premium.id))
.teaser("Subscribe to Premium to see this!")
.build()
)
await client.posts.create_post("my_blog", post)
Post Unlocked by Donation
post = (
PostBuilder()
.title("Donor Exclusive")
.text("Thank you for your support!")
.minimum_donation(amount=500, currency="RUB")
.build()
)
await client.posts.create_post("my_blog", post)
Post with Multiple Content Types
post = (
PostBuilder()
.title("Rich Content Post")
.text("Introduction paragraph")
.image(url="https://example.com/photo.jpg")
.text("More text after the image")
.link(url="https://github.com", title="GitHub")
.file(media_id="uploaded_file_id", filename="archive.zip")
.tags(["devlog", "update"])
.build()
)
Scheduled Post
from datetime import datetime, timezone
post = (
PostBuilder()
.title("Coming Soon")
.text("This will be published later")
.free()
.scheduled_at(datetime(2026, 4, 1, 12, 0, tzinfo=timezone.utc))
.build()
)
Updating a Post
updated_post = (
PostBuilder()
.title("Updated Title")
.text("Updated content")
.free()
.build()
)
await client.posts.update_post("my_blog", "post_id", updated_post)