Channels
/channels
GET /channelsList all channels accessible to the current team.
Request
Parameters
| Name | Type | Description |
|---|---|---|
| search | string | Search by channel title or handle. |
| per_page | integer | 1-100, default 20. |
| page | integer | Page number (default 1). |
Response (200)
Response Fields
| Field | Type | Description |
|---|---|---|
| id | integer | Channel ID (internal). |
| yt_handle | string | Handle stored on the channel. |
| details | object | Summary details from YouTube (see fields in example above). |
| scripts_count | integer | Total scripts for the channel. |
{
"success": true,
"data": [
{
"id": 123,
"yt_handle": "mkbhd",
"details": {
"title": "Marques Brownlee",
"custom_url": "mkbhd",
"channel_id": "UCBJycsmduvYEL83R_U4JriQ",
"subscriber_count": 19000000,
"video_count": 1650,
"view_count": 4200000000,
"description": "Channel description",
"country": "US",
"default_language": "en",
"thumbnails": {
"default": {
"url": "https://i.ytimg.com/..."
}
}
},
"scripts_count": 42
}
],
"pagination": {
"current_page": 1,
"per_page": 20,
"total": 1,
"last_page": 1
}
}
/channels/{id}
GET /channels/{id}Get detailed information about a specific channel.
Request
Parameters
| Name | Type | Description |
|---|---|---|
| id | integer | Channel ID (path parameter). |
Response (200)
Response Fields
| Field | Type | Description |
|---|---|---|
| id | integer | Channel ID (internal). |
| yt_handle | string | Handle stored on the channel. |
| details | object | Channel detail fields: title, custom_url, channel_id, subscriber_count, video_count, view_count, description, country, default_language, thumbnails. |
| settings | object | Key-value settings map for the channel. |
| voice | object | Default channel voice (see voice fields below). |
| scripts_count | integer | Total scripts for the channel. |
| scripts_idea_count | integer | Scripts in idea status. |
| scripts_active_count | integer | Scripts in active status. |
{
"success": true,
"data": {
"id": 123,
"yt_handle": "mkbhd",
"details": {
"title": "Marques Brownlee",
"custom_url": "mkbhd",
"channel_id": "UCBJycsmduvYEL83R_U4JriQ",
"subscriber_count": 19000000,
"video_count": 1650,
"view_count": 4200000000,
"description": "Channel description",
"default_language": "en",
"country": "US",
"thumbnails": {
"default": {
"url": "https://i.ytimg.com/..."
}
}
},
"settings": {
"language": "English",
"audience": "Tech enthusiasts"
},
"voice": {
"id": 77,
"name": "Default Voice",
"instructions": "Voice instructions",
"voice": "neutral"
},
"scripts_count": 42,
"scripts_idea_count": 4,
"scripts_active_count": 38
}
}
/channels/{id}/templates
GET /channels/{id}/templatesList available templates for channel (system + custom).
Request
Parameters
| Name | Type | Description |
|---|---|---|
| id | integer | Channel ID (path parameter). |
Response (200)
Response Fields
| Field | Type | Description |
|---|---|---|
| default_template_id | integer | Default template ID for this channel. |
| templates | array | Array of template objects. |
| templates[].id | integer | Template ID. |
| templates[].name | string | Template name. |
| templates[].category | string | Template category. |
| templates[].description | string | Short description. |
| templates[].is_active | boolean | Whether this is the active template. |
| templates[].is_system | boolean | System template flag. |
{
"success": true,
"data": {
"default_template_id": 22,
"templates": [
{
"id": 22,
"name": "Base Script",
"category": "base",
"description": "Standard outline",
"is_active": true,
"is_system": true
}
]
}
}
/channels/{id}/voices
GET /channels/{id}/voicesList available voices for channel and the default voice.
Request
Parameters
| Name | Type | Description |
|---|---|---|
| id | integer | Channel ID (path parameter). |
Response (200)
Response Fields
| Field | Type | Description |
|---|---|---|
| default_voice_id | integer | Default voice ID for this channel. |
| voices | array | Array of voice objects. |
| voices[].id | integer | Voice ID. |
| voices[].name | string | Voice name. |
| voices[].instructions | string | Voice guidelines. |
| voices[].voice | string | Voice identifier. |
{
"success": true,
"data": {
"default_voice_id": 77,
"voices": [
{
"id": 77,
"name": "Default Voice",
"instructions": "Voice instructions",
"voice": "neutral"
}
]
}
}
/channels/{id}/competitors
GET/POST/DELETE /channels/{id}/competitorsList, add, delete competitors. GET: returns competitors array. POST: request with identifier. DELETE: no body.
Request
{
"GET": "No body required",
"POST": "JSON with identifier (URL or channel ID)",
"DELETE": "No body required"
}
Response (GET) (200)
{
"success": true,
"data": [
{
"channel_id": "UC123...",
"title": "Competitor Channel",
"custom_url": "competitor",
"custom_url_with_at": "@competitor",
"youtube_url": "https://youtube.com/@competitor",
"thumbnails": {
"default": {
"url": "https://i.ytimg.com/..."
}
},
"subscriber_count": 500000,
"video_count": 300,
"view_count": 12000000
}
]
}
Response (POST) (201)
{
"success": true,
"data": {
"channel_id": 123,
"competitor": {
"channel_id": "UC123...",
"title": "Competitor Channel",
"custom_url": "competitor",
"custom_url_with_at": "@competitor",
"youtube_url": "https://youtube.com/@competitor"
}
}
}
Response (DELETE) (200)
{
"success": true,
"message": "Competitor removed."
}
Response Fields
| Field | Type | Description |
|---|---|---|
| channel_id | string | YouTube channel ID. |
| title | string | Channel title. |
| custom_url | string | Handle without @. |
| custom_url_with_at | string | Handle with @. |
| youtube_url | string | Full YouTube URL. |
| thumbnails | object | Thumbnail images object. |
| subscriber_count | integer | YouTube subscriber count. |
| video_count | integer | Total video count. |
| view_count | integer | Total view count. |