YouTube
Public YouTube channels, videos, Shorts, comments, transcripts, video files, frames, playlists, search, trending, and music charts.
YouTube provides 29 read endpoints in Test and Live environments.
Use your Openhandle key with the standard Authorization: Bearer header.
Endpoints
| Operation | Endpoint |
|---|---|
| Get profile | GET /v1/youtube/profiles/{identifier} |
| List profile videos | GET /v1/youtube/profiles/{identifier}/videos |
| List profile Shorts | GET /v1/youtube/profiles/{identifier}/shorts |
| List profile livestreams | GET /v1/youtube/profiles/{identifier}/livestreams |
| List profile playlists | GET /v1/youtube/profiles/{identifier}/playlists |
| List profile community posts | GET /v1/youtube/profiles/{identifier}/community-posts |
| Search profile videos | GET /v1/youtube/profiles/{identifier}/search?q={query} |
| List profile products | GET /v1/youtube/profiles/{identifier}/products |
| Get post | GET /v1/youtube/posts/{identifier} |
| List post comments | GET /v1/youtube/posts/{identifier}/comments |
| List comment replies | GET /v1/youtube/posts/{identifier}/comments/{comment_id}/replies?token={repliesToken} |
| Get transcript | GET /v1/youtube/posts/{identifier}/transcript |
| Get post files | GET /v1/youtube/posts/{identifier}/files |
| Get post storyboard | GET /v1/youtube/posts/{identifier}/storyboard |
| Get post frame | GET /v1/youtube/posts/{identifier}/frame?at={seconds} |
| List related posts | GET /v1/youtube/posts/{identifier}/related |
| List posts with the same sound | GET /v1/youtube/posts/{identifier}/sound-posts |
| Get community post | GET /v1/youtube/community-posts/{identifier} |
| List community post comments | GET /v1/youtube/community-posts/{identifier}/comments |
| List playlist posts | GET /v1/youtube/playlists/{identifier}/posts |
| List hashtag posts | GET /v1/youtube/hashtags/{identifier}/posts |
| Search posts | GET /v1/youtube/search/posts?q={query} |
| Search profiles | GET /v1/youtube/search/profiles?q={query} |
| Search playlists | GET /v1/youtube/search/playlists?q={query} |
| Search suggestions | GET /v1/youtube/search/suggestions?q={query} |
| List trending posts | GET /v1/youtube/trending/posts |
| List top music videos | GET /v1/youtube/charts/videos |
| List top songs | GET /v1/youtube/charts/tracks |
| List top artists | GET /v1/youtube/charts/artists |
Identifiers and filters
Profile paths accept @handle or a channel ID such as UCX6OQ3DkcsbYNE6H8uQQuVA.
Post paths accept the 11 character video ID of a video, a Short, or a livestream, such as dQw4w9WgXcQ.
Playlist paths accept a playlist ID. Hashtag paths accept the tag with or without #.
POST /v1/urls/fetch accepts channel, watch, youtu.be, Shorts, and live links.
Channel videos, Shorts, and livestreams take sort=newest|popular|oldest.
Channel videos also take since, an RFC 3339 time.
Comments take sort=top|newest.
Search posts take type=video|short, sort=relevance|rating|date|views, duration=short|medium|long, and uploaded=hour|today|week|month|year.
Trending and charts take country, a two-letter code such as US. Trending also takes category=now|music|games|movies.
The transcript takes language, such as en or es-419. Without it you get the track in the spoken language.
Exact and approximate values
YouTube lists show short labels, not raw values. A video list says "152M views" and "8 days ago". Openhandle keeps both what YouTube shows and how exact it is.
createdAtis always an exact timestamp. It isnullwhen YouTube did not publish one.approximateCreatedAtis a day estimated from the label, such as2026-10-18.createdAtLabelis YouTube's own label, such as8 days ago.metrics.isApproximateistruewhen a count came from a rounded label.
The single post endpoint and trending return exact times and exact view and like counts.
YouTube always rounds subscriber counts, on every endpoint.
A video's comment count is rounded. The comments endpoint returns the exact total in meta.comments.
Video files
GET /v1/youtube/posts/{identifier}/files returns the video and audio streams of a video.
Each rendition has its quality, MIME type, codecs, size, and a download url.
YouTube sends picture and sound in one file only up to 360p.
720p and higher come as a picture-only stream, so pair it with an audio stream.
hasVideo and hasAudio tell you what a stream holds.
The url is an Openhandle media link. A saved url keeps working.
Players and download tools can ask for byte ranges.
The files call is billed as one request. Downloading the files is free.
Storyboard
GET /v1/youtube/posts/{identifier}/storyboard returns the preview frames YouTube makes for a video.
A video gets one small frame every two seconds, 160 by 90 pixels.
A Short gets one every second.
The frames come packed into image sheets of five by five.
Each frame in frames has its time in milliseconds, its sheet, and its x and y position on that sheet, so you can crop it out.
Each sheet in sheets has its own size, because the last sheet only holds the rows it needs.
The sheets are Openhandle media links that keep working.
Frames
GET /v1/youtube/posts/{identifier}/frame?at=43 returns one still frame of a video, here at 43 seconds.
at is required and counts whole seconds from the start.
The frame comes in every resolution the video has, up to its own, such as 1080p.
Each rendition has its quality, its height, and a url.
A frame takes a few seconds to make.
Now and then the source fails for a moment that works on a second try. That answer is a retryable error and is not billed.
A time past the end of the video answers INVALID_PARAMETER.
Comment replies
Each comment carries a repliesToken when it has replies.
Pass that token as token to the replies endpoint for the first page.
Use meta.cursors.next for the pages after it.
Pagination
Pass meta.cursors.next as cursor to fetch the next page.
Keep the identifier, search query, filters, and freshness unchanged.
A null next cursor ends the collection.
Trending, charts, and search suggestions return one complete page.
Response fields
YouTube has dedicated profile, post, comment, community post, playlist, transcript, files, product, and chart entry schemas. A transcript answers its segments in milliseconds and lists every caption language the video offers. A video without captions, or without the requested language, answers no segments. Media fields use managed Openhandle URLs.
Test data
Use /v1/test-data?platform=youtube to find deterministic examples.
Test keys never contact the upstream provider.