letmepost / platforms / Twitter / X

Ship Your Integration
In Minutes, Not Weeks.

Stop wrestling with X's API pricing and OAuth complexity. letmepost gives you a single, simple endpoint to publish tweets, threads, images, and video. We handle OAuth 2.0 PKCE, rate limits, t.co URL collapse, and every API version change.

Live · v2 API · read the docs →
POST /v1/posts ·
{
  "targets": [{ "platform": "twitter" }],
  "accountId": "acc_x_xyz",
  "text": "Shipped with letmepost. 280 chars weighted."
}

Why letmepost vs X API direct?

Twitter / X Direct

  • You pay $100/mo minimum for X API Basic to post
  • You implement OAuth 2.0 PKCE + token refresh
  • You wrestle with t.co URL collapse (every URL = 23 chars)
  • You handle chunked video upload across 3 endpoints
  • You track which API version still works this month
  • You build retry logic for X's flaky rate limits

letmepost API

  • Pay-Per-Use tier works. No $100 Basic required for letmepost users
  • OAuth 2.0 PKCE handled server-side, tokens encrypted at rest
  • Weighted character counter ships twitter-text's actual range table
  • Single POST /v1/posts with media id, chunked upload abstracted
  • We pin the version header, monitor sunsets, upgrade internally
  • Idempotency-Key handles retries safely
X retired the free posting tier in 2025. letmepost works on the Pay-Per-Use tier today — no Basic subscription needed.

⚠ No X API Basic tier required

X removed free posting in 2025 and gates write access behind a $100/mo Basic plan. letmepost users post via our app's Pay-Per-Use credit pool — no separate X subscription. The cost difference covers letmepost's flat fee multiple times over.


PLAYGROUND

connect, configure, post
▸ Connect▸ Configure▸ Execute

OAuth 2.0 PKCE handled in the browser. Click connect, authorize on x.com, you're back in the dashboard with a working account.

CONNECT X →
Posting in ~30 seconds. PKCE HANDLED

CONTENT TYPES

every twitter / x surface, one shape
Tweet · 280 weighted
Photos · up to 4
Video · chunked MP4
Threads
Quote tweets

HOW IT WORKS

three steps · under two minutes

Get your API key

Sign up at dashboard.letmepost.dev. 30 seconds. No credit card. No X developer account required from you.

Connect an X account

OAuth 2.0 PKCE flow handled by letmepost. Click connect, authorize on x.com, you're done. Access + refresh tokens encrypted at rest.

Send a tweet

One POST /v1/posts with platform: "twitter". We compute weighted chars, push to X v2, fire post.published with the tweet URL.


FEATURES

what we built so you don't

Skip the $100 tier

letmepost users post via our app's credit pool. You don't pay X's $100/mo Basic plan to send a tweet through us.

Weighted char counter

twitter-text range tables baked in. CJK and emoji count as 2, URLs collapse to t.co (23 chars). Same math X uses server-side.

Chunked video, abstracted

X video upload is 3 endpoints with FINALIZE/STATUS dance. We handle the whole sequence and surface a single status.

Version pin

X has rotated v1.1 → v2 → various sub-versions. We pin the working one, track sunsets, upgrade transparently.


CODE EXAMPLE

post a tweet · typescript
publish-x.ts ·
import { Letmepost } from '@letmepost/sdk';
const lmp = new Letmepost({ apiKey: process.env.LMP_API_KEY });

// A scheduled tweet with media + reply target
const result = await lmp.posts.create({
  targets: [{ platform: 'twitter', accountId: 'acc_x_xyz' }],
  text: 'Tools that ship are tools that get used. https:x1
  media: [{ type: 'image', url: 'https://your-image.jpg' }],
  scheduledAt: '2026-06-01T15:00:00Z',
});

for (const r of result.targets) {
  if (r.status === 'queued') {
    console.log('Scheduled. Tweet URL on publish:', r.scheduledUrl);
  }
}


COMMON QUESTIONS

code-review questions about X posting

Do I need an X developer account?

No. letmepost uses its own X developer app. You connect via our hosted OAuth flow, no developer-portal access required from you.

How does the $100 Basic tier issue work?

X gated write access behind $100/mo in 2025. letmepost users post via our app's Pay-Per-Use credit pool — you don't pay X's tier fee. The credits are bundled into letmepost's flat per-org rate.

What about the weighted character count?

X uses a range-table formula where CJK = 2, emoji = 2, URLs = 23 chars (t.co length). We ship the actual twitter-text library, so our counter agrees with X server-side. Counter tool here.

Can I post threads?

Yes. Pass an array of text entries: { texts: ["First", "Second", "Third"] }. We thread them automatically via reply_to_tweet_id.

What about videos?

Single MP4 per tweet. Chunked upload abstracted into a single SDK call. We handle the INIT/APPEND/FINALIZE dance and the STATUS poll.

Rate limits?

letmepost's per-org limits apply. X's tweet rate limits are tracked per-account; we surface them as rate_limited errors with Retry-After — never silent.


ONE API · 8 PLATFORMS

twitter / x is just one of them

LEARN MORE


READY TO PUBLISH TO X?

Skip the developer portal. Skip the $100 Basic tier. Skip the OAuth 2.0 PKCE implementation. Connect in 30 seconds, post in one minute.

* * * X · v2 · WEIGHTED * * *
PLAT · X · v2 · LIVE
→ START FREE