--- title: "Tweet by ID API: Get Any Tweet as JSON for $0.0008" description: "Turn a tweet ID or URL into the full tweet as JSON for $0.0008 a call: text, author, media and every engagement count. No X developer account needed." canonical: https://www.twitterapis.com/twitter-tweet-by-id-api generator: md-live-route generated: 2026-11-06T08:43:57.774Z --- # Tweet by ID API: Get Any Tweet as JSON for $0.0008 1. [Home](https://www.twitterapis.com/) 2. / Tweet by ID API SINGLE TWEET LOOKUP # Tweet by ID API: Get Any Tweet as JSON for $0.0008 Updated July 2026 How do you get a tweet by its ID through an API? Send the tweet's numeric ID or its full status URL to `GET /twitter/tweet/detail` with a Bearer key. The API returns the complete tweet as JSON: text, timestamp, author, attached media, any quoted tweet, and every engagement count including views. Each lookup costs $0.0008, which is $0.80 per 1,000 tweets, and needs no X developer account. Flat $0.0008 per lookup. One call returns one tweet, so $0.80 per 1,000 is the real fill, not a best case. Per our own API records, 125 endpoints share this one Bearer key and one prepaid balance. Start with the [quickstart](https://www.twitterapis.com/quickstart), compare [every price](https://www.twitterapis.com/pricing), or connect an agent through the [MCP server](https://www.twitterapis.com/mcp). [Start Free](https://www.twitterapis.com/signup)[Read the docs](https://docs.twitterapis.com/docs/reference/tweet-details/tweet-detail) By the numbers ## One tweet, one price A lookup returns exactly one object, so there is no page-fill question to average away. - A tweet lookup on TwitterAPIs bills $0.0008, which is $0.80 per 1,000 tweets. [(TwitterAPIs pricing, 2026)](https://www.twitterapis.com/pricing) - The official X API lists Get Post by ID at a unit cost of $0.005 per resource, or $5 per 1,000. [(X API docs, 2026)](https://docs.x.com/x-api/posts/get-post-by-id) - The same tweet object carries six separate engagement counters, views and bookmarks included. [(TwitterAPIs API reference, 2026)](https://docs.twitterapis.com/docs/reference/tweet-details/tweet-detail) - Per our billing data, paying customers made 484,424 tweet-returning read calls over October 22 to 28, 2026 (UTC), on the same keys and the same per-call billing as this endpoint. [(TwitterAPIs measured yield, 2026)](https://www.twitterapis.com/twitter-api-pricing) ## The endpoint that resolves a tweet ID You can pass either form of the identifier, so a link a user pasted into your product works without you parsing it first. Send `id` when you already hold the number, or `url` when you only have the link, and leave the other one out. The table comes straight from our OpenAPI document. ### GET /twitter/tweet/detail Resolve a tweet ID into its complete object, including author, engagement counts, attached media, and any quoted tweet. The starting point for any single-tweet workflow. | Parameter | Where | Required | Purpose | | --- | --- | --- | --- | | id | query | No | Numeric ID of the tweet to fetch. Provide either id or url. | | url | query | No | Full status URL of the tweet, for example https://x.com/naval/status/1759123456789012345. Provide either id or url. | ## Sample response from GET /twitter/tweet/detail The object below is the example published in the spec. Real responses also carry the attached media and any quoted tweet when the post has them. Call it again later and compare the counters to build a growth curve for one post. Tweet Detail Copy ``` { "id": "1759123456789012345", "tweet": { "id": "1759123456789012345", "text": "Shipping the new docs today.", "created_at": "Tue Feb 20 14:02:11 +0000 2026", "author": { "id": "745273", "username": "naval", "name": "Naval" }, "favorite_count": 4821, "retweet_count": 612, "reply_count": 88, "quote_count": 14, "bookmark_count": 203, "view_count": 219340 } } ``` | Field | What it tells you | | --- | --- | | tweet.id | The tweet's ID as a string, repeated at the top level for quick access. | | tweet.text | The body of the post, including any t.co links X wrapped into it. | | tweet.created\_at | When it was posted, in X's own date format and always UTC. | | tweet.author | The account behind the post: numeric ID, handle and display name. | | tweet.favorite\_count | Likes at the moment of the call. Retweets, replies and quotes follow the same pattern. | | tweet.bookmark\_count | How many people saved it, a quieter signal of value than likes. | | tweet.view\_count | Impressions X reports for the post. | ## Start using the X API: fetch one tweet by ID A read needs no X account of your own, so there is nothing to register. Public tweets are not attributed to anybody, which means a key is the only credential involved and you can run the call below straight after signing up. 1. Create a key at [signup](https://www.twitterapis.com/signup). There is no approval step and no card. 2. Copy a tweet ID from the end of a status URL, or pass the whole URL in the `url` parameter. 3. Send the request below. Parse the response with the ID kept as a string so a 19 digit number survives. cURL Python JavaScript Copy ``` curl "https://api.twitterapis.com/twitter/tweet/detail?id=1759123456789012345" \ -H "Authorization: Bearer $TWITTERAPIS_KEY" ``` ``` import os import requests resp = requests.get( "https://api.twitterapis.com/twitter/tweet/detail", headers={"Authorization": f"Bearer {os.environ['TWITTERAPIS_KEY']}"}, params={"id": "1759123456789012345"}, ) resp.raise_for_status() data = resp.json() print(data) ``` ``` const url = new URL("https://api.twitterapis.com/twitter/tweet/detail"); url.search = new URLSearchParams({ id: "1759123456789012345" }).toString(); const resp = await fetch(url, { headers: { Authorization: `Bearer ${process.env.TWITTERAPIS_KEY}` }, }); const data = await resp.json(); console.log(data); ``` ## What a tweet lookup costs at real fill Most read endpoints quote a best-case page price and leave you to discover the real yield. This one has none of that gap, because a successful call returns one tweet every time. The table shows what a workload costs at the fill it will actually see. | Workload | Calls | Cost | | --- | --- | --- | | One tweet | 1 | $0.0008 | | 1,000 tweets | 1,000 | $0.80 | | Refreshing 500 tweets every day for a month | 15,000 | $12.00 | Calculated from the biller's per-call rate. The signup credit of $0.50 covers 625 lookups. To read a whole conversation, the [thread route](https://www.twitterapis.com/blogs/fetch-full-twitter-thread-api-2026) returns it in one call instead of many lookups. ## Ways to get a tweet by ID compared A single lookup looks trivial until you do it at volume or need the counters. The options below differ mostly in what they return and in how much maintenance they ask of you, so weigh the fields you need before weighing the price. | Option | Cost per 1,000 | Engagement counts | What you maintain | | --- | --- | --- | --- | | TwitterAPIs | $0.80 | All, views included | One Bearer key | | twitterapi.io | $0.15, billed per tweet returned with a $0.00015 minimum per call | Views and bookmarks included | An API key; up to 50 IDs per call | | Official X API | $5.00 | Selected through field parameters | Developer app and prepaid credits | | oEmbed endpoint | Free | None, it returns embed HTML | An HTML parser, no structured data | | Scraping the status page | Proxy and compute costs | Whatever renders | Selectors and a logged-out wall | ## How a per-tweet price compares for single lookups On a one-tweet lookup, a per-item tariff comes out lower than our flat call price. twitterapi.io bills Tweet details by ID at $0.00015 per tweet returned, with the same $0.00015 as a minimum per call, and its endpoint takes up to 50 IDs per request, per its [published pricing details](https://twitterapi.io/pricing/details) (pricing.json v2026-10-12, read 2026-11-05). If your workload is nothing but bulk ID lookups, that tariff costs less than this one. Where this route earns its place is everything around the lookup. It takes a pasted status URL as well as an ID, so user input needs no parser. The same key covers search, timelines, followers, posting, follows and webhook monitoring, priced per call rather than per item, which keeps a mixed workload easy to forecast. And every route, this one included, is a tool in our [MCP server](https://www.twitterapis.com/mcp), so an agent can resolve a link and act on it in one session. - URL or ID. Pass `url` for whatever a user pasted, or `id` when you already hold the number. - Reads and writes on one key. Look a post up here, then [reply to it](https://www.twitterapis.com/twitter-post-api) or [follow its author](https://www.twitterapis.com/twitter-follow-api) without a second account. - Agent access. The `twitter_tweet_detail` tool takes the same inputs, so Claude or Cursor can read a linked post directly. ## What it does and what it does not do This endpoint fits any workflow that starts from a known post rather than from a search. It is the second step after something else hands you an ID, and it turns that ID into a record you can store, rank or show to a user. It does not search, and it does not return a conversation or more than one tweet per call. - Link previews. Render a clean card when a user pastes a tweet URL into your product, using the `url` parameter. - Engagement tracking. Poll a list of tweets on a schedule and chart the counters. Our guide on [tracking a tweet with an API](https://www.twitterapis.com/answers/how-to-track-a-tweet-with-an-api) shows the loop. - Webhook enrichment. A [webhook delivery](https://www.twitterapis.com/twitter-webhook-api) tells you a post exists. A lookup adds the current counts before you store it. - Space announcements. A post that links to a Space carries its ID, and the [Twitter Spaces API](https://www.twitterapis.com/twitter-spaces-api) turns that into a title, host and counts. - Moderation queues. Re-fetch a reported post to see whether it is still up before a human spends time on it. ## Tweet IDs and why they must stay strings A tweet ID is a 64-bit number, usually 19 digits today. JavaScript stores numbers as 64-bit floats and only keeps integers exact up to 16 digits, so `JSON.parse` on a bare number silently rounds it and you end up asking for a different tweet. We return IDs as strings for that reason, and you should keep them that way in your database too. The ID also encodes the time the post was created, because X generates IDs in time order. That means sorting by ID sorts by age, and you can compare two posts without reading their timestamps. It does not tell you anything about the author, which is a separate number: use the [ID finder](https://www.twitterapis.com/tools/twitter-id-finder) if you were looking for an account's ID rather than a post's. ## Deleted, protected and missing tweets A lookup returns public posts. If a post was deleted, or the ID never existed, the call comes back as a 404 and your code should treat that as a final state rather than a failure to retry. Treat a post from a protected account the same way. That 404 is useful on its own. A monitoring job that re-fetches saved posts can mark the ones that disappeared, which is how brand teams notice a retraction. If you need the text of something already gone, read the guide on [recovering a deleted tweet](https://www.twitterapis.com/blogs/recover-deleted-tweet-via-api-2026) to see what is and is not possible. ## Refreshing many tweets on a schedule The common production pattern is a list of saved IDs and a job that refreshes their counters. A small thread pool is all it takes, because each lookup is independent and there is no cursor to keep. The example below fans out over a list of IDs, keeps the handful of counters most dashboards chart, and skips anything that returns a 404. Stay inside the flat ceiling of 600 requests a minute and 20 concurrent per key, which still gives you 36,000 lookups an hour on one key. Back off on a 429 rather than retrying immediately. If you find yourself refreshing every post from one account, the [timeline API](https://www.twitterapis.com/twitter-timeline-api) returns many of them per call and works out far cheaper than single lookups. The [rate limits page](https://www.twitterapis.com/twitter-api-rate-limits) compares that ceiling with what X publishes. Python Copy ``` import os from concurrent.futures import ThreadPoolExecutor import requests API = "https://api.twitterapis.com/twitter/tweet/detail" HEADERS = {"Authorization": f"Bearer {os.environ['TWITTERAPIS_KEY']}"} def counters(tweet_id): resp = requests.get(API, headers=HEADERS, params={"id": tweet_id}, timeout=30) if resp.status_code == 404: return tweet_id, None resp.raise_for_status() tweet = resp.json()["tweet"] return tweet_id, { "likes": tweet["favorite_count"], "reposts": tweet["retweet_count"], "views": tweet["view_count"], } ids = ["1759123456789012345"] with ThreadPoolExecutor(max_workers=10) as pool: for tweet_id, row in pool.map(counters, ids): print(tweet_id, row) ``` ## Turning a lookup into an engagement rate One response carries everything you need for the standard engagement metrics, so there is no second call to make for a per-post report. Add `favorite_count`, `retweet_count`, `reply_count`, `quote_count` and `bookmark_count`, then divide by `view_count` to get an engagement rate per impression. Using the example in the spec, that is 5,738 interactions on 219,340 views, or about 2.6 percent. Compare a post against its author's recent average rather than against a global benchmark, because rates vary a lot with account size and topic. The [Twitter analytics API](https://www.twitterapis.com/twitter-analytics-api) page goes further into account-level metrics, and our guide to [tracking tweet performance in real time](https://www.twitterapis.com/blogs/track-tweet-performance-real-time-x-api) shows how to sample a post at sensible intervals after it goes live. - Replies. The count is on the object, and the [replies guide](https://www.twitterapis.com/answers/how-to-get-all-replies-to-a-tweet-api) shows how to read the text of each one. - Quotes and retweeters. To see who shared a post, read our answer on [quote tweets and retweeters](https://www.twitterapis.com/answers/how-to-get-quote-tweets-and-retweeters-api). - Writing back. If a lookup feeds a reply workflow, the [post API](https://www.twitterapis.com/twitter-post-api) publishes the response. - Getting started. The [quickstart](https://www.twitterapis.com/quickstart) covers the auth header and paging model that every route shares. ## Passing a URL or an ID, and which to store The `url` parameter is the easy path for input you do not control. People paste links with tracking parameters, old twitter.com domains and photo suffixes, and handing the whole string to the API saves you from maintaining a parser for each variant. Keep the `id` from the response as your stored key, because the numeric ID never changes while a handle in a URL can change whenever the author renames their account. If you already parse links for another reason, the number after `/status/` is all you need, and the snippet below pulls it out of any common form. Pass it through `id` on later refreshes, so every record in your database goes through one code path. Validate that the match is all digits before you send it, since a user can paste anything into a text box. Python Copy ``` import re STATUS_ID = re.compile(r"/status(?:es)?/(\d+)") def tweet_id_from(link): match = STATUS_ID.search(link) return match.group(1) if match else None print(tweet_id_from("https://x.com/naval/status/1759123456789012345?s=20")) ``` ## One key for every X endpoint The key you use for a lookup is the same key for every other route, so moving from one tweet to a search or a follower list needs no new credential or plan. Per our OpenAPI document there are 125 endpoints behind that one Bearer key, split across 72 reads and 53 writes, and each bills from the same prepaid balance. That matters for a lookup because it is rarely the only call in a workflow. A typical job finds posts with the [search API](https://www.twitterapis.com/twitter-search-api), resolves each one here, and then reads the author with the [user API](https://www.twitterapis.com/twitter-user-api). One key keeps that chain simple to build and to budget. ## Public profile data on every tweet Each response names the author, so you usually do not need a second call to attribute a post. `tweet.author` carries the numeric ID, the handle and the display name, which covers a byline, a link back to the account and a join against your own records. Store the numeric ID rather than the handle, since a handle can change. When you need the rest of the public profile, such as the bio, follower count or join date, pass that ID to the [Twitter user API](https://www.twitterapis.com/twitter-user-api) as a separate read. Keep that call behind a cache if the same authors come up often, because a profile changes far more slowly than the counters on a post. ## Look up tweets from an AI agent Give an agent a URL and it can read the post without a browser. The MCP tool below takes the same `id` or `url` input as the REST call, which makes it handy for summarising a linked tweet inside a chat, and the [MCP page](https://www.twitterapis.com/mcp) has the client configs. - `twitter_tweet_detail` calls GET /twitter/tweet/detail Install the MCP server Copy ``` npx -y @twitterapis/mcp@latest ``` ## Tweet by ID questions ### How do I get a tweet by its ID? Call GET /twitter/tweet/detail with id set to the tweet's numeric ID and your Bearer key in the Authorization header. The response is the full tweet object as JSON and the call costs $0.0008. ### Where do I find a tweet's ID? It is the long number at the end of the status URL, after /status/. In the address https://x.com/naval/status/1759123456789012345, the ID is 1759123456789012345. ### How much does a tweet lookup cost? $0.0008 per call, and one call returns one tweet, so 1,000 lookups cost $0.80. The official X API lists Get Post by ID at $0.005 per resource. ### What happens if the tweet was deleted? The call returns a 404. Treat it as a final answer rather than an error to retry, and mark the record as gone in your own data. ### Can I look up a tweet from its URL instead of its ID? Yes. Pass the full status URL in the url parameter and leave id out. This saves you writing a parser for x.com and twitter.com links. ### Does the response include view counts? Yes. view\_count sits beside favorite\_count, retweet\_count, reply\_count, quote\_count and bookmark\_count on the tweet object, so one call gives you every public counter. ### Why did my tweet ID change when I parsed the JSON? A 19 digit number is too large for a JavaScript number, so it gets rounded. Keep IDs as strings in your code and your database. Every ID in our responses is already a string. ### Can I look up many tweets in one call? This endpoint takes one tweet per call. If your IDs all belong to one conversation or one account, a thread or timeline read returns many tweets at once and works out cheaper than separate lookups. ### Resolve your first tweet ID in under a minute Create a key and run the call. There is no session to register, and the signup credit covers 625 lookups. [Start free](https://www.twitterapis.com/signup)[See every price](https://www.twitterapis.com/pricing) ## Next read Continue exploring related pages: [ Twitter API use cases 14 use cases from sentiment analysis to lead generation. ](https://www.twitterapis.com/twitter-api-usecases)[ Twitter API answers Short, sourced answers to the most common Twitter and X API questions. ](https://www.twitterapis.com/answers)[ Twitter timeline API Pull an account's full posting history over one REST endpoint. ](https://www.twitterapis.com/twitter-timeline-api)[ Twitter list API Read list members and list timelines with the same Bearer key. ](https://www.twitterapis.com/twitter-list-api) [ TwitterAPIs ](https://www.twitterapis.com/) The cheapest pay-as-you-go Twitter and X API. $0.0008 per call, which works out to $0.04 per 1,000 tweets on a full 20-tweet page. No subscriptions and no developer account. ## Product / API - [Pricing](https://www.twitterapis.com/pricing) - [Cost Calculator](https://www.twitterapis.com/twitter-api-cost-calculator) - [Rate Limits](https://www.twitterapis.com/twitter-api-rate-limits) - [MCP Server](https://www.twitterapis.com/mcp) - [Integrations](https://www.twitterapis.com/integrations) - [Language Clients](https://www.twitterapis.com/sdk) - [Changelog](https://www.twitterapis.com/changelog) - [Status](https://www.twitterapis.com/status) ## Developers - [Documentation](https://docs.twitterapis.com/docs) - [API Reference](https://docs.twitterapis.com/docs/reference/search/tweet-advanced-search) - [User Info](https://docs.twitterapis.com/docs/reference/user-reads/user-info) - [User Tweets](https://docs.twitterapis.com/docs/reference/user-reads/user-tweets) - [Advanced Search](https://docs.twitterapis.com/docs/reference/search/tweet-advanced-search) - [Verified Followers](https://docs.twitterapis.com/docs/reference/follower-graph/user-verified-followers) ## Resources / Compare - [Answers](https://www.twitterapis.com/answers) - [Reviews](https://www.twitterapis.com/reviews) - [Free Tools](https://www.twitterapis.com/tools) - [Twitter ID Finder](https://www.twitterapis.com/tools/twitter-id-finder) - [Get a Twitter API Key](https://www.twitterapis.com/twitter-api-key) - [Official X API Comparison](https://www.twitterapis.com/twitter-api-pricing) - [Twitter API Use Cases](https://www.twitterapis.com/twitter-api-usecases) - [Twitter API Alternatives](https://www.twitterapis.com/twitter-api-alternatives) - [Twitter Unofficial API](https://www.twitterapis.com/twitter-unofficial-api) - [Twitter Free API](https://www.twitterapis.com/twitter-free-api) - [TwitterAPIs vs twitterapi.io](https://www.twitterapis.com/twitterapis-vs-twitterapi-io) - [TwitterAPIs vs GetXAPI](https://www.twitterapis.com/twitterapis-vs-getxapi) - [TwitterAPIs vs TweetAPI](https://www.twitterapis.com/twitterapis-vs-tweetapi) - [TwitterAPIs vs TwexAPI](https://www.twitterapis.com/twitterapis-vs-twexapi) - [TwitterAPIs vs RapidAPI](https://www.twitterapis.com/twitterapis-vs-rapidapi) ## Legal - [About](https://www.twitterapis.com/about) - [Security](https://www.twitterapis.com/security) - [Trust](https://www.twitterapis.com/privacy-and-data-handling) - [Terms of Service](https://www.twitterapis.com/terms-of-service) - [Affiliates](https://www.twitterapis.com/affiliates) - [Contact](https://www.twitterapis.com/contact) - [Jobs](https://www.twitterapis.com/jobs) © 2026 TwitterAPIs. All rights reserved. TwitterAPIs is an independent third-party API for developers and researchers. Not affiliated with, endorsed by, or sponsored by X Corp. All systems operational