Channels

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

1

Open Connections in the dashboard

From the left nav, go to Connections and click + Add channel. Pick X (Twitter).

2

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.
3

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

X’s free API tier caps writes at 1,500 tweets per month per user. If you post more than ~50 tweets/day, we suggest upgrading your X developer plan to Basic ($200/mo) or Pro ($5,000/mo). OpenPost surfaces the remaining quota in real-time in the dashboard.

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 ---.

Thread example
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

FieldTypeDescription
tweet length280 charsOr 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.
media1–4 images OR 1 video OR 1 GIFUp to 4 images per tweet. Mixing types is rejected by X. Composer will show a warning.
image size≤ 5 MBJPEG, PNG, WebP or GIF. Max 4096×4096, min 4×4.
video size≤ 512 MBMP4 or MOV, h264/aac. Chunked upload in 5 MB segments.
video length0.5–140 secondsX caps standard tweet video at 140 seconds regardless of Premium tier.
alt text≤ 1000 charsTruncated 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 :00 in 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.

Last updated April 2026 Edit this page