X / Twitter
Tweets, threads, character limits, reply settings.
X / Twitter
Posting uses the X API v2 with OAuth 2.0 + PKCE. Postato accepts both twitter and x as the platform value; they normalize to twitter internally.
Post types
postType | What it is |
|---|---|
tweet | Single tweet |
thread | Multiple tweets, each replying to the previous |
Character limits
- Standard account: 280 characters per tweet.
- Premium / Premium+ account: 25,000 characters per tweet.
Postato does NOT auto-split long text. A 400-character text on a standard account fails at delivery. If you need a thread from long copy, split client-side and send as an array content.
Threads
Threads are a single Postato post with array content:
{
"platform": "twitter",
"postType": "thread",
"content": [
{ "text": "Tweet 1" },
{ "text": "Tweet 2" },
{ "text": "Tweet 3" }
]
}Each element becomes one tweet. They post in order. The second reply-to-first, third reply-to-second, and so on.
- Max 25 tweets per thread (X API limit).
- Each tweet gets its own 280/25,000 char budget.
- Media attaches per-element via
content[i].media.
Media
- Max 4 images per tweet OR 1 video OR 1 GIF.
- Image formats: JPEG, PNG, WEBP, GIF. Max 5 MB per image.
- Video: MP4 (H.264 + AAC), 500 MB max, 2 minutes 20 seconds max.
- Alt text supported via
media[i].alt(up to 1,000 characters).
Reply settings
options.reply_settings controls who can reply:
| Value | Who can reply |
|---|---|
everyone (default) | Anyone |
mentionedUsers | Only users you mentioned in the tweet |
following | Only accounts you follow |
subscribers | Premium subscribers only |
{ "options": { "reply_settings": "mentionedUsers" } }Applies to the first tweet of a thread; subsequent tweets inherit.
Quote tweet
Via options.quoteTweetId:
{
"content": "This is spot-on.",
"options": { "quoteTweetId": "1234567890" }
}Polls
Via options.poll:
{
"options": {
"poll": {
"options": ["Yes", "No", "Maybe"],
"duration_minutes": 1440
}
}
}2–4 options, duration 5–10,080 minutes (7 days). Polls can't be combined with media.
Scheduling
Scheduled status works. X API enforces no special upper bound; our 1-year soft limit applies.
Gotchas
- Character counting: URLs count as 23 characters regardless of actual length (X shortens them to
t.co/...). Emoji count as 2. Use a proper counter library (twitter-text) for accuracy before submitting. - Media order: the
media[]array order = display order on X. First item appears prominently. - Rate limits: X's user context limits are tight. App-level caps (300 posts / 3 hours) trip faster than you'd think at scale; use the
Retry-Afterheader when 429 fires. - Circle / Community-only tweets: not supported via API. Don't try
options.circle_id; it's been gone since 2024. - Deletion: Postato can't delete tweets that are already published. Use X directly.