---
title: "Video metadata (no captions required)"
method: GET
path: "/api/v2/youtube/video/metadata"
tags: ["YouTube video"]
---

# Video metadata (no captions required)

`GET /api/v2/youtube/video/metadata`

## Request

- Base URL: `https://transcriptapi.com`
- URL: `https://transcriptapi.com/api/v2/youtube/video/metadata`
- Auth: HTTP bearer

Inspect a video's metadata without needing captions: title, view/like count text, publish date, structured description + links, uploading-channel summary, and thumbnails.

**Optional `include`** (comma-separated) adds heavier data:
- `related` — related videos.
- `details` — duration, category, tags, official thumbnails, caption-track inventory and availability flags. These come from YouTube's player endpoint, which requires our proxied (production) path; where unavailable, `details.available` is `false` with a `reason` rather than guessed values.

Display strings and numbers are kept distinct; hidden counts are `null`, never `0`.

**Freshness:** cached for 5 minutes.

**Credit cost:** 1 credit per request.

## Query parameters

- `video_url` string, required: YouTube video URL or 11-character video ID
- `include` string, nullable: Comma-separated extras: details, related

## Response `200`

Successful Response

- AppApiV2YoutubeSchemasYoutubeVideoInfoResponse
  - `videoId` string, nullable
  - `title` string, nullable
  - `viewCountText` string, nullable
  - `viewCountShort` string, nullable
  - `publishDate` string, nullable
  - `relativeDate` string, nullable
  - `likeCountText` string, nullable
  - `description` string, nullable
  - `descriptionLinks` DescriptionLink[]
    - `text` string, nullable
    - `url` string, nullable
  - `channel` VideoInfoChannel
    - `channelId` string, nullable
    - `name` string, nullable
    - `subscriberCountText` string, nullable
    - `thumbnails` Thumbnail[]
      - `url` string, required
      - `width` integer, nullable
      - `height` integer, nullable
  - `thumbnails` Thumbnail[]
    - `url` string, required
    - `width` integer, nullable
    - `height` integer, nullable
  - `details` VideoInfoDetails: Player-sourced details. `available` is False (with `reason`) when the player endpoint could not be read from the current IP (needs a residential proxy — production). Numeric-vs-display values are kept distinct.
    - `available` boolean
    - `reason` string, nullable
    - `lengthSeconds` integer, nullable
    - `category` string, nullable
    - `tags` string[], nullable
    - `isLiveContent` boolean, nullable
    - `isFamilySafe` boolean, nullable
    - `isUnlisted` boolean, nullable
    - `allowRatings` boolean, nullable
    - `thumbnails` Thumbnail[]
      - `url` string, required
      - `width` integer, nullable
      - `height` integer, nullable
    - `captionTracks` VideoCaptionTrack[]
      - `code` string, nullable
      - `name` string, nullable
      - `isAutoGenerated` boolean
  - `related` RelatedVideo[], nullable
    - `kind` string, required
    - `id` string, nullable
    - `title` string, nullable
    - `viewCountText` string, nullable
    - `lengthText` string, nullable
    - `channelName` string, nullable

## Other responses

- `400`: **Bad Request** - Missing or invalid parameters. **Do not retry** with the same input.
- `401`: Unauthorized - invalid Authorization format or API key
- `402`: Payment Required - inactive plan or exhausted credits
- `404`: **Not Found** - The requested resource does not exist. **Do not retry.**
- `408`: **Request Timeout / Retry** - Temporary failure (bot detection, network issues). **Safe to retry** after a short delay (1-5 seconds).
- `422`: **Unprocessable** - `video_url` is not a valid YouTube video URL or ID.
- `429`: **Too Many Requests** - Rate limit exceeded. **Retry after** the delay in `Retry-After` header.
- `500`: **Internal Server Error** - Unexpected error. May retry, but if persistent, contact support.
- `503`: **Service Unavailable** - Service temporarily down or initializing. **Retry** after a short delay.

## Changes

- **2026-10-07** `6380d033643e`: 3 warning
  - the optional response header `X-RateLimit-Limit` removed for the status `429`
  - the optional response header `X-RateLimit-Remaining` removed for the status `429`
  - the optional response header `X-RateLimit-Reset` removed for the status `429`
- **2026-09-19** `eebf723c2b14`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/transcriptapi/apis/youtube-transcript-api-public/changes/api/v2/youtube/video/metadata/get.md)

---

[API](https://skmtc.dev/transcriptapi/apis/youtube-transcript-api-public.md) - [All operations](https://skmtc.dev/transcriptapi/apis/youtube-transcript-api-public/llms.txt) - [OpenAPI document](https://skmtc.dev/transcriptapi/apis/youtube-transcript-api-public/revisions/af12b0db83b8?raw)
