InvalidRequest (400)
The post record or one of its blob references failed AT Protocol validation.
Fix: Check the record schema, text length, media type, file size, and referenced blob metadata.
Bluesky supports up to four images or one MP4 video, but images and video cannot be mixed. The API records each image’s aspect ratio. PublishQ automatically resizes very high-resolution images to fit.
Updated July 2026
Recommended sizes
Use these sizes when you need a sensible default. The tables below cover the limits enforced by the API.
Landscape image
1200×675 (16:9)
A good feed image size; Bluesky records the actual aspect ratio.
Large images
Any resolution
PublishQ automatically resizes very high-resolution images to fit.
Video
MP4, up to 3 minutes
A post can contain one video and no images.
API limits
Check these values in your upload validator or before an agent submits a post.
AT Protocol image attachment constraints.
Bluesky video and post-copy constraints.
Common publishing errors
Find the returned code or the closest matching failure below, then fix the cause before retrying the post.
The post record or one of its blob references failed AT Protocol validation.
Fix: Check the record schema, text length, media type, file size, and referenced blob metadata.
The optional swapCommit value does not match the repository’s current commit.
Fix: Read the latest repository state and retry with its current commit CID, or omit swapCommit.
The Bluesky access token has expired or is no longer valid.
Fix: Refresh the session or reconnect the account before publishing again.
The personal data server has rejected requests above its current rate limit.
Fix: Honor Retry-After when present and retry with randomized exponential backoff.
The post or one item in a thread exceeds Bluesky’s 300-character limit.
Fix: Shorten each post separately. Every thread item has its own 300-character allowance.
The handle or app password is invalid, expired, or has been revoked.
Fix: Create a new Bluesky app password and reconnect the account. Do not use the account’s main password.
An uploaded image or video blob is larger than the personal data server accepts.
Fix: Compress the media to Bluesky’s current byte limit, upload it again, and create a new post record.
Send PublishQ the post. We check it, prepare the media, and deliver it to Bluesky. You can work in the dashboard or connect through the API, CLI, or MCP server.
Common questions about Bluesky media sizes and API publishing limits.
Bluesky records image aspect ratios automatically. 1200×675 works well for landscape images. PublishQ automatically resizes very high-resolution images before upload.
A Bluesky post can contain up to four JPEG, PNG, or WebP images. Images cannot be mixed with video in the same post.
Agents can send Bluesky posts through the PublishQ API or MCP server. PublishQ writes the rich-text facets, prepares the media, and delivers the post.
Complete reference for Bluesky API limits — 300 character posts, 2 MB images, 100 MB / 3 min videos, 5,000 points/hour rate limits. All from official sources.
API reference for Bluesky API.
See exactly how your posts will look on Twitter, Instagram, LinkedIn, TikTok, and more before you publish. No signup required.
Preview how your post looks on each platform, customize the text per account if needed, then publish or schedule to all of them at once.
Write different text for each platform in a single post. Shorten for Twitter, go long on LinkedIn, add hashtags for Instagram — without creating separate posts.
Schedule posts, manage accounts, and upload media programmatically. Build your own integrations, automate workflows, or connect PublishQ to your existing tools.
Schedule posts to Bluesky with text, images, and video. Connect with your app password — no OAuth headaches.