API resource
YouTube
Channel analytics, audience demographics and retention, plus playlists and captions for your uploads.
Get YouTube channel insights
/v1/analytics/youtube/channel-insightsWorks on: YouTube
Query parameters
accountIdstringrequiredThe account id for the YouTube account.
metricsstringComma-separated list. Defaults to "views,estimatedMinutesWatched,subscribersGained,subscribersLost".
fromDatestringStart date (YYYY-MM-DD). Defaults to 30 days ago.
toDatestringEnd date (YYYY-MM-DD). Defaults to today. YouTube Analytics has a 2-3 day delay, so the fetch is internally clamped to 3 days ago; any requested range extending beyond that returns zero values for the tail days. The response's dateRange.until field reflects your requested value.
sincestringAlias of fromDate, kept for existing callers
untilstringAlias of toDate, kept for existing callers
metricTypestring"total_value" (default) returns aggregated totals. "time_series" returns per-day values in the "values" array.
curl "https://creatoros-production-5658.up.railway.app/v1/analytics/youtube/channel-insights?accountId=acc_Yt7Kp2Lm9Qx4Vw1Nz8Rc3Hb6Js5Df0Ga2Ue9Ki4Oq7X" \
-H "Authorization: Bearer $CREATOROS_API_KEY"{
"success": true,
"accountId": "acc_Yt7Kp2Lm9Qx4Vw1Nz8Rc3Hb6Js5Df0Ga2Ue9Ki4Oq7X",
"platform": "youtube",
"dateRange": {
"since": "string",
"until": "string"
},
"metricType": "time_series",
"breakdown": "string",
"metrics": {},
"unavailableMetrics": [
{
"metric": "string",
"reason": "not_enrolled",
"message": "string"
}
],
"dataDelay": "Data may be delayed up to 48 hours"
}Get YouTube daily views
/v1/analytics/youtube/daily-viewsWorks on: YouTube
Query parameters
videoIdstringrequiredThe YouTube video ID (e.g., "dQw4w9WgXcQ")
accountIdstringrequiredThe Creator OS account ID for the YouTube account
fromDatestringStart date (YYYY-MM-DD). Defaults to 30 days ago.
toDatestringEnd date (YYYY-MM-DD). Defaults to 3 days ago, the newest fully finalized day (YouTube finalizes analytics with a ~3-day delay).
startDatestringAlias of fromDate, kept for existing callers
endDatestringAlias of toDate, kept for existing callers
curl "https://creatoros-production-5658.up.railway.app/v1/analytics/youtube/daily-views?videoId=%3CvideoId%3E&accountId=acc_Yt7Kp2Lm9Qx4Vw1Nz8Rc3Hb6Js5Df0Ga2Ue9Ki4Oq7X" \
-H "Authorization: Bearer $CREATOROS_API_KEY"{
"success": true,
"videoId": "string",
"durationSeconds": 0,
"dateRange": {
"startDate": "2026-09-25T00:00:00.000Z",
"endDate": "2026-09-25T00:00:00.000Z"
},
"provisionalSince": "string",
"totalViews": 0,
"dailyViews": [
{
"date": "2026-09-25T00:00:00.000Z",
"views": 0,
"estimatedMinutesWatched": 0,
"averageViewDuration": 0,
"averageViewPercentage": 0,
"subscribersGained": 0,
"subscribersLost": 0,
"likes": 0,
"comments": 0,
"shares": 0
}
],
"lastSyncedAt": "2026-09-25T00:00:00.000Z",
"scopeStatus": {
"hasAnalyticsScope": true
}
}Get YouTube demographics
/v1/analytics/youtube/demographicsWorks on: YouTube
Query parameters
accountIdstringrequiredThe account id for the YouTube account
videoIdstringYouTube video ID. When provided, demographics are scoped to this single video (must belong to the connected channel; otherwise 404 video_not_found).
breakdownstringComma-separated list of demographic dimensions: age, gender, country. Defaults to all three if omitted.
fromDatestringStart date in YYYY-MM-DD format. Defaults to 90 days ago, or to the video's publish date (lifetime) when videoId is provided.
toDatestringEnd date (YYYY-MM-DD). Defaults to 3 days ago, the newest fully finalized day (YouTube finalizes analytics with a ~3-day delay). An explicit toDate is honored up to today: days inside the delay window are provisional and may still be revised by YouTube (see provisionalSince in the response).
startDatestringAlias of fromDate, kept for existing callers
endDatestringAlias of toDate, kept for existing callers
curl "https://creatoros-production-5658.up.railway.app/v1/analytics/youtube/demographics?accountId=acc_Yt7Kp2Lm9Qx4Vw1Nz8Rc3Hb6Js5Df0Ga2Ue9Ki4Oq7X" \
-H "Authorization: Bearer $CREATOROS_API_KEY"{
"success": true,
"accountId": "acc_Yt7Kp2Lm9Qx4Vw1Nz8Rc3Hb6Js5Df0Ga2Ue9Ki4Oq7X",
"platform": "youtube",
"videoId": "string",
"title": "string",
"publishedAt": "2026-09-25T00:00:00.000Z",
"demographics": {},
"dateRange": {
"startDate": "2026-01-01",
"endDate": "2026-03-31"
},
"provisionalSince": "string",
"note": "Age/gender values are viewer percentages (0-100). Country values are view counts. Data based on signed-in viewers only, with 2-3 day delay."
}Get YouTube video retention curve
/v1/analytics/youtube/video-retentionWorks on: YouTube
Query parameters
videoIdstringrequiredThe YouTube video ID (e.g., "dQw4w9WgXcQ")
accountIdstringrequiredThe Creator OS account ID for the YouTube account
fromDatestringStart date (YYYY-MM-DD). Defaults to the video's publish date (lifetime curve).
toDatestringEnd date (YYYY-MM-DD). Defaults to 3 days ago, the newest fully finalized day (YouTube finalizes analytics with a ~3-day delay). An explicit toDate is honored up to today: days inside the delay window are provisional and may still be revised by YouTube (see provisionalSince in the response).
startDatestringAlias of fromDate, kept for existing callers
endDatestringAlias of toDate, kept for existing callers
curl "https://creatoros-production-5658.up.railway.app/v1/analytics/youtube/video-retention?videoId=%3CvideoId%3E&accountId=acc_Yt7Kp2Lm9Qx4Vw1Nz8Rc3Hb6Js5Df0Ga2Ue9Ki4Oq7X" \
-H "Authorization: Bearer $CREATOROS_API_KEY"{
"success": true,
"accountId": "acc_Yt7Kp2Lm9Qx4Vw1Nz8Rc3Hb6Js5Df0Ga2Ue9Ki4Oq7X",
"videoId": "string",
"title": "string",
"publishedAt": "2026-09-25T00:00:00.000Z",
"durationSeconds": 0,
"dateRange": {
"startDate": "2026-09-25T00:00:00.000Z",
"endDate": "2026-09-25T00:00:00.000Z"
},
"provisionalSince": "string",
"retentionCurve": [
{
"elapsedVideoTimeRatio": 0,
"audienceWatchRatio": 0,
"relativeRetentionPerformance": 0,
"startedWatching": 0,
"stoppedWatching": 0,
"totalSegmentImpressions": 0
}
],
"note": "string",
"scopeStatus": {
"hasAnalyticsScope": true
}
}List YouTube playlists
/v1/accounts/{accountId}/youtube-playlistsWorks on: YouTube
Path parameters
accountIdstringrequiredNo description
curl "https://creatoros-production-5658.up.railway.app/v1/accounts/acc_Yt7Kp2Lm9Qx4Vw1Nz8Rc3Hb6Js5Df0Ga2Ue9Ki4Oq7X/youtube-playlists" \
-H "Authorization: Bearer $CREATOROS_API_KEY"{
"playlists": [
{
"id": "string",
"title": "string",
"description": "string",
"privacy": "public",
"itemCount": 0,
"thumbnailUrl": "string"
}
],
"defaultPlaylistId": "string"
}Create YouTube playlist
/v1/accounts/{accountId}/youtube-playlistsWorks on: YouTube
Path parameters
accountIdstringrequiredNo description
Body
titlestringrequiredPlaylist title. Leading and trailing whitespace is removed.
descriptionstringOptional playlist description.
privacystringNo description - one of: private, public, unlisted
curl -X POST "https://creatoros-production-5658.up.railway.app/v1/accounts/acc_Yt7Kp2Lm9Qx4Vw1Nz8Rc3Hb6Js5Df0Ga2Ue9Ki4Oq7X/youtube-playlists" \
-H "Authorization: Bearer $CREATOROS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "<title>"
}'{
"playlist": {
"id": "string",
"title": "string",
"description": "string",
"privacy": "private",
"itemCount": 0,
"thumbnailUrl": "string"
}
}Set default YouTube playlist
/v1/accounts/{accountId}/youtube-playlistsWorks on: YouTube
Path parameters
accountIdstringrequiredNo description
Body
defaultPlaylistIdstringrequiredNo description
defaultPlaylistNamestringNo description
curl -X PUT "https://creatoros-production-5658.up.railway.app/v1/accounts/acc_Yt7Kp2Lm9Qx4Vw1Nz8Rc3Hb6Js5Df0Ga2Ue9Ki4Oq7X/youtube-playlists" \
-H "Authorization: Bearer $CREATOROS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"defaultPlaylistId": "<defaultPlaylistId>"
}'{
"success": true
}Get a YouTube video transcript
/v1/accounts/{accountId}/youtube-captionsWorks on: YouTube
Path parameters
accountIdstringrequiredThe connected YouTube account.
Query parameters
videoIdstringrequiredThe YouTube video id (the `platformPostId` on a synced external post).
languagestringBCP-47 language tag as YouTube labels the track. `en` also matches an `en-GB` track. Omit to take the best available track.
formatstring`json` returns timed `cues`; `srt` returns the raw SubRip body instead. `text` is present either way.
refreshstringRe-download from YouTube instead of serving the stored copy. Spends 200 quota units.
curl "https://creatoros-production-5658.up.railway.app/v1/accounts/acc_Yt7Kp2Lm9Qx4Vw1Nz8Rc3Hb6Js5Df0Ga2Ue9Ki4Oq7X/youtube-captions?videoId=%3CvideoId%3E" \
-H "Authorization: Bearer $CREATOROS_API_KEY"{
"accountId": "acc_Yt7Kp2Lm9Qx4Vw1Nz8Rc3Hb6Js5Df0Ga2Ue9Ki4Oq7X",
"videoId": "string",
"language": "string",
"trackId": "string",
"trackKind": "asr",
"source": "cache",
"fetchedAt": "2026-09-25T00:00:00.000Z",
"text": "string",
"cues": [
{
"start": 0,
"end": 0,
"text": "string"
}
],
"srt": "string",
"availableTracks": [
{
"trackId": "string",
"language": "string",
"trackKind": "asr",
"name": "string"
}
]
}