Platforms / Bluesky
LivePlatform integration
Ship Your Integration
In Minutes, Not Weeks.
No developer-portal queue. No third-party OAuth review. No demo videos. letmepost gives you a single endpoint to publish text, images, video, reply chains, and quote posts. AT Proto handled, graphemes counted, facets resolved, federated PDSes supported.
Live · day-zero platform · read the docs →
{
"targets": [{ "platform": "bluesky" }],
"accountId": "acc_bsky_xyz",
"text": "Hello from letmepost. 300 graphemes safe."
}Why letmepost vs AT Proto direct?
Bluesky Direct
- You write the PDS resolver yourself
- You implement the facet parser for
@handlesand#tags - You handle the graphemes AND bytes dual cap
- You build the video transcoding pipeline
- You manage app-password rotation per account
- You hand-roll federation for custom PDSes
letmepost API
- One endpoint, same shape as all other platforms
- Facets auto-detected and resolved before publish
- 80 preflight rules including grapheme + byte caps
- Video routed through our transcoding service
- App passwords stored encrypted, rotated transparently
- Federation handled per-account
✓ No OAuth review required
AT Proto lets any user create an app password and authenticate with it directly. No third-party OAuth approval, no Meta-style App Review, no demo videos. The API is live the moment your user pastes an app password into our dashboard.
Playground
Connect, configure, post.
Generate an app password in Bluesky → Settings → Privacy & Security → App passwords. Paste into our dashboard. Post immediately.
CONNECT BLUESKY →Content types
Every Bluesky surface, one shape.
How it works
Three steps, under two minutes.
Get your API key
Sign up at dashboard.letmepost.dev. 30 seconds. No credit card. Free tier covers 50 posts/mo across all platforms.
Connect a Bluesky account
Paste an app password from your Bluesky settings. No OAuth dance, no review queue, no app submission. Stored AES-256-GCM encrypted at rest.
Send a post
One POST /v1/posts with platform: "bluesky". We resolve facets, count graphemes + bytes, push to your PDS, fire post.published within 3 seconds.
Features
What we built so you don't.
No review queue
AT Proto needs no developer-portal approval. You connect with an app password and post immediately. Most permissive on-ramp in v1.
Grapheme + byte caps
Bluesky enforces both 300 graphemes AND 3,000 UTF-8 bytes. We check both with Intl.Segmenter, exactly the way AT Proto does.
Facets auto-detected
@handle.bsky.social and #hashtag facets parsed and resolved to DIDs before publish. Unresolvable handles fail loudly.
Custom PDS support
Federation is real on Bluesky. Per-account PDS config. Default is bsky.network. Bring your own PDS, we route correctly.
Code example
post to bluesky · typescript
import { Letmepost } from '@letmepost/sdk'; const lmp = new Letmepost({ apiKey: process.env.LMP_API_KEY }); const result = await lmp.posts.create({ targets: [{ platform: 'bluesky', accountId: 'acc_bsky_xyz' }], text: 'Just shipped a feature with letmepost. 🎉 #buildinpublic', media: [{ type: 'image', url: 'https:x0 alt: 'Receipt-themed landing page', }], }); for (const r of result.targets) { if (r.status === 'published') { console.log('AT URI:', r.url); // at://did:plc:abc.../app.bsky.feed.post/3lqz... } }
Bluesky API error reference
AT Proto error codes mapped to letmepost's stable envelope. Plus the 12 Bluesky-specific preflight rules.
Common questions
about publishing to bluesky
Does Bluesky require OAuth?
No. AT Proto uses app passwords instead of OAuth. Generate one in Bluesky → Settings → Privacy & Security → App passwords. Paste into our dashboard. That's the entire connect flow.
What about Bluesky's grapheme + byte limits?
Both enforced locally. 300 graphemes max, 3,000 UTF-8 bytes max. Whichever caps first wins. A wall of emoji can blow the byte limit before the grapheme limit. Use our grapheme counter to check.
Can I post to a custom Bluesky PDS?
Yes. Per-account PDS config. Default is bsky.network. If your user is on a custom PDS, we route to it correctly.
Does video work on Bluesky?
Yes. Single MP4 per post. Routed through our transcoding service automatically — Bluesky's video upload has format constraints we normalize for you.
Can I create reply chains and quote posts?
Yes. Pass inReplyTo: "at://..." for replies, quote: "at://..." for quote posts. Same as a regular post otherwise.
What does Bluesky cost?
Free for users, free for us, free for you. AT Proto doesn't gate API access. Your only cost is letmepost's flat per-org rate.
One API · 8 platforms
Bluesky is just one of them.
Learn more
Good to know
Notes from the integration.
Generate in Bluesky → Settings → Privacy & Security → App passwords. Paste once, stored encrypted. No OAuth flow.
300 graphemes AND 3,000 UTF-8 bytes. 4 images per post. 976 KB each. Single MP4. All enforced locally before publish.
Per-account PDS. Default is bsky.network. Custom PDSes routed automatically based on the account's DID.
post.published typically fires within 2–3 seconds. Slowest measured is 4.1s during PDS load spikes.
Self-hosters point directly at any PDS (yours or bsky.network). No "BYO app" needed — AT Proto has no OAuth app to register.
READY TO PUBLISH TO BLUESKY?
The platform that needs no review queue. Sign up, paste an app password, send your first post in under two minutes.