Body parameters
Keyword search query.
Where to search: youtube (default), tiktok, or instagram. Every video result's url is accepted by the transcript and batch endpoints as-is. The type, upload_date, duration, sort and captions options search YouTube only.
YouTube only. What to search for: video (the default), channel or playlist. Channels come back as data.kind channel_list, each row's url accepted by the channel endpoint; playlists as data.kind playlist_list, each row's url accepted by the playlist endpoint. A channel row carries the @handle, subscriber count and description; its videoCount is null, because YouTube's channel results no longer show one.
YouTube video search only. Keep videos uploaded within the last hour, today, this week, this month or this year.
YouTube video search only. Keep short (under 4 minutes), medium (4 to 20 minutes) or long (over 20 minutes) videos.
YouTube only. Result order: relevance (the default) or views (most viewed first). YouTube search no longer sorts by upload date or rating, so neither is offered; for recent videos, filter with upload_date.
YouTube video search only. true keeps only videos with subtitles or closed captions, whose transcripts come from captions rather than AI Fallback Transcription. Defaults to false: no filter.
Max items to return per page: videos, or the playlists or channels some listing options return. Defaults to 5.
Opaque pagination cursor from a previous response's next_cursor (max 256 characters). Omit for the first page. Cursors are scoped to the listing that issued them, so send the same platform and listing options with each page. Offset-based sources cannot page past the first 2000 items.
{
"ok": true,
"request_id": "req_…",
"data": {
"kind": "video_list",
"source": "search",
"platform": "youtube",
"videos": [
{
"videoId": "Hq3Lz8pVt2K",
"url": "https://www.youtube.com/watch?v=Hq3Lz8pVt2K",
"title": "Transformers, explained step by step",
"duration": 1580,
"channel": "Example Channel",
"publishedAt": "2026-09-08T00:00:00Z",
"stats": {
"plays": 184000
}
}
],
"next_cursor": "eyJvIjoxMH0"
},
"usage": {
"credits_spent": 1,
"balance": 656,
"bytes": 0
}
}Every YouTube endpoint
- POSTTranscriptFetch a YouTube video's transcript over REST: the request, every parameter, the JSON response with timestamped segments, and curl, Python and Node examples.
- POSTSearchSearch YouTube over REST without a Data API key or quota: the request, the upload date, duration, captions and sort filters, a real response, and curl, Python and Node examples.
- POSTChannel VideosList a YouTube channel's videos over REST without a Data API key: the request, the tab, sort and query options, since_video_id polling, a real response, and curl, Python and Node examples.
- POSTPlaylistList a YouTube playlist's videos over REST without a Data API key: the request with a playlist URL or PL id, cursor paging, a real response, and curl, Python and Node examples.
- POSTShortsList and transcribe a channel's YouTube Shorts over REST: the channel endpoint with tab shorts, a real Shorts listing, how a Short's transcript is fetched, and curl, Python and Node examples.
- POSTChannel MonitorWatch a YouTube channel for new videos over REST: create a monitor, receive each upload by signed webhook or from the events list, optionally with its transcript, with curl, Python and Node examples.
Same call, other platforms:TikTok Search APIInstagram Search API
Frequently asked questions
Is this the YouTube Data API's search.list?
No. It is TranscriptFetch's own search endpoint: no Google project, API key, OAuth or daily quota. One page of results costs 1 credit, and every row's url can go straight to the transcript endpoint.
Which filters does YouTube search support?
upload_date (hour, today, week, month, year), duration (short, medium, long), captions (true keeps only captioned videos) and sort (relevance or views). These are YouTube-only; TikTok and Instagram search take the query alone.
Can I search for channels or playlists rather than videos?
Yes. Send type channel or type playlist. The response's data.kind becomes channel_list or playlist_list, and each row's url is accepted by the channel or playlist endpoint as-is.
How do I page through results?
Each response carries data.next_cursor. Send it back as cursor to get the following page; limit sets the page size, up to 50. Stop when next_cursor is null.