> **Building with AI coding agents?** If you're using an AI coding agent, install the official Scalekit plugin. It gives your agent full awareness of the Scalekit API — reducing hallucinations and enabling faster, more accurate code generation.
>
> - **Claude Code**: `/plugin marketplace add scalekit-inc/claude-code-authstack` then `/plugin install <auth-type>@scalekit-auth-stack`
> - **GitHub Copilot CLI**: `copilot plugin marketplace add scalekit-inc/github-copilot-authstack` then `copilot plugin install <auth-type>@scalekit-auth-stack`
> - **Codex**: run the bash installer, restart, then open Plugin Directory and enable `<auth-type>`
> - **Skills CLI** (Windsurf, Cline, 40+ agents): `npx skills add scalekit-inc/skills --list` then `--skill <skill-name>`
>
> `<auth-type>` / `<skill-name>`: `agent-auth`, `full-stack-auth`, `mcp-auth`, `modular-sso`, `modular-scim` — [Full setup guide](https://docs.scalekit.com/dev-kit/build-with-ai/)

---

# YouTube

<div class="grid grid-cols-5 gap-4 items-center">
 <div class="col-span-4">
  Connect to YouTube to access channel details, analytics, and upload or manage videos via OAuth 2.0
 </div>
 <div class="flex justify-center">
  <img src="https://cdn.scalekit.cloud/sk-connect/assets/provider-icons/youtube.svg" width="64" height="64" alt="YouTube logo" />
 </div>
</div>

Supports authentication: OAuth 2.0

## Set up the agent connector

<SetupYoutubeSection />

## Tool list

## `youtube_analytics_group_create`

Create a YouTube Analytics group to organize videos, playlists, channels, or assets for collective analytics reporting.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `item_type` | string | Yes | Type of items the group will contain |
| `on_behalf_of_content_owner` | string | No | Content owner ID. For content partners only. |
| `title` | string | Yes | Title of the analytics group |

## `youtube_analytics_group_item_insert`

Add a video, playlist, or channel to a YouTube Analytics group.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `group_id` | string | Yes | ID of the Analytics group to add the item to |
| `on_behalf_of_content_owner` | string | No | Content owner ID. For content partners only. |
| `resource_id` | string | Yes | ID of the resource (video ID, channel ID, or playlist ID) |
| `resource_kind` | string | Yes | Type of the resource |

## `youtube_analytics_group_items_delete`

Remove an item (video, channel, or playlist) from a YouTube Analytics group.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | string | Yes | ID of the group item to remove |
| `on_behalf_of_content_owner` | string | No | Content owner ID on whose behalf the request is being made |

## `youtube_analytics_group_items_list`

Retrieve a list of items (videos, playlists, channels, or assets) that belong to a YouTube Analytics group.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `group_id` | string | Yes | ID of the group whose items to retrieve |
| `on_behalf_of_content_owner` | string | No | Content owner ID on whose behalf the request is being made |

## `youtube_analytics_groups_delete`

Delete a YouTube Analytics group. This removes the group but does not delete the videos, channels, or playlists within it.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `group_id` | string | Yes | ID of the Analytics group to delete |
| `on_behalf_of_content_owner` | string | No | Content owner ID on whose behalf the request is being made |

## `youtube_analytics_groups_list`

Retrieve a list of YouTube Analytics groups for a channel or content owner. Specify either id or mine to filter results.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | string | No | Comma-separated list of group IDs to retrieve |
| `mine` | boolean | No | If true, return only groups owned by the authenticated user. Required if id is not set. |
| `on_behalf_of_content_owner` | string | No | Content owner ID on whose behalf the request is being made |
| `page_token` | string | No | Token for retrieving the next page of results |

## `youtube_analytics_groups_update`

Update the title of an existing YouTube Analytics group.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `group_id` | string | Yes | ID of the Analytics group to update |
| `on_behalf_of_content_owner` | string | No | Content owner ID. For content partners only. |
| `title` | string | Yes | New title for the Analytics group |

## `youtube_analytics_query`

Query YouTube Analytics data to retrieve metrics like views, watch time, subscribers, revenue, etc. for channels or content owners.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `currency` | string | No | Currency for monetary metrics (ISO 4217 code, e.g., USD) |
| `dimensions` | string | No | Comma-separated list of dimensions to group results by (e.g., day,country,video) |
| `end_date` | string | Yes | End date for the analytics report in YYYY-MM-DD format |
| `filters` | string | No | Filter expression to narrow results (e.g., country==US, video==VIDEO_ID) |
| `ids` | string | Yes | Channel or content owner ID. Format: channel==CHANNEL_ID or contentOwner==CONTENT_OWNER_ID |
| `include_historical_channel_data` | boolean | No | Include historical channel data recorded before the channel was linked to a content owner |
| `max_results` | integer | No | Maximum number of rows to return in the response (maximum value: 200) |
| `metrics` | string | Yes | Comma-separated list of metrics to retrieve (e.g., views,estimatedMinutesWatched,likes,subscribersGained) |
| `sort` | string | No | Comma-separated list of columns to sort by. Prefix with - for descending order (e.g., -views) |
| `start_date` | string | Yes | Start date for the analytics report in YYYY-MM-DD format |
| `start_index` | integer | No | 1-based index of the first row to return (for pagination) |

## `youtube_captions_list`

Retrieve a list of caption tracks for a YouTube video. The part parameter is fixed to 'snippet'. Requires youtube.force-ssl scope.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | string | No | Comma-separated list of caption track IDs to filter results |
| `video_id` | string | Yes | ID of the video to list captions for |

## `youtube_channels_list`

Retrieve information about one or more YouTube channels including subscriber count, video count, and channel metadata. You must provide exactly one filter: id, mine, for_handle, for_username, or managed_by_me. Requires a valid YouTube OAuth2 connection.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `for_handle` | string | No | YouTube channel handle to look up (e.g., @MrBeast). Use instead of id, mine, or for_username. |
| `for_username` | string | No | YouTube username of the channel to look up (legacy). Use instead of id, mine, or for_handle. |
| `id` | string | No | Comma-separated list of YouTube channel IDs. Use instead of mine, for_handle, or for_username. |
| `managed_by_me` | boolean | No | Return channels managed by the authenticated user (content partners only). Use instead of id, mine, for_handle, or for_username. |
| `max_results` | integer | No | Maximum number of results to return (0-50, default: 5) |
| `mine` | boolean | No | Return the authenticated user's channel. Use instead of id, for_handle, or for_username. |
| `page_token` | string | No | Token for pagination |
| `part` | string | Yes | Comma-separated list of channel resource parts to include in the response |

## `youtube_comment_threads_insert`

Post a new top-level comment on a YouTube video. Requires youtube.force-ssl scope.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `text` | string | Yes | Text of the comment |
| `video_id` | string | Yes | ID of the video to comment on |

## `youtube_comment_threads_list`

Retrieve top-level comment threads for a YouTube video or channel. You must provide exactly one filter: video_id, all_threads_related_to_channel_id, or id. Each thread includes the top-level comment and optionally its replies. Requires a valid YouTube OAuth2 connection.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `all_threads_related_to_channel_id` | string | No | Return all comment threads associated with a specific channel. Use instead of video_id or id. |
| `id` | string | No | Comma-separated list of comment thread IDs to retrieve. Use instead of video_id or all_threads_related_to_channel_id. |
| `max_results` | integer | No | Maximum number of comment threads to return (1-100, default: 20) |
| `order` | string | No | Sort order for comment threads |
| `page_token` | string | No | Token for pagination |
| `part` | string | Yes | Comma-separated list of comment thread resource parts to include |
| `search_terms` | string | No | Limit results to comments containing these search terms |
| `video_id` | string | No | YouTube video ID to fetch comment threads for. Use instead of all_threads_related_to_channel_id or id. |

## `youtube_comments_list`

Retrieve a list of replies to a specific YouTube comment thread. You must provide exactly one filter: parent_id or id. The part parameter is fixed to 'snippet'. Requires youtube.readonly scope.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | string | No | Comma-separated list of comment IDs to retrieve. Use instead of parent_id. |
| `max_results` | integer | No | Maximum number of replies to return (1-100, default: 20). Cannot be used with id filter. |
| `page_token` | string | No | Token for pagination to retrieve the next page of replies. Cannot be used with id filter. |
| `parent_id` | string | No | ID of the comment thread (top-level comment) to list replies for. Use instead of id. |
| `text_format` | string | No | Format of the comment text in the response |

## `youtube_playlist_delete`

Permanently delete a YouTube playlist. This action cannot be undone. Requires youtube scope.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `playlist_id` | string | Yes | ID of the playlist to delete |

## `youtube_playlist_insert`

Create a new YouTube playlist for the authenticated user. Requires youtube scope.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `default_language` | string | No | Default language of the playlist |
| `description` | string | No | Playlist description |
| `privacy_status` | string | No | Privacy setting |
| `tags` | `array<string>` | No | Tags for the playlist |
| `title` | string | Yes | Playlist title |

## `youtube_playlist_items_delete`

Remove a video from a YouTube playlist by its playlist item ID. Requires youtube scope.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `playlist_item_id` | string | Yes | ID of the playlist item to remove (not the video ID) |

## `youtube_playlist_items_insert`

Add a video to a YouTube playlist at an optional position. Requires youtube scope.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `note` | string | No | Optional note for this playlist item |
| `playlist_id` | string | Yes | Playlist to add the video to |
| `position` | integer | No | Zero-based position in the playlist. Omit to add at end. |
| `video_id` | string | Yes | YouTube video ID to add |

## `youtube_playlist_items_list`

Retrieve a list of videos in a YouTube playlist. Returns playlist items with video details, positions, and metadata. Requires a valid YouTube OAuth2 connection.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `max_results` | integer | No | Maximum number of playlist items to return (0-50, default: 5) |
| `page_token` | string | No | Token for pagination to retrieve the next page |
| `part` | string | Yes | Comma-separated list of playlist item resource parts to include |
| `playlist_id` | string | Yes | YouTube playlist ID to retrieve items from |
| `video_id` | string | No | Filter results to items containing a specific video |

## `youtube_playlist_update`

Update an existing YouTube playlist's title, description, privacy status, or default language. Requires youtube scope.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `default_language` | string | No | Language of the playlist |
| `description` | string | No | New playlist description |
| `playlist_id` | string | Yes | ID of the playlist to update |
| `privacy_status` | string | No | New privacy setting |
| `title` | string | No | New playlist title |

## `youtube_playlists_list`

Retrieve a list of YouTube playlists for a channel or the authenticated user. You must provide exactly one filter: channel_id, id, or mine. Requires a valid YouTube OAuth2 connection.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `channel_id` | string | No | Return playlists for a specific channel. Use instead of id or mine. |
| `id` | string | No | Comma-separated list of playlist IDs to retrieve. Use instead of channel_id or mine. |
| `max_results` | integer | No | Maximum number of playlists to return (0-50, default: 5) |
| `mine` | boolean | No | Return playlists owned by the authenticated user. Use instead of channel_id or id. |
| `page_token` | string | No | Token for pagination |
| `part` | string | Yes | Comma-separated list of playlist resource parts to include |

## `youtube_reporting_create_job`

Create a YouTube reporting job to schedule daily generation of a specific report type. Once created, YouTube will generate the report daily.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | string | Yes | Human-readable name for the reporting job |
| `on_behalf_of_content_owner` | string | No | Content owner ID on whose behalf the job is being created |
| `report_type_id` | string | Yes | ID of the report type to generate (e.g., channel_basic_a2, channel_demographics_a1) |

## `youtube_reporting_jobs_delete`

Delete a scheduled YouTube Reporting API job. Stopping a job means new reports will no longer be generated.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `job_id` | string | Yes | ID of the reporting job to delete |
| `on_behalf_of_content_owner` | string | No | Content owner ID on whose behalf the request is being made |

## `youtube_reporting_list_jobs`

List all YouTube Reporting API jobs scheduled for a channel or content owner.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `include_system_managed` | boolean | No | If true, include system-managed reporting jobs in the response |
| `on_behalf_of_content_owner` | string | No | Content owner ID on whose behalf the request is being made |
| `page_size` | integer | No | Maximum number of jobs to return per page |
| `page_token` | string | No | Token for retrieving the next page of results |

## `youtube_reporting_list_report_types`

List all YouTube Reporting API report types available for a channel or content owner (e.g., channel_basic_a2, channel_demographics_a1).

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `include_system_managed` | boolean | No | If true, include system-managed report types in the response |
| `on_behalf_of_content_owner` | string | No | Content owner ID on whose behalf the request is being made |
| `page_size` | integer | No | Maximum number of report types to return per page |
| `page_token` | string | No | Token for retrieving the next page of results |

## `youtube_reporting_list_reports`

List reports that have been generated for a YouTube reporting job. Each report is a downloadable CSV file.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `created_after` | string | No | Only return reports created after this timestamp (RFC3339 format, e.g., 2024-01-01T00:00:00Z) |
| `job_id` | string | Yes | ID of the reporting job whose reports to list |
| `on_behalf_of_content_owner` | string | No | Content owner ID on whose behalf the request is being made |
| `page_size` | integer | No | Maximum number of reports to return per page |
| `page_token` | string | No | Token for retrieving the next page of results |
| `start_time_at_or_after` | string | No | Only return reports whose data start time is at or after this timestamp (RFC3339 format) |
| `start_time_before` | string | No | Only return reports whose data start time is before this timestamp (RFC3339 format) |

## `youtube_search`

Search for videos, channels, and playlists on YouTube. Returns a list of resources matching the search query. The part parameter is fixed to 'snippet'. Requires a valid YouTube OAuth2 connection.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `channel_id` | string | No | Restrict search results to a specific channel |
| `max_results` | integer | No | Maximum number of results to return (0-50, default: 10) |
| `order` | string | No | Sort order for search results |
| `page_token` | string | No | Token for pagination to retrieve the next page of results |
| `published_after` | string | No | Filter results to resources published after this date (RFC 3339 format) |
| `published_before` | string | No | Filter results to resources published before this date (RFC 3339 format) |
| `q` | string | No | Search query keywords |
| `safe_search` | string | No | Safe search filter level |
| `type` | string | No | Restrict results to a specific resource type |
| `video_duration` | string | No | Filter videos by duration (only applies when type is 'video') |

## `youtube_subscriptions_delete`

Unsubscribe the authenticated user from a YouTube channel using the subscription ID. Requires youtube scope.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `subscription_id` | string | Yes | ID of the subscription to delete |

## `youtube_subscriptions_insert`

Subscribe the authenticated user to a YouTube channel. Requires youtube scope.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `channel_id` | string | Yes | ID of the YouTube channel to subscribe to |

## `youtube_subscriptions_list`

Retrieve a list of YouTube channel subscriptions for the authenticated user or a specific channel. You must provide exactly one filter: channel_id, id, mine, my_recent_subscribers, or my_subscribers. Requires a valid YouTube OAuth2 connection with youtube.readonly scope.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `channel_id` | string | No | Return subscriptions for a specific channel. Use instead of id, mine, my_recent_subscribers, or my_subscribers. |
| `for_channel_id` | string | No | Filter subscriptions to specific channels (comma-separated channel IDs) |
| `id` | string | No | Comma-separated list of subscription IDs to retrieve. Use instead of channel_id, mine, my_recent_subscribers, or my_subscribers. |
| `max_results` | integer | No | Maximum number of subscriptions to return (0-50, default: 5) |
| `mine` | boolean | No | Return subscriptions for the authenticated user. Use instead of channel_id, id, my_recent_subscribers, or my_subscribers. |
| `my_recent_subscribers` | boolean | No | Return the authenticated user's recent subscribers. Use instead of channel_id, id, mine, or my_subscribers. |
| `my_subscribers` | boolean | No | Return the authenticated user's subscribers. Use instead of channel_id, id, mine, or my_recent_subscribers. |
| `order` | string | No | Sort order for subscriptions |
| `page_token` | string | No | Token for pagination |
| `part` | string | Yes | Comma-separated list of subscription resource parts to include |

## `youtube_video_categories_list`

Retrieve a list of YouTube video categories available in a given region or by ID. You must provide exactly one filter: id or region_code. The part parameter is fixed to 'snippet'. Useful for setting the category when updating a video. Requires youtube.readonly scope.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `hl` | string | No | Language for the category names in the response (BCP-47) |
| `id` | string | No | Comma-separated list of category IDs to retrieve. Use instead of region_code. |
| `region_code` | string | No | ISO 3166-1 alpha-2 country code to retrieve categories available in that region. Use instead of id. |

## `youtube_videos_delete`

Permanently delete a YouTube video. This action cannot be undone. Requires youtube scope.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `video_id` | string | Yes | ID of the video to delete |

## `youtube_videos_get_rating`

Retrieve the authenticated user's rating (like, dislike, or none) for one or more YouTube videos. The part parameter is fixed to 'id'. Requires youtube.readonly scope.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | string | Yes | Comma-separated list of YouTube video IDs to get ratings for |

## `youtube_videos_list`

Retrieve detailed information about one or more YouTube videos including statistics, snippet, content details, and status. You must provide exactly one filter: id, chart, or my_rating. Requires a valid YouTube OAuth2 connection.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `chart` | string | No | Retrieve a chart of the most popular videos. Use instead of id or my_rating. |
| `id` | string | No | Comma-separated list of YouTube video IDs. Use instead of chart or my_rating. |
| `max_results` | integer | No | Maximum number of results to return when using chart filter (1-50, default: 5) |
| `my_rating` | string | No | Filter videos by the authenticated user's rating. Use instead of id or chart. |
| `page_token` | string | No | Token for pagination |
| `part` | string | Yes | Comma-separated list of video resource parts to include in the response |
| `region_code` | string | No | ISO 3166-1 alpha-2 country code to filter trending videos by region |
| `video_category_id` | string | No | Filter most popular videos by category ID |

## `youtube_videos_rate`

Like, dislike, or remove a rating from a YouTube video on behalf of the authenticated user. Requires youtube scope with youtube.force-ssl.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `rating` | string | Yes | Rating to apply to the video |
| `video_id` | string | Yes | YouTube video ID to rate |

## `youtube_videos_update`

Update metadata for an existing YouTube video. When updating snippet, both title and category_id are required together. Requires youtube scope.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `category_id` | string | No | YouTube video category ID. Required together with title when updating snippet. |
| `default_language` | string | No | Language of the video |
| `description` | string | No | New video description |
| `embeddable` | boolean | No | Whether the video can be embedded |
| `license` | string | No | Video license |
| `privacy_status` | string | No | New privacy setting |
| `public_stats_viewable` | boolean | No | Whether stats are publicly visible |
| `tags` | `array<string>` | No | Video tags |
| `title` | string | No | New video title. Required together with category_id when updating snippet. |
| `video_id` | string | Yes | ID of the video to update |

---

## More Scalekit documentation

| Resource | What it contains | When to use it |
|----------|-----------------|----------------|
| [/llms.txt](/llms.txt) | Structured index with routing hints per product area | Start here — find which documentation set covers your topic before loading full content |
| [/llms-full.txt](/llms-full.txt) | Complete documentation for all Scalekit products in one file | Use when you need exhaustive context across multiple products or when the topic spans several areas |
| [sitemap-0.xml](https://docs.scalekit.com/sitemap-0.xml) | Full URL list of every documentation page | Use to discover specific page URLs you can fetch for targeted, page-level answers |
