InsightSocial API
YouTube

Channel › Videos

GET
/v1/youtube/channel/videos

Returns recent videos published by a channel, each with title, view count, duration, thumbnail, and publish date; pass includeExtras=true to add like and comment counts.

Use it for a channel's regular uploads; channel/shorts covers Shorts, channel/lives covers streams, channel/community-posts covers text posts.

Metered: 20–40 credits. We reserve the ceiling when the call starts and charge what it actually used when it finishes.

Re-running the exact same call within 6h is free.

Paginates by cursor — see Pagination.

x-api-key<token>

Your key from the dashboard. It starts with isk_.

In: header

Query Parameters

channelId?string

YouTube channel ID. Provide at least one of: channelId, handle.

handle?string

YouTube channel handle without the @ symbol. Provide at least one of: channelId, handle.

since?string

Only videos published on or after this date: YYYY-MM-DD (midnight UTC) or an ISO 8601 timestamp. Older videos are left off the page, and the page that reaches one ends the walk: next_cursor is not returned and pagination.stopped_at is since. Pinned videos sit out of date order and never end the walk. The page still costs what a page costs, so a daily poll pays for the pages it walks and no more.

stop_at_id?string

The id (post.id) or URL (post.url) of the newest video you already hold. The page stops just before it: that video and everything after it are left off, next_cursor is not returned, and pagination.stopped_at is known_id. A pinned video never counts as the stop point. If it is not on this page the page is returned in full with its cursor, so keep walking. pagination.stopped_at is end when the list ran out first and null while there is more to walk.

sort?string

Sort by latest or popular

Value in

  • "latest"
  • "popular"
continuationToken?string

Continuation token to get more videos. Get 'continuationToken' from previous response.

includeExtras?string

Set to true to add the like count and comment count (post.engagement.likes / .comments) and the video description (post.ext.description). For the full per-video detail use /v1/youtube/video. Slows the response slightly.

is_paid_promotions?string

Set to 'true' to search YouTube's public paid product placement / sponsorship / endorsement surface: returns normal videos where the creator disclosed a paid promotion.

include?"channel"

Set to channel (one token only) to add the channel's subscriber count to every row (post.ext.author_followers, YouTube's own figure, rounded to three significant figures above 1,000) plus post.author.display_name, .avatar_url and post.ext.channel_id where missing. Adds well under a second (never more than 8). Read data.hydration for what it did.

Value in

  • "channel"
exact_dates?string

Exact publish dates are on by default and free. Set to false to skip the lookup: those rows then carry the supplier's estimate (a day-granular or coarser label truncated to midnight UTC), marked by post.ext.published_precision and post.ext.published_label. A row the lookup could not resolve keeps that estimate and marker, and _warnings carries exact_dates_partial (some rows) or exact_dates_unavailable (none).

Value in

  • "true"
  • "false"

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/v1/youtube/channel/videos"
{  "success": true,  "platform": "instagram",  "endpoint": "/v1/instagram/profile/posts",  "data": {    "items": [      "…"    ],    "dropped": 0  },  "pagination": {    "next_cursor": "is2.eyJwIjoyfQ",    "has_more": true,    "page_size": 12  },  "credits_used": 20,  "credits_remaining": 9980,  "request_id": "req_1a2b3c4d5e6f",  "cached": false,  "idempotent_replay": false,  "charge_reason": "miss",  "free_call": false}