GitHubLog in
YouTube Shorts API

YouTube Shorts API

Lists a YouTube channel's Shorts, newest first: the channel endpoint with tab set to shorts. Each row's url is accepted by the transcript and batch endpoints, and a single Short is transcribed like any video, from its youtube.com/shorts/<id> URL.

Page of Shorts1 creditHowever many Shorts it lists
Nothing new1 creditA since_video_id poll costs the same
Failed requestsFreeA request that fails costs nothing
Supported URLs@handlehandle URLUC… id/channel//c//user/All URL formats
POST/api/v2/transcripts/channelidempotent

Body parameters

YouTube: @handle, /channel/UC… URL, or UC… ID. TikTok: profile URL (tiktok.com/@user). Instagram: profile URL (instagram.com/user/).

curl https://transcriptfetch.com/api/v2/transcripts/channel \
  -H "Authorization: Bearer $TRANSCRIPTFETCH_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"channel":"@lexfridman","tab":"shorts","limit":10}'
SuccessExample response envelope
{
  "ok": true,
  "request_id": "req_…",
  "data": {
    "kind": "video_list",
    "source": "channel_videos",
    "platform": "youtube",
    "videos": [
      {
        "videoId": "SHlrUAkkWI0",
        "url": "https://www.youtube.com/watch?v=SHlrUAkkWI0",
        "title": "Lex trains w/ Khabib Nurmagomedov | Exclusive Footage at UFC PI",
        "duration": null,
        "channel": "Lex Fridman",
        "publishedAt": null,
        "stats": {
          "plays": 64000
        }
      },
      {
        "videoId": "1WrrOJJ8-5g",
        "url": "https://www.youtube.com/watch?v=1WrrOJJ8-5g",
        "title": "High salaries for AI engineers: The talent war in AI",
        "duration": null,
        "channel": "Lex Fridman",
        "publishedAt": null,
        "stats": {
          "plays": 89000
        }
      }
    ],
    "next_cursor": "eyJvIjoxMH0"
  },
  "usage": {
    "credits_spent": 1,
    "balance": 656,
    "bytes": 0
  }
}

Every YouTube endpoint

Frequently asked questions

How do I get the transcript of one YouTube Short?

Send its URL (youtube.com/shorts/<id>) or the bare id to the transcript endpoint, exactly as for a normal video. Captions are read first and AI Fallback Transcription takes over when there are none; a Short is short, so it comes back inline.

How do I list every Short on a channel?

POST the channel to the channel endpoint with tab shorts and page with cursor until next_cursor is null. Each page costs 1 credit. The Videos tab does not include Shorts, which is why a Shorts-only creator looks empty without it.

Why are duration and publishedAt null on Shorts rows?

The Shorts listing YouTube serves carries neither, so the API returns null rather than a guess. Fetching a Short's transcript returns its real duration.

Can I be told when a channel posts a new Short?

Yes. Create a monitor on the channel with tab shorts. Each check reports the new Shorts by webhook or in the events list, optionally with their transcripts.