Bluesky API Reference

Post to the AT Protocol network with text, images, video, and GIFs.

Quick reference

authApp Password
text Limit300 characters
max Media4 items
media RuleText is required on every post
max Video Duration60 s
entity SelectionNone
first CommentSupported — 300 chars; thread-target comments supported

Content types

Text

Required. Up to 300 characters.

Images

Up to 4 images. JPEG, PNG, WebP. Max 1 MB each.

Video

MP4 only. Max 100 MB. Up to 60 seconds.

GIF

Animated GIFs supported

Carousel

Not supported

Media requirements

Constraints enforced by Bluesky's API. Requests that violate these limits will be rejected.

ConstraintValue
Max image size1 MB
Max video size100 MB
Image formatsJPEG, PNG, WEBP
Video formatsMP4
Max video duration1 min
Max media items4
GIF supportYes

Platform settings

Bluesky does not have platform-specific settings. Use the standard content, mediaItems, and scheduledFor fields.

Code examples

Basic post

curl -X POST https://schedulala.com/api/v1/posts \
-H "Authorization: Bearer sk_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"content": "Hello Bluesky from the API!",
"platforms": [
{ "platform": "bluesky", "accountId": "acc_bsky" }
],
"publishNow": true
}'

Post with media

curl -X POST https://schedulala.com/api/v1/posts \
-H "Authorization: Bearer sk_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"content": "Photo post on Bluesky",
"platforms": [
{ "platform": "bluesky", "accountId": "acc_bsky" }
],
"mediaItems": [
{ "type": "image", "url": "https://example.com/photo.jpg" }
],
"publishNow": true
}'

Quirks & gotchas

!

Text is required on every post — you cannot post media without text.

!

1 MB image size limit — much smaller than other platforms. Resize images before uploading.

!

Video max: 100 MB. Max duration: 60 seconds.

!

Connected via app password, not OAuth — users enter their Bluesky app password directly.

!

No platform-specific settings — uses standard post fields only.

Related