At a glance
Capabilities
Connecting
Bluesky does not use OAuth. There is no authorization URL and no code exchange. You create an app password in your Bluesky account settings and pass your handle and the app password inmetadata:
Creating an app password
- Sign in to Bluesky in a browser and open Settings > App passwords.
- Click Add app password and give it a name, for example
socialapi. - If you want SocialAPI to read and send direct messages, tick Allow access to your direct messages before creating the password. This option can only be set at creation time: it cannot be added to an app password after the fact. If you skip it and later want DM access, you must create a second app password with the option enabled and reconnect with it.
- Bluesky shows the password once. Copy it and paste it as
metadata.app_passwordin the connect request above.
Two-factor accounts
If your account has email-based two-factor authentication enabled, the first sign-in attempt returnsplatform.bluesky.auth_factor_required and Bluesky emails you a confirmation code. Retry the connect request with that code as metadata.auth_factor_token.
Direct messages
DMs work only with an app password created with the direct messages option enabled. SocialAPI probes for that flag when you connect and remembers the answer. If the app password does not carry DM access, every DM call returns403 with platform.bluesky.dm_scope_missing rather than an opaque 401 from Bluesky:
Disconnecting
Disconnecting a Bluesky account through SocialAPI removes the stored credential from SocialAPI’s database, but it does not revoke the app password on Bluesky’s side: the AT Protocol has no app-password revocation API. To fully cut off access, delete the app password yourself in Settings > App passwords on Bluesky.Known limitations
- Posts cannot be edited after publishing. The AT Protocol has no update operation for a post record. To change a post, delete it and create a new one.
- Comment threads come back flattened. Bluesky’s thread endpoint returns a tree with no pagination cursor, so SocialAPI flattens it into a single list rather than paging through it. Very large threads may be truncated.
- You can hide a reply but not delete it. Hiding a reply to one of your posts updates your post’s moderation settings so the reply no longer shows by default. There is no way to delete a reply that another account posted; only that account can delete its own reply.
- No real-time webhooks. Bluesky does not push events to SocialAPI. Poll the inbox and post endpoints for new comments, mentions, and messages.
- Typing @handle in a post does not create a real mention. SocialAPI auto-detects links and hashtags in post text, but not mentions. An @handle in your post text publishes as plain text rather than a linked mention, so the mentioned account is not notified.