In 90 seconds you’ll publish to Bluesky from your terminal. Bluesky is the only platform that’s live for everyone today — the others are gated by platform review and ship as approvals clear.Documentation Index
Fetch the complete documentation index at: https://docs.letmepost.dev/llms.txt
Use this file to discover all available pages before exploring further.
1. Get an API key
Sign in at letmepost.dev/dashboard and mint a key from the API keys page. Keys look likelmp_live_… (production) or lmp_test_… (sandbox). Treat them like passwords; the dashboard only shows the secret once.
2. Connect a Bluesky account
Bluesky is the only platform that uses an app password instead of OAuth. Generate one at bsky.app/settings/app-passwords — copy the 19-character password it shows you. Then submit it through the dashboard’s Accounts page (or via the API):connect-bluesky.sh
complete response carries the account id you’ll send posts against. Save it — that’s the value for account.id below.
3. Send a post
id with the account id you got back from the connect flow. The active language tab is sticky — picking TypeScript here will follow you across every code sample on this site.
4. Read the response
A successful immediate publish returns201 Created:
201.json
uri is Bluesky-native and resolves to the post on bsky.app. Save the id — that’s how you’ll fetch the record later via GET /v1/posts/:id.
5. What happens when it fails
Send a 400-character post and you’ll get this back instead:400.json
bluesky.text.max_graphemes) — that’s the canonical link to the preflight rule page explaining what it checks and where the constraint comes from.
This is the contract for every error. Stable code, rule that fired, remediation, request id you can grep. Always. See errors for the full catalog.
Next
Idempotency
Why every retry is safe.
Errors
The eleven codes.
Bluesky platform
Bluesky’s payload, scope set, and rule list.
API reference
POST /v1/posts parameter by parameter.