Bluesky

One of the cleanest fits for UniPost: short-form text, image and video support, and multi-post threading all map cleanly into the standard publish model.

Short-form text with images, video, and native threads.

At a glance

Publishing
Supported
Scheduling
Supported
Analytics
Limited
Inbox
Not supported
Connection
Handle + app password — no OAuth

Feature matrix

FeatureSupportNotes
Text postsUp to 300 graphemes
Image postsUp to 4 images
Video postsExactly 1 video
ThreadsUse thread_position
SchedulingUse scheduled_at
Text-only postsMedia is optional
First commentXUse threads instead
Inbox / DMsXNot part of the UniPost inbox today

Known constraints

LimitationWhy
Daily safety cap50 publishes/day per connected Bluesky account (UTC reset). Failed posts do not count toward the cap.
No OAuthAuthentication is via app password — generate one in Bluesky settings
Engagement only in analyticsBluesky API does not expose impressions, reach, or views
No inbox surfaceReplies are not synced into UniPost inbox today

Publishing

Ready to publish?Use the shared Publishing guide for hosted URLs, local file uploads, preflight validation, and async publish status. Then use the Bluesky examples below for platform-specific payload shape.

Publish examples by surface

Each example calls POST/v1/posts with Bearer auth. Swap the account_ids for your own, then copy the snippet for your language.

Text post

Image post

Thread

Media & field requirements

FieldRequiredLimitsNotes
captionOptional300 graphemesValidate catches overages before publish
media_urls or media_idsOptional1-4 images OR 1 videoUse media_urls for hosted assets or media_ids for local files uploaded via POST/v1/media. Do not mix image and video.
thread_positionOptional1-indexedPreferred way to create multi-post flows
first_commentRejectedn/aUse thread_position instead

Hosted URLs: pass the public URL in media_urls. Local files: reserve an upload with POST/v1/media, PUT the bytes to the returned upload_url, then publish with media_ids. Full flow in the Publishing guide.

Media specifications

Per-surface limits for text, images, and video. These are the source of truth UniPost uses for preflight validation and media optimization — treat hard-limit values as enforced and "recommended" values as platform guidance.

Post

Bluesky is grapheme-counted (not UTF-16 code units). URLs and mentions consume the 300-grapheme budget.

TypeRequirementValue
TextCharacter limit300 graphemes (hard limit)
TextPer thread entry300 graphemes each
ImageFormatsJPEG, PNG, WebP
ImageMax per post4
ImageMax file size~1 MB per image after server compression (strict)
ImageMax dimensions2,000 × 2,000 px
ImageAspect ratioAny; 16:9 (1,200 × 675), 1:1, 4:5 common
VideoFormatsMP4, MOV (H.264 + AAC)
VideoMax per post1
VideoMax file size50 MB
VideoMax duration60 sec
VideoMax dimensions1,920 × 1,080 px
VideoAspect ratio16:9 or 1:1 recommended
VideoFrame rate30 fps recommended
VideoAudioAAC

Analytics

MetricSupportNotes
LikesSupported
Comments / repliesSupported
Shares / repostsSupported
ImpressionsXNot exposed by Bluesky
ReachXNot exposed by Bluesky
SavesXNot exposed by Bluesky
Video viewsXNot exposed by Bluesky

Connection modes

Pick the setup that matches how the account is owned. Quickstart is fastest when you publish to your own accounts; White-label is required when your customers bring their own accounts through a branded flow. Full setup details in Quickstart and White-label.

ModeBest forApp / credentialsAvailability
QuickstartPaste Bluesky handle + app password — no OAuthNone requiredFree
CredentialsPaste handle + app password (no OAuth)Bluesky app passwordFree
White-labelNot applicable — Bluesky does not use OAuth apps

Validation errors

CodeWhat it means
caption_too_longCaption exceeds 300 graphemes
first_comment_unsupportedBluesky uses threads instead of first-comment publishing
too_many_mediaMore than 4 images or more than 1 video supplied

Next steps