All questionsX (Twitter)

Is the X (Twitter) API free to read posts?

No. The free tier of the X API is write-only. Reading posts, profiles, or search needs a paid tier, billed monthly, with a cap on how many posts you may pull. Go over the cap and you wait for next month or buy the next tier.

For public data you can skip the plan. Openhandle reads public X posts, profiles, followers, and search for $0.0025 per request, billed after use, with 100 free requests to start.

Checked September 2026 · request and response run against the API · no affiliate links

GET /v1/twitter/profiles/@username/posts
curl "https://api.openhandle.dev/v1/twitter/profiles/@copperfield_lab_x_test/posts" \
  -H "Authorization: Bearer $OPENHANDLE_API_KEY"
TypeScript SDK
import { OpenHandle } from '@openhandle/sdk';

const openhandle = new OpenHandle({ apiKey: process.env.OPENHANDLE_API_KEY! });
const page = await openhandle.twitter.profile('copperfield_lab_x_test').posts.list();

for (const post of page.data) console.log(post.createdAt, post.text);
200 OK
{
  "platform": "twitter",
  "resource": "post",
  "capturedAt": "2026-09-18T10:52:48Z",
  "source": "live",
  "data": [
    {
      "id": "940100000000000001",
      "text": "A deterministic text post from a fictional lab. #synthetic",
      "createdAt": "2026-08-09T15:30:00Z",
      "metrics": { "likes": 42, "reposts": 3, "comments": 3, "quotes": 0, "views": null }
    }
  ],
  "meta": { "cursors": { "next": "b3BhcXVlLWN1cnNvcg" } }
}

Trimmed to one post and the fields this question needs. The example is a Test account, so you can run it on a free Test key.

How the X API bills

  • Free. Post only. No read endpoints. Meant for bots that write.
  • Paid tiers. A monthly fee with a fixed monthly post cap. The tiers jump by an order of magnitude in price. Unused cap is lost at month end.
  • Approval. A developer account, an app, and terms that restrict what you may store and show.

Check the X developer pricing page for current tiers. They change often. We do not quote their numbers here so this page never goes stale.

How Openhandle bills

  • Per request. $0.0025 per live request, lower at volume. A 24-hour cache hit costs less. A 30-day cache hit is free.
  • After use. No plan to pick. No cap to plan around. Set a spend limit per key and per month if you want a hard stop.
  • Failed requests are free. You pay only when the API returns an answer. Provider errors and our errors are never billed.

What you get for it

Public profiles, posts, replies, media, followers, following, lists, and search. Every X answer uses the same envelope as Instagram, TikTok, and Reddit. Views are the number X shows, or null when X hides it. Protected accounts return PROFILE_PRIVATE.

When this does not work

These answers are definitive. Store them, do not retry them.

SituationStatusCode
The account is protected403PROFILE_PRIVATE
The account is suspended, deleted, or never existed404PROFILE_NOT_FOUND
The identifier is malformed400INVALID_IDENTIFIER
403 Forbidden
{
  "error": {
    "code": "PROFILE_PRIVATE",
    "message": "This profile is private.",
    "requestId": "req_01j8…",
    "retryable": false
  }
}

Openhandle is read-only. It never posts, likes, reposts, or follows. If you need to write to X, the official API is the only path.

Read next

More X (Twitter) questions

Send your agent ahead.

Paste the prompt into your agent and it sets everything up. Or come yourself, it takes five minutes.

For agents