The Bluesky API,without AT Protocol work
Publish posts, images, video and threads to Bluesky, with alt text, link cards and clickable links. Read likes, reposts and followers. One API key, and the account signs in with its handle.
Webhooksyour-app.com/hooks
post.scheduledpost 1024just now200
post.publishedpost 10192 h ago200
post.approvedpost 10193 h ago200
POST/v1/posts/createapplication/json
01{
02 "content": "New: Alt text on every image",
03 "accounts": ["bluesky"],
04 "media_urls": [
05 {
06 "url": "https://cdn.example.com/alt-text.png",
07 "alt": "The ALT button on an image in the composer"
08 }
09 ],
10 "schedule_at": "2026-10-22T18:00:00Z"
11}
Sending201 Created412 ms
Send12{
13 "data": {
14 "id": "1024",
15 "status": "scheduled",
16 "app_url": "https://app.omnisocials.com/create-post/1024"
17 }
18}
A request schedules a Bluesky post with an image and its alt text for Thu at 18:00; it appears in the OmniSocials calendar and the webhook post.scheduled fires.
Your coding agent runs the same calls through the CLI
Skip the AT Protocol plumbing
Bluesky has no app review, but posting from your own code still means an OAuth client with DPoP-bound tokens, handle lookups, blob uploads under 2 MB, a separate video service and facets for every link. OmniSocials already built it.
On your own
OAuth clientPDS lookupDPoPToken refreshBlobsVideo jobsThread refsFacetsFirst postOn OmniSocials
Sign inAPI keyPOSTFirst postOAuth, uploads and facets done for youEvery format, one request
Text posts, images, video and threads share one request shape. Add media URLs with their alt text, or a link for a card, and a time. OmniSocials checks the post against Bluesky’s rules before it goes out.
POST/v1/posts/create
01{
02 "content": "New: Alt text on every image",
03 "accounts": ["bluesky"],
04 "media_urls": [
05 {
06 "url": "https://cdn.example.com/alt-text.png",
07 "alt": "The ALT button on an image in the composer"
08 }
09 ],
10 "schedule_at": "2026-10-22T18:00:00Z"
11}
201 Createdstatus: "scheduled"
Text and link cards
300 characters, counted the way Bluesky counts them. A post without media gets a card for its first link.
content
Images and video
Up to 10 images or one video, each with alt text. Images up to 10 MB are compressed to fit Bluesky’s 2 MB limit.
media_urlsalt
Threads
2 to 25 posts in one request, each with its own media or link card, chained as replies.
bluesky.thread_parts
Whole threads in one request
Connect the account with its handle once. Then put 2 to 25 posts in bluesky.thread_parts: OmniSocials chains them as replies, so they read as one thread, each with its own media or link card.
Connect Bluesky
Enter the handle of your account. A custom domain or another server works too.
username.bsky.social
You sign in on Bluesky next.
POST/v1/posts/createapplication/json
01{
02 "content": { "default": "" },
03 "accounts": ["bluesky"],
04 "schedule_at": "2026-10-25T10:00:00Z",
05 "bluesky": {
06 "thread_parts": [
07 { "text": "One request, the whole thread." },
08 { "text": "The docs: https://docs.omnisocials.com/platforms/bluesky" },
09 {
10 "text": "Each post keeps its own media.",
11 "media_urls": ["https://cdn.example.com/thread.png"]
12 }
13 ]
14 }
15}
201 Created388 msstatus: "scheduled"
Sign in with your handle
The account signs in on Bluesky over OAuth, no app password to make. Custom-domain handles and accounts on other servers work too.
2 to 25 posts
Each post holds up to 10 images or one video, with alt text. If publishing stops halfway, the retry picks up where the thread stopped.
bluesky.thread_parts
Cards, links and tags
Links, mentions and hashtags turn clickable, and a post without media gets a card for its first link.
The Bluesky account connects with its handle, then one request schedules a three-post thread that opens in the OmniSocials composer.
Connect with a handle, post from code
Type the account’s handle in OmniSocials once and sign in on Bluesky. Create an API key, and your code posts and reports for that account.
OmniSocials
Name, icon, social channels and who can open this workspace.
GeneralMembersClientsApproval workflowsAPI
Workspace iconJPG or PNG, up to 2 MB.
Workspace nameOmniSocials
Social channels
The accounts this workspace posts to.
Connected
@omnisocials_
Instagram
@omnisocials_
Threads
OmniSocials
LinkedIn Page
@omnisocials_
X
Add a channel
Coming soon




Danger zone
Delete workspace
Deletes this workspace with its posts, media and settings for good. This cannot be undone.
OmniSocials
Name, icon, social channels and who can open this workspace.
GeneralMembersClientsApproval workflowsAPI
API keys
Keys that can only reach this workspace.
| Name | Key | Last used | |
|---|---|---|---|
Claude | omsk_live_••••7c2e | Oct 20, 2026 |
GET/v1/accounts?platform=bluesky
200 OK88 ms
01{
02 "data": [
03 {
04 "id": "4127_bluesky",
05 "platform": "bluesky",
06 "username": "omnisocials.bsky.social",
07 "display_name": "OmniSocials",
08 "content_types": ["post"],
09 "status": "active"
10 }
11 ],
12 "workspace_name": "OmniSocials"
13}
Authorization: Bearer $OMNISOCIALS_API_KEY
Your handle, over OAuth
No app password to create or paste. Custom-domain handles and self-hosted servers work.
A key per workspace
A key only reaches its own workspace. Each workspace connects one Bluesky account.
What the account can post
The accounts call lists the account with its handle and the formats it takes.
GET /v1/accountscontent_types
“I really like this app. I’ve tried quite a few other tools, but none of them managed to hit the sweet spot of simplicity and pricing the way Omnisocials does.”

Jens Schumacher
Co-founder of Released.so
Read what Bluesky reports
Likes, replies, reposts, quotes and bookmarks per post, summed across a thread, and the account’s followers per day. The API returns the same numbers the app charts.
AnalyticsReports
Followers
2864.8%
Engagements
42522.1%
Published Posts
716.7%
Posts7Accounts7
Post | Channels | Impressions | Likes | Comments | Shares | Saves | Eng. rate | |
|---|---|---|---|---|---|---|---|---|
![]() New: Best times to post, worked out from your own posts. Oct 21, 2026 | N/A | 48 | 6 | 11 | 9 | N/A | ||
Building on OmniSocials? Start with the API docs. Oct 20, 2026 | N/A | 21 | 4 | 5 | 6 | N/A | ||
![]() Sidebar update:
1. New Home tab
2. New Drafts tab
Save a post as a draft, find it waiting for you under Drafts. Simple. Oct 20, 2026 | N/A | 37 | 5 | 7 | 4 | N/A | ||
![]() New: Bluesky threads Oct 19, 2026 | N/A | 52 | 9 | 14 | 11 | N/A | ||
![]() New in OmniSocials: Notable Days Oct 19, 2026 | N/A | 29 | 3 | 6 | 5 | N/A | ||
Sign in with any handle, including custom domains. Oct 13, 2026 | N/A | 33 | 7 | 9 | 3 | N/A | ||
![]() New: OmniSocials SDKs in 8 languages Sep 30, 2026 | N/A | 41 | 6 | 10 | 8 | N/A |
GET/v1/analytics/posts/1019
Authorization: Bearer $OMNISOCIALS_API_KEY
200 OK143 ms
01{
02 "data": {
03 "post_id": "1019",
04 "platforms": {
05 "bluesky": {
06 "metrics": {
07 "likes": 48, "comments": 6,
08 "reposts": 11, "quotes": 3,
09 "bookmarks": 9
10 },
11 "thread_parts": 1
12 }
13 }
14 }
15}
Per post and per thread
Likes, replies, reposts, quotes and bookmarks. A thread reports the sum of its posts, and thread_parts says how many.
/analytics/posts/:id
Per account and workspace
A daily snapshot of the account: followers, following and posts. Plus a workspace overview.
/analytics/accounts/analytics/overview
Best times to post
Days and hours worked out from your own Bluesky history, once 15 of your posts are analyzed.
/analytics/best-times
Under the hood
Built for production
Signed webhooks, automatic retries, SDKs in 8 languages and a key per workspace. Create a key and send your first request in minutes.
Bluesky’s rules, in one place
OmniSocials checks every post against them before it reaches Bluesky, so a post that is too long fails in your request, not at publish time.
Text300 characters, an emoji counts as one
MediaUp to 10 images or one video, not both
ImagesUp to 10 MB, compressed under Bluesky’s 2 MB
VideoUp to 10 minutes and 300 MB
Alt text1,500 characters per image or video
Thread2 to 25 posts, each with its own media
Link cardThe first link of a post without media
Rate limit100 requests a minute per API key
AccountsOne Bluesky account per workspace
Your first thread in three steps
About five minutes from sign-up to a scheduled thread on Bluesky. Then hand the key to your coding agent.
Create an API key
Start your trial, open Settings, API and create a key. It is shown once.
Settings › APIStep 1
Connect your account
Type your handle in OmniSocials once and sign in on Bluesky. Then list it from your code.
GET /v1/accountsStep 2
Send your first thread
Put the posts in bluesky.thread_parts and add schedule_at, or publish right away with create-and-publish.
POST /v1/posts/createStep 3
Frequently
Asked Questions
Robert LigthartFounder of OmniSocials
Ship your Bluesky
integration this week.
From $10 per seat a month, API included. 14-day free trial.
https://docs.omnisocials.com








