YouTube API endpoint
Returns normalized videos from the public YouTube hashtag page for the supplied tag. Set `type=shorts` to use the Shorts tab, or pass `continuation_token` from a previous response to fetch the next page.
/youtube/tag/{tag}Path parameters:
tag: YouTube hashtag without the leading #Query parameters:
type: optional tab selector, all by default or shortscontinuation_token: optional token from a previous responseReturns videos from the YouTube hashtag page. The first page can also include a legacy meta object with capitalized keys preserved from the current API response.
| Field | Filled in, of 29 checked | Values in the sample |
|---|---|---|
| id | 29 | |
| title | 29 | |
| duration_seconds | 28 | 156 to 2,850, median 946 |
| published_at | 29 | 0001-01-01 |
| channel_title | 29 | |
| channel_id | 29 | |
| views_count | 28 | 3,622 to 6,654,607, median 145,575 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| tag (path) | string | Yes | Tag to filter videos | openai | |
| type | string | No | Result tab to load Allowed values: all, shorts. | ||
| continuation_token | string | No | Continuation token for pagination, first page if empty | ||
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/youtube/tag/openai?type=all" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"videos": [
{
"id": "QpM5pr-jS9I",
"title": "OpenAI Playground Tutorial for Beginners",
"duration_seconds": 938,
"published_at": "2023-07-18T15:31:09Z",
"channel_title": "Jennifer Marie",
"channel_id": "UC-ooPg34j8PK3osA4l-726Q",
"views_count": 47545
}
],
"meta": {
"VideosCount": 123456,
"ChannelsCount": 1200
},
"continuation_token": "NEXT_TOKEN"
}
}Request schema
No body schema
Response schema
#/definitions/youtube.tagResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | youtube.TagResp | No | ||||
| data.continuation_token | string | No | Token to pass in the next request to get the following page. | |||
| data.meta | object | No | Totals shown on the hashtag page. Present on the first page only. | |||
| data.meta.channelsCount | integer · int64 | No | Number of channels using the hashtag, as shown on the hashtag page. | |||
| data.meta.videosCount | integer · int64 | No | Number of videos using the hashtag, as shown on the hashtag page. | |||
| data.videos | array | No | Videos posted under the hashtag. | |||
| data.videos[].channel_id | string | No | UCXZCJLdBC09xxGZ6gcdrc6A | YouTube channel ID of the uploader. | ||
| data.videos[].channel_title | string | No | OpenAI | Name of the channel that uploaded the video. | ||
| data.videos[].comments_count | integer | No | 1400 | Number of comments on the video; may be rounded when YouTube shows an abbreviated count. Omitted when unavailable. | ||
| data.videos[].description | string | No | On the first episode of the OpenAI Podcast... | Full video description. | ||
| data.videos[].dislikes_count | integer | No | 0 | may be hidden | ||
| data.videos[].duration_seconds | number | No | 2423 | length in seconds | ||
| data.videos[].id | string | No | YbJOTdZBX1g | YouTube video ID. | ||
| data.videos[].likes_count | integer | No | 11000 | Number of likes on the video; may be rounded when YouTube shows an abbreviated count. Omitted when unavailable. | ||
| data.videos[].published_at | string | No | 2025-06-18T07:59:20-07:00 | Time the video was published, in RFC 3339. | ||
| data.videos[].title | string | No | Sam Altman on AGI, GPT-5, and what’s next — the OpenAI Podcast Ep. 1 | Video title as shown on YouTube. | ||
| data.videos[].views_count | integer | No | 460176 | Number of views of the video. Omitted when unavailable. | ||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Missing or invalid parameters | #/definitions/app.Response |
| 404 | Tag page not found | #/definitions/app.Response |
| 429 | Rate limit exceeded | #/definitions/app.Response |
| 500 | Internal server error | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/youtube/tag/openai?type=all" \
-H "x-api-key: $CRAWLORA_API_KEY"