> **For coding agents and LLMs:** This is one Social Fetch marketing page (markdown export). For API orientation start with [`/llms.txt`](https://www.socialfetch.dev/llms.txt); for auth and crawl rules use [`/agents.txt`](https://www.socialfetch.dev/agents.txt); for every operation use [`/llms-endpoints.txt`](https://www.socialfetch.dev/llms-endpoints.txt).

## This page

- **On-site (HTML):** <https://www.socialfetch.dev/platforms/twitter/tweets-transcript>
- **Markdown (.mdx) URL:** <https://www.socialfetch.dev/platforms/twitter/tweets-transcript.mdx>

---

# X (Twitter) tweet transcript API

Turn a public video tweet permalink into a plain spoken-text string — or an explicit null when speech cannot be recovered.

`GET /v1/twitter/tweets/transcript` takes a public tweet `url` (permalink such as `https://x.com/{user}/status/{id}`, or an identifier the docs accept). On a resolved lookup, `data.tweet` echoes the requested URL and `data.transcript` is a plain string when speech text is available. Branch on `data.lookupStatus` first (`found` / `not_found` / `lookup_failed`): `found` means the tweet resolved; `transcript` can still be null when speech is not detected or transcription is otherwise unavailable.

Videos that exceed the supported length return HTTP 400 `video_too_long_for_transcription` — that is not a 200 with a null string. There is no `useAiFallback` and no timed-segment object on this route (unlike YouTube or Rumble). Pricing is on the credit badge; bill from `meta.creditsCharged`. Use tweet detail or profile-tweets list routes when you need post metadata or a timeline, not spoken text.

## Request

- **Endpoint:** `GET /v1/twitter/tweets/transcript`
- **Credits:** 1 credit
+10 credits per started minute of transcribed video, up to 60 minutes (allowLongTranscription)
Max 601 credits
Failed requests are free
- **Input:** by tweet URL
- **Full reference:** [docs](https://www.socialfetch.dev/docs/api/v1/twitter/tweets/transcript/get)
- **Platform page:** [/platforms/twitter](https://www.socialfetch.dev/platforms/twitter)

## FAQ

### How do I get a Twitter / X video tweet transcript via API?

Call `GET /v1/twitter/tweets/transcript` with your Social Fetch API key in the `x-api-key` header and a public tweet `url` query param. Read `data.lookupStatus`, then `data.transcript`. See the API docs for parameters and examples.

### How much does the Twitter tweet transcript endpoint cost?

Pricing is documented on the operation in the API registry (shown on this page). Confirm on every response with meta.creditsCharged — that field is the billing source of truth.

### What does the Twitter tweet transcript response look like?

When the lookup resolves, `data.tweet` includes the requested `url`, and `data.transcript` is a plain string or null. There are no WebVTT or timed segment fields on this route. Always branch on `data.lookupStatus` before treating the transcript as present.

### What URL formats does the tweet transcript API accept?

Public tweet permalinks or identifiers accepted by the `url` query param (for example `https://x.com/{user}/status/{id}`). Pass one `url` per request. See the API docs for the exact input shape.

### Does a found tweet transcript lookup always return text?

No. `data.transcript` may be null when speech is not detected or transcription is otherwise unavailable, even after `lookupStatus` is `found`. A completed successful request still charges the documented credit. Persist `meta.requestId` when you need to debug a miss.

### What happens if a video tweet is too long to transcribe?

The API returns HTTP 400 with `video_too_long_for_transcription`. Treat that as a hard rejection, not a null transcript on 200. Persist `meta.requestId` / `error.requestId` if you need support.

### Do I need an X developer account for tweet transcripts?

No. Social Fetch authenticates with your Social Fetch API key only. You do not create an X developer app or pass X credentials for this public transcript route.
