Platforms
Bluesky
Bluesky over the overads API: status, connection, limits, media rules and platformSettings keys.
Status: Live. Posts created over the API deliver to this channel today.
Publishes today. No app review is involved.
Connecting
Two ways, both in the app. An app password: make one in Bluesky and paste it with the handle; it is stored encrypted and can be revoked from Bluesky at any time. Or Sign in with Bluesky: enter the handle, then log in on the account's own PDS and approve overads there (AT Protocol OAuth; the session is refreshed by overads). Sign in with Bluesky renders only on deployments that hold a signing key, and the deployed product does not today, so the app password is the way in. GET /connections does not say which one an account uses.
Once connected the account appears in GET /connections with platform: "bluesky". Use its id in connectionIds.
Limits
| Characters | 300 graphemes. Bluesky counts user-perceived characters, so an emoji or a combined character counts once. |
| API id | bluesky |
- Up to 4 images, or 1 mp4 video up to 100 MB and 3 minutes.
- A post embeds images or a video, never both; a list with both is refused with
MEDIA_UNSUPPORTEDin the flat channel-limit body. - Video goes through Bluesky's video service and is processed before the post is created, so a video post can take a minute to land.
- Links, mentions and hashtags in the text are turned into rich-text facets automatically.
Limits are checked when the post is created or edited, so an over-limit post is refused then with a sentence naming the cap, not at the scheduled minute. These refusals answer 400 with the flat body { statusCode, code, message }, not the { error } envelope: TOO_LONG, TOO_MANY_ITEMS, MEDIA_UNSUPPORTED, MEDIA_REQUIRED, MEDIA_TOO_LARGE (over the channel's video size cap), MEDIA_TOO_LONG (over its duration cap). The full list is under Channel-limit refusals.
Settings
Bluesky has no per-platform settings. A platformSettings.bluesky object is refused with PLATFORM_SETTING_UNKNOWN.
