YouTube APIm.youtube.com ↗
Retrieve all video IDs and titles from any YouTube channel by handle. Auto-paginated, returns total count and normalized channel name.
What is the YouTube API?
The m.youtube.com API exposes 1 endpoint — list_videos — that returns every video title and ID published on a given YouTube channel. Pass a channel handle (with or without the leading @) and receive a paginated-through array of video objects alongside the normalized channel handle and a total video count. It is suited for channel auditing, content cataloging, and research workflows.
curl -X GET 'https://api.parse.bot/scraper/b0d66b2e-5480-4f4a-9741-426c8b774f7f/list_videos?channel_handle=Mindplicit' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace m-youtube-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: Mindplicit SDK — bounded, re-runnable; every call capped."""
from parse_apis.m_youtube_com_api import Mindplicit, ChannelNotFound
client = Mindplicit()
# List videos from the Mindplicit channel, capped at 3.
for video in client.videos.list(channel_handle="Mindplicit", limit=3):
print(video.video_id, video.title)
# Typed error: wrap a call to a non-existent channel.
try:
missing = client.videos.list(channel_handle="nonexistent_xyz_99999", limit=1).first()
except ChannelNotFound as e:
print(f"channel gone: {e.channel_handle}")
print("exercised: videos.list")
Retrieve all videos from a YouTube channel. Returns each video's ID and title, auto-paginating through all available pages. The channel is identified by its handle (e.g. 'Mindplicit' or '@Mindplicit').
| Param | Type | Description |
|---|---|---|
| channel_handle | string | YouTube channel handle, with or without the leading '@' (e.g. 'Mindplicit' or '@Mindplicit'). |
{
"type": "object",
"fields": {
"videos": "array of video objects with video_id and title",
"channel": "string — the normalized channel handle",
"total_videos": "integer — count of videos returned"
},
"sample": {
"data": {
"videos": [
{
"title": "Why You MUST Disappoint People — Carl Jung",
"video_id": "hmciPId4VMM"
},
{
"title": "7 Ways To Handle People Who Don’t Respect You — Baltasar Gracián",
"video_id": "rofPXA62wwI"
},
{
"title": "The End Of Critical Thinking And Rise Of Collective Stupidity - Carlo Cipolla",
"video_id": "RQ1jkLgjFq4"
}
],
"channel": "@Mindplicit",
"total_videos": 124
},
"status": "success"
}
}About the YouTube API
What the API Returns
The list_videos endpoint accepts a channel_handle string — either Mindplicit or @Mindplicit are treated identically — and returns a videos array where each element contains a video_id and a title. The channel field in the response carries the normalized handle, and total_videos gives the integer count of all videos returned in that call.
Pagination Behavior
The endpoint auto-paginates internally, meaning you receive all available videos for the channel in a single response rather than managing page tokens or offsets yourself. The total_videos field reflects the full count across all pages traversed.
Coverage and Scope
Data is limited to publicly visible videos on the specified channel. The response does not include private, unlisted, or age-restricted videos that require authentication. Fields are limited to video_id and title; view counts, like counts, publish dates, descriptions, and thumbnails are not part of the current response shape.
The YouTube API is a managed, monitored endpoint for m.youtube.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when m.youtube.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official m.youtube.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a content index of all public videos on a YouTube channel using returned
video_idandtitlefields. - Track total video output over time by storing the
total_videoscount from repeated calls. - Feed
video_idvalues into a downstream transcription or summarization pipeline. - Audit competitor channels by comparing video titles and counts across multiple handles.
- Populate a site search index with YouTube video titles from owned or curated channels.
- Cross-reference a channel's video catalog against a known topic list using
titlestrings.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does YouTube have an official developer API?+
What does `list_videos` actually return per video?+
videos array contains two fields: video_id (the YouTube video identifier) and title (the public video title). The response also includes channel (the normalized handle) and total_videos (integer count of all videos returned).Does the API return view counts, publish dates, or descriptions?+
video_id and title per video only. You can fork it on Parse and revise it to add endpoints that return additional metadata fields.Can I retrieve videos from multiple channels in one request?+
list_videos endpoint accepts a single channel_handle per call. To cover multiple channels, you would make one call per handle. You can fork the API on Parse and revise it to add a batch endpoint that accepts multiple handles.Are unlisted or private videos included in the results?+
videos array. Content that requires authentication or is otherwise restricted is not returned.