Home · Docs · Endpoints · youtube/channel/videos
youtube/channel/videos — the channel's 50 most recent uploads
The 50 most recent videos of a channel, by channel id, through the official Data API v3. The list route whose depth is fixed by the upstream, not by a parameter you pass.
The call
| Path | GET /api/v1/youtube/channel/videos |
|---|---|
| Catalogue id | youtube/channel/videos |
| Cost | 1 credit per call. A call that finds nothing costs nothing. |
| Key | Required — Authorization: Bearer hk_live_... |
Parameters (1)
| Name | In | Required |
|---|---|---|
channel_id | query | yes |
That list is the whole list, and anything else is ignored in silence. An undeclared parameter is not rejected — it produces no error, no warning and no filtering. Check a parameter against this table before assuming a narrower result came back.
What the parameter list does not tell you
FIFTY, AND FIFTY IS THE UPSTREAM'S NUMBER. A real call on 4 October 2026 returned exactly 50 items. That is the page size the official Data API v3 serves for this query, and we do not declare a `limit` because the route does not read one: a parameter is declared when it is read, which is the same rule as `pinterest/boards` and `bluesky/post`. Asking for more than the fifty most recent uploads is not something this route can do, and saying so is cheaper for you than discovering it against a bill.
⚠️ `channel_id`, NOT A HANDLE. The parameter is the channel id — the `UC…` string — because that is what the official API addresses. If what you have is an `@handle`, resolve it first with `youtube/channel`, which takes `handle` and is the only route in this family that does. One extra call, and it is the reason that route exists.
This is the route that replaced a cheaper path we had already built. A channel's public RSS feed lists uploads for free and costs no quota, and the parser for it is still in the normalisation layer with its own test and a committed fixture. It is not what serves you here, for two measured reasons: the feed LAGS the official numbers, and it carries fewer of them. The official API is what this route calls, and the exact counters are what you get.
Why there is no success body on this page
The 200 body for this endpoint is not transcribed here. Reading it needs a client key, and there is no client key on the machine these pages were built from — internal keys exist only as hashes, by design. An example we never received would look exactly like one we did, so instead of composing one, the response shape is documented field by field on the schema pages below. Those are generated from the contract and tested against it in both directions; an invented example would be tested by nothing.
Response shapes (4)
PostItem— The normalised post shape. `metrics` carries likes, replies, reposts and quotes — and nothing else, because nothing else exists on every platform we read.PostsEnvelope— Every posts endpoint answers with this envelope. Eight fields, all required: you can read `success` and `credits_used` without checking whether they came.Author— The normalised profile shape, identical across all platforms. All twelve fields are nullable, and that is the design: a field we cannot read comes back null, never 0, because a zero would be a claim about the account.ApiError— Every 4xx and 5xx from the API carries this object. The `error` value is a stable string you can branch on; the extra fields appear only for the errors that have something to report.
Error codes (8)
Every one of them carries the same body shape: ApiError. The error value is a stable string you can branch on — branch on that, never on the message text.
400 · 401 · 402 · 404 · 405 · 451 · 503 · 502
Machine-readable
This endpoint is in /openapi.json (OpenAPI 3.1), with its cost on the operation itself. If you are generating a client, use the spec rather than this page — and note that the spec is filtered by what is switched on right now, so it is the better answer to "can I call this today".
The other 18 endpoint pages
archive/trends · archive/movers · archive/coverage · profile/history · youtube/channel · pinterest/boards · bluesky/post · tiktok/post · tiktok/search_suggestions · tiktok/video_screen_text · tiktok/post_transcript · youtube/video · youtube/playlist · youtube/channel/shorts · youtube/channel/lives · youtube/channel/playlists · youtube/video/comments · youtube/video/comment/replies