Skip to content

Create a series

Creating a series in TwistCue is a five-step wizard. It’s the same flow whether you’re onboarding a new title or a spin-off: the only difference is what you pre-fill.

Catalog → Series → New series (top-right button on the series list). The wizard opens with tabs across the top; you can jump back and forth but you can’t publish until every required field is filled.

FieldTypeNotes
Title (EN)string, ≤120The canonical title. Additional languages come in Step 2.
Slugstring, kebab-case, uniqueAuto-generated from title but editable before first save. Immutable after publish.
Synopsis (EN)string, ≤2000Short blurb. Long-form marketing copy is a separate field on the series detail page later.
Genresmulti-select from /admin/genresDrives For You rails.
Tropesmulti-select from /admin/tropesSame idea, narrower buckets.
Castmulti-select from /admin/castFeeds the cast-based rails and per-series performance.
Maturityenum: general / teen / matureBlocks some markets automatically (parental settings).
Market availabilitymulti-select ISO country codesEmpty = all launch markets (see Constants).

Three tabs: EN / AR / ID. Each tab has:

  • Localized title: required for any market that speaks that language.
  • Localized synopsis: same.
  • RTL preview on the AR tab: shows the exact layout the mobile app renders.
  • Poster (2:3): home-rail hero image. Recommended 900×1350px, JPEG/WebP.
  • Hero (16:9): feature banner. 1920×1080px.
  • Trailer: optional; a video asset from the media library or a fresh direct upload (see Upload an episode video, the flow is identical).

Media uploads go straight to Cloudflare Stream (video) or Cloudflare Images (posters/hero) via a TUS resumable direct-upload URL: the admin API doesn’t proxy the bytes.

FieldDefaultMeaning
Coin price per episode30Series-wide override. Blank = falls back to the market default → global default (30).
Free-episode count3How many leading episodes are free.
Free-passes count5Daily free passes attached to this series (rare per-series override; usually kept global).

Overrides here are stored in price_overrides with scope=series. Precedence for the mobile client at unlock time:

episode override → series override → market override → global default (30)

See Pricing overrides guide for the full resolution model.

Two choices:

  1. Save as draft: status draft, invisible to mobile. No schedule set.
  2. Schedule for publish: pick a datetime (UTC), status becomes scheduled. The publish-scheduler cron (runs every minute) flips it to published at the target time.

You can also drop-schedule episodes here in bulk (e.g. 2 episodes/week), but that’s usually easier from the series detail page after episodes exist.

  1. Series row created with status='draft' (or scheduled if you scheduled it).
  2. AuditLog entry: action='series.create', before=null, after=full series JSON.
  3. If a market/language combo is incomplete, the series detail page banner warns you.
  4. Series shows up in Catalog → Series filtered by status.
stateDiagram-v2
[*] --> draft
draft --> in_review: submit for review
in_review --> scheduled: schedule publish
in_review --> published: publish now
scheduled --> published: cron flips at run_at
published --> archived: archive
archived --> draft: restore
draft --> [*]: delete (requires approval)

Only published series appear on mobile. archived retains data but is hidden.

  • The slug is immutable after publish. You can rename the display title all you want, but the slug is baked into share URLs.
  • Deleting a series requires approval. It’s a two-person action (catalog:delete + a second catalog:delete holder). Prefer archive.
  • Publishing an incomplete localization is soft-blocked, not hard-blocked. The API will let a superadmin force-publish, but the audit log will flag incomplete_localization: [lang, ...] for finance.
StepEndpoint
CreatePOST /v1/admin/series
Update metadata / localizationPUT /v1/admin/series/:id
Attach mediaPUT /v1/admin/series/:id/media
Workflow transitionPOST /v1/admin/series/:id/workflow
SchedulePOST /v1/admin/schedules (ref_type=series)

Full details in API, Catalog and API, Publishing.