Home · Docs · Endpoints · tiktok/video_screen_text
tiktok/video_screen_text — the words burned into the frames
Text rendered on screen inside a TikTok video, read frame by frame. Not the caption, not the audio — the overlay the editor typed.
The call
| Path | GET /api/v1/tiktok/video/screen-text |
|---|---|
| Catalogue id | tiktok/video_screen_text |
| Cost | 1 credit per call. A call that finds nothing costs nothing. |
| Key | Required — Authorization: Bearer hk_live_... |
Parameters (1)
| Name | In | Required |
|---|---|---|
url | query | yes |
That list is the whole list, and anything else is ignored in silence. An undeclared parameter is not rejected — it produces no error, no warning and no filtering. Check a parameter against this table before assuming a narrower result came back.
What the parameter list does not tell you
THIS IS NOT THE CAPTION AND NOT THE TRANSCRIPT. Three different texts live in one TikTok video and this API keeps them in three routes, because conflating them is how a dataset becomes unusable: the caption is the description under the video and comes with `tiktok/post`; the spoken words come from `tiktok/post_transcript`; and the words drawn ON the frames — the hook, the step numbers, the punchline — come from here. On short-form video the on-screen text is very often the only place the actual claim is written down.
A real call on 4 October 2026 returned 20 items for one video. Each item is a run of text the frames carried, in the order they appeared, which is why the count is a property of the video's editing rather than a page size. `limit` is not declared: there is nothing to page through, only however many runs that video has.
⚠️ `metrics` IS `{}` ON EVERY ITEM, and it stays that way. A run of on-screen text is not a published object — nobody can like a frame — so there are no counters to report, and an empty object says exactly that. It is not a zero and it is not a bug; the counters for the video itself come from `tiktok/post`.
Measured caveats (1)
An empty `metrics` is a deliberate absence, not a zero
Four of these routes return `metrics: {}` on every item: `tiktok/video_screen_text`, `youtube/channel/shorts`, `youtube/channel/lives` and — on the item level — several others. That empty object means the upstream listing did not carry counters, so we have nothing to report. It does NOT mean the counts are zero. The distinction is the whole point: a `0` would be a measurement we did not take, and reading `metrics.likes` as absent rather than as none is the difference between 'unknown' and 'nobody liked it'. When you need the counters for a video, ask `youtube/video` for it by id — there they are exact.
Source: Real production calls on 4 October 2026: 20 items from `tiktok/video/screen-text`, 48 from `youtube/channel/shorts` and 1 from `youtube/channel/lives`, every one with `metrics: {}`.
Why there is no success body on this page
The 200 body for this endpoint is not transcribed here. Reading it needs a client key, and there is no client key on the machine these pages were built from — internal keys exist only as hashes, by design. An example we never received would look exactly like one we did, so instead of composing one, the response shape is documented field by field on the schema pages below. Those are generated from the contract and tested against it in both directions; an invented example would be tested by nothing.
Response shapes (2)
PostsEnvelope— Every posts endpoint answers with this envelope. Eight fields, all required: you can read `success` and `credits_used` without checking whether they came.ApiError— Every 4xx and 5xx from the API carries this object. The `error` value is a stable string you can branch on; the extra fields appear only for the errors that have something to report.
Error codes (8)
Every one of them carries the same body shape: ApiError. The error value is a stable string you can branch on — branch on that, never on the message text.
400 · 401 · 402 · 404 · 405 · 451 · 503 · 502
Machine-readable
This endpoint is in /openapi.json (OpenAPI 3.1), with its cost on the operation itself. If you are generating a client, use the spec rather than this page — and note that the spec is filtered by what is switched on right now, so it is the better answer to "can I call this today".
The other 18 endpoint pages
archive/trends · archive/movers · archive/coverage · profile/history · youtube/channel · pinterest/boards · bluesky/post · tiktok/post · tiktok/search_suggestions · tiktok/post_transcript · youtube/video · youtube/channel/videos · youtube/playlist · youtube/channel/shorts · youtube/channel/lives · youtube/channel/playlists · youtube/video/comments · youtube/video/comment/replies