You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
docs: channel/videos sort + members_only across the plugin's API surface
All four places this repo enumerates the endpoint now carry it: README tool 8,
the SKILL.md routing table plus credit-hygiene notes, references/mcp-tools.md
and references/rest-api.md.
Each leads with the same framing: existing calls are untouched, and sort=latest
is a different view (the Videos tab, Shorts excluded) rather than a re-ordering
of the uploads feed. Verified empirically on three channels: 0 of the Shorts a
channel publishes appear in any sorted feed, while 43/48 (@ted), 12/40 (@nasa)
and 30/48 (@natgeo) appear in the unsorted uploads feed.
Per-tab field presence recorded honestly: tab=streams carries lengthText and
publishedTimeText, tab=shorts returns null for both, and the channel-tab feeds
null out channelId/channelTitle/channelHandle/index.
Docs only, no version bump.
Co-Authored-By: CRHQ <noreply@crhq.ai>
Copy file name to clipboardExpand all lines: README.md
+20-1Lines changed: 20 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -382,14 +382,33 @@ Search inside one specific channel for videos matching a query.
382
382
383
383
### 8. `list_channel_videos`
384
384
385
-
List a channel's feed, paginated. Use `tab` to choose the uploads feed (default, ~100/page), Shorts, or live streams (~48/page). Ideal for building databases or bulk transcript extraction.
385
+
List a channel's feed, paginated. Use `tab` to choose the uploads feed (default, ~100/page), Shorts, or live streams (~48/page), and the optional `sort` to order the Videos tab by latest, popular, or oldest. Ideal for building databases or bulk transcript extraction.
Existing calls are untouched: omitting sort returns the uploads feed exactly as before. sort=latest is a different view (YouTube's Videos tab, Shorts excluded), not a re-ordering of it.
395
+
396
+
||`tab: "videos"`, no `sort`|`tab: "videos"` + any `sort`|
Sort reads ~3.3x more pages (~30/page vs ~100), so it costs ~3.3x credits. Use it when you need ordering; most integrations don't.
405
+
406
+
`tab: "shorts"` and `tab: "streams"` read the same feed either way, so there `sort` only reorders.
407
+
408
+
Every item carries **`members_only`**: `true` only when YouTube badges the video "Members only", and those items have no `viewCountText`. It is always `false` on the uploads feed, on `tab: "shorts"`, and on playlists.
409
+
410
+
Items from `tab: "streams"` carry `lengthText` and `publishedTimeText` (for example `Streamed 2 years ago`, or `LIVE` and a watching count while live). `tab: "shorts"` returns `null` for both, because YouTube's Shorts grid publishes neither. On the channel-tab feeds, `channelId`, `channelTitle`, `channelHandle` and `index` are `null`.
| A channel's entire upload history, Shorts, or live streams |`list_channel_videos`|`GET /youtube/channel/videos`| 1 / page |
62
+
| A channel's back catalogue ranked by views, or walked oldest-first |`list_channel_videos` + `sort`|`GET /youtube/channel/videos?sort=`| 1 / page |
62
63
| The playlists on a channel |`list_channel_playlists`|`GET /youtube/channel/playlists`| 1 / page |
63
64
| A channel's community posts |`list_channel_posts`|`GET /youtube/channel/posts`| 1 / page |
64
65
| A channel's curated Home/podcasts/releases shelves |`get_channel_sections`|`GET /youtube/channel/sections`| 1 |
@@ -94,6 +95,10 @@ Successful calls cost 1 credit unless a tool states otherwise below. Failed and
94
95
95
96
-**`get_channel_latest_videos` is free.** Reach for it first for anything about recent
96
97
uploads. Use `list_channel_videos` only when the user genuinely wants the whole catalogue.
98
+
-`list_channel_videos` takes an optional `sort` (`latest` / `popular` / `oldest`). Existing calls are untouched: omitting sort returns the uploads feed exactly as before. sort=latest is a different view (YouTube's Videos tab, Shorts excluded), not a re-ordering of it.
99
+
Omitted reads the uploads playlist (~100/page, Shorts mixed in, members-only videos excluded);
100
+
any value reads the channel Videos tab (~30/page, long-form only, members-only videos included
101
+
and flagged `members_only`). They are different sets, not one list in two orders. A sorted page holds ~30 items instead of ~100, so paging a whole catalogue with `sort` set costs roughly 3.3x the pages and 3.3x the credits. Omit `sort` when you just want newest-first.
97
102
-**Search, then transcribe selectively.** Transcribing a whole page of search results is the
98
103
single most common way to waste credits. Pick the best 2-3 hits and pull those.
99
104
-**Search inside a channel** with `search_channel_videos` rather than listing every video and
Existing calls are untouched: omitting sort returns the uploads feed exactly as before. sort=latest is a different view (YouTube's Videos tab, Shorts excluded), not a re-ordering of it.
172
+
173
+
||`tab: "videos"`, no `sort`|`tab: "videos"` + any `sort`|
They are different sets, not one list in two orders. A sorted page holds ~30 items instead of ~100, so paging a whole catalogue with `sort` set costs roughly 3.3x the pages and 3.3x the credits. Omit `sort` when you just want newest-first.
182
+
183
+
`tab: "shorts"` and `tab: "streams"` read the same feed either way, so there `sort` only reorders.
184
+
185
+
Every item carries **`members_only`**: `true` only when YouTube badges the video "Members only", and those items have no `viewCountText`. It is always `false` on the uploads feed, on `tab: "shorts"`, and on playlists.
186
+
187
+
Items from `tab: "streams"` carry `lengthText` and `publishedTimeText` (for example `Streamed 2 years ago`, or `LIVE` and a watching count while live). `tab: "shorts"` returns `null` for both, because YouTube's Shorts grid publishes neither. On the channel-tab feeds, `channelId`, `channelTitle`, `channelHandle` and `index` are `null`.
188
+
170
189
Only when the user genuinely wants the whole catalogue. For recent uploads use
171
190
`get_channel_latest_videos` (free); to find something specific use `search_channel_videos`.
Provide **exactly one** of `channel` or `continuation`. The response carries
194
196
`continuation_token` and `has_more`.
195
197
198
+
Existing calls are untouched: omitting sort returns the uploads feed exactly as before. sort=latest is a different view (YouTube's Videos tab, Shorts excluded), not a re-ordering of it.
199
+
200
+
||`tab=videos`, no `sort`|`tab=videos` + any `sort`|
They are different sets, not one list in two orders. A sorted page holds ~30 items instead of ~100, so paging a whole catalogue with `sort` set costs roughly 3.3x the pages and 3.3x the credits. Omit `sort` when you just want newest-first. `tab=shorts` / `tab=streams` read the same feed either way; there `sort` only reorders.
209
+
210
+
Every item carries `members_only`, `true` only when YouTube badges it "Members only", and those
211
+
items have no `viewCountText`. `tab=streams` items carry `lengthText` and `publishedTimeText`
212
+
(for example `Streamed 2 years ago`); `tab=shorts` returns `null` for both, because YouTube's
213
+
Shorts grid publishes neither. On the channel-tab feeds, `channelId`, `channelTitle`,
214
+
`channelHandle` and `index` are `null`.
215
+
196
216
### Search within a channel: 1 credit per page
197
217
198
218
```http
@@ -283,6 +303,7 @@ Free endpoints still require an active plan with at least one credit available.
0 commit comments