Youtube
YouTube: channels, videos, shorts, live streams, comments, search, trending, and hashtags. All endpoints are read-only GET requests and return public YouTube data — no channel or video of your own is required.
Base URL: https://api.pullbay.com/
Endpoints
GET /youtube/channel
Get a single channel by ID, handle, or URL
—
GET /youtube/channel/{id}/videos
Get videos uploaded by a channel
Cursor / maxItems
GET /youtube/channel/{id}/shorts
Get shorts uploaded by a channel
Cursor / maxItems
GET /youtube/channel/{id}/live-streams
Get live streams (current and past) for a channel
Cursor / maxItems
GET /youtube/video
Get a single video's full metadata
—
GET /youtube/shorts/{id}
Get a single short's full metadata
—
GET /youtube/comments
Get top-level comments on a video
Cursor / maxItems
GET /youtube/search
Search videos, channels, or playlists
Cursor / maxItems
GET /youtube/hashtag
Get videos tagged with a hashtag
Cursor / maxItems
GET /youtube/trending
Get currently trending videos
—
Get Channel
Returns channel details. Provide exactly one of id, handle, or channelUrl.
Request
GET /youtube/channel
Authorization: Bearer YOUR_API_KEYParameters
id
string
One of id/handle/channelUrl
Channel ID, 1–100 characters (e.g. UCX6OQ3DkcsbYNE6H8uQQuVA)
handle
string
One of id/handle/channelUrl
Channel handle, 1–100 characters (e.g. @MrBeast)
channelUrl
string
One of id/handle/channelUrl
Full URL to the channel, 10–1000 characters
Example
Response
Credit cost: dynamic, returned in pricing.creditsCharged.
Get Channel Videos
Returns videos uploaded by the channel. Use cursor to paginate or maxItems for a one-shot bulk pull (mutually exclusive).
Request
Parameters
id
string
Yes
Channel ID, 1–100 characters — passed in the URL path
cursor
string
No
Opaque pagination cursor from a previous response. Mutually exclusive with maxItems
maxItems
integer
No
One-shot bulk pull, 1–200 results. Mutually exclusive with cursor
Example
Response
Credit cost: dynamic, returned in pricing.creditsCharged. Cost scales with the number of videos returned, not the number of requests.
Get Channel Shorts
Returns shorts uploaded by the channel. Use cursor to paginate or maxItems for a one-shot bulk pull (mutually exclusive).
Request
Parameters
id
string
Yes
Channel ID, 1–100 characters — passed in the URL path
cursor
string
No
Opaque pagination cursor from a previous response. Mutually exclusive with maxItems
maxItems
integer
No
One-shot bulk pull, 1–200 results. Mutually exclusive with cursor
Example
Response
Credit cost: dynamic, returned in pricing.creditsCharged. Cost scales with the number of shorts returned, not the number of requests.
Get Channel Live Streams
Returns live streams (current and past) for the channel. Use cursor to paginate or maxItems for a one-shot bulk pull (mutually exclusive).
Request
Parameters
id
string
Yes
Channel ID, 1–100 characters — passed in the URL path
cursor
string
No
Opaque pagination cursor from a previous response. Mutually exclusive with maxItems
maxItems
integer
No
One-shot bulk pull, 1–200 results. Mutually exclusive with cursor
Example
Response
Credit cost: dynamic, returned in pricing.creditsCharged. Cost scales with the number of streams returned, not the number of requests.
Get Video
Returns full metadata for a single video by its 11-character video id.
Request
Parameters
id
string
Yes
11-character video ID, 5–20 characters (e.g. dQw4w9WgXcQ)
type
string
No
video or shorts — hints the lookup at the content type
Example
Response
Credit cost: dynamic, returned in pricing.creditsCharged.
Get Short
Returns full metadata for a single short by its video id.
Request
Parameters
id
string
Yes
11-character video ID, 5–20 characters — passed in the URL path
Example
Response
Credit cost: dynamic, returned in pricing.creditsCharged.
Get Comments
Returns top-level comments for a video. sort is top (default) or latest. Use cursor to paginate or maxItems for a one-shot bulk pull (mutually exclusive).
Request
Parameters
id
string
Yes
11-character video ID, 5–20 characters
sort
string
No
top (default) or latest
cursor
string
No
Opaque pagination cursor from a previous response. Mutually exclusive with maxItems
maxItems
integer
No
One-shot bulk pull, 1–500 results. Mutually exclusive with cursor
Example
Response
Credit cost: dynamic, returned in pricing.creditsCharged. Cost scales with the number of comments returned, not the number of requests.
Search YouTube
Search YouTube. mode selects what to search for (video, channel, or playlist). When mode=video, results match the YoutubeVideo shape; other modes return shape variants. Use cursor to paginate or maxItems for a one-shot bulk pull (mutually exclusive).
Request
Parameters
query
string
Yes
Search query, 1–100 characters
mode
string
Yes
video, channel, or playlist
sortBy
string
No
relevance, rating, upload_date, or view_count
lang
string
No
Language code, 2–5 characters
geo
string
No
Region code, 2–5 characters
duration
string
No
short, medium, or long
features
string
No
One feature filter — 360, hd, subtitles, creative_commons, 3d, live, purchased, 4k, location, hdr, or vr180
uploadDate
string
No
hour, today, week, month, or year
cursor
string
No
Opaque pagination cursor from a previous response. Mutually exclusive with maxItems
maxItems
integer
No
One-shot bulk pull, 1–200 results. Mutually exclusive with cursor
Example
Response
Credit cost: dynamic, returned in pricing.creditsCharged. Using maxItems to pull more results in one call costs proportionally more than a single page.
Get Hashtag
Returns videos tagged with tag. Use cursor to paginate or maxItems for a one-shot bulk pull (mutually exclusive).
Request
Parameters
tag
string
Yes
Hashtag to look up, 1–100 characters, without the # (e.g. shorts)
cursor
string
No
Opaque pagination cursor from a previous response. Mutually exclusive with maxItems
maxItems
integer
No
One-shot bulk pull, 1–200 results. Mutually exclusive with cursor
Example
Response
Credit cost: dynamic, returned in pricing.creditsCharged. Cost scales with the number of videos returned, not the number of requests.
Get Trending
Returns currently trending videos. Use geo to target a country (e.g. US, GB).
Request
Parameters
geo
string
No
Region code, 2–5 characters (e.g. US, GB)
Example
Response
Credit cost: dynamic, returned in pricing.creditsCharged.
Object schemas
Channel object
type
string
Always channel
id
string
Channel ID
name
string
Channel display name
handle
string
Channel handle (e.g. @MrBeast)
url
string
Channel URL
description
string
Channel "About" description
thumbnails
string
Channel avatar image URL
isFamilySafe
boolean
Whether the channel is marked family-safe
subscriberCount
string
Subscriber count, formatted (e.g. 421M subscribers)
availableCountries
array
Country codes where the channel is available
tags
array
Channel keyword tags
joinedAt
string
Channel creation date, formatted (e.g. Joined Feb 20, 2012)
viewCount
string
All-time view count, formatted
videoCount
integer
Total number of uploaded videos
Channel reference object
Lightweight channel reference embedded in video and comment results.
id
string
Channel ID
name
string
Channel display name
handle
string
Channel handle
url
string
Channel URL
subscriberCount
string
Subscriber count, formatted
badges
array
Channel badges (e.g. Official Artist Channel)
Video object
Video result returned by the channel videos/shorts/live-streams, search, hashtag, and trending endpoints.
type
string
Always video
id
string
11-character video ID
url
string
Video watch URL
title
string
Video title
description
string
Video description snippet
publishDate
string
Relative publish date (e.g. 1 year ago)
views
string
View count as a string
duration
string
Video duration, formatted (e.g. 22:15:57); LIVE for active streams
Video detail object
Full video metadata returned by the get video and get short endpoints.
type
string
Always video
id
string
11-character video ID
title
string
Video title
status
string
Lookup status (e.g. OK)
url
string
Video watch URL
description
string
Full video description
duration
integer
Length in seconds
views
integer
View count
likes
integer
Like count
comments
integer
Total comment count
keywords
array
Video tags/keywords
superTitle
string
Hashtag/super-title line shown above the title
category
string
YouTube content category (e.g. Music)
isRatingsAllowed
boolean
Whether likes/dislikes are enabled
isLive
boolean
Whether the video is a live broadcast
isFamilySafe
boolean
Whether the video is marked family-safe
isPrivate
boolean
Whether the video is private
isExclusive
boolean
Whether the video is exclusive/members-only
Comment object
type
string
Always comment
id
string
Comment ID
text
string
Comment body text
likeCount
string
Like count, formatted (e.g. 1.8K)
replyCount
string
Reply count, formatted
publishedTime
string
Relative publish time (e.g. 1 month ago)
Comment author object
id
string
Author's channel ID
name
string
Author's display name/handle
thumbnails
string
Author's avatar image URL
Thumbnail object
url
string
Thumbnail image URL
width
integer
Image width in pixels
height
integer
Image height in pixels
Errors
All non-2xx responses share the same envelope:
400
Bad request — missing/invalid parameters, or more than one of id/handle/channelUrl supplied to Get Channel
402
Insufficient credits
404
Channel, video, short, or comment thread not found
Channel, Video, and Short IDs
Channel ID: the
UC...string in a channel URL, e.g.https://www.youtube.com/channel/UCX6OQ3DkcsbYNE6H8uQQuVA→UCX6OQ3DkcsbYNE6H8uQQuVA. Pass it as theidpath/query parameter depending on the endpoint.Handle: the
@nameshown on a channel's page, e.g.https://www.youtube.com/@MrBeast→@MrBeast.Video/Short ID: the 11-character
v=value in a watch URL or the trailing path segment of a shorts URL, e.g.https://www.youtube.com/watch?v=dQw4w9WgXcQ→dQw4w9WgXcQ. The same ID format is used for both regular videos and shorts — use/youtube/videoor/youtube/shorts/{id}depending on which you're looking up.
Pagination Notes
GET /youtube/channel,GET /youtube/video,GET /youtube/shorts/{id}, andGET /youtube/trendingare single-object or fixed-size lookups and have no pagination parameters.All list endpoints (channel videos, channel shorts, channel live streams, comments, search, hashtag) use cursor-based pagination: pass the
cursorvalue frompagination.cursorin a response to fetch the next page, or usemaxItemsinstead to pull a bulk batch in one call. The two are mutually exclusive.
Last updated