Platform GuidesHow to Schedule Bluesky Posts via API

How to Schedule Bluesky Posts via API

Schedule Bluesky posts programmatically with the SocialRails API. Covers character limits, AT Protocol details, media support, rate limits, and code examples for automated Bluesky posting.

Schedule Bluesky posts programmatically using the SocialRails API. This guide covers character limits, AT Protocol details, media support, code examples, and best practices for automated Bluesky posting.

Character Limits

  • Posts: 300 characters (counted as grapheme clusters, not bytes)
  • Alt text: 2,000 characters per image
  • Display name: 64 characters
  • Bio: 256 characters

Supported Content Types

TypeSupportedNotes
Text postsYesUp to 300 characters (grapheme clusters)
ImagesYesUp to 4 images per post (JPEG, PNG)
VideosYesUp to 60 seconds
LinksYesAuto-detected and rendered as link cards
GIFsNoNo native GIF support on Bluesky

API Example

# Schedule a Bluesky post
curl -X POST https://socialrails.com/api/v1/posts \
  -H "Authorization: Bearer sr_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "Just shipped a new feature! Check out our API docs at socialrails.com/documentation",
    "platform": "bluesky",
    "scheduled_for": "2026-03-15T14:00:00Z"
  }'
# Schedule a Bluesky post with images
curl -X POST https://socialrails.com/api/v1/media/upload \
  -H "Authorization: Bearer sr_live_YOUR_KEY" \
  -F "file=@screenshot.png"
 
curl -X POST https://socialrails.com/api/v1/posts \
  -H "Authorization: Bearer sr_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "Here is a sneak peek at the new dashboard",
    "platform": "bluesky",
    "media": ["MEDIA_KEY_FROM_UPLOAD"],
    "scheduled_for": "2026-03-15T14:00:00Z"
  }'

AT Protocol Notes

Bluesky is built on the AT Protocol (Authenticated Transfer Protocol), a decentralized social networking protocol. Here is what you need to know:

  • SocialRails handles all protocol details: You don't need to understand the AT Protocol to post via the SocialRails API. Simply set the platform to "bluesky" and SocialRails handles record creation, blob uploads, and facet detection.
  • No special platform_settings required: Unlike some platforms, Bluesky does not require additional platform-specific configuration. Standard post fields (content, media, scheduled_for) work out of the box.
  • Link detection: URLs, mentions (@handle.bsky.social), and hashtags in your content are automatically detected and converted to AT Protocol facets.
  • Decentralized identity: Your Bluesky handle is a domain-based identifier. SocialRails manages authentication and token refresh automatically.

Best Practices

  • Engage with replies: Bluesky's algorithm favors conversational posts, reply to comments to boost visibility
  • Alt text: Always include alt text on images for accessibility, Bluesky's community values this highly
  • Quote posts: Use quote posts for engagement, they perform well on the platform
  • Optimal posting times: Still developing as the platform grows, experiment with your audience
  • Concise content: With a 300-character limit, every word counts, make posts punchy and clear
  • Be an early adopter, growing platforms reward consistent posters with higher visibility

Rate Limits

AT Protocol rate limits apply in addition to SocialRails rate limits:

  • 1,667 posts per day (creates)
  • 11,667 actions per hour (creates)
  • Blob uploads: 1,000 per day

SocialRails handles these limits automatically and will retry failed posts.

Frequently Asked Questions

What is the character limit for Bluesky posts?
Bluesky posts are limited to 300 characters. Characters are counted as grapheme clusters, not bytes, so emoji and special characters count as single characters. Alt text on images can be up to 2,000 characters.
Can I upload images to Bluesky via API?
Yes. You can attach up to 4 images per Bluesky post. Upload images first via the /api/v1/media/upload endpoint, then include the media keys when creating your post. SocialRails handles the AT Protocol blob upload process automatically.
What is the AT Protocol and do I need to understand it?
The AT Protocol (Authenticated Transfer Protocol) is the decentralized protocol that powers Bluesky. You do not need to understand it to use the SocialRails API. SocialRails handles all protocol details including record creation, blob uploads, and facet detection for links and mentions.
Does Bluesky support threading via API?
Yes. You can create threads on Bluesky using the thread array field, the same way you would on Twitter. Each item in the thread array becomes a separate post, published as replies in sequence. See the Threading API reference for details.