X (Twitter)
Tweets, threads, replies, quotes
X (formerly Twitter) is the most real-time channel OpenPost supports. We publish every format the platform allows — single tweets, threads, replies, quote-tweets — with the same thirty-second latency as the native app.
Connect your X account
Open Connections in the dashboard
From the left nav, go to Connections and click + Add channel. Pick X (Twitter).
Authorize OpenPost
You’ll be sent to X’s OAuth 2.0 consent screen. The scopes we request are listed here and nowhere else:
tweet.read— read your existing tweets to show analytics.tweet.write— post new tweets on your behalf.users.read— show your username and avatar in the dashboard.media.write— upload images and video for tweets with media.offline.access— refresh tokens silently so you don’t reconnect weekly.
Back to OpenPost
After granting access, X sends you back. Your handle appears in Connections with a green Connected badge.
Free-tier X API limitations
What OpenPost publishes
Single tweet
The default. Under 280 characters (25,000 on X Premium), optional media, optional link. We handle link shortening automatically via X’s own t.co.
Thread
A multi-tweet thread. Split on double-newline by default, or explicit break points with ---.
1/ Shipping a new release today.
2/ The headline: posts are now 40% faster to schedule.
3/ Read the full notes: openpost.so/blog/faster-scheduling
We post tweet 1, wait for X to confirm, then post tweet 2 as a reply. If any tweet fails mid-thread, later tweets are skipped and the post is marked partial_failure with a list of which indexes succeeded.
Reply
Paste any tweet URL in the composer’s “Reply to” field, or pass reply_to in the API. OpenPost will nest your post as a reply to that tweet.
Quote tweet
Same as reply but with quote_of. The referenced tweet is embedded as a native quote card.
Limits we enforce for you
| Field | Type | Description |
|---|---|---|
| tweet length | 280 chars | Or 25,000 if the connected account is X Premium. We read verified_type from /users/me on connect and flag Premium accounts so the composer uses the higher cap. |
| media | 1–4 images OR 1 video OR 1 GIF | Up to 4 images per tweet. Mixing types is rejected by X. Composer will show a warning. |
| image size | ≤ 5 MB | JPEG, PNG, WebP or GIF. Max 4096×4096, min 4×4. |
| video size | ≤ 512 MB | MP4 or MOV, h264/aac. Chunked upload in 5 MB segments. |
| video length | 0.5–140 seconds | X caps standard tweet video at 140 seconds regardless of Premium tier. |
| alt text | ≤ 1000 chars | Truncated to 1000 chars before upload. Recommended on every image. Composer prompts you if missing. |
Platform-specific behavior
- Link unfurling— we don’t append a link card; X does it for you from the shortened URL. Place the link on its own line for best rendering.
- Hashtags— limit 2 per tweet. More than that is flagged by the composer with a warning.
- Mentions — type
@+ username and we validate the user exists before scheduling. - Scheduling granularity— down to the minute. X doesn’t publish at exactly
:00in our experience, so we pre-fire 15 seconds early to land on time.
Analytics we pull
Impressions
Native, 24h+
Engagement
Likes, RTs, replies, bookmarks
Profile visits
Per tweet
Link clicks
For t.co-shortened URLs
Video views
For tweets with video
Refresh interval
Every 15 minutes for 7 days
Common errors
Disconnect
In Connections, click the channel’s three-dot menu → Disconnect. This revokes the X OAuth token on both ends. Your posts already published stay live on X; scheduled posts to that channel move to failed.