Bluesky API
Post and schedule on Bluesky through one API
postpeg publishes to Bluesky alongside nine other networks from a single request. Posts go up to 300 characters with up to 4 images, and can be scheduled up to a year ahead.
- Publish
- Schedule
- Bluesky112/300
Scheduled posts now retry on their own when a network has a bad minute. Changelog: https://example.com/changelog
Ready
The example below, checked against Bluesky’s rules
Bluesky is a natural pair with X and Threads: the same short post can go to all three at once, and postpeg checks each network’s own limit before sending, so one long post doesn’t quietly fail on the strictest network.
What you can do on Bluesky
- Publish. Publish to Bluesky now with
POST /v1/posts, alone or in the same request as any of the other networks. More on the Posting API. - Schedule. Schedule up to a year ahead with
scheduled_at, and cancel withDELETE /v1/posts/{id}any time before it goes out. More on the Scheduling API.
Not available on Bluesky: analytics and comments and direct messages. The coverage table shows what each network supports.
Bluesky’s rules, checked before sending
A Bluesky post can have up to 300 characters, counted as people see them (an emoji is one). Media is optional: up to 4 images. postpeg runs these checks on every request, so a post that won’t fit Bluesky is refused with a 400 before anything is published, on any network.
| Max text | 300 characters |
|---|---|
| Media | Optional |
| Images | 4 |
| Videos | None |
| Images and video together | None |
| Required options | None |
| Connects with | App password |
Connecting Bluesky accounts
Bluesky connects differently from the other nine: instead of an OAuth screen, the owner creates an app password in Bluesky (Settings → Privacy and security → App passwords) and you send it with their handle to POST /v1/accounts/bluesky. It’s never their real password.
curl https://api.postpeg.com/v1/accounts/bluesky \
-H "Authorization: Bearer $POSTPEG_KEY" \
-H "Content-Type: application/json" \
-d '{
"profile_id": "prof_mfz0b7q2k9x4c1v8n3m6a0s5d2",
"handle": "acmecoffee.bsky.social",
"app_password": "abcd-efgh-ijkl-mnop"
}'The account comes straight back as active, ready to post to.
If Bluesky ever expires a login, the account turns reconnect_required so you can ask its owner to connect again. More in Profiles and accounts.
Example: a scheduled Bluesky post
One request, with an Idempotency-Key so a retry on your side never posts twice. To post to Bluesky and other networks together, add more ids to account_ids.
curl https://api.postpeg.com/v1/posts \
-H "Authorization: Bearer $POSTPEG_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: bluesky-example-2026-10-01" \
-d '{
"account_ids": [
"acc_mfz21c8w3e6r0t4y2u9i5o1p7a"
],
"content": "Scheduled posts now retry on their own when a network has a bad minute. Changelog: https://example.com/changelog",
"media": [],
"scheduled_at": "2026-10-01T09:00:00Z",
"platform_options": {}
}'{
"id": "post_mfz2k3v8q1w5e9r4t7y0u2i6o3",
"content": "Scheduled posts now retry on their own when a network has a bad minute. Changelog: https://example.com/changelog",
"media": [],
"platform_options": {},
"status": "scheduled",
"scheduled_at": "2026-10-01T09:00:00.000Z",
"targets": [
{
"account_id": "acc_mfz21c8w3e6r0t4y2u9i5o1p7a",
"platform": "bluesky",
"status": "pending",
"platform_post_id": null,
"url": null,
"error": null,
"attempts": 0,
"published_at": null
}
],
"created_at": "2026-09-24T14:02:11.418Z"
}From 09:00 the target moves through queued and publishing to published with the live url, or to failed with the reason in error. Temporary failures are retried, up to 5 attempts with growing waits. See Publishing for every status.
Questions
- How do I schedule a Bluesky post?
- Add
scheduled_at(ISO 8601, up to a year ahead) toPOST /v1/posts. The post waits asscheduledand goes out within a minute of that time.DELETE /v1/posts/{id}cancels it any time before. - What happens if a post breaks Bluesky’s rules?
- postpeg checks the text (up to 300 characters), the media before anything is sent. A post that doesn’t fit comes back as a
400with every problem listed inissues, and nothing is published on any network. - Which Bluesky features does postpeg support?
- Publishing, scheduling. Analytics and comments and direct messages are not available on Bluesky; asking for them returns a
400naming the feature. - Can I post video to Bluesky through postpeg?
- Not today. Bluesky posts through postpeg take text and up to 4 images. A video for a Bluesky account is refused with a
400before anything is sent. - What does a Bluesky app password look like?
- Four groups of four lowercase letters or digits, like
abcd-efgh-ijkl-mnop. postpeg refuses anything else, so an account password can’t be sent by mistake.
Also on the line
The same request publishes to all ten networks. Often paired with Bluesky:
Or see all 10: X, Instagram, Facebook, LinkedIn, TikTok, YouTube, Threads, Pinterest and Google Business, in the platform reference.
Send your first post in a few minutes
The 7-day trial has every feature and 3 connected accounts, with no card. The quickstart takes you from a key to a published post.