Threads
Mutation
Use the scheduleThreadsPost
mutation to schedule posts to Threads:
mutation ScheduleThreadsPost($input: ScheduleThreadsPostInput!) {
scheduleThreadsPost(input: $input) {
success
errors {
field
message
}
post {
id
socialAccount {
id
username
}
publishingStatus
submissions {
id
text
order
postAt
gallery {
id
media {
id
url
type
}
}
}
}
}
}
Input Parameters
ScheduleThreadsPostInput
EVERYONE
, MENTIONED_USERS
, FOLLOWING
READY_TO_PUBLISH
, DRAFT
(default: READY_TO_PUBLISH
)ThreadsPostSubmissionInputType
Each post in the thread supports these parameters:
hour
, day
hour
, day
Examples
Simple Post
Schedule a basic post with text only.
{
"input": {
"username": "myhandle",
"postAt": "2025-12-01T15:30:00Z",
"thread": [
{
"text": "Hello Threads! This is my first scheduled post ๐งต",
"order": 0
}
]
}
}
Post with Media URL
Schedule a post by uploading media from an external URL. Use this when you have a direct link to an image, video, or GIF that you want to attach. The media will be automatically downloaded and added to your Content Library.
{
"input": {
"username": "myhandle",
"postAt": "2025-12-01T15:30:00Z",
"thread": [
{
"text": "Check out this amazing sunset! ๐
",
"order": 0,
"mediaUrl": "https://picsum.photos/seed/socialmedia/900/1600"
}
]
}
}
Post with Content Library Media
Schedule a post using media already in your Content Library. Use this when you want to reuse media you've previously uploaded. The search is case-insensitive and will use the first matching file based on its name.
{
"input": {
"username": "myhandle",
"postAt": "2025-12-01T15:30:00Z",
"thread": [
{
"text": "Sharing our company logo! ๐ข",
"order": 0,
"mediaName": "company-logo.png"
}
]
}
}
Thread with Multiple Posts
Schedule a multi-post thread.
{
"input": {
"username": "myhandle",
"postAt": "2025-12-01T15:30:00Z",
"replySettings": "FOLLOWING",
"thread": [
{
"text": "๐งต Thread about building great APIs (1/3)",
"order": 0
},
{
"text": "First, always design your API with the developer experience in mind. Clear documentation and consistent patterns make all the difference.",
"order": 1
},
{
"text": "Second, implement proper error handling and rate limiting. Your API consumers will thank you when things go wrong (and they will).",
"order": 2,
"final": true
}
]
}
}
Post with Poll
Schedule a post with an interactive poll.
{
"input": {
"username": "myhandle",
"postAt": "2025-12-01T15:30:00Z",
"thread": [
{
"text": "What's your favorite programming language? ๐ป",
"order": 0,
"poll": {
"choices": ["JavaScript", "Python", "Go", "Rust"],
"durationMinutes": 1440
}
}
]
}
}
Auto-Repost Configuration
Schedule a post with automatic reposting.
{
"input": {
"username": "myhandle",
"postAt": "2025-12-01T15:30:00Z",
"thread": [
{
"text": "Don't miss our latest blog post about API best practices! ๐",
"order": 0,
"repostAtAmount": 2,
"repostAtUnit": "hour",
"repostRepeatDays": 3,
"repostFromSocialAccount": {
"username": "mycompany"
}
}
]
}
}
Multiple Media Attachments
Schedule a post with multiple images or videos (up to 20 media files per post).
{
"input": {
"username": "myhandle",
"postAt": "2025-12-01T15:30:00Z",
"thread": [
{
"text": "Here's a collection of our best product shots! ๐ธ",
"order": 0,
"gallery": {
"galleryMediaSet": [
{
"order": 0,
"media": {
"id": "MEDIA_ID_1"
}
},
{
"order": 1,
"media": {
"id": "MEDIA_ID_2"
}
},
{
"order": 2,
"media": {
"id": "MEDIA_ID_3"
}
}
]
}
}
]
}
}
Response Types
Success Response
{
"data": {
"scheduleThreadsPost": {
"success": true,
"errors": [],
"post": {
"id": "123",
"socialAccount": {
"id": "456",
"username": "myhandle"
},
"publishingStatus": "READY_TO_PUBLISH",
"submissions": [
{
"id": "789",
"text": "Hello Threads! This is my first scheduled post ๐งต",
"order": 0,
"postAt": "2025-12-01T15:30:00Z",
"gallery": null,
"poll": null
}
]
}
}
}
}
Error Response
{
"data": {
"scheduleThreadsPost": {
"success": false,
"errors": [
{
"field": "text",
"message": "You cannot schedule a post longer than 500 characters."
}
],
"post": null
}
}
}
Validation Rules
- Text Length: Maximum 500 characters per post
- Media: Maximum 20 images/videos per post
- Image Size: Maximum 8MB per image
- GIF Size: Maximum 15MB per GIF
- Video Size: Maximum 1GB per video file
- Video Duration: Maximum 300 seconds (5 minutes) per video
- Polls: 2-4 options, each max 25 characters. Cannot be combined with media attachments.
- 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 maximum length of 500 characters. Consider breaking it into multiple posts in a thread.
The postAt
timestamp must be in the future. Check your timezone settings.
Threads doesn't allow polls on posts with images, videos, or GIFs. Choose either media or a poll.
You can attach a maximum of 20 media files per post. Remove some media or split into multiple posts.
Media files exceed size limits: 8MB for images, 15MB for GIFs, 1GB for videos. Compress your files or use smaller versions.
Videos cannot be longer than 5 minutes (300 seconds). Trim your video to fit within the duration limit.
You've reached your plan's post limit for the scheduled month. Upgrade your plan or schedule for a different month.