Twitter / X

Publish, schedule, and thread posts on X from UniPost. Strongest support today for text, media, and reply chains.

Short-form text, media, threads, and first-comment replies.

At a glance

Publishing
Supported
Scheduling
Supported
Analytics
Supported
Inbox
Not supported
Connection
Native credentials today — requires your X paid tier

Feature matrix

FeatureSupportNotes
Text postsUp to 280 characters
Image postsUp to 4 images
Video postsExactly 1 video
GIF postsExactly 1 GIF
ThreadsUse thread_position
First commentPosted as a reply after publish
SchedulingUse scheduled_at
Inbox / DMsXNot part of the UniPost inbox today

Known constraints

LimitationWhy
Daily safety cap20 publishes/day per connected X account (UTC reset). Protects accounts from being flagged for spam — failed posts do not count.
Paid plan requiredX publishing and new connections require any paid plan ($10/mo and up); the Free plan covers the other 8 platforms.
No shared Quickstart appX removed the managed developer path — every workspace connects with its own keys
Inbox is not supportedUniPost inbox covers Meta and Threads today
Rate limits follow your X tierFree X-API tier is not enough for production publish volume

Publishing

Ready to publish?Use the shared Publishing guide for hosted URLs, local file uploads, preflight validation, and async publish status. Then use the Twitter / X examples below for platform-specific payload shape.

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

FieldRequiredLimitsNotes
PlanRequiredAny paid planFree plans cannot publish to or newly connect X accounts. Existing connections on Free workspaces remain visible (read-only) until the workspace upgrades.
captionOptional280 charsRequired unless media-only flow is valid
media_urls or media_idsOptional1-4 images OR 1 video OR 1 GIFUse media_urls for hosted assets or media_ids for local files uploaded via POST/v1/media. Do not mix media types.
thread_positionOptional1-indexedUse on each thread entry
first_commentOptionaltextSupported 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.

TypeRequirementValue
TextCharacter limit (Free)280 — URLs count as 23 chars, emoji count as 2
TextCharacter limit (Premium)25,000
TextMentions / hashtagsCount toward the character budget
ImageFormatsJPG, PNG, WebP, animated GIF
ImageMax per post4 images (mutually exclusive with video or GIF)
ImageMax file size5 MB per image, 15 MB per GIF
ImageDimensionsMin 4 × 4 px, max 8,192 × 8,192 px
ImageGIF dimensionsMax 1,280 × 1,080 px
ImageRecommended ratios16:9 (1,200 × 675), 1:1 (1,200 × 1,200), 4:5 (1,080 × 1,350)
VideoFormatsMP4 (H.264 + AAC), MOV
VideoMax per post1 (mutually exclusive with images)
VideoMax file size512 MB
VideoDuration0.5 sec – 140 sec standard; Premium supports up to 3 hr with longVideo
VideoDimensionsMin 32 × 32 px, max 1,920 × 1,200 px
VideoAspect ratio1:3 to 3:1; 16:9 or 1:1 recommended
VideoFrame rate≤ 40 fps (30 fps recommended)
VideoBitrate≤ 25 Mbps
VideoAudioAAC-LC mono or stereo, 128 kbps recommended

Analytics

MetricSupportNotes
ImpressionsSupported
LikesSupported
Comments / repliesSupported
Shares / repostsSupported
ReachXNot exposed by the X API
Saves / bookmarksXNot exposed by the X API
Video viewsXNot 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.

ModeBest forApp / credentialsAvailability
Native credentialsUpload X API keys per accountYour X dev tierRequires X paid tier
QuickstartNot available — X removed the shared app path
White-labelYour customers connect their own accountsYour OAuth appPaid plans only

Validation errors

CodeWhat it means
caption_too_longCaption exceeds 280 characters
too_many_mediaMore than 4 images or unsupported media mix
thread_unsupportedInvalid thread shape or missing thread_position ordering

Next steps