X/Twitter
Mutation
Use the scheduleTweet
mutation to schedule tweets to X/Twitter:
mutation ScheduleTweet($input: ScheduleTweetInput!) {
scheduleTweet(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
ScheduleTweetInput
EVERYONE
, FOLLOWING
, MENTIONED
READY_TO_PUBLISH
, DRAFT
(default: READY_TO_PUBLISH
)TweetInputType
Each tweet in the thread supports these parameters:
hour
, day
hour
, day
Examples
Simple Tweet
Schedule a basic tweet with text only.
{
"input": {
"username": "myhandle",
"postAt": "2025-12-01T15:30:00Z",
"thread": [
{
"text": "Hello world! This is my first scheduled tweet ๐",
"order": 0
}
]
}
}
Tweet with Media URL
Schedule a tweet 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"
}
]
}
}
Tweet with Content Library Media
Schedule a tweet 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 Tweets
Schedule a multi-tweet 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
}
]
}
}
Tweet with Poll
Schedule a tweet 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-Retweet Configuration
Schedule a tweet with automatic retweeting.
{
"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"
}
}
]
}
}
Community Post
Schedule a tweet to a specific X/Twitter community.
{
"input": {
"username": "myhandle",
"postAt": "2025-12-01T15:30:00Z",
"communityId": "1234567890",
"thread": [
{
"text": "Excited to share this with the developer community! ๐",
"order": 0
}
]
}
}
Response Types
Success Response
{
"data": {
"scheduleTweet": {
"success": true,
"errors": [],
"post": {
"id": "123",
"socialAccount": {
"id": "456",
"username": "myhandle"
},
"publishingStatus": "READY_TO_PUBLISH",
"submissions": [
{
"id": "789",
"text": "Hello world! This is my first scheduled tweet ๐",
"order": 0,
"postAt": "2025-12-01T15:30:00Z",
"gallery": null,
"poll": null
}
]
}
}
}
}
Error Response
{
"data": {
"scheduleTweet": {
"success": false,
"errors": [
{
"field": "text",
"message": "You cannot schedule a Tweet longer than 280 characters."
}
],
"post": null
}
}
}
Validation Rules
- Text Length: 280 characters for regular accounts, 25,000 for verified accounts
- Media: Maximum 4 images/videos per tweet, GIFs limited to 15MB
- Video: Maximum 512MB file size, up to 2 minutes 20 seconds for regular accounts, up to 10 minutes for accounts with long video feature
- Polls: 2-4 options, each max 25 characters, duration 5 minutes to 7 days. 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 tweet limits
Common Errors
The specified username is not connected to your Postpone account. Connect the account in your settings first.
The tweet text exceeds the maximum length. Regular accounts have a 280 character limit, verified accounts can post up to 25,000 characters.
The postAt
timestamp must be in the future. Check your timezone settings.
X/Twitter doesn't allow polls on tweets with images, videos, or GIFs. Choose either media or a poll.
You've reached your plan's tweet limit for the scheduled month. Upgrade your plan or schedule for a different month.