Bluesky
Mutation
Use the scheduleBlueskyPost
mutation to schedule posts to Bluesky:
mutation ScheduleBlueskyPost($input: ScheduleBlueskyPostInput!) {
scheduleBlueskyPost(input: $input) {
success
errors {
field
message
}
post {
id
socialAccount {
id
username
}
publishingStatus
allowRepliesFrom
submissions {
id
text
order
postAt
contentWarning
languages
tags
gallery {
id
media {
id
url
type
}
}
}
}
}
}
Input Parameters
ScheduleBlueskyPostInput
EVERYBODY
, MENTIONED_USERS
, FOLLOWED_USERS
, NOBODY
READY_TO_PUBLISH
, DRAFT
(default: READY_TO_PUBLISH
)BlueskyPostSubmissionInputType
Each post in the thread supports these parameters:
NONE
, SUGGESTIVE
, NUDITY
, PORN
hour
, day
hour
, day
Examples
Simple Post
Schedule a basic post with text only.
{
"input": {
"username": "myhandle.bsky.social",
"postAt": "2025-12-01T15:30:00Z",
"thread": [
{
"text": "Hello Bluesky! This is my first scheduled post 🌤️",
"order": 0,
"contentWarning": "NONE"
}
]
}
}
Post with Media URL
Schedule a post by uploading media from an external URL. The media will be automatically downloaded and added to your Content Library.
{
"input": {
"username": "myhandle.bsky.social",
"postAt": "2025-12-01T15:30:00Z",
"thread": [
{
"text": "Check out this amazing sunset! 🌅",
"order": 0,
"contentWarning": "NONE",
"mediaUrl": "https://picsum.photos/seed/socialmedia/900/1600"
}
]
}
}
Post with Content Library Media
Schedule a post using media already in your Content Library. The search is case-insensitive and will use the first matching file based on its name.
{
"input": {
"username": "myhandle.bsky.social",
"postAt": "2025-12-01T15:30:00Z",
"thread": [
{
"text": "Sharing our company logo! 🏢",
"order": 0,
"contentWarning": "NONE",
"mediaName": "company-logo.png"
}
]
}
}
Thread with Multiple Posts
Schedule a multi-post thread with reply restrictions.
{
"input": {
"username": "myhandle.bsky.social",
"postAt": "2025-12-01T15:30:00Z",
"allowRepliesFrom": "FOLLOWED_USERS",
"thread": [
{
"text": "🧵 Thread about building great APIs (1/3)",
"order": 0,
"contentWarning": "NONE"
},
{
"text": "First, always design your API with the developer experience in mind. Clear documentation and consistent patterns make all the difference.",
"order": 1,
"contentWarning": "NONE"
},
{
"text": "Second, implement proper error handling and rate limiting. Your API consumers will thank you when things go wrong (and they will).",
"order": 2,
"contentWarning": "NONE",
"final": true
}
]
}
}
Post with Content Warning
Schedule a post with appropriate content warning labeling.
{
"input": {
"username": "myhandle.bsky.social",
"postAt": "2025-12-01T15:30:00Z",
"thread": [
{
"text": "Artistic photography from my latest shoot 📸",
"order": 0,
"contentWarning": "SUGGESTIVE",
"mediaUrl": "https://picsum.photos/seed/socialmedia/900/1600"
}
]
}
}
Multi-Language Post
Schedule a post with language tags for better discoverability.
{
"input": {
"username": "myhandle.bsky.social",
"postAt": "2025-12-01T15:30:00Z",
"thread": [
{
"text": "Hello world! / Hola mundo! / Bonjour le monde!",
"order": 0,
"contentWarning": "NONE",
"languages": ["en", "es", "fr"],
"tags": ["multilingual", "greetings"]
}
]
}
}
Auto-Repost Configuration
Schedule a post with automatic reposting.
{
"input": {
"username": "myhandle.bsky.social",
"postAt": "2025-12-01T15:30:00Z",
"thread": [
{
"text": "Don't miss our latest blog post about API best practices! 📖",
"order": 0,
"contentWarning": "NONE",
"repostAtAmount": 2,
"repostAtUnit": "hour",
"repostRepeatDays": 3,
"repostFromSocialAccount": {
"username": "mycompany.bsky.social"
}
}
]
}
}
Response Types
Success Response
{
"data": {
"scheduleBlueskyPost": {
"success": true,
"errors": [],
"post": {
"id": "123",
"socialAccount": {
"id": "456",
"username": "myhandle.bsky.social"
},
"publishingStatus": "READY_TO_PUBLISH",
"allowRepliesFrom": "EVERYBODY",
"submissions": [
{
"id": "789",
"text": "Hello Bluesky! This is my first scheduled post 🌤️",
"order": 0,
"postAt": "2025-12-01T15:30:00Z",
"contentWarning": "NONE",
"languages": [],
"tags": [],
"gallery": null
}
]
}
}
}
}
Error Response
{
"data": {
"scheduleBlueskyPost": {
"success": false,
"errors": [
{
"field": "text",
"message": "Post text cannot exceed 300 characters."
}
],
"post": null
}
}
}
Validation Rules
- Text Length: Maximum 300 characters per post
- Media: Supports images and videos with reasonable file size limits
- Content Warnings: Required field for all posts, use
NONE
for general audiences - Languages: Use standard IETF BCP 47 language codes (e.g.,
en
,es
,fr
) - Threads: No hard limit on thread length
- Scheduling: Posts must be scheduled for future dates only
- Account Limits: Respects your plan's monthly post limits
Common Errors
The specified username is not connected to your Postpone account. Connect the account in your settings first.
The post text exceeds the 300 character limit. Consider breaking long posts into threads.
The postAt
timestamp must be in the future. Check your timezone settings.
The contentWarning
field is required. Use NONE
for general audiences or appropriate labels for adult content.
Language codes must follow IETF BCP 47 standard (e.g., en
for English, es
for Spanish).
You've reached your plan's post limit for the scheduled month. Upgrade your plan or schedule for a different month.