Ideas

POST

/channels/{id}/ideas

Required Permission scripts:write

Create a new video idea in the ideas system.

Request

Request Body
{
    "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)
Response Example
{
    "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
    }
}
GET

/channels/{id}/ideas

Required Permission scripts:read

List 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
Response Example
{
    "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
    }
}
GET

/ideas/{id}

Required Permission scripts:read

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)
Response Example
{
    "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
    }
}
POST

/ideas/{id}/write

Required Permission scripts:write

Convert an idea into a canvas script (create script from idea).

Request

Request Body
{
    "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
Response Example
{
    "success": true,
    "data": {
        "script_id": 789,
        "script_number": 12,
        "thread_id": 456,
        "status": "active",
        "canvas_url": "https://subscribr.com/chat/{thread}/canvas/{script}"
    }
}
POST

/channels/{id}/ideas/generate

Required Permission scripts:write

Generate a batch of new ideas for a channel.

Request

Request Body
{
    "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
Response Example
{
    "success": true,
    "message": "Idea generation started.",
    "data": {
        "channel_id": 123,
        "count": 10
    }
}
POST

/channels/{id}/ideas/generate-from-video

Required Permission scripts:write

Generate ideas based on a specific YouTube video.

Request

Request Body
{
    "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
Response Example
{
    "success": true,
    "message": "Idea generation from video started.",
    "data": {
        "channel_id": 123,
        "count": 10
    }
}