X Scheduler

X scheduler for products publishing on every other channel too

Schedule X posts in the same calendar as every other channel, with the character and video limits of the connected account's own tier validated before publish and X's per-post API charge passed through at cost.

Last updated: July 2026

Tier-aware limitsPay-per-post creditsReply settings
Quick start
API request
1await fetch("https://api.bundle.social/api/v1/post", {2  method: "POST",3  headers: {4    "x-api-key": process.env.BUNDLE_SOCIAL_API_KEY,5    "Content-Type": "application/json"6  },7  body: JSON.stringify({8    teamId: "team_123",9    title: "X campaign",10    postDate: "2026-05-14T10:00:00.000Z",11    status: "SCHEDULED",12    socialAccountTypes: ["TWITTER"],13    data: {14      TWITTER: { text: "Scheduled from bundle.social." }15    }16  })17});

What native X publishing leaves to your team

X character limits, video duration, and reply controls vary by the connected account's subscription tier.
X charges per post through its API, so publishing volume has a direct cost your product has to model.

What bundle.social handles

Schedule X posts beside LinkedIn, Bluesky, Mastodon, and the rest of your text-first channels in one calendar.
Spend prepaid credits only on X while every other supported channel stays covered by the subscription.

Keep X in the same workflow as every other channel

X is where a launch gets noticed and where per-post pricing shows up on your bill. Keep it in the same calendar as everything else and keep the cost visible before you schedule 500 posts.

Workflow

How it works

Connect accounts once, then create and schedule posts with channel-specific fields from one API.

01

Create an API key

Generate an organization API key in the dashboard and use it with the x-api-key header.

02

Connect accounts

Connect each social account once. bundle.social keeps the account mapping ready for future posts.

03

We meter the post and pass X's price through

X charges for publishing through its API, so an X post draws down a prepaid credit balance at X's own rate with no markup. You send one request; bundle.social validates the caption against the limit the connected account's tier actually allows, uploads the media, and pauses only X if the balance runs out.

Product architecture

Build social media workflows without rebuilding every platform

X scheduler for launches, threads, and fast-moving campaigns

X publishing happens in bursts around an announcement rather than on a steady weekly rhythm, which is how SaaS products, technical teams, and the agencies and brands behind them actually plan it: short posts, media, reply controls, launch timing, and follow-up content.

bundle.social plans X in the same calendar as every other channel. Draft posts, attach media from the library, set reply controls where the account supports them, schedule around a launch window, and see delivery status without switching tools.

Cost and account tier belong in the planning view

X is the one channel where publishing volume has a direct cost, because X charges per post through its API and a post containing a link is priced differently. Character and video limits also depend on the connected account's subscription level, so the same draft can be valid for one account and too long for another.

bundle.social meters X posting at X's own rate from a prepaid balance and validates each caption against the limit the connected account actually allows. If the balance runs out, X posts pause while every other channel keeps publishing, so a funding gap never becomes a campaign outage.

A launch on X is rarely only on X

The same message usually needs a longer LinkedIn version, a Threads post, and a Bluesky post, and the team wants one view of what went out and how it performed.

One calendar holds those channels with per-channel copy, approvals, delivery status, and analytics where the account exposes them. The same workflow is available through the API when X publishing has to be automated inside a product.

Let your own users connect their X accounts

X is the one connected account that also needs a balance: posting is metered at X's own per-post rate, so a scheduled X post waits when the credit balance is empty while every other channel keeps publishing.

You generate a hosted portal link, your user connects their own X account through it, and bundle.social stores and refreshes the token. The link carries your branding, expires on a window you set between 5 minutes and 48 hours, and means you never implement X API v2 OAuth yourself. Publishing from your own code instead of the dashboard uses the same connected accounts.

Capabilities

X scheduling with per-account limits and metered posting handled

Plan X posts with tier-aware validation, media handling, reply settings, and prepaid credit visibility in the same workflow as every other channel.

X in your cross-platform calendar

Plan and schedule X content alongside Instagram, LinkedIn, X, TikTok, and every other channel without switching between native dashboards.

Channel-specific field control

X content still uses the options and fields the platform supports. No generic template that loses native capabilities.

Team review and approvals

Marketing teams can draft, review, and approve X content in the shared calendar before anything publishes.

Media library for campaigns

Upload visuals, videos, and documents once and attach them to X posts using upload IDs across your content plan.

Post status tracking

See whether each X post is scheduled, processing, posted, or failed without checking the native platform dashboard.

Status tracking instead of analytics

Track X delivery state, scheduled timing, and failure status while native analytics remain platform-limited.

Platform specifics

X limits that change with the connected account

X publishing is text-first, but tier, media limits, and reply controls decide what your product can promise per account.

280 or 25,000 characters

Free and Basic accounts are limited to 280 characters. Premium and Premium+ accounts can support up to 25,000.

140 seconds or ten minutes of video

Free and Basic accounts are limited to 140-second videos. Premium tiers can support videos up to 10 minutes.

Reply settings are explicit

The X payload can set who is allowed to reply: everyone, following, mentioned users, subscribers, or verified accounts, where the connected account supports it.

Posting is metered

X charges $0.015 per post and $0.20 for a post with a link. Those are X's own charges, passed through with no markup.

Developer example

Schedule X content

Examples use bundle.social's public API shape: API key authentication, a post date, selected social account types, and platform-specific data.

TypeScript
API request
1await fetch("https://api.bundle.social/api/v1/post", {2  method: "POST",3  headers: {4    "x-api-key": process.env.BUNDLE_SOCIAL_API_KEY,5    "Content-Type": "application/json"6  },7  body: JSON.stringify({8    teamId: "team_123",9    title: "X campaign",10    postDate: "2026-05-14T10:00:00.000Z",11    status: "SCHEDULED",12    socialAccountTypes: ["TWITTER"],13    data: {14      TWITTER: { text: "Scheduled from bundle.social." }15    }16  })17});

Supported content

Text postsImagesVideosGIF uploadsReply settingsScheduled posts

Honest limitations

  • X posting is billed per post at X's own rate, so X publishing pauses when the credit balance runs out.
  • Character and video limits depend on the connected account's X subscription level.

Guarantees

Developer-first infrastructure

2% error rate

We handle the platform edge cases, media processing, and rate limits so your requests succeed.

Verbose errors

When native APIs fail, we return human-readable error messages and actionable recovery steps.

Flat pricing

No per-post counting. Predictable pricing for teams managing many users, workspaces, and connected accounts.

Same-day support

Direct access to the engineers building the API. We respond to technical issues the same day. Sometimes the same hour. Test us c;

FAQ

Questions developers ask before building

Why is X the only channel with a per-post cost?

Because X charges for publishing through its own API. bundle.social passes that through with no markup, drawing down a prepaid credit balance you top up in the dashboard. Every other supported platform is covered by the subscription, so X volume is a budgeting decision rather than a plan decision.

What happens when the X credit balance runs out?

X posts pause and every other channel keeps publishing. An empty balance is never an outage for the rest of the calendar, which is the reason the metering is per platform rather than per account.

Why was the same caption accepted for one X account and rejected for another?

X limits are per subscription tier. Free and Basic accounts are capped at 280 characters and 140-second videos; Premium and Premium+ can go to 25,000 characters and ten-minute videos. bundle.social validates against the limit the connected account actually has rather than a lowest-common-denominator cap.

Why use bundle.social for X instead of the X API directly?

Because X is the one platform where publishing has a per-post price and the limits move per account. bundle.social passes X's own charge through with no markup against a prepaid balance, validates the caption against the tier the connected account actually has, and pauses only X when the balance empties. You also get X in the same calendar and the same payload shape as every other channel.

Can our own users connect their own X accounts?

Yes. You generate a hosted portal link carrying your own branding, and bundle.social stores and refreshes the X token, so a reconnect is something your user can do without a support ticket.

Can X run in the same calendar as our other channels?

Yes, and the per-platform differences stay per platform. One scheduled post can target several channels at once, with a TWITTER object carrying only the fields X needs.