Postpone Logo
Scheduling Posts

Threads

Schedule posts and threads with media attachments to Meta's Threads platform

Mutation

Use the scheduleThreadsPost mutation to schedule posts to Threads:

Mutation
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

username
String! required
The username of the connected Threads account to post from
postAt
DateTime! required
When to publish the post (must be in the future)
thread
[ThreadsPostSubmissionInputType!]! required
Array of posts that make up the thread (minimum 1 post)
replySettings
ThreadsReplySettingsType
Who can reply to the post. Options: EVERYONE, MENTIONED_USERS, FOLLOWING
publishingStatus
PublishingStatusType
Publishing status. Options: READY_TO_PUBLISH, DRAFT (default: READY_TO_PUBLISH)
postTags
[ID!]
Array of post tag IDs to organize your content
id
ID
ID of existing post when updating (only for updates)

ThreadsPostSubmissionInputType

Each post in the thread supports these parameters:

text
String! required
The post text content (max 500 characters)
order
Int! required
Position of this post in the thread (0-based)
gallery
GalleryInput
Media attachments (images, videos, GIFs) - max 20 media files per post
poll
PollInputType
Poll configuration (cannot be combined with media)
gifUrl
String
URL of a GIF to attach (cannot be combined with gallery or poll)
mediaName
String
Name of a file from your Content Library (case-insensitive)
mediaUrl
String
URL of media to upload and attach to the post
repostAtAmount
Int
Number of time units before auto-retweeting
repostAtUnit
String
Time unit for auto-repost. Options: hour, day
repostRepeatDays
Int
How many days to repeat the auto-repost (max 365)
repostFromSocialAccount
SocialAccountInputType
Account to repost from (must be connected to your Postpone account)
removeAtAmount
Int
Number of time units before auto-deleting the post
removeAtUnit
String
Time unit for auto-deletion. Options: hour, day
removeMinLikes
Int
Minimum likes required to prevent auto-deletion
final
Boolean
Whether this is the final post in the thread (default: false)
id
ID
ID of existing post when updating (only for updates)

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

The API enforces Threads' content policies and technical limitations:
  • 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