Thumbnails

GET

/team/thumbnails/usage

Required Permission scripts:read thumbnails:read

Get current thumbnail generation quota and usage for your team. Returns up to three quota pools: the free pool (included with every plan), an optional add-on pool (monthly subscription), and an optional pack pool (one-time purchased credits). The total_remaining field provides the combined remaining generations across all pools.

Rate limit: 60 requests per minute

Request

No request body required.

Response (200)

Response Example
{
    "success": true,
    "data": {
        "eligible": true,
        "free_pool": {
            "limit": 5,
            "used": 2,
            "reserved": 1,
            "remaining": 2,
            "next_reset": "2026-04-01"
        },
        "addon_pool": {
            "limit": 50,
            "used": 10,
            "reserved": 0,
            "remaining": 40,
            "next_reset": "2026-04-15"
        },
        "pack_pool": {
            "limit": 100,
            "used": 5,
            "reserved": 0,
            "remaining": 95,
            "next_reset": null
        },
        "total_remaining": 137
    }
}

Response Fields

Field Type Description
success boolean Request success
data.eligible boolean Whether the team is eligible for thumbnail generation (requires active subscription)
data.free_pool object Free pool included with every plan
data.free_pool.limit integer Monthly free generation limit
data.free_pool.used integer Completed generations this period
data.free_pool.reserved integer In-progress generations (counted against remaining until completed or released)
data.free_pool.remaining integer Available generations (limit minus used minus reserved)
data.free_pool.next_reset string|null Pool reset date (Y-m-d format)
data.addon_pool object|null Monthly add-on subscription pool (null if not subscribed). Same fields as free_pool.
data.pack_pool object|null One-time purchased credit pack (null if none purchased). Same fields as free_pool. next_reset is always null — pack credits do not expire.
data.total_remaining integer Combined remaining across all active pools
POST

/channels/{id}/thumbnails/generations

Required Permission scripts:write thumbnails:write

Create an asynchronous thumbnail generation for a channel. Three main modes: (1) **Idea-based** — provide an idea_id to generate a final 2K thumbnail from an existing idea. (2) **Brainstorm** — provide a prompt (no idea_id) to generate concept sketches at 1K resolution. Brainstorm results are stored as concept variations on a new idea; to produce final 2K thumbnails, call this endpoint again with the returned idea_id. (3) **Clone** — provide a clone_strategy and reference_image_url to generate thumbnails that match an existing thumbnail's style. The generation runs in the background; poll the returned run_id for status or use callback_url for async notification.

Rate limit: 12 requests per minute

Request

JSON body. Path id is your Subscribr channel ID. Requires active subscription (403 if ineligible).

Parameters

Name Type Description
id integer Subscribr channel ID (path).

Request Body Fields

Field Type Required Description
idea_id integer No Idea-based or improvement mode. Must belong to channel.
prompt string No Required for brainstorm/clone when idea_id omitted. Max 2000.
topic string No Brainstorm context. Max 1000.
num_variations integer No 1–8. Default 1 with idea_id, 4 without. Each variation reserves one quota unit when idea_id set.
callback_url string No HTTPS callback (not team webhooks). Max 2048.
callback_secret string No Signs callback body via X-Subscribr-Signature. Max 255.
improvement_mode boolean No Requires idea_id, feedback, reference_variation_url.
feedback string No Required when improvement_mode=true. Max 5000.
reference_variation_url string No HTTPS URL. Required when improvement_mode=true.
clone_strategy string No direct_reference or style_analysis
reference_image_url string No HTTPS reference image. Required when clone_strategy set.
Example Request Body
{
    "idea_id": 42,
    "num_variations": 3,
    "callback_url": "https://partner.example.com/subscribr/thumbnail-callback",
    "callback_secret": "whsec_thumbnail_partner_secret"
}

Response (202)

Response Example
{
    "success": true,
    "data": {
        "run_id": "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d",
        "run_ids": [
            "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d"
        ],
        "status": "queued"
    }
}

Response Fields

Field Type Description
data.run_id string Primary generation run ID (UUID). Use this to poll status via the Get Generation Status endpoint.
data.run_ids array All run IDs for this request. When num_variations > 1 with an idea_id, each variation gets its own run ID that can be polled individually.
data.status string Initial status (always "queued")
data.idea_id integer Returned only for clone modes — the auto-created idea ID
  • Clone with style_analysis: When clone_strategy=style_analysis, the response has a different shape: { idea_id, status: "style_analysis_pending", message }. Style analysis runs asynchronously before thumbnail generation. Use a callback_url to be notified when analysis completes, then call this endpoint again with the returned idea_id to generate the final thumbnail.
  • Quota consumption: Quota is reserved per generation run. When num_variations > 1 with an idea_id, each variation gets its own run_id and consumes one quota unit. Brainstorm mode (no idea_id) reserves one unit for the batch. Reserved quota is released if a run fails.

Error Responses

Status Error code Description
403 not eligible for thumbnail generation No active subscription
404 Idea not found in this channel Invalid idea_id
429 (quota) Insufficient thumbnail quota
GET

/channels/{id}/thumbnails/generations/{runId}

Required Permission scripts:read thumbnails:read

Get the current status and results of a thumbnail generation. When the status is "completed", the output_urls array contains URLs to the generated thumbnail images. Poll this endpoint after creating a generation to track progress.

Rate limit: 120 requests per minute

Request

No request body required.

Parameters

Name Type Description
id integer Channel ID (path parameter).
runId string Generation run ID returned from the Create endpoint (path parameter).

Response (200)

Response Example
{
    "success": true,
    "data": {
        "run_id": "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d",
        "status": "completed",
        "idea_id": null,
        "output_urls": [
            "https://subscribr.ai/storage/thumbnails/9b1deb4d_v1.png",
            "https://subscribr.ai/storage/thumbnails/9b1deb4d_v2.png"
        ],
        "created_at": "2026-02-27T10:30:00Z",
        "updated_at": "2026-02-27T10:30:45Z"
    }
}

Response Fields

Field Type Description
data.run_id string Generation run identifier (UUID)
data.status string Status: queued (processing), completed (output ready), or failed
data.idea_id integer|null Linked idea ID (present when using idea-based or clone modes)
data.output_urls array Generated thumbnail image URLs (populated when status is "completed", empty otherwise)
data.output_urls[] string URL to a generated thumbnail image
data.created_at string ISO 8601 creation timestamp
data.updated_at string ISO 8601 last update timestamp (indicates when status last changed)
GET

/channels/{id}/thumbnails/generations

Required Permission scripts:read thumbnails:read

List past thumbnail generation runs for a channel. Returns a paginated list (15 per page) ordered by most recent first. Optionally filter by source_type to narrow results to a specific generation mode.

Rate limit: 120 requests per minute

Request

Optional query parameters to filter and paginate results.

Parameters

Name Type Description
id integer Channel ID (path parameter).
source_type string Filter by ThumbnailUsageEvent source_type: api_generate (idea-based and brainstorm API runs), idea_improve, thumbnail_clone
page integer Page number (default 1).

Response (200)

Response Example
{
    "success": true,
    "data": [
        {
            "run_id": "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d",
            "status": "completed",
            "source_type": "api_generate",
            "idea_id": 42,
            "output_urls": [
                "https://subscribr.ai/storage/thumbnails/9b1deb4d_v1.png"
            ],
            "created_at": "2026-02-27T10:30:00Z"
        }
    ],
    "meta": {
        "current_page": 1,
        "last_page": 3,
        "per_page": 15,
        "total": 42
    }
}

Response Fields

Field Type Description
data[] array List of generation run objects
data[].run_id string Run identifier (UUID) — use with the Get Generation Status endpoint
data[].status string Status: queued, completed, or failed
data[].source_type string api_generate, idea_improve, or thumbnail_clone
data[].idea_id integer|null Linked idea ID (null for brainstorm runs without a pre-existing idea)
data[].output_urls array Generated thumbnail URLs (empty for queued/failed runs)
data[].created_at string ISO 8601 creation timestamp
meta.current_page integer Current page number
meta.last_page integer Total number of pages
meta.per_page integer Items per page (15)
meta.total integer Total matching generation runs