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 —
404for other users' channels,429for suggest.