Skip to main content

Channels

A channel is a generation preset (genre, style, background, music) plus a niche that fresh topics are picked from. Via the API you can create a channel, get an LLM-suggested concept, manage the autopilot schedule, and order an instant "video now" from the channel preset. Limit: 20 channels per user (shared with the bot and the web studio). All calls carry X-API-Key: pp_....

Base URL: https://api.piratepress.fun/public/v1.

CRUD​

# create (201)
curl -X POST https://api.piratepress.fun/public/v1/channels \
-H "X-API-Key: pp_..." \
-H "Content-Type: application/json" \
-d '{
"name": "Cyber Yogurt",
"niche": "food and tech",
"description": "Funny product reviews",
"params": {"genre": "review", "lang": "en", "duration": "20-40",
"bg_ai": "illustrations", "resolution": "720x1280"}
}'

curl https://api.piratepress.fun/public/v1/channels -H "X-API-Key: pp_..."

# update (schedule + fields)
curl -X PATCH https://api.piratepress.fun/public/v1/channels/ch_... \
-H "X-API-Key: pp_..." \
-H "Content-Type: application/json" \
-d '{"schedule_enabled": true, "schedule_hour": 19, "schedule_days": [1, 3, 5]}'

# delete (204)
curl -X DELETE https://api.piratepress.fun/public/v1/channels/ch_... \
-H "X-API-Key: pp_..."

The response is a channel:

{
"id": "ch_a1b2c3",
"name": "Cyber Yogurt",
"niche": "food and tech",
"description": "Funny product reviews",
"params": { "genre": "review", "lang": "en", "duration": "20-40" },
"schedule_enabled": true,
"schedule_hour": 19,
"schedule_minute": 0,
"schedule_days": [1, 3, 5],
"tz_offset_min": 180,
"last_fired_at": null,
"is_active": true,
"created_at": "2026-10-19T12:00:00Z"
}

params fields (all optional): genre, style, visual_style, music_mood, lang, duration ("15-45" or a number), bg_ai ("illustrations"|"lite"), music ("none"|"ai"), resolution ("720x1280" — vertical by default, "1280x720").

Schedule fields (in PATCH): schedule_enabled, schedule_hour (0–23), schedule_minute (0–59), schedule_days (integers 0–6, Mon–Sun), tz_offset_min (−720…840, offset from UTC in minutes), is_active. schedule_enabled: true requires schedule_hour and a non-empty schedule_days, otherwise 422 invalid_params.

Someone else's (or unknown) channel returns 404 not_found (we never reveal other users' resources).

Channel concept — POST /channels/suggest​

Not sure where to start — a hint → a ready LLM concept (free; limits: 10/hour per user, 1000/day globally):

curl -X POST https://api.piratepress.fun/public/v1/channels/suggest \
-H "X-API-Key: pp_..." \
-H "Content-Type: application/json" \
-d '{"hint": "a channel about life hacks for cats", "lang": "en"}'
{
"name": "Cat Protocol",
"niche": "pets and life hacks",
"genre": "life hacks",
"style": "humor",
"visual_style": "bright meme inserts",
"music_mood": "upbeat",
"description": "Daily life hacks for cats and their humans"
}

"Video now" — POST /channels/{id}/roll​

The channel preset + a fresh topic from the niche's trends → a generation order. Charging, fair-use, and the 10-active-tasks quota work exactly as in POST /videos:

curl -X POST https://api.piratepress.fun/public/v1/channels/ch_a1b2c3/roll \
-H "X-API-Key: pp_..."
{
"channel": { "id": "ch_a1b2c3", "name": "Cyber Yogurt", "...": "..." },
"video": { "id": "gen_d4e5f6", "status": "queued", "cost": 100, "eta_seconds": 420 }
}

From here treat video.id as a regular order: GET /videos/{id}, video.done webhooks, etc.

Where next​

  • Quickstart — the order/status flow for videos;
  • Webhooks — events instead of polling;
  • Error codes — 404 for other users' channels, 429 for suggest.