Bluesky API Reference
Post to the AT Protocol network with text, images, video, and GIFs.
Quick reference
| auth | App Password |
| text Limit | 300 characters |
| max Media | 4 items |
| media Rule | Text is required on every post |
| max Video Duration | 60 s |
| entity Selection | None |
| first Comment | Supported — 300 chars; thread-target comments supported |
Content types
Required. Up to 300 characters.
Up to 4 images. JPEG, PNG, WebP. Max 1 MB each.
MP4 only. Max 100 MB. Up to 60 seconds.
Animated GIFs supported
Not supported
Media requirements
Constraints enforced by Bluesky's API. Requests that violate these limits will be rejected.
| Constraint | Value |
|---|---|
| Max image size | 1 MB |
| Max video size | 100 MB |
| Image formats | JPEG, PNG, WEBP |
| Video formats | MP4 |
| Max video duration | 1 min |
| Max media items | 4 |
| GIF support | Yes |
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.