# X API alternative: pricing and limits compared

A cheaper X API alternative for public posts, profiles, and search. The X API bills $0.005 for every post it returns. Openhandle bills $0.0025 for a whole page. Start with 100 free requests, no card.

Checked October 2026. Public pricing pages. No affiliate links.

## At a glance

| Criteria | X API | Openhandle |
|---|---|---|
| Free tier | None listed. $20 in credits after your first card purchase | 100 free requests, no card |
| Pricing model | Prepaid credits. Billed for each post or user in the response | Pay per request from a balance. No credits, no subscription |
| Pricing | $0.005 per post read, $0.010 per user read. Capped at 3 million post reads a month | $2.50 per 1k, down to $2 per 1k at volume. 30-day cache hits are free |
| Rate limits | Set per endpoint in 15-minute windows. Recent search: 450 calls per app | 10 per second per key. Higher on request |
| Time to first call | Sign up in the developer console, create an app, and buy credits | Seconds. No approval wait |
| Response shape | X only. You pick fields and expansions on each call | One schema across Instagram, TikTok, X, Reddit, and YouTube |
| Platforms | X only | 43 Instagram, 28 TikTok, and 15 X endpoints. More platforms and data added by demand |

## X API pricing

The X API now runs on pay-per-use. You buy credits in the developer console, and each call takes from them. There is no subscription, and X’s pricing page lists no free tier.

- **Post reads.** $0.005 for each post in the response. A search that returns 100 posts costs $0.50.
- **User reads.** $0.010 for each profile in the response. Followers and following lists cost $0.010 for each account too.
- **Repeat reads.** X bills the same post or user once per UTC day. A second read that day is free.
- **Monthly cap.** Pay-per-use stops at 3 million post reads a month. Past that, X points you to Enterprise.
- **Starter credits.** New accounts get $20 in credits after they save a card and make a first credit purchase.

Example: 1,000 profile lookups cost $10 on the X API. On Openhandle they cost $2.50. A page of posts on Openhandle is one request at $0.0025, however many posts are on it. For the short answer on free access, see [Is the X API free to read posts?](/questions/is-the-x-twitter-api-free-to-read-posts). For every read and write price, see [X API pricing](/compare/x-api-pricing).

## Why people look for an alternative

- **Every post costs money.** Big searches and long timelines add up fast when each post is billed on its own.
- **The 3,200 post limit.** The user timeline endpoint stops at the 3,200 most recent posts. See [how to get posts past 3,200](/questions/how-do-i-get-all-posts-from-an-x-user-past-3200).
- **A monthly read limit.** Pay-per-use stops at 3 million post reads a month. More than that means an Enterprise deal.
- **One platform.** The X API only covers X. If you also need Instagram, TikTok, or Reddit, you add more APIs and more parsers.

## Where the X API may fit

- **Posting and other writes.** Post, reply, like, follow, and send DMs. Openhandle is read-only and never writes to X.
- **Your own account data.** DMs, bookmarks, mutes, blocks, and anything else that needs a user to log in.
- **Full archive search.** Pay-per-use includes search back to March 2006. Openhandle search reaches what X’s public search shows today.
- **Official terms.** If your product must run under X’s own developer terms, use the X API.

You can use both. Use the X API for writes and Openhandle for public reads.

## What changes when you move

- **One price per request.** $0.0025 per request, down to $0.002 at volume. 30-day cache hits are free. A page of posts counts as one request.
- **Cheaper older data.** Ask for cached data when it can be a bit old. It costs $0.0005 at 24 hours, $0.0001 at 7 days, and free at 30 days.
- **Failed requests are free.** You pay only when Openhandle returns an answer.
- **Your balance is the limit.** There is no monthly read cap. You can set a monthly request cap on each key.
- **One shape.** Profiles, posts, and comments look the same on X, Instagram, TikTok, and Reddit.
- **Public data only.** Openhandle reads public data only. Protected accounts return PROFILE_PRIVATE.

## Move your integration

1. **Start with a Test key.** Create a Test key in the dashboard. Use the synthetic identifiers in the [quickstart](/docs/quickstart) to check your integration without charges.
2. **Map your calls.** Match each X API call to the [API reference](/docs/api-reference). Check endpoints, parameters, and returned fields before you switch. Keep posting and other writes on the X API. The table below lists common calls.
3. **Update paths, parameters, and authentication.** Use https://api.openhandle.dev/v1 with Authorization: Bearer followed by your key. Openhandle needs no OAuth user tokens. Profile usernames need an @ prefix in REST paths. Use the documented identifier for each post.
4. **Map response fields.** Successful responses contain platform, resource, capturedAt, source, and data. There are no expansions to request. Map fields using the [response schemas](/docs/concepts/envelope-and-errors). Keep unavailable metrics as null.
5. **Handle pagination and errors.** Pass meta.cursors.next back as cursor for list requests. X next_token values do not work here. Handle Openhandle error codes and retry only when retryable is true. See [pagination](/docs/concepts/pagination) and [errors](/docs/concepts/envelope-and-errors).
6. **Set a cap.** Pick a monthly spending cap before you go live. We stop before it, so a bad loop cannot run up a bill.
7. **Check before switching.** Check success, empty, protected, and not-found cases with a Test key. Then [move to Live](/docs/test-environment/test-to-live) and compare a small sample with the X API before you switch production traffic.

| What you fetch | X API | Openhandle call |
|---|---|---|
| A profile by handle | GET /2/users/by/username/{username} | GET /v1/twitter/profiles/@handle |
| A profile’s posts | GET /2/users/{id}/tweets | GET /v1/twitter/profiles/@handle/posts |
| One post | GET /2/tweets/{id} | GET /v1/twitter/posts/{id} |
| Replies to a post | Search with conversation_id | GET /v1/twitter/posts/{id}/comments |
| Followers of a profile | GET /2/users/{id}/followers | GET /v1/twitter/profiles/@handle/followers |
| Post search | GET /2/tweets/search/recent | GET /v1/twitter/search/posts?q=term |
| Posts in a list | GET /2/lists/{id}/tweets | GET /v1/twitter/lists/{id}/posts |
| A post or profile from a URL | Parse the URL yourself | POST /v1/urls/fetch with a JSON url field |

## Verdicts

- **Choose Openhandle.** to read public X posts, profiles, followers, and search at one price per request, with free 30-day cache hits.
- **Choose the X API.** if you post, write, or need data that sits behind a user login.
- **Use both.** Use the X API for writes and Openhandle for public reads.

## How we checked

We read X’s official pricing, rate limit, and search docs at docs.x.com and X’s developer announcements in October 2026. X changes its prices often. If a number is out of date, tell us and we fix it.
