Ideas
/channels/{id}/ideas
POST /channels/{id}/ideasCreate a new video idea in the ideas system.
Request
{
"title": "string (required) - Idea title (max 255)",
"topic": "string (optional) - Topic (max 5000)",
"angle": "string (optional) - Angle (max 1000)",
"suggested_length": "integer (optional) - Word count (200-20000)",
"suggested_template_id": "integer (optional) - Template ID",
"thumbnail_concept": "string (optional) - Thumbnail concept text",
"notes": "string (optional) - Notes (max 2000)"
}
Response (201)
Response Fields
| Field | Type | Description |
|---|---|---|
| success | boolean | Request success |
| data.id | integer | Idea ID |
| data.channel_id | integer | Channel ID |
| data.title | string | Idea title |
| data.status | string | Idea status |
| data.script_id | integer|null | Linked script ID (nullable) |
| data.source_type | string | Source type (e.g. user_added) |
{
"success": true,
"data": {
"id": 456,
"channel_id": 123,
"title": "Why Apple's AI Changes Everything",
"topic": "Analysis of Apple Intelligence",
"angle": "Reveal the hidden implication that most reviews miss.",
"suggested_length": 1200,
"suggested_template_id": 22,
"status": "new",
"script_id": null,
"source_type": "user_added",
"thumbnail_concept": "Split-screen before/after with bold headline",
"outlier_score": null,
"notes": null
}
}
/channels/{id}/ideas
GET /channels/{id}/ideasList ideas for a channel with optional filters.
Request
Parameters
| Name | Type | Description |
|---|---|---|
| id | integer | Channel ID (path parameter) |
| status | string | Filter by status (new, considering, rejected, writing, complete) |
| source_type | string | Filter by source (user_added, ai_generated, from_video, from_channel, outlier, chat_saved) |
| search | string | Search in title, topic, or angle |
| per_page | integer | 1-100, default 20 |
| page | integer | Page number (default 1) |
Response (200)
Response Fields
| Field | Type | Description |
|---|---|---|
| success | boolean | Request success |
| data[].id | integer | Idea ID |
| data[].channel_id | integer | Channel ID |
| data[].title | string | Idea title |
| data[].topic | string|null | Idea topic (nullable) |
| data[].status | string | Idea status |
| data[].script_id | integer|null | Linked script ID (nullable) |
| pagination.total | integer | Total results |
{
"success": true,
"data": [
{
"id": 456,
"channel_id": 123,
"title": "Why Apple's AI Changes Everything",
"topic": "Analysis of Apple Intelligence",
"angle": "Reveal the hidden implication...",
"suggested_length": 1200,
"suggested_template_id": 22,
"status": "new",
"script_id": null,
"source_type": "user_added",
"thumbnail_concept": "Split-screen before/after with bold headline",
"outlier_score": null,
"notes": null
}
],
"pagination": {
"current_page": 1,
"per_page": 20,
"total": 1,
"last_page": 1
}
}
/ideas/{id}
GET /ideas/{id}Get a single idea by ID.
Request
Parameters
| Name | Type | Description |
|---|---|---|
| id | integer | Idea ID (path parameter) |
Response (200)
Response Fields
| Field | Type | Description |
|---|---|---|
| success | boolean | Request success |
| data.id | integer | Idea ID |
| data.channel_id | integer | Channel ID |
| data.title | string | Idea title |
| data.topic | string|null | Idea topic (nullable) |
| data.angle | string|null | Idea angle (nullable) |
| data.status | string | Idea status |
| data.script_id | integer|null | Linked script ID (nullable) |
| data.source_type | string | Source type (e.g. user_added) |
{
"success": true,
"data": {
"id": 456,
"channel_id": 123,
"title": "Why Apple's AI Changes Everything",
"topic": "Analysis of Apple Intelligence",
"angle": "Reveal the hidden implication...",
"suggested_length": 1200,
"suggested_template_id": 22,
"status": "new",
"script_id": null,
"source_type": "user_added",
"thumbnail_concept": "Split-screen before/after",
"outlier_score": null,
"notes": null
}
}
/ideas/{id}/write
POST /ideas/{id}/writeConvert an idea into a canvas script (create script from idea).
Request
{
"id": "integer (required) - Idea ID (path parameter)"
}
Response (200)
Response Fields
| Field | Type | Description |
|---|---|---|
| success | boolean | Request success |
| data.script_id | integer | Newly created script ID |
| data.script_number | integer | Sequential number per channel |
| data.thread_id | integer | Associated thread ID |
| data.canvas_url | string | Canvas URL for editing |
{
"success": true,
"data": {
"script_id": 789,
"script_number": 12,
"thread_id": 456,
"status": "active",
"canvas_url": "https://subscribr.com/chat/{thread}/canvas/{script}"
}
}
/channels/{id}/ideas/generate
POST /channels/{id}/ideas/generateGenerate a batch of new ideas for a channel.
Request
{
"count": "integer (optional) - 1-20. Default 10"
}
Response (202)
Response Fields
| Field | Type | Description |
|---|---|---|
| success | boolean | Request success |
| message | string | Status message |
| data.channel_id | integer | Channel ID |
| data.count | integer | Number of ideas to generate |
{
"success": true,
"message": "Idea generation started.",
"data": {
"channel_id": 123,
"count": 10
}
}
/channels/{id}/ideas/generate-from-video
POST /channels/{id}/ideas/generate-from-videoGenerate ideas based on a specific YouTube video.
Request
{
"video_url": "string (optional) - YouTube video URL. Max 500 chars",
"video_id": "string (optional) - YouTube video ID",
"count": "integer (optional) - 1-20. Default 10"
}
Response (202)
Response Fields
| Field | Type | Description |
|---|---|---|
| success | boolean | Request success |
| message | string | Status message |
| data.channel_id | integer | Channel ID |
| data.count | integer | Number of ideas to generate |
{
"success": true,
"message": "Idea generation from video started.",
"data": {
"channel_id": 123,
"count": 10
}
}