Twitter / X
Publish, schedule, and thread posts on X from UniPost. Strongest support today for text, media, and reply chains.
At a glance
Feature matrix
| Feature | Support | Notes |
|---|---|---|
| Text posts | ✓ | Up to 280 characters |
| Image posts | ✓ | Up to 4 images |
| Video posts | ✓ | Exactly 1 video |
| GIF posts | ✓ | Exactly 1 GIF |
| Threads | ✓ | Use thread_position |
| First comment | ✓ | Posted as a reply after publish |
| Scheduling | ✓ | Use scheduled_at |
| Inbox / DMs | X | Not part of the UniPost inbox today |
Known constraints
| Limitation | Why |
|---|---|
| Daily safety cap | 20 publishes/day per connected X account (UTC reset). Protects accounts from being flagged for spam — failed posts do not count. |
| Paid plan required | X publishing and new connections require any paid plan ($10/mo and up); the Free plan covers the other 8 platforms. |
| No shared Quickstart app | X removed the managed developer path — every workspace connects with its own keys |
| Inbox is not supported | UniPost inbox covers Meta and Threads today |
| Rate limits follow your X tier | Free X-API tier is not enough for production publish volume |
Publishing
Publish examples by surface
Each example calls POST/v1/posts with Bearer auth. Swap the account_ids for your own, then copy the snippet for your language.
Image post
Video post
Thread with first comment
If you want a follow-up comment rather than a thread, send first_comment on a single post instead of using thread_position.
Media & field requirements
| Field | Required | Limits | Notes |
|---|---|---|---|
| Plan | Required | Any paid plan | Free plans cannot publish to or newly connect X accounts. Existing connections on Free workspaces remain visible (read-only) until the workspace upgrades. |
| caption | Optional | 280 chars | Required unless media-only flow is valid |
| media_urls or media_ids | Optional | 1-4 images OR 1 video OR 1 GIF | Use media_urls for hosted assets or media_ids for local files uploaded via POST/v1/media. Do not mix media types. |
| thread_position | Optional | 1-indexed | Use on each thread entry |
| first_comment | Optional | text | Supported as a self-reply |
Hosted URLs: pass the public URL in media_urls. Local files: reserve an upload with POST/v1/media, PUT the bytes to the returned upload_url, then publish with media_ids. Full flow in the Publishing guide.
Media specifications
Per-surface limits for text, images, and video. These are the source of truth UniPost uses for preflight validation and media optimization — treat hard-limit values as enforced and "recommended" values as platform guidance.
Post
Specs apply to a single tweet; thread entries repeat these limits per post.
| Type | Requirement | Value |
|---|---|---|
| Text | Character limit (Free) | 280 — URLs count as 23 chars, emoji count as 2 |
| Text | Character limit (Premium) | 25,000 |
| Text | Mentions / hashtags | Count toward the character budget |
| Image | Formats | JPG, PNG, WebP, animated GIF |
| Image | Max per post | 4 images (mutually exclusive with video or GIF) |
| Image | Max file size | 5 MB per image, 15 MB per GIF |
| Image | Dimensions | Min 4 × 4 px, max 8,192 × 8,192 px |
| Image | GIF dimensions | Max 1,280 × 1,080 px |
| Image | Recommended ratios | 16:9 (1,200 × 675), 1:1 (1,200 × 1,200), 4:5 (1,080 × 1,350) |
| Video | Formats | MP4 (H.264 + AAC), MOV |
| Video | Max per post | 1 (mutually exclusive with images) |
| Video | Max file size | 512 MB |
| Video | Duration | 0.5 sec – 140 sec standard; Premium supports up to 3 hr with longVideo |
| Video | Dimensions | Min 32 × 32 px, max 1,920 × 1,200 px |
| Video | Aspect ratio | 1:3 to 3:1; 16:9 or 1:1 recommended |
| Video | Frame rate | ≤ 40 fps (30 fps recommended) |
| Video | Bitrate | ≤ 25 Mbps |
| Video | Audio | AAC-LC mono or stereo, 128 kbps recommended |
Analytics
| Metric | Support | Notes |
|---|---|---|
| Impressions | ✓ | Supported |
| Likes | ✓ | Supported |
| Comments / replies | ✓ | Supported |
| Shares / reposts | ✓ | Supported |
| Reach | X | Not exposed by the X API |
| Saves / bookmarks | X | Not exposed by the X API |
| Video views | X | Not exposed for org accounts today |
Connection modes
Pick the setup that matches how the account is owned. Quickstart is fastest when you publish to your own accounts; White-label is required when your customers bring their own accounts through a branded flow. Full setup details in Quickstart and White-label.
| Mode | Best for | App / credentials | Availability |
|---|---|---|---|
| Native credentials | Upload X API keys per account | Your X dev tier | Requires X paid tier |
| Quickstart | Not available — X removed the shared app path | — | — |
| White-label | Your customers connect their own accounts | Your OAuth app | Paid plans only |
Validation errors
| Code | What it means |
|---|---|
| caption_too_long | Caption exceeds 280 characters |
| too_many_media | More than 4 images or unsupported media mix |
| thread_unsupported | Invalid thread shape or missing thread_position ordering |