Networks
Bluesky
Publish posts (text + up to 4 images) to Bluesky via the AT Protocol.
Connect
Credential-based — no OAuth. Create an App Password in Bluesky (Settings → App Passwords — not your main password) and connect:
curl -X POST https://api.herald.leiritech.com/v1/accounts/bluesky \
-H "Authorization: Bearer hld_…" -H "Content-Type: application/json" \
-d '{"identifier":"name.bsky.social","app_password":"xxxx-xxxx-xxxx-xxxx"}'
{ "id":"…","network":"bluesky","display_name":"name.bsky.social","status":"active" }
Herald validates via createSession and stores the app password encrypted. It re-auths
on each publish (the session JWT is short-lived; the app password is long-lived).
Publish
curl -X POST https://api.herald.leiritech.com/v1/posts \
-H "Authorization: Bearer hld_…" -H "Content-Type: application/json" \
-d '{"targets":["<bluesky-uuid>"],"text":"hello bsky 🦋","mode":"now"}'
{ "id":"…","status":"published","targets":[{"network":"bluesky","status":"published",
"permalink":"https://bsky.app/profile/name.bsky.social/post/…","platform_post_id":"at://…"}] }
Images (media_ids, up to 4) are uploaded as blobs and embedded.
Rules & gotchas
- No approval or cost — works immediately once connected.
titleis ignored.- Use the handle (e.g.
name.bsky.social) or the account email asidentifier.