Bluesky

Post to Bluesky via API — Schedule, Publish, Analyze

Publish text, images, and video to Bluesky via the AT Protocol. Scheduled posting, accessible alt text, cross-posting to all 12 platforms at once.

Get Started FreeNo credit card required

Bluesky API controls

AT Protocol native posting with full alt text support.

Text postspost_type: text

Posts up to 300 characters with full AT Protocol rich text support — mentions, hashtags, and URLs link correctly.

Image postspost_type: image

Attach up to 4 images per post. Images upload to the AT Protocol blob store automatically.

Video postspost_type: video

Native video posts on Bluesky, using the AT Protocol video blob upload flow.

Image alt textbluesky_alt_text

Bluesky strongly encourages alt text on images. Supply bluesky_alt_text and it's embedded in the image blob record.

AT Protocol nativeDecentralized network

CodivUpload speaks AT Protocol directly — no middleman gateway. Your posts go through the Bluesky PDS just like the official app.

API Example

Bluesky image post with alt text

Cross-post to Bluesky alongside other platforms. The bluesky_alt_text field attaches directly to the image blob in the AT Protocol record.

bluesky-post.sh
# Post to Bluesky with image alt text
curl -X POST \
  https://api.codivupload.com/v1/posts \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -d '{
    "profile_name": "my-handle",
    "platforms": ["bluesky"],
    "post_type": "image",
    "description": "Shipped: dark mode is live 🌙",
    "media_urls": ["https://cdn.example.com/dark-mode.png"],
    "bluesky_alt_text": "App screenshot in dark mode with new sidebar"  }'
Setup

Getting Started with Bluesky

Bluesky uses the AT Protocol, a decentralized authentication model that doesn't rely on OAuth. Instead, you connect your account using your Bluesky handle (e.g., yourname.bsky.social) and an app password. App passwords are separate from your main login — they grant limited access to third-party services without exposing your primary credentials.

To generate an app password, open the Bluesky app or web client, go to Settings > App Passwords > Add App Password. Give it a descriptive name like "CodivUpload" and copy the generated password. Then navigate to the Integrations page in your CodivUpload dashboard, click Connect Bluesky, enter your handle and the app password, and save.

CodivUpload authenticates against your Bluesky PDS (Personal Data Server) using the AT Protocol's com.atproto.server.createSession endpoint and maintains the session automatically. If the session expires, CodivUpload re-authenticates transparently before publishing your next scheduled post. Your app password is stored encrypted at rest (AES-256-GCM) and is never exposed in API responses.

This approach means you can revoke CodivUpload's access at any time by deleting the app password from your Bluesky settings — without affecting your main account login or other connected services.

Content Tips

Bluesky Content Tips

Bluesky's 300-character limit is the tightest among major text platforms (Twitter/X allows 280 for free users but up to 25,000 for premium; Threads allows 500). Every word counts. Write your post, then cut it by 20%. The constraint forces clarity — posts that land a single point well outperform those that try to cover multiple ideas.

Decentralized protocol, different dynamics: Bluesky runs on the AT Protocol, which means the network is fundamentally different from corporate-owned platforms. There's no central algorithm deciding what goes viral based on engagement bait. Custom feeds curated by the community replace the algorithmic timeline. This means gaming the algorithm with rage-bait or clickbait doesn't work — content surfaces based on genuine user interest and feed curation choices.

No algorithm gaming: On Bluesky, the most effective strategy is also the simplest — post things that are genuinely useful or interesting to your audience. Share behind-the-scenes progress, technical insights, specific opinions, or useful resources. The community skews toward tech, design, journalism, and academia, so domain expertise carries more weight than polish. A concrete tip about your craft performs better than a vague motivational post.

Authentic engagement matters most: Reply to others' posts with substantive comments. Quote-post to add your perspective rather than just amplifying. Follow the custom feeds relevant to your niche (there are feeds for design, programming, startups, science, and hundreds more) and contribute to those conversations. Bluesky users can tell when someone is broadcasting versus participating — participation builds a following, broadcasting gets ignored.

Images and alt text: The Bluesky community has strong norms around accessibility. Posts with images should always include alt text. CodivUpload's bluesky_alt_text parameter lets you set this programmatically — skipping it is technically possible but culturally frowned upon. Describe the image concretely: what's shown, any text visible, the relevant context.

Posting cadence: Consistency over volume. Two to three posts per week at times when your target audience is active produces better results than daily posting that feels like a content treadmill. CodivUpload's scheduling queue lets you batch-create posts and spread them across the week with precise timestamps.

Scheduled Post

Bluesky via API — scheduled text post

Schedule a text post to Bluesky with a future timestamp. CodivUpload queues it and publishes via the AT Protocol at the exact scheduled time — no manual intervention needed.

bluesky-scheduled.sh
# Schedule a Bluesky text post
curl -X POST \
  https://api.codivupload.com/v1/posts \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -d '{
    "profile_name": "dev-updates",
    "platforms": ["bluesky"],
    "post_type": "text",
    "description": "We just shipped PDF export. 4 clicks: select posts, date range, format, download.",
    "scheduled_date": "2026-04-06T16:00:00Z"  }'

Start posting to Bluesky for free

2 profiles, 10 uploads/mo on the free plan. Upgrade for unlimited.

Get Started Free

Bluesky API questions