Video info and caption availability
Read a video's details without buying its transcript. This endpoint costs zero credits, including the optional dates lookup. It requires an API key and counts toward your request limit.
/api/v1/video/:videoId| Name | Type | Description |
|---|---|---|
videoIdrequired | path string | 11-character video ID, not a full URL. |
include | query string | Set to dates for publish/upload timestamps, likes, and category. Omit for the base record. No other value is accepted. |
curl -H "Authorization: Bearer yvt_live_..." \
"https://api.youtubevideotranscript.io/api/v1/video/dQw4w9WgXcQ?include=dates"Base fields
| Name | Type | Description |
|---|---|---|
video_id, title, url | string | Video identity, title, and watch URL. |
channel, channel_id | string | Channel display name and UC... identifier. channel is a string, not a nested object. |
duration_seconds | number | Video length in seconds. |
views | number | null | YouTube's unrounded view count as returned by this lookup. Record your lookup time if comparing readings. |
is_live | boolean | YouTube's live-content flag. |
thumbnail, description | string | Thumbnail URL and full video description. |
keywords | string[] | Creator tags; can be empty. |
has_captions | boolean | Whether this lookup found any caption tracks. |
caption_tracks | array | Each row has language_code, language_name, and boolean auto_generated. Empty when no tracks were found. |
Optional dates, likes, and category
include=dates adds a separate upstream lookup, so request it only when needed. On success the following fields are added at the top level, alongside the base fields:
| Name | Type | Description |
|---|---|---|
published_at | string | ISO publish timestamp supplied by YouTube. Preserve its timezone offset. |
uploaded_at | string | Upload date; falls back to published_at if no separate upload date is supplied. Equal values do not prove upload and publication happened together. |
likes | number | null | Unrounded like count when supplied. Not included in the base lookup. |
category | string | null | Video category when supplied. |
If this additional lookup fails or cannot supply dates, the base record still succeeds with dates: null; the four fields above are absent. If you do not request dates, neither those fields nor the dates key appears. There is no nested dates object on success.
const res = await fetch(
"https://api.youtubevideotranscript.io/api/v1/video/dQw4w9WgXcQ?include=dates",
{ headers: { Authorization: `Bearer ${process.env.YVT_API_KEY}` } },
);
if (!res.ok) throw new Error(await res.text());
const info = await res.json();
console.log(info.views, info.caption_tracks);
if ("published_at" in info) {
console.log(info.published_at, info.likes);
} else {
console.log("Dates unavailable; base metadata was returned.");
}Transcript metadata is a smaller record
GET /transcript/:videoId returns title, author, thumbnail, and other basic metadata when available. It does not include views, likes, dates, or comments. Use this endpoint for details and GET /comments/:videoId for comments. The MCP equivalent is get_video_info with include_dates: true.
Errors
Invalid IDs or include values return 400 bad_request. Restricted or unavailable videos can return 403 forbidden. Missing captions alone do not make video info fail. See Errors for authentication, throttling, and upstream failures.