# Unified UI / API / CLI / MCP operation map

This page is generated from the typed operation registry used by the docs site. It shows the same Sleeper Hit Studio workflow across UI, API, CLI, and MCP surfaces.

| Operation | Status | UI | API | Scope | CLI | MCP |
|---|---|---|---|---|---|---|
| Discover live capabilities | available | Developer console and docs (/dashboard/api) | GET /api/v1/capabilities | story:read | sleeperhit capabilities | sleeperhit://capabilities |
| Read agent guidance | available | Developer console and docs (/dashboard/api) | GET /api/v1/agent-guidance | story:read | sleeperhit guidance | get_agent_guidance |
| Read Studio Credit balance | available | Dashboard credit meter (/dashboard) | GET /api/v1/credits | credits:read | sleeperhit credits | get_credits |
| Read the "Download my data" archive | available | Profile, Sign-in & Security: Download my data, Delete account (/dashboard/profile?tab=security) | GET /api/v1/account/export | account:read | sleeperhit account export --status | get_account_export |
| Download my data | available | Profile, Sign-in & Security: Download my data, Delete account (/dashboard/profile?tab=security) | POST /api/v1/account/export | account:read | sleeperhit account export [--wait] [--download <dir>] | request_account_export |
| Read where the account's deletion stands | available | Profile, Sign-in & Security: Download my data, Delete account (/dashboard/profile?tab=security) | GET /api/v1/account/deletion | account:read | sleeperhit account deletion | get_account_deletion |
| Delete the account | available | Profile, Sign-in & Security: Download my data, Delete account (/dashboard/profile?tab=security) | POST /api/v1/account/deletion | account:write | sleeperhit account delete --confirm-email <email> | request_account_deletion |
| Cancel the account's deletion | available | Profile, Sign-in & Security: Download my data, Delete account (/dashboard/profile?tab=security) | DELETE /api/v1/account/deletion | account:write | sleeperhit account cancel-deletion | cancel_account_deletion |
| Check generation health | available | Dashboard background activity (/dashboard) | GET /api/v1/generation-health | story:read | sleeperhit generation-health | get_generation_health |
| Create a story project | available | Writers Lab project library (/dashboard/writing-lab) | POST /api/v1/story-projects | story:write | sleeperhit projects create --name <name> | create_project |
| Create a project around a script | available | Writers Lab sidebar (/dashboard/writing-lab/:scriptId/:scriptId) | POST /api/v1/story-projects/from-script | story:write | sleeperhit projects from-script <scriptId> \| --script <scriptUploadId> | create_project_from_script |
| List story projects | available | Writers Lab project library (/dashboard/writing-lab) | GET /api/v1/story-projects | story:read | sleeperhit projects list | list_projects |
| Read a story project | available | Writers Lab project library (/dashboard/writing-lab) | GET /api/v1/story-projects/{projectId} | story:read | sleeperhit projects get <projectId> | get_project |
| Update a story project | available | Writers Lab project page actions menu (/dashboard/writing-lab/:projectId) | PATCH /api/v1/story-projects/{projectId} | story:write | sleeperhit projects update <projectId> [--name <text>] [--description <text>] [--metadata <json>] [--archived true\|false] [--season-cadence monthly\|numbered] | update_project |
| Delete a story project | available | Writers Lab project page actions menu (/dashboard/writing-lab/:projectId) | DELETE /api/v1/story-projects/{projectId} | story:write | sleeperhit projects delete <projectId> | delete_project |
| List deleted projects that can still be restored | available | Writers Lab project library recently deleted (/dashboard/writing-lab) | GET /api/v1/story-projects/deleted | story:read | sleeperhit projects deleted | list_deleted_projects |
| Restore a deleted project | available | Writers Lab project library recently deleted (/dashboard/writing-lab) | POST /api/v1/story-projects/{projectId}/restore | story:write | sleeperhit projects restore <projectId> | restore_project |
| Read a project Series Bible | available | Writers Lab project canon (/dashboard/writing-lab) | GET /api/v1/story-projects/{projectId}/series-bible | story:read | sleeperhit bible get <projectId> | get_series_bible |
| Save a project Series Bible | available | Writers Lab project canon (/dashboard/writing-lab) | PATCH /api/v1/story-projects/{projectId}/series-bible | story:write | sleeperhit bible save <projectId> --json <object> | save_series_bible |
| Generate a project Series Bible | available | Writers Lab project canon (/dashboard/writing-lab) | POST /api/v1/story-projects/{projectId}/series-bible | story:write | sleeperhit bible generate <projectId> | generate_series_bible |
| Read Series Bible coverage | available | Writers Lab coverage panel (/dashboard/writing-lab/:projectId/:scriptId/coverage) | GET /api/v1/story-projects/{projectId}/series-bible/coverage | story:read | sleeperhit bible coverage <projectId> [--phase premise\|full] | get_series_bible_coverage |
| Generate Series Bible coverage | available | Writers Lab coverage panel (/dashboard/writing-lab/:projectId/:scriptId/coverage) | POST /api/v1/story-projects/{projectId}/series-bible/coverage | story:write | sleeperhit bible coverage <projectId> --generate [--phase premise\|full] | generate_series_bible_coverage |
| Read episode outlines | available | Writers Lab Outline tab (/dashboard/writing-lab/:projectId/:scriptId/tools/outline) | GET /api/v1/story-projects/{projectId}/outline-map | story:read | sleeperhit outline get <projectId> | get_outline_map |
| Save an episode outline | available | Writers Lab Outline tab (/dashboard/writing-lab/:projectId/:scriptId/tools/outline) | PATCH /api/v1/story-projects/{projectId}/outline-map | story:write | sleeperhit outline save <projectId> <episodeId> --json <outline> | save_episode_outline |
| Read outline coverage | available | Project Overview outline coverage (/dashboard/writing-lab/:projectId/tools) | GET /api/v1/story-projects/{projectId}/outline-map/coverage | story:read | sleeperhit outline coverage <projectId> | get_outline_coverage |
| Generate outline coverage | available | Project Overview outline coverage (/dashboard/writing-lab/:projectId/tools) | POST /api/v1/story-projects/{projectId}/outline-map/coverage | story:write | sleeperhit outline coverage <projectId> --generate | generate_outline_coverage |
| Create a conversational season run | available | Writers Lab Seasons & episodes (/dashboard/writing-lab/:projectId) | POST /api/v1/story-projects/{projectId}/season-runs | story:write | sleeperhit seasons create <projectId> | create_season_run |
| List season runs | available | Writers Lab publishing season runner (/dashboard/writing-lab/:projectId/:scriptId/publishing) | GET /api/v1/story-projects/{projectId}/season-runs | story:read | sleeperhit seasons list <projectId> | list_season_runs |
| Read a season run | available | Writers Lab publishing season runner (/dashboard/writing-lab/:projectId/:scriptId/publishing) | GET /api/v1/season-runs/{runId} | story:read | sleeperhit seasons get <runId> | get_season_run |
| Map one season episode | available | Writers Lab publishing season runner (/dashboard/writing-lab/:projectId/:scriptId/publishing) | PATCH /api/v1/season-runs/{runId}/episodes/{episodeId} | story:write | sleeperhit seasons map <runId> <episodeId> --expected-map-version <n> --patch <json> [--confirm] | map_season_episode |
| Approve a complete season map | available | Writers Lab publishing season runner (/dashboard/writing-lab/:projectId/:scriptId/publishing) | POST /api/v1/season-runs/{runId}/approve | story:write | sleeperhit seasons approve <runId> --expected-map-version <n> --confirm | approve_season_map |
| Advance a coverage-gated season episode | available | Writers Lab publishing season runner (/dashboard/writing-lab/:projectId/:scriptId/publishing) | POST /api/v1/season-runs/{runId}/advance | story:write | sleeperhit seasons advance <runId> \| replan <runId> [--instruction <text>] --confirm \| retry-coverage <runId> --confirm \| revise <runId> (--instruction <text> \| --screenplay-file <path>) --confirm \| publish <runId> --confirm | advance_season_run |
| Read one Series Bible character | available | Writers Lab project canon (/dashboard/writing-lab) | GET /api/v1/story-projects/{projectId}/series-bible/characters | story:read | sleeperhit bible character <projectId> <character> | get_series_bible_character |
| Edit one Series Bible character | available | Writers Lab project canon (/dashboard/writing-lab) | PATCH /api/v1/story-projects/{projectId}/series-bible/characters | story:write | sleeperhit bible character <projectId> <character> --json '<fields>' [--expected-version <n>] [--create] | update_series_bible_character |
| Read a project cast canon | available | Writers Lab project canon (/dashboard/writing-lab) | GET /api/v1/story-projects/{projectId}/cast-canon | story:read | sleeperhit cast-canon get <projectId> | get_cast_canon |
| Save a project cast canon | available | Writers Lab project canon (/dashboard/writing-lab) | PATCH /api/v1/story-projects/{projectId}/cast-canon | story:write | sleeperhit cast-canon save <projectId> --json '<object>' \| --file <json> [--replace] | save_cast_canon |
| Design a cast member's voice | available | Writers Lab cast (/dashboard/writing-lab/:projectId/:scriptId/cast) | POST /api/v1/story-projects/{projectId}/cast-voice/design | artifact:publish | sleeperhit cast-voice design <projectId> --character <c> [--description <text>] [--candidates <n>] [--preview-lines <n>] [--sample-text <line>] [--confirm] | design_cast_voice |
| Choose a designed cast voice | available | Writers Lab cast (/dashboard/writing-lab/:projectId/:scriptId/cast) | POST /api/v1/story-projects/{projectId}/cast-voice/choose | story:write | sleeperhit cast-voice choose <projectId> --design <designId> --candidate <n> [--name <voiceName>] [--acknowledge-coverage] | choose_cast_voice |
| Set a cast member's voice | available | Writers Lab cast (/dashboard/writing-lab/:projectId/:scriptId/cast) | PATCH /api/v1/story-projects/{projectId}/cast-voice | story:write | sleeperhit cast-voice set <projectId> --character <c> --voice-id <id> [--voice-name <n>] [--provider <p>] [--gender <g>] | set_cast_voice |
| List cast voice designs | available | Writers Lab cast (/dashboard/writing-lab/:projectId/:scriptId/cast) | GET /api/v1/story-projects/{projectId}/cast-voice/designs | story:read | sleeperhit cast-voice designs <projectId> [--character <c>] | list_cast_voice_designs |
| Read a voice design's casting coverage | available | Writers Lab cast (/dashboard/writing-lab/:projectId/:scriptId/cast) | GET /api/v1/story-projects/{projectId}/cast-voice/designs/{designId}/coverage | story:read | sleeperhit cast-voice coverage <projectId> --design <designId> | get_casting_coverage |
| Judge a voice design again | available | Writers Lab cast (/dashboard/writing-lab/:projectId/:scriptId/cast) | POST /api/v1/story-projects/{projectId}/cast-voice/designs/{designId}/coverage | story:write | sleeperhit cast-voice judge <projectId> --design <designId> [--focus <text>] | generate_casting_coverage |
| Draw headshot candidates for a cast member | available | Writers Lab cast (/dashboard/writing-lab/:projectId/:scriptId/cast) | POST /api/v1/story-projects/{projectId}/cast-portraits/design | artifact:publish | sleeperhit cast-portrait design <projectId> --character <c> [--direction <text>] [--age <a>] [--candidates <n>] [--keep-face] [--confirm] | design_cast_portraits |
| Choose a headshot candidate | available | Writers Lab cast (/dashboard/writing-lab/:projectId/:scriptId/cast) | POST /api/v1/story-projects/{projectId}/cast-portraits/choose | story:write | sleeperhit cast-portrait choose <projectId> --design <designId> --candidate <n> [--acknowledge-coverage] | choose_cast_portrait |
| Read a portrait design's casting coverage | available | Writers Lab cast (/dashboard/writing-lab/:projectId/:scriptId/cast) | GET /api/v1/story-projects/{projectId}/cast-portraits/designs/{designId}/coverage | story:read | sleeperhit cast-portrait coverage <projectId> --design <designId> | get_portrait_coverage |
| Judge a portrait design again | available | Writers Lab cast (/dashboard/writing-lab/:projectId/:scriptId/cast) | POST /api/v1/story-projects/{projectId}/cast-portraits/designs/{designId}/coverage | story:write | sleeperhit cast-portrait judge <projectId> --design <designId> [--focus <text>] | generate_portrait_coverage |
| List headshot candidate designs | available | Writers Lab cast (/dashboard/writing-lab/:projectId/:scriptId/cast) | GET /api/v1/story-projects/{projectId}/cast-portraits/designs | story:read | sleeperhit cast-portrait designs <projectId> [--character <c>] [--design <designId>] [--watch] | list_cast_portrait_designs |
| Read cast look directions | available | Writers Lab cast (/dashboard/writing-lab/:projectId/:scriptId/cast) | GET /api/v1/story-projects/{projectId}/cast-look | story:read | sleeperhit cast direction <projectId> [--character <c>] | get_cast_look_direction |
| Set a cast member's look direction | available | Writers Lab cast (/dashboard/writing-lab/:projectId/:scriptId/cast) | PATCH /api/v1/story-projects/{projectId}/cast-look | story:write | sleeperhit cast direction <projectId> --character <c> [--look <text>] [--age <a>] [--clear-look] [--clear-age] | set_cast_look_direction |
| Read a project mood board | available | Writers Lab project canon (/dashboard/writing-lab) | GET /api/v1/story-projects/{projectId}/mood-board | story:read | sleeperhit mood-board get <projectId> | get_mood_board |
| Keep a frame on the mood board | available | Writers Lab project canon (/dashboard/writing-lab) | POST /api/v1/story-projects/{projectId}/mood-board/frames | story:write | sleeperhit mood-board keep <projectId> --json '<frame>' \| --file <json> | keep_mood_board_frame |
| Render candidate mood board frames | available | Writers Lab project canon (/dashboard/writing-lab) | POST /api/v1/story-projects/{projectId}/mood-board/render-frames | artifact:publish | sleeperhit mood-board render <projectId> --brief <text> [--count <n>] [--aspect <ratio>] [--confirm] | render_mood_board_frames |
| Drop a frame from the mood board | available | Writers Lab project canon (/dashboard/writing-lab) | DELETE /api/v1/story-projects/{projectId}/mood-board/frames/{frameId} | story:write | sleeperhit mood-board drop <projectId> <frameId> | drop_mood_board_frame |
| Generate the project cast | available | Writers Lab cast (/dashboard/writing-lab/:projectId/:scriptId/cast) | POST /api/v1/story-projects/{projectId}/cast | artifact:publish | sleeperhit cast generate <projectId> [--script <scriptUploadId>] [--character <name>] [--force] [--image face\|body\|sheet] [--confirm --quote <quoteId>] | generate_cast |
| Save episode character direction | available | Writers Lab cast (/dashboard/writing-lab/:projectId/:scriptId/cast) | PATCH /api/v1/story-projects/{projectId}/cast | story:write | sleeperhit cast direction <projectId> --script <scriptUploadId> --character <name> --json <direction> | update_character_direction |
| Read casting progress | available | Writers Lab cast (/dashboard/writing-lab/:projectId/:scriptId/cast) | GET /api/v1/story-projects/{projectId}/cast | story:read | sleeperhit cast status <projectId> [--script <scriptUploadId>] | get_project_cast |
| Prepare an episode's table read | available | Writers Lab cast (/dashboard/writing-lab/:projectId/:scriptId/cast) | POST /api/v1/scripts/{scriptUploadId}/table-read/prepare | artifact:publish | sleeperhit script table-read prepare <scriptUploadId> [--confirm] | prepare_table_read |
| Retry a failed creative analysis | available | Writers Lab table-read studio (/dashboard/writing-lab/:projectId/:scriptId/table-read) | POST /api/v1/scripts/{scriptUploadId}/table-read/retry-analysis | story:write | sleeperhit script table-read retry-analysis <scriptUploadId> | retry_creative_analysis |
| Remove a character from a read | available | Writers Lab cast (/dashboard/writing-lab/:projectId/:scriptId/cast) | POST /api/v1/scripts/{scriptUploadId}/table-read/characters/remove | story:write | sleeperhit script table-read remove-character <scriptUploadId> --character <name> | remove_character |
| Attach a source | available | Writers Lab project Sources (/dashboard/writing-lab/:projectId) | POST /api/v1/story-projects/{projectId}/sources | source:write | sleeperhit sources add <projectId> --type text\|markdown\|url\|pdf [--producer <name> --external-id <id>] [--originated-at <iso>] | add_source |
| List sources | available | Writers Lab project Sources (/dashboard/writing-lab/:projectId) | GET /api/v1/story-projects/{projectId}/sources | source:read | sleeperhit sources list <projectId> | list_sources |
| Read a source | available | Writers Lab project Sources (/dashboard/writing-lab/:projectId) | GET /api/v1/story-projects/{projectId}/sources/{sourceId} | source:read | sleeperhit sources get <projectId> <sourceId> | get_source |
| Delete a source | available | Writers Lab project Sources (/dashboard/writing-lab/:projectId) | DELETE /api/v1/story-projects/{projectId}/sources/{sourceId} | source:write | sleeperhit sources delete <projectId> <sourceId> | delete_source |
| Start an app capture | available | Writers Lab project page captures (/dashboard/writing-lab/:projectId) | POST /api/v1/story-projects/{projectId}/captures | source:write | sleeperhit capture import <file\|take-dir> --project <projectId> [--label <text>] | import_app_capture |
| Check an uploaded app capture | available | Writers Lab project page captures (/dashboard/writing-lab/:projectId) | POST /api/v1/story-projects/{projectId}/captures/{captureId}/finalize | source:write | sleeperhit capture finalize <captureId> --project <projectId> | import_app_capture |
| List app captures | available | Writers Lab project page captures (/dashboard/writing-lab/:projectId) | GET /api/v1/story-projects/{projectId}/captures | source:read | sleeperhit capture list --project <projectId> | list_app_captures |
| Read an app capture | available | Writers Lab project page captures (/dashboard/writing-lab/:projectId) | GET /api/v1/story-projects/{projectId}/captures/{captureId} | source:read | sleeperhit capture get <captureId> --project <projectId> | list_app_captures |
| Delete an app capture | available | Writers Lab project page captures (/dashboard/writing-lab/:projectId) | DELETE /api/v1/story-projects/{projectId}/captures/{captureId} | source:write | sleeperhit capture delete <captureId> --project <projectId> | delete_app_capture |
| Generate a StoryPlan | available | Writers Lab project workflow (/dashboard/writing-lab) | POST /api/v1/story-projects/{projectId}/story-plans | story:write | sleeperhit plans create <projectId> --target ... --artifact ... | create_plan |
| List StoryPlans | available | Writers Lab project page plans (/dashboard/writing-lab/:projectId) | GET /api/v1/story-projects/{projectId}/story-plans | story:read | sleeperhit plans list <projectId> | list_plans |
| Read a StoryPlan | available | Writers Lab project page plans (/dashboard/writing-lab/:projectId) | GET /api/v1/story-plans/{planId} | story:read | sleeperhit plans get <planId> | get_plan |
| Rename a plan | available | Writers Lab plans waiting for you (/dashboard/writing-lab/:projectId) | PATCH /api/v1/story-plans/{planId} | story:write | sleeperhit plans rename <planId> <title> | rename_plan |
| Resume a StoryPlan | available | Writers Lab project workflow (/dashboard/writing-lab) | POST /api/v1/story-plans/{planId}/resume | story:write | sleeperhit plans resume <planId> | resume_story_plan |
| Approve a StoryPlan | available | Writers Lab project page plans (/dashboard/writing-lab/:projectId) | POST /api/v1/story-plans/{planId}/approve | story:write | sleeperhit plans approve <planId> --confirm | approve_plan |
| Reject a StoryPlan | available | Writers Lab project page plans (/dashboard/writing-lab/:projectId) | POST /api/v1/story-plans/{planId}/reject | story:write | sleeperhit plans reject <planId> | reject_plan |
| Read background activity | available | Dashboard background activity (/dashboard) | GET /api/v1/background-activity | story:read | sleeperhit activity | background_activity |
| Read screenplay drafting progress | available | Writers Lab screenplay editor (/dashboard/writing-lab/:projectId/:scriptId) | GET /api/v1/screenplay-drafts/{scriptUploadId} | story:read | sleeperhit screenplay-draft status <scriptUploadId> | screenplay_draft_status |
| Draft or resume an episode scene by scene | available | Writers Lab screenplay editor (/dashboard/writing-lab/:projectId/:scriptId) | POST /api/v1/screenplay-drafts/{scriptUploadId} | story:write | sleeperhit screenplay-draft start\|resume <scriptUploadId> [--file <scene-plan.json>] | draft_episode/resume_screenplay_draft |
| Delete a whole script | available | Writers Lab script delete (/dashboard/writing-lab/:projectId/:scriptId/overview) | DELETE /api/v1/scripts/{scriptUploadId} | story:write | sleeperhit script delete <scriptId> --confirm | delete_script |
| Read an episode's overrides | available | Writers Lab episode overrides (/dashboard/writing-lab/:projectId/:scriptId/cast) | GET /api/v1/scripts/{scriptUploadId}/overrides | story:read | sleeperhit script overrides get <scriptUploadId> | get_script_overrides |
| Set or clear an episode's overrides | available | Writers Lab episode overrides (/dashboard/writing-lab/:projectId/:scriptId/cast) | PATCH /api/v1/scripts/{scriptUploadId}/overrides | story:write | sleeperhit script overrides set <scriptUploadId> [--avatar <text>] [--theater <text>] [--soundscape <text>] [--pitch-deck <text>] [--locations <text>] [--clear <override>] | update_script_overrides |
| Read one table-read line | available | Writers Lab table-read line detail (/dashboard/writing-lab/:projectId/:scriptId/table-read) | GET /api/v1/scripts/{scriptUploadId}/lines/{entryIndex} | story:read | sleeperhit script line get <scriptUploadId> <entryIndex> [--json] | get_script_line_tuning |
| Edit one table-read line | available | Writers Lab table-read line detail (/dashboard/writing-lab/:projectId/:scriptId/table-read) | PATCH /api/v1/scripts/{scriptUploadId}/lines/{entryIndex} | story:write | sleeperhit script line set <scriptUploadId> <entryIndex> [--text <t>] [--tts-text <t>] [--parenthetical <t>] [--scene-heading <h>] [--pause-ms N] [--emotions <a,b,c> [--volume N]] | edit_script_line |
| Read a table read's share link | available | Writers Lab table-read share dialog (/dashboard/writing-lab/:projectId/:scriptId/table-read) | GET /api/v1/scripts/{scriptUploadId}/share | story:read | sleeperhit script share get <scriptUploadId> [--json] | get_script_share |
| Share a table read | available | Writers Lab table-read share dialog (/dashboard/writing-lab/:projectId/:scriptId/table-read) | POST /api/v1/scripts/{scriptUploadId}/share | artifact:publish | sleeperhit script share create <scriptUploadId> [--audience public\|private_review\|team] [--mode theater\|audio] [--scope whole\|scene\|entries\|conversation] [--expires-in-days N] [--include-on-profile] | share_script |
| List a project's episodes, versions and videos | available | Writers Lab Seasons & episodes (/dashboard/writing-lab/:projectId) | GET /api/v1/story-projects/{projectId}/episodes | story:read | sleeperhit projects episodes <projectId> [--season N] | list_project_episodes |
| Name a new season | available | Writers Lab Seasons & episodes (/dashboard/writing-lab/:projectId) | POST /api/v1/story-projects/{projectId}/seasons | story:write | sleeperhit projects seasons add <projectId> [--name <text>] | create_project_season |
| Upload a screenplay | available | Writers Lab upload (/dashboard/writing-lab) | POST /api/v1/scripts | story:write | sleeperhit script upload --title <title> --file <path> [--format text\|fountain\|fdx] [--project <projectId>] | upload_script |
| Read a script | available | Writers Lab script details (/dashboard/writing-lab) | GET /api/v1/scripts/{scriptUploadId} | story:read | sleeperhit script show <scriptId> | get_script |
| Change a script's title, logline, format, genre or season | available | Writers Lab script details (/dashboard/writing-lab) | PATCH /api/v1/scripts/{scriptUploadId} | story:write | sleeperhit script update <scriptId> [--title <t>] [--slug <s>] [--logline <text>] [--media-type film\|tv] [--genre <text>] [--season N] [--clear logline\|genre\|media-type] | update_script |
| Upload a new version of a script | available | Writers Lab script versions (/dashboard/writing-lab/:projectId/:scriptId/overview) | POST /api/v1/scripts/{scriptUploadId}/versions | story:write | sleeperhit script versions add <scriptId> (--file <path> \| --source <sourceId> \| --file-url <url> [--file-name <name>]) [--format text\|fountain\|fdx] | upload_script_version |
| Delete one version of a script | available | Writers Lab script versions (/dashboard/writing-lab/:projectId/:scriptId/overview) | DELETE /api/v1/scripts/{scriptUploadId}/versions/{versionId} | story:write | sleeperhit script versions delete <scriptId> <scriptUploadId> --confirm | delete_script_version |
| Export a screenplay as Fountain, Final Draft or PDF | available | Writers Lab export (/dashboard/writing-lab/:projectId/:scriptId) | GET /api/v1/scripts/{scriptUploadId}/export | story:read | sleeperhit script export <scriptUploadId> --format fountain\|fdx\|pdf [--out <path>] [--no-title-page] [--from-page N] [--to-page N] [--font <font>] | export_script |
| Start a Series Bible episode as a draft | available | Writers Lab episode map (/dashboard/writing-lab/:projectId) | POST /api/v1/story-projects/{projectId}/episodes | story:write | sleeperhit projects episodes start <projectId> <episodeId> | start_planned_episode |
| Write a version's text | available | Writers Lab screenplay editor (/dashboard/writing-lab/:projectId/:scriptId) | PATCH /api/v1/scripts/{scriptUploadId}/content | story:write | sleeperhit script write <scriptUploadId> --file <path> [--expected-file <path>] | write_script_content |
| Finish a draft into a locked version | available | Writers Lab screenplay editor (/dashboard/writing-lab/:projectId/:scriptId) | POST /api/v1/scripts/{scriptUploadId}/finish | story:write | sleeperhit script finish <scriptUploadId> [--coverage adopt\|fresh] | finish_draft |
| List a screenplay's coverage history | available | Writers Lab coverage panel (/dashboard/writing-lab/:projectId/:scriptId/coverage) | GET /api/v1/artifacts/{artifactId}/coverage/versions | artifact:read | sleeperhit coverage versions <artifactId> | list_coverage_versions |
| Read a Black List analysis | available | Writers Lab coverage panel (/dashboard/writing-lab/:projectId/:scriptId/coverage) | GET /api/v1/artifacts/{artifactId}/coverage/blacklist | artifact:read | sleeperhit coverage blacklist <artifactId> [--report <reportId>] | get_blacklist_analysis |
| Create a story job | available | Writers Lab project workflow (/dashboard/writing-lab) | POST /api/v1/story-jobs | story:write | sleeperhit jobs create <planId> [--script <scriptUploadId>] | create_job |
| List story jobs | available | Writers Lab project workflow (/dashboard/writing-lab) | GET /api/v1/story-jobs | story:read | sleeperhit jobs list | list_jobs |
| Read a story job | available | Writers Lab project workflow (/dashboard/writing-lab) | GET /api/v1/story-jobs/{jobId} | story:read | sleeperhit jobs get <jobId> | get_job |
| Cancel a story job | available | Dashboard background activity (/dashboard) | POST /api/v1/story-jobs/{jobId}/cancel | story:write | sleeperhit jobs cancel <jobId> | cancel_job |
| Resume a story job | available | Dashboard background activity (/dashboard) | POST /api/v1/story-jobs/{jobId}/resume | story:write | sleeperhit jobs resume <jobId> | resume_story_job |
| List job artifacts | available | Writers Lab project workflow (/dashboard/writing-lab) | GET /api/v1/story-jobs/{jobId}/artifacts | artifact:read | sleeperhit jobs artifacts <jobId> | list_artifacts |
| Read an artifact | available | Writers Lab project workflow (/dashboard/writing-lab) | GET /api/v1/artifacts/{artifactId} | artifact:read | sleeperhit artifacts get <artifactId> | get_artifact |
| Rename a result | available | Writers Lab script details and video lists (/dashboard/writing-lab) | PATCH /api/v1/artifacts/{artifactId} | story:write | sleeperhit artifacts rename <artifactId> <title> | rename_artifact |
| Render a table-read video | available | Writers Lab table-read studio (/dashboard/writing-lab/:projectId/:scriptId/table-read) | POST /api/v1/artifacts/{artifactId}/render-video | artifact:publish | sleeperhit artifacts render-video <artifactId> | render_artifact_video |
| Read render status + share link | available | Writers Lab table-read studio (/dashboard/writing-lab/:projectId/:scriptId/table-read) | GET /api/v1/artifacts/{artifactId}/render-video | artifact:read | sleeperhit artifacts render-status <artifactId> | get_artifact_share |
| Read a render's publishable state | available | Writers Lab table-read publish button (/dashboard/writing-lab/:projectId/:scriptId/table-read) | GET /api/v1/artifacts/{artifactId}/publish-state | artifact:read | sleeperhit artifacts publish-state <artifactId> | get_publish_state |
| Send a render to Publishing (or remove it) | available | Writers Lab table-read publish button (/dashboard/writing-lab/:projectId/:scriptId/table-read) | POST /api/v1/artifacts/{artifactId}/publish-state | artifact:publish | sleeperhit artifacts publish <artifactId> [--off] | mark_publishable/unmark_publishable |
| Direct a theater motion graphic | available | Writers Lab project workflow (/dashboard/writing-lab) | POST /api/v1/artifacts/{artifactId}/theater-motion | artifact:publish | sleeperhit artifacts theater-motion <artifactId> --scene <n> --entry <n> --composition motion-only\|motion-over-clip\|performance-motion-overlay [--caption <text>] [--direction <text>] [--duration <0.5..30>] [--clip-prompt <text>] | direct_theater_motion_beat |
| Generate a theater motion background clip | available | Writers Lab project workflow (/dashboard/writing-lab) | POST /api/v1/artifacts/{artifactId}/theater-motion-clip | artifact:publish | sleeperhit artifacts theater-motion-clip <artifactId> --scene <n> --entry <n> [--prompt <text>] [--duration <4..30>] | generate_theater_motion_clip |
| Design a theater scene canvas | available | Writers Lab project workflow (/dashboard/writing-lab) | POST /api/v1/artifacts/{artifactId}/theater-canvas | artifact:publish | sleeperhit artifacts theater-canvas <artifactId> --scene <n> --beats <json-array> | apply_theater_canvas |
| Read the theater presentation | available | Writers Lab table-read studio (/dashboard/writing-lab/:projectId/:scriptId/table-read) | GET /api/v1/artifacts/{artifactId}/theater | artifact:read | sleeperhit theater get <artifactId> | get_theater_settings |
| Change the theater presentation | available | Writers Lab table-read studio (/dashboard/writing-lab/:projectId/:scriptId/table-read) | POST /api/v1/artifacts/{artifactId}/theater | artifact:publish | sleeperhit theater update <artifactId> [--theater-mode on\|off] [--backgrounds on\|off] [--scene-visuals on\|off] [--style-set <id>] [--transition <type>] [--transition-duration <ms>] [--heading-font <id>] [--dialogue-font <id>] [--layout <mode>] [--dialogue <presentation>] [--title <text>] [--subtitle <text>] [--title-layout <layout>] [--noun-imagery insets\|replace_backdrop\|off] [--json <presentation>] | update_theater_settings |
| Change one scene's theater | available | Writers Lab table-read studio (/dashboard/writing-lab/:projectId/:scriptId/table-read) | POST /api/v1/artifacts/{artifactId}/theater-scene | artifact:publish | sleeperhit theater scene <artifactId> --scene <n> [--text-reveal fade\|drift\|spotlight] [--backdrop-prompt <text>] [--media image\|video] [--transition <type>] [--transition-duration <ms>] [--transition-prompt <text>] [--summary <text>] [--fx-cues <json-array> \| --clear-fx-cues] | update_scene_theater |
| Write a scene's atmospheric FX cues | available | Writers Lab table-read studio (/dashboard/writing-lab/:projectId/:scriptId/table-read) | POST /api/v1/artifacts/{artifactId}/theater-fx-cues | artifact:publish | sleeperhit theater fx-cues <artifactId> --scene <n> | generate_scene_fx_cues |
| Write scene backdrop prompts | available | Writers Lab table-read studio (/dashboard/writing-lab/:projectId/:scriptId/table-read) | POST /api/v1/artifacts/{artifactId}/theater-backdrop-prompts | artifact:publish | sleeperhit theater backdrop-prompts <artifactId> [--scenes 0,2,5] [--force] | write_scene_backdrop_prompts |
| Read the noun imagery | available | Writers Lab table-read studio (/dashboard/writing-lab/:projectId/:scriptId/table-read) | GET /api/v1/artifacts/{artifactId}/noun-imagery | artifact:read | sleeperhit noun-imagery get <artifactId> | get_noun_imagery |
| Build the noun imagery | available | Writers Lab table-read studio (/dashboard/writing-lab/:projectId/:scriptId/table-read) | POST /api/v1/artifacts/{artifactId}/noun-imagery | artifact:publish | sleeperhit noun-imagery generate <artifactId> [--force] [--noun <key> [--label <text>] [--kind object\|location\|entity]] | generate_noun_imagery |
| List soundscape beds and regions | available | Writers Lab table-read studio (/dashboard/writing-lab/:projectId/:scriptId/table-read) | GET /api/v1/artifacts/{artifactId}/soundscapes | artifact:read | sleeperhit soundscapes list <artifactId> | get_soundscapes |
| Edit soundscape beds and regions | available | Writers Lab table-read studio (/dashboard/writing-lab/:projectId/:scriptId/table-read) | POST /api/v1/artifacts/{artifactId}/soundscapes | artifact:publish | sleeperhit soundscapes update-bed\|add\|update\|attach\|remove <artifactId> | update_soundscape/remove_soundscape |
| Animate a character's portrait | available | Writers Lab table-read studio (/dashboard/writing-lab/:projectId/:scriptId/table-read) | POST /api/v1/artifacts/{artifactId}/avatar-video | artifact:publish | sleeperhit cast animate <artifactId> --character <name> [--description <text>] | animate_avatar |
| Refine a table read | available | Writers Lab table-read studio (/dashboard/writing-lab/:projectId/:scriptId/table-read) | POST /api/v1/artifacts/{artifactId}/refine | artifact:publish | sleeperhit refine <artifactId> <instruction...> [--scope auto\|screenplay\|plan] [--confirm] | refine_artifact |
| Finalize a durable MP3 or MP4 | available | Writers Lab table-read studio (/dashboard/writing-lab/:projectId/:scriptId/table-read) | POST /api/v1/artifacts/{artifactId}/finalize | artifact:publish | sleeperhit finalize <artifactId> --mode audio\|video [--refresh] | finalize_artifact |
| Update a read's recording with its changed lines | available | Writers Lab table-read studio (/dashboard/writing-lab/:projectId/:scriptId/table-read) | POST /api/v1/artifacts/{artifactId}/update-recording | artifact:publish | sleeperhit recording update <artifactId> [--confirm] | update_recording |
| Retry a failed or stalled durable MP3 finalize | available | Writers Lab table-read studio (/dashboard/writing-lab/:projectId/:scriptId/table-read) | POST /api/v1/artifacts/{artifactId}/finalize/retry | artifact:publish | sleeperhit finalize <artifactId> --retry | retry_artifact_finalize |
| Read a table-read cast | available | Writers Lab table-read studio (/dashboard/writing-lab/:projectId/:scriptId/table-read) | GET /api/v1/artifacts/{artifactId} | artifact:read | sleeperhit cast <artifactId> | get_cast |
| Read table-read script content | available | Writers Lab table-read studio (/dashboard/writing-lab/:projectId/:scriptId/table-read) | GET /api/v1/artifacts/{artifactId}/script | artifact:read | sleeperhit script get <artifactId> | get_table_read_script |
| Replace a table-read screenplay exactly | available | Writers Lab table-read studio (/dashboard/writing-lab/:projectId/:scriptId/table-read) | POST /api/v1/artifacts/{artifactId}/script | artifact:publish | sleeperhit script replace <artifactId> --file <path> [--instruction <text>] [--narration-policy include\|suppress] [--defer-music] [--defer-audio-render] | replace_artifact_script |
| Read script content by page | available | Writers Lab table-read studio (/dashboard/writing-lab/:projectId/:scriptId/table-read) | GET /api/v1/artifacts/{artifactId}/script | artifact:read | sleeperhit script page <artifactId> <page> | get_script_page |
| Read script content by scene | available | Writers Lab table-read studio (/dashboard/writing-lab/:projectId/:scriptId/table-read) | GET /api/v1/artifacts/{artifactId}/script | artifact:read | sleeperhit script scene <artifactId> <sceneIndex> | get_script_scene |
| Read character lines | available | Writers Lab table-read studio (/dashboard/writing-lab/:projectId/:scriptId/table-read) | GET /api/v1/artifacts/{artifactId}/script | artifact:read | sleeperhit script character <artifactId> <character...> | get_character_lines |
| List a table read's flagged lines | available | Writers Lab table-read studio (/dashboard/writing-lab/:projectId/:scriptId/table-read) | GET /api/v1/artifacts/{artifactId}/review-items | artifact:read | sleeperhit script review list <artifactId> | list_line_reviews |
| Flag a table-read line for review | available | Writers Lab table-read studio (/dashboard/writing-lab/:projectId/:scriptId/table-read) | POST /api/v1/artifacts/{artifactId}/review-items | artifact:publish | sleeperhit script review flag <artifactId> <entryIndex> --line-text "<the line as it stands>" [--character <c>] [--note <text>] | flag_line_for_review |
| Remove a table-read line's review flag | available | Writers Lab table-read studio (/dashboard/writing-lab/:projectId/:scriptId/table-read) | DELETE /api/v1/artifacts/{artifactId}/review-items/{entryIndex} | artifact:publish | sleeperhit script review unflag <artifactId> <entryIndex> | unflag_line_for_review |
| Recast a character voice | available | Writers Lab table-read studio (/dashboard/writing-lab/:projectId/:scriptId/table-read) | POST /api/v1/artifacts/{artifactId}/voice | artifact:publish | sleeperhit voice set <artifactId> --character <c> --voice-id <id> --voice-name <name> [--no-canon] | recast_voice |
| Restore a character's previous voice | available | Writers Lab table-read studio (/dashboard/writing-lab/:projectId/:scriptId/table-read) | POST /api/v1/artifacts/{artifactId}/voice/restore | artifact:publish | sleeperhit voice restore <artifactId> [--character <c>] | restore_voice |
| Re-voice one character in a finished read | available | Writers Lab table-read studio (/dashboard/writing-lab/:projectId/:scriptId/table-read) | POST /api/v1/artifacts/{artifactId}/revoice | artifact:publish | sleeperhit voice revoice <artifactId> --character <c> [--voice-id <id> --voice-name <name>] [--confirm] | revoice_character |
| Re-voice one line at a new speed or with a new direction | available | Writers Lab table-read studio (/dashboard/writing-lab/:projectId/:scriptId/table-read) | POST /api/v1/artifacts/{artifactId}/revoice-line | artifact:publish | sleeperhit voice revoice-line <artifactId> --entry <index> [--speed <x>] [--direction <text> \| --no-direction] [--confirm] | revoice_line |
| Regenerate a character avatar | available | Writers Lab table-read studio (/dashboard/writing-lab/:projectId/:scriptId/table-read) | POST /api/v1/artifacts/{artifactId}/avatar | artifact:publish | sleeperhit avatar set <artifactId> --character <c> [--refine <text>] [--style <style>] [--confirm] | recast_avatar |
| Regenerate a character figure | available | Writers Lab table-read studio (/dashboard/writing-lab/:projectId/:scriptId/table-read) | POST /api/v1/artifacts/{artifactId}/figure | artifact:publish | sleeperhit figure set <artifactId> --character <c> [--refine <text>] [--reference-image-url <url>] [--confirm] | recast_figure |
| Update the cast (voices + avatars) | available | Writers Lab table-read studio (/dashboard/writing-lab/:projectId/:scriptId/table-read) | POST /api/v1/artifacts/{artifactId}/cast | artifact:publish | sleeperhit cast update <artifactId> --json '<entries-or-{entries,avatarStyle}>' [--confirm]  (cast-wide restyle: sleeperhit cast restyle <artifactId> --style <s> [--confirm]) | update_cast |
| Read the enriched cast | available | Writers Lab table-read studio (/dashboard/writing-lab/:projectId/:scriptId/table-read) | GET /api/v1/artifacts/{artifactId}/cast | artifact:read | sleeperhit cast <artifactId> | get_cast |
| Generate script coverage | available | Writers Lab coverage panel (/dashboard/writing-lab/:projectId/:scriptId/coverage) | POST /api/v1/artifacts/{artifactId}/coverage | story:write | sleeperhit coverage generate <artifactId> | generate_coverage |
| Read script coverage | available | Writers Lab coverage panel (/dashboard/writing-lab/:projectId/:scriptId/coverage) | GET /api/v1/artifacts/{artifactId}/coverage | artifact:read | sleeperhit coverage get <artifactId> | get_coverage |
| Analyze brand storytelling coverage | available | Writers Lab coverage panel (/dashboard/writing-lab/:projectId/:scriptId/coverage) | POST /api/v1/brand-coverage | story:write | sleeperhit brand-coverage generate <content\|-> [--type <text>] [--audience <text>] [--industry <text>] [--channel <text>] [--voice <text>] | analyze_brand_coverage |
| Read brand coverage report | available | Writers Lab coverage panel (/dashboard/writing-lab/:projectId/:scriptId/coverage) | GET /api/v1/brand-coverage/{reportId} | story:read | sleeperhit brand-coverage get <reportId> | get_brand_coverage |
| Generate brand storytelling | available | Writers Lab (/dashboard/writing-lab) | POST /api/v1/brand-narrative | story:write | sleeperhit brand-narrative generate <brief\|-> [--type <text>] [--audience <text>] [--industry <text>] [--channel <text>] [--voice <text>] [--length <text>] [--facts <file>] | generate_brand_narrative |
| Generate scene music | available | Writers Lab table-read studio (/dashboard/writing-lab/:projectId/:scriptId/table-read) | POST /api/v1/artifacts/{artifactId}/music | artifact:publish | sleeperhit music generate <artifactId> [--coverage <0..1\|0..100>] [--scenes 0,2,5] | generate_music |
| Update scene music | available | Writers Lab table-read studio (/dashboard/writing-lab/:projectId/:scriptId/table-read) | POST /api/v1/artifacts/{artifactId}/music | artifact:publish | sleeperhit music update <artifactId> [--scene <n> --clip-prompt <text> --clip-volume <0..1> --clip-fade-in <ms> --clip-fade-out <ms> --clip-play-mode once\|loop --clip-sound-url <url> --clip-duration-ms <ms> --clip-anchor start\|end --clip-post-roll-ms <ms>] [--scene <n> --end-transition fadeOut\|cut --mix <0..1> --ducking <0.1..1> --bpm <60..180> --density <0..1> --brightness <0..1> --instruments "Cello:1.2,Piano:0.8"] [--scope screenplay\|scene\|entry] [--mode merge\|replace] | update_music |
| Read scene music status | available | Writers Lab table-read studio (/dashboard/writing-lab/:projectId/:scriptId/table-read) | GET /api/v1/artifacts/{artifactId}/music | artifact:read | sleeperhit music get <artifactId> | get_music |
| Modify voices over a range | available | Writers Lab table-read studio (/dashboard/writing-lab/:projectId/:scriptId/table-read) | POST /api/v1/artifacts/{artifactId}/voice-modification | artifact:publish | sleeperhit modify-voice <artifactId> --start <n> --end <n> | modify_voice |
| Refine character performance | available | Writers Lab table-read studio (/dashboard/writing-lab/:projectId/:scriptId/table-read) | POST /api/v1/artifacts/{artifactId}/performance | artifact:publish | sleeperhit performance <artifactId> --character <name\|NARRATOR\|ALL> [--speed-factor 1.2] [--emotions a,b] | refine_performance |
| List my studio voices | available | Writers Lab (/dashboard/writing-lab) | GET /api/v1/voices | story:read | sleeperhit voices list | list_voices |
| Hear a voice say a line | available | Writers Lab (/dashboard/writing-lab) | POST /api/v1/voices/preview | story:write | sleeperhit voices preview <voiceId> (--text <line> \| --artifact <artifactId> --character <c>) [--provider <p>] | preview_voice |
| Rename a library voice | available | Writers Lab (/dashboard/writing-lab) | PATCH /api/v1/voices/{voiceId} | story:write | sleeperhit voices rename <voiceId> --name <name> | rename_voice |
| Delete a library voice | available | Writers Lab (/dashboard/writing-lab) | DELETE /api/v1/voices/{voiceId} | story:write | sleeperhit voices delete <voiceId> [--confirm] | delete_voice |
| Migrate a voice everywhere it is used | available | Writers Lab (/dashboard/writing-lab) | POST /api/v1/voice-migrations | story:write | sleeperhit voices migrate <fromVoiceId> --to <toVoiceId> [--to-provider <p>] [--to-name <n>] [--project <projectId>] [--character <c>] [--confirm] | migrate_voice |
| List voice migrations | available | Writers Lab (/dashboard/writing-lab) | GET /api/v1/voice-migrations | story:read | sleeperhit voices migrations [--voice <voiceId>] | list_voice_migrations |
| Undo a voice migration | available | Writers Lab (/dashboard/writing-lab) | POST /api/v1/voice-migrations/{migrationId}/undo | story:write | sleeperhit voices migration-undo <migrationId> | undo_voice_migration |
| Mint a voice-clone recording link | available | Writers Lab (/dashboard/writing-lab) | POST /api/v1/voices/clone-link | story:write | sleeperhit voices clone | create_voice_clone_link |
| Mint a voice consent link | available | Writers Lab (/dashboard/writing-lab) | POST /api/v1/voices/{voiceId}/consent-link | story:write | sleeperhit voices consent <voiceId> | create_voice_consent_link |
| Withdraw a cloned voice's consent | available | Writers Lab (/dashboard/writing-lab) | POST /api/v1/voices/{voiceId}/revoke-consent | story:write | sleeperhit voices revoke-consent <voiceId> --confirm | revoke_voice_consent |
| List likeness approvals | available | My Library likeness approvals (/dashboard/library) | GET /api/v1/likeness-consents | story:read | sleeperhit likeness list | list_likeness_consents |
| Mint a likeness approval link | available | My Library likeness approvals (/dashboard/library) | POST /api/v1/likeness-consents/links | story:write | sleeperhit likeness link <name> [--email <email>] | create_likeness_consent_link |
| Withdraw a likeness approval | available | My Library likeness approvals (/dashboard/library) | POST /api/v1/likeness-consents/{consentId}/revoke | story:write | sleeperhit likeness revoke <consentId> --confirm | revoke_likeness_consent |
| Mint a Performance Booth recording link | available | Writers Lab (/dashboard/writing-lab) | POST /api/v1/table-read/performance-booth | story:write | sleeperhit performance-booth <jobId> | create_performance_booth_link |
| Read which table-read lines have a performed take | available | Writers Lab (/dashboard/writing-lab) | GET /api/v1/table-read/performance-booth | story:read | sleeperhit performance-booth <jobId> --status | get_performance_booth_status |
| Start a Pro voice clone | available | Writers Lab (/dashboard/writing-lab) | POST /api/v1/voices/pro/start | story:write | sleeperhit voices clone --pro --name <name> [--language <iso>] [--upgrade-from <voiceId>] | create_pro_voice_clone_link |
| Read the Pro voice clone recording script | available | Writers Lab (/dashboard/writing-lab) | GET /api/v1/voices/pro/script | story:read | sleeperhit voices pro script | get_pro_voice_clone_script |
| Start Pro voice clone training | available | Writers Lab (/dashboard/writing-lab) | POST /api/v1/voices/pro/train | story:write | sleeperhit voices pro train <jobId> | start_pro_voice_clone_training |
| Poll a Pro voice clone | available | Writers Lab (/dashboard/writing-lab) | GET /api/v1/voices/pro/{jobId} | story:read | sleeperhit voices pro status <jobId> | get_pro_voice_clone |
| Read a pitch deck's chapters | available | Writers Lab videos pitch-deck review (/dashboard/writing-lab/:projectId/:scriptId/videos) | GET /api/v1/pitch-decks/{jobId}/chapters | story:read | sleeperhit pitch-deck chapters <jobId> | get_pitch_deck_chapters |
| Read pitch deck plan coverage | available | Writers Lab coverage panel (/dashboard/writing-lab/:projectId/:scriptId/coverage) | GET /api/v1/pitch-decks/{jobId}/storyboard/coverage | story:read | sleeperhit pitch-deck coverage <jobId> | get_storyboard_coverage |
| Generate pitch deck plan coverage | available | Writers Lab coverage panel (/dashboard/writing-lab/:projectId/:scriptId/coverage) | POST /api/v1/pitch-decks/{jobId}/storyboard/coverage | story:write | sleeperhit pitch-deck coverage <jobId> --generate | generate_storyboard_coverage |
| Read a pitch deck's intent | available | Writers Lab videos pitch-deck review (/dashboard/writing-lab/:projectId/:scriptId/videos) | GET /api/v1/pitch-decks/{jobId}/intent | story:read | sleeperhit pitch-deck intent <jobId> | get_video_intent |
| Edit a draft pitch deck's intent | available | Writers Lab videos pitch-deck review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/pitch-decks/{jobId}/intent | story:write | sleeperhit pitch-deck intent <jobId> [--purpose <text>] [--audience <text>] [--logline <text>] [--theme <text>] [--central-question <text>] [--stakes <text>] [--viewer-promise <text>] [--ending <text>] [--arc <json>] | update_video_intent |
| Refine one pitch deck chapter | available | Writers Lab videos pitch-deck review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/pitch-decks/{jobId}/chapters/refine | story:write | sleeperhit pitch-deck refine-chapter <jobId> --chapter <chapterIndex> [--title <text>] [--story-beat <text>] [--visual-plan <text>] [--shot-type <text>] [--motion-plan <text>] [--location <key> \| --clear-location] [--transition-prompt <text>] [--motion-prompt <text>] [--caption <text>] [--text-treatment <text>] [--text-mode voiceover\|caption] [--narration <text>] [--narration-voice <id> \| --clear-narration-voice] [--composition image\|text\|both] [--chapter-focus world\|cast] [--arc-stage setup\|escalation\|turn\|closing_question] [--advances-question <text>] [--montage \| --no-montage] [--keep-scene-sound \| --no-scene-sound] [--line-delivery <text>] [--cut-into-next cut\|dip] [--duration <4..30>] [--visible-characters <a,b>] [--featured-character <name>] [--prop-continuity <text>] [--wardrobe-continuity <text>] [--screen-direction <text>] [--continuity-notes <text>] | refine_pitch_deck_chapter |
| Read the pitch deck narrator | available | Writers Lab videos pitch-deck review (/dashboard/writing-lab/:projectId/:scriptId/videos) | GET /api/v1/pitch-decks/{jobId}/narrator | story:read | sleeperhit pitch-deck narrator <jobId> | get_pitch_deck_narrator |
| Cast the pitch deck narrator | available | Writers Lab videos pitch-deck review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/pitch-decks/{jobId}/narrator | story:write | sleeperhit pitch-deck narrator <jobId> --voice-id <voiceId> [--provider <name>] \| --clear | set_pitch_deck_narrator |
| Set a pitch deck's black interludes | available | Writers Lab videos pitch-deck review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/pitch-decks/{jobId}/interludes | story:write | sleeperhit pitch-deck interludes <jobId> --json <list> \| --file <path> \| --clear | update_pitch_deck_interludes |
| Set a pitch deck's title sequence | available | Writers Lab videos pitch-deck review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/pitch-decks/{jobId}/title-sequence | story:write | sleeperhit pitch-deck title-sequence <jobId> --title <WORD> --cast <names> [--shadow <name>] [--seconds <3-5>] [--epigraph <text> [--epigraph-attribution <text>]] [--source-credit <text>] [--name-supers on\|off] [--role "<name>=<role>"]… [--label "<name>=<LABEL>"]… [--beat-grid on\|off] [--beat-seconds <0.5-4>] [--title-beats <1-8>] [--flash-source "<name>=deck\|project\|motion\|portrait\|auto"]… [--on\|--off] \| --clear | update_pitch_deck_title_sequence |
| Set a pitch deck's closing sequence | available | Writers Lab videos pitch-deck review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/pitch-decks/{jobId}/closing-sequence | story:write | sleeperhit pitch-deck closing-sequence <jobId> [--quote <text> [--quote-attribution <source>] \| --no-quote] [--coming-soon <text>] [--production-credit <text>] [--on\|--off] \| --clear | update_pitch_deck_closing_sequence |
| Set a pitch deck's visual grammar | available | Writers Lab videos pitch-deck review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/pitch-decks/{jobId}/visual-grammar | story:write | sleeperhit pitch-deck visual-grammar <jobId> [--text <words> \| --file <path>] | update_pitch_deck_visual_grammar |
| Make living portraits for a pitch deck's title intros | available | Writers Lab videos pitch-deck review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/pitch-decks/{jobId}/title-sequence/motion-closes | artifact:publish | sleeperhit pitch-deck title-motion-closes <jobId> [--name <name>]… [--confirm] | render_pitch_deck_title_motion_closes |
| Read the pitch deck finish | available | Writers Lab videos pitch-deck review (/dashboard/writing-lab/:projectId/:scriptId/videos) | GET /api/v1/pitch-decks/{jobId}/look | story:read | sleeperhit pitch-deck look <jobId> | get_pitch_deck_look |
| Set the pitch deck finish | available | Writers Lab videos pitch-deck review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/pitch-decks/{jobId}/look | story:write | sleeperhit pitch-deck look <jobId> <camera\|period-35mm\|night-interior\|none> [--intensity light\|standard\|strong] [--adjust <effect>=<level>,…] | set_pitch_deck_look |
| Read the pitch deck motion blur | available | Writers Lab videos pitch-deck review (/dashboard/writing-lab/:projectId/:scriptId/videos) | GET /api/v1/pitch-decks/{jobId}/motion-blur | story:read | sleeperhit pitch-deck motion-blur <jobId> | get_pitch_deck_motion_blur |
| Set the pitch deck motion blur | available | Writers Lab videos pitch-deck review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/pitch-decks/{jobId}/motion-blur | story:write | sleeperhit pitch-deck motion-blur <jobId> [--chapter <chapterIndex>[:<shot>,…\|moving\|none]]… [--strength standard\|subtle] [--off] | set_pitch_deck_motion_blur |
| Read the pitch deck quiet track | available | Writers Lab videos pitch-deck review (/dashboard/writing-lab/:projectId/:scriptId/videos) | GET /api/v1/pitch-decks/{jobId}/quiet-track | story:read | sleeperhit pitch-deck quiet-track <jobId> | get_pitch_deck_quiet_track |
| Set the pitch deck quiet track | available | Writers Lab videos pitch-deck review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/pitch-decks/{jobId}/quiet-track | story:write | sleeperhit pitch-deck quiet-track <jobId> --track silence\|room_tone \| --off | set_pitch_deck_quiet_track |
| Read the pitch deck video model | available | Writers Lab videos pitch-deck review (/dashboard/writing-lab/:projectId/:scriptId/videos) | GET /api/v1/pitch-decks/{jobId}/video-model | story:read | sleeperhit pitch-deck video-model <jobId> | get_pitch_deck_video_model |
| Set the pitch deck video model | available | Writers Lab videos pitch-deck review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/pitch-decks/{jobId}/video-model | story:write | sleeperhit pitch-deck video-model <jobId> --model wan3-prime\|vidu-q4 | set_pitch_deck_video_model |
| List the pitch deck versions | available | Writers Lab videos pitch-deck review (/dashboard/writing-lab/:projectId/:scriptId/videos) | GET /api/v1/pitch-decks/{jobId}/versions | story:read | sleeperhit pitch-deck versions <jobId> | list_pitch_deck_versions |
| Read a pitch deck version | available | Writers Lab videos pitch-deck review (/dashboard/writing-lab/:projectId/:scriptId/videos) | GET /api/v1/pitch-decks/{jobId}/versions/{number} | story:read | sleeperhit pitch-deck version-clips <jobId> <number> [--download <dir>] | get_pitch_deck_version |
| Ask for a pitch deck version zip | available | Writers Lab videos pitch-deck review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/pitch-decks/{jobId}/versions/{number}/zip | story:write | sleeperhit pitch-deck version-clips <jobId> <number> --zip | request_pitch_deck_version_zip |
| Read the pitch deck camera motion | available | Writers Lab videos pitch-deck review (/dashboard/writing-lab/:projectId/:scriptId/videos) | GET /api/v1/pitch-decks/{jobId}/camera | story:read | sleeperhit pitch-deck camera <jobId> | get_pitch_deck_camera |
| Set the pitch deck camera motion | available | Writers Lab videos pitch-deck review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/pitch-decks/{jobId}/camera | story:write | sleeperhit pitch-deck camera <jobId> [--handheld off\|subtle\|medium] [--snap <chapterIndex>:<shot>:<NAME>[@<zoom>]]… [--reframe <chapterIndex>:<shot>:<FROM>><TARGET>]… [--clear <chapterIndex>]… [--off] | set_pitch_deck_camera |
| Render one pitch deck chapter again | available | Writers Lab videos pitch-deck review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/pitch-decks/{jobId}/chapters/render-clip | artifact:publish | sleeperhit pitch-deck render-clip <jobId> --chapter <chapterIndex> [--call <callId>] [--confirm] | render_pitch_deck_chapter_clip |
| Select a take of one pitch deck call | available | Writers Lab videos pitch-deck review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/pitch-decks/{jobId}/chapters/{chapterIndex}/select-take | story:write | sleeperhit pitch-deck select-take <jobId> --chapter <chapterIndex> --call <callId> --take <n> | select_pitch_deck_take |
| Repair one take of a pitch deck call in place | available | Writers Lab videos pitch-deck review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/pitch-decks/{jobId}/chapters/{chapterIndex}/repair-take | artifact:publish | sleeperhit pitch-deck repair-take <jobId> --chapter <chapterIndex> --call <callId> --take <n> [--confirm] | repair_pitch_deck_take |
| Override the repair decision on one pitch deck take | available | Writers Lab videos pitch-deck review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/pitch-decks/{jobId}/chapters/{chapterIndex}/take-repair-override | story:write | sleeperhit pitch-deck override-repair <jobId> --chapter <chapterIndex> --call <callId> --take <n> --keep\|--restore\|--rewatch | override_pitch_deck_take_repair |
| Trim one take of a pitch deck call | available | Writers Lab videos pitch-deck review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/pitch-decks/{jobId}/chapters/{chapterIndex}/trim-take | story:write | sleeperhit pitch-deck trim-take <jobId> --chapter <chapterIndex> --call <callId> --take <n> --keep <start>-<end> | trim_pitch_deck_take |
| Cut a pitch deck chapter's line out, keep the rest of its footage | available | Writers Lab videos pitch-deck review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/pitch-decks/{jobId}/chapters/{chapterIndex}/drop-line | story:write | sleeperhit pitch-deck drop-line <jobId> --chapter <chapterIndex> [--keep before\|after] [--to <chapterIndex>] | drop_pitch_deck_chapter_line |
| Stage one pitch deck take's line as a voice-over | available | Writers Lab videos pitch-deck review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/pitch-decks/{jobId}/chapters/{chapterIndex}/stage-voice-over | artifact:publish | sleeperhit pitch-deck stage-voice-over <jobId> --chapter <chapterIndex> --call <callId> --take <n> [--confirm] | stage_pitch_deck_take_as_voice_over |
| Insert a blank pitch deck chapter | available | Writers Lab videos pitch-deck review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/pitch-decks/{jobId}/chapters/insert | story:write | sleeperhit pitch-deck add-chapter <jobId> [--at <position> \| --after <chapterIndex>] | add_pitch_deck_chapter |
| Remove a pitch deck chapter | available | Writers Lab videos pitch-deck review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/pitch-decks/{jobId}/chapters/remove | story:write | sleeperhit pitch-deck remove-chapter <jobId> --chapter <chapterIndex> | remove_pitch_deck_chapter |
| Put the pitch deck chapters in a new order | available | Writers Lab videos pitch-deck review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/pitch-decks/{jobId}/chapters/reorder | story:write | sleeperhit pitch-deck reorder-chapters <jobId> (--order <chapterIndex,...> \| --move <chapterIndex> --after <chapterIndex\|first>) | reorder_pitch_deck_chapters |
| Render one chapter's text layer | available | Writers Lab videos pitch-deck review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/pitch-decks/{jobId}/storyboard/regenerate-text | artifact:publish | sleeperhit pitch-deck regenerate-text <jobId> --chapter <chapterIndex> [--confirm] | regenerate_pitch_deck_text |
| Direct how a deck's text looks and moves | available | Writers Lab videos pitch-deck review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/pitch-decks/{jobId}/storyboard/direct-text-motion | story:write | sleeperhit pitch-deck direct-text-motion <jobId> (--chapter <chapterIndex> \| --title-element title\|epigraph\|source-credit\|name-supers \| --closing-element quote\|coming-soon\|production-credit) (--direction <text> \| --clear) | direct_pitch_deck_text_motion |
| Re-stitch the finished deck master from its current chapters and audio | available | Writers Lab videos pitch-deck review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/pitch-decks/{jobId}/video-export | story:write | sleeperhit pitch-deck export <jobId> | export_pitch_deck_video |
| Approve the pitch deck plan into the render | available | Writers Lab videos pitch-deck review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/pitch-decks/{jobId}/plan/approve | story:write | sleeperhit pitch-deck approve-plan <jobId> [--confirm] [--acknowledge-plan-coverage "<reason>"] | approve_pitch_deck_plan |
| Finish the pitch deck | available | Writers Lab videos pitch-deck review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/pitch-decks/{jobId}/finish | artifact:publish | sleeperhit pitch-deck finish <jobId> [--resolution 720p\|1080p] [--confirm] [--acknowledge-video-coverage] | finish_pitch_deck |
| Re-assemble a pitch deck whose assembly failed, or rebuild its master | available | Writers Lab videos pitch-deck review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/pitch-decks/{jobId}/reassemble | story:write | sleeperhit pitch-deck reassemble <jobId> | reassemble_pitch_deck |
| Let one pitch deck take still out at the provider go | available | Writers Lab videos pitch-deck review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/pitch-decks/{jobId}/chapters/{chapterIndex}/abandon-take | artifact:publish | sleeperhit pitch-deck abandon-take <jobId> --chapter <chapterIndex> --call <callId> --take <n> | abandon_pitch_deck_take |
| Stop a pitch deck's render | available | Writers Lab videos pitch-deck review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/pitch-decks/{jobId}/cancel-render | artifact:publish | sleeperhit pitch-deck cancel-render <jobId> | cancel_pitch_deck_render |
| Let the deck's automatic fixes try more | available | Writers Lab videos pitch-deck review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/pitch-decks/{jobId}/more-fixes | artifact:publish | sleeperhit pitch-deck more-fixes <jobId> [--confirm] | allow_more_pitch_deck_fixes |
| Read pitch deck video coverage | available | Writers Lab videos pitch-deck review (/dashboard/writing-lab/:projectId/:scriptId/videos) | GET /api/v1/pitch-decks/{jobId}/video-coverage | story:read | sleeperhit pitch-deck video-coverage <jobId> | get_video_coverage |
| Cover the pitch deck video again | available | Writers Lab videos pitch-deck review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/pitch-decks/{jobId}/video-coverage | story:write | sleeperhit pitch-deck video-coverage <jobId> --generate | generate_video_coverage |
| Read the pitch deck delivery class | available | Writers Lab videos pitch-deck review (/dashboard/writing-lab/:projectId/:scriptId/videos) | GET /api/v1/pitch-decks/{jobId}/resolution | story:read | sleeperhit pitch-deck resolution <jobId> | get_pitch_deck_resolution |
| Choose the pitch deck delivery class | available | Writers Lab videos pitch-deck review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/pitch-decks/{jobId}/resolution | story:write | sleeperhit pitch-deck resolution <jobId> --resolution <720p\|1080p> \| --default | set_pitch_deck_resolution |
| Read a trailer's beats | available | Writers Lab videos trailer review (/dashboard/writing-lab/:projectId/:scriptId/videos) | GET /api/v1/trailers/{jobId}/beats | story:read | sleeperhit trailer beats <jobId> | get_trailer_beats |
| Read every trailer beat's render state and credit trail | available | Writers Lab videos trailer review (/dashboard/writing-lab/:projectId/:scriptId/videos) | GET /api/v1/trailers/{jobId}/render-states | story:read | sleeperhit trailer render-status <jobId> | get_trailer_render_states |
| Read the trailer narrator | available | Writers Lab videos trailer review (/dashboard/writing-lab/:projectId/:scriptId/videos) | GET /api/v1/trailers/{jobId}/narrator | story:read | sleeperhit trailer narrator <jobId> | get_trailer_narrator |
| Cast the trailer narrator | available | Writers Lab videos trailer review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/trailers/{jobId}/narrator | story:write | sleeperhit trailer narrator <jobId> --voice-id <voiceId> [--provider <name>] \| --clear | set_trailer_narrator |
| Read the trailer aspect ratio | available | Writers Lab videos trailer review (/dashboard/writing-lab/:projectId/:scriptId/videos) | GET /api/v1/trailers/{jobId}/aspect | story:read | sleeperhit trailer aspect <jobId> | get_trailer_aspect |
| Choose the trailer aspect ratio | available | Writers Lab videos trailer review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/trailers/{jobId}/aspect | story:write | sleeperhit trailer aspect <jobId> <9:16\|16:9\|1:1> | set_trailer_aspect |
| Choose the trailer audio policy | available | Writers Lab videos trailer review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/trailers/{jobId}/audio-policy | story:write | sleeperhit trailer audio-policy <jobId> [narrate\|suppress] | set_trailer_audio_policy |
| Read the trailer delivery class | available | Writers Lab videos trailer review (/dashboard/writing-lab/:projectId/:scriptId/videos) | GET /api/v1/trailers/{jobId}/resolution | story:read | sleeperhit trailer resolution <jobId> | get_trailer_resolution |
| Choose the trailer delivery class | available | Writers Lab videos trailer review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/trailers/{jobId}/resolution | story:write | sleeperhit trailer resolution <jobId> --resolution <720p\|1080p> \| --default | set_trailer_resolution |
| Read the trailer finish | available | Writers Lab videos trailer review (/dashboard/writing-lab/:projectId/:scriptId/videos) | GET /api/v1/trailers/{jobId}/look | story:read | sleeperhit trailer look <jobId> | get_trailer_look |
| Set the trailer finish | available | Writers Lab videos trailer review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/trailers/{jobId}/look | story:write | sleeperhit trailer look <jobId> <camera\|period-35mm\|night-interior\|none> [--intensity light\|standard\|strong] [--adjust <effect>=<level>,…] | set_trailer_look |
| Read the trailer motion blur | available | Writers Lab videos trailer review (/dashboard/writing-lab/:projectId/:scriptId/videos) | GET /api/v1/trailers/{jobId}/motion-blur | story:read | sleeperhit trailer motion-blur <jobId> | get_trailer_motion_blur |
| Set the trailer motion blur | available | Writers Lab videos trailer review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/trailers/{jobId}/motion-blur | story:write | sleeperhit trailer motion-blur <jobId> [--beat <beatIndex>[:<shot>,…\|moving\|none]]… [--strength standard\|subtle] [--off] | set_trailer_motion_blur |
| Read the trailer camera motion | available | Writers Lab videos trailer review (/dashboard/writing-lab/:projectId/:scriptId/videos) | GET /api/v1/trailers/{jobId}/camera | story:read | sleeperhit trailer camera <jobId> | get_trailer_camera |
| Set the trailer camera motion | available | Writers Lab videos trailer review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/trailers/{jobId}/camera | story:write | sleeperhit trailer camera <jobId> [--handheld off\|subtle\|medium] [--snap <beatIndex>:<shot>:<NAME>[@<zoom>]]… [--reframe <beatIndex>:<shot>:<FROM>><TARGET>]… [--clear <beatIndex>]… [--off] | set_trailer_camera |
| Read the trailer quiet track | available | Writers Lab videos trailer review (/dashboard/writing-lab/:projectId/:scriptId/videos) | GET /api/v1/trailers/{jobId}/quiet-track | story:read | sleeperhit trailer quiet-track <jobId> | get_trailer_quiet_track |
| Set the trailer quiet track | available | Writers Lab videos trailer review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/trailers/{jobId}/quiet-track | story:write | sleeperhit trailer quiet-track <jobId> --track silence\|room_tone \| --off | set_trailer_quiet_track |
| Cut a trailer beat's line out, keep the rest of its footage | available | Writers Lab videos trailer review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/trailers/{jobId}/beats/{beatIndex}/drop-line | story:write | sleeperhit trailer drop-line <jobId> --beat <beatIndex> [--line <n>] [--keep before\|after] [--to <beatIndex>] | drop_trailer_beat_line |
| Duplicate a trailer from its plan | available | Writers Lab videos trailer review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/trailers/{jobId}/duplicate | story:write | sleeperhit trailer duplicate <jobId> [--title <text>] | duplicate_trailer |
| Set a trailer's black interludes | available | Writers Lab videos trailer review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/trailers/{jobId}/interludes | story:write | sleeperhit trailer interludes <jobId> --json <list> \| --file <path> \| --clear | update_trailer_interludes |
| Set a trailer's closing sequence | available | Writers Lab videos trailer review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/trailers/{jobId}/closing-sequence | story:write | sleeperhit trailer closing-sequence <jobId> [--quote <text> [--quote-attribution <source>] \| --no-quote] [--coming-soon <text>] [--production-credit <text>] [--on\|--off] \| --clear | update_trailer_closing_sequence |
| List the trailer versions | available | Writers Lab videos trailer review (/dashboard/writing-lab/:projectId/:scriptId/videos) | GET /api/v1/trailers/{jobId}/versions | story:read | sleeperhit trailer versions <jobId> | list_trailer_versions |
| Read a trailer version | available | Writers Lab videos trailer review (/dashboard/writing-lab/:projectId/:scriptId/videos) | GET /api/v1/trailers/{jobId}/versions/{number} | story:read | sleeperhit trailer version-clips <jobId> <number> [--download <dir>] | get_trailer_version |
| Ask for a trailer version zip | available | Writers Lab videos trailer review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/trailers/{jobId}/versions/{number}/zip | story:write | sleeperhit trailer version-clips <jobId> <number> --zip | request_trailer_version_zip |
| Delete a trailer | available | Writers Lab videos trailer review (/dashboard/writing-lab/:projectId/:scriptId/videos) | DELETE /api/v1/trailers/{jobId} | story:write | sleeperhit trailer delete <jobId> [--confirm] | delete_trailer |
| Rename a trailer | available | Writers Lab trailer list (/dashboard/writing-lab/:projectId/:scriptId/videos) | PATCH /api/v1/trailers/{jobId} | story:write | sleeperhit trailer rename <jobId> <title> [--automatic] | rename_trailer |
| Delete a pitch deck | available | Writers Lab videos pitch-deck review (/dashboard/writing-lab/:projectId/:scriptId/videos) | DELETE /api/v1/pitch-decks/{jobId} | story:write | sleeperhit pitch-deck delete <jobId> [--confirm] | delete_pitch_deck |
| Rename a pitch deck | available | Writers Lab deck list (/dashboard/writing-lab/:projectId/:scriptId/videos) | PATCH /api/v1/pitch-decks/{jobId} | story:write | sleeperhit pitch-deck rename <jobId> <title> [--automatic] | rename_pitch_deck |
| Duplicate a pitch deck from its plan | available | Writers Lab videos pitch-deck review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/pitch-decks/{jobId}/duplicate | story:write | sleeperhit pitch-deck duplicate <jobId> [--title <text>] | duplicate_pitch_deck |
| Publish a pitch deck | available | Writers Lab videos pitch-deck review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/pitch-decks/{jobId}/publish | story:write | sleeperhit pitch-deck publish <jobId> | publish_pitch_deck |
| Unpublish a pitch deck | available | Writers Lab videos pitch-deck review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/pitch-decks/{jobId}/unpublish | story:write | sleeperhit pitch-deck unpublish <jobId> | unpublish_pitch_deck |
| Render a finished pitch deck's PDF | available | Writers Lab videos pitch-deck review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/pitch-decks/{jobId}/pdf | story:write | sleeperhit pitch-deck pdf <jobId> | render_pitch_deck_pdf |
| Read per-beat music and sound effects | available | Writers Lab videos trailer review (/dashboard/writing-lab/:projectId/:scriptId/videos) | GET /api/v1/trailers/{jobId}/storyboard/audio | story:read | sleeperhit trailer audio <jobId> | get_trailer_scene_audio |
| Score one beat's music | available | Writers Lab videos trailer review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/trailers/{jobId}/storyboard/music | story:write | sleeperhit trailer music <score\|update\|remove\|apply-library> <jobId> --beat <n> [flags] | score_trailer_scene_music |
| Place sound effects on one beat | available | Writers Lab videos trailer review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/trailers/{jobId}/storyboard/sfx | story:write | sleeperhit trailer sfx <add\|update\|remove\|apply-library> <jobId> --beat <n> [flags] | add_trailer_scene_sfx |
| Read per-scene music and sound effects | available | Writers Lab videos pitch-deck review (/dashboard/writing-lab/:projectId/:scriptId/videos) | GET /api/v1/pitch-decks/{jobId}/storyboard/audio | story:read | sleeperhit pitch-deck audio <jobId> | get_pitch_deck_scene_audio |
| Score one scene's music | available | Writers Lab videos pitch-deck review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/pitch-decks/{jobId}/storyboard/music | story:write | sleeperhit pitch-deck music <score\|update\|remove\|apply-library> <jobId> --chapter <chapterIndex> [flags] | score_pitch_deck_scene_music |
| Place sound effects on one scene | available | Writers Lab videos pitch-deck review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/pitch-decks/{jobId}/storyboard/sfx | story:write | sleeperhit pitch-deck sfx <add\|update\|remove\|apply-library> <jobId> --chapter <chapterIndex> [flags] | add_pitch_deck_scene_sfx |
| Read the trailer audio timeline | available | Writers Lab videos trailer review (/dashboard/writing-lab/:projectId/:scriptId/videos) | GET /api/v1/trailers/{jobId}/storyboard/audio-timeline | story:read | sleeperhit trailer timeline <jobId> show | get_trailer_audio_timeline |
| Edit the trailer audio timeline | available | Writers Lab videos trailer review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/trailers/{jobId}/storyboard/audio-timeline | story:write | sleeperhit trailer timeline <jobId> <add-layer\|remove-layer\|generate-music\|add-music-from-library\|update-music\|remove-music\|generate-sfx\|add-sfx-from-library\|update-sfx\|update-sfx-cues\|remove-sfx> [flags] (sfx: --kind spot\|ambience --length-ms N --fade-in-ms N --fade-out-ms N; update-sfx --muted\|--unmuted --clear-length; update-sfx-cues --cues '<json>') | generate_trailer_timeline_music |
| Read the pitch-deck audio timeline | available | Writers Lab videos pitch-deck review (/dashboard/writing-lab/:projectId/:scriptId/videos) | GET /api/v1/pitch-decks/{jobId}/storyboard/audio-timeline | story:read | sleeperhit pitch-deck timeline <jobId> show | get_pitch_deck_audio_timeline |
| Edit the pitch-deck audio timeline | available | Writers Lab videos pitch-deck review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/pitch-decks/{jobId}/storyboard/audio-timeline | story:write | sleeperhit pitch-deck timeline <jobId> <add-layer\|remove-layer\|generate-music\|add-music-from-library\|update-music\|remove-music\|generate-sfx\|add-sfx-from-library\|update-sfx\|update-sfx-cues\|remove-sfx> [flags] (sfx: --kind spot\|ambience --length-ms N --fade-in-ms N --fade-out-ms N; update-sfx --muted\|--unmuted --clear-length; update-sfx-cues --cues '<json>') | generate_pitch_deck_timeline_music |
| Read the trailer sound map | available | Writers Lab videos trailer review (/dashboard/writing-lab/:projectId/:scriptId/videos) | GET /api/v1/trailers/{jobId}/storyboard/sound-map | story:read | sleeperhit trailer sound-map <jobId> [--beat <n>] | get_trailer_sound_map |
| Read the pitch-deck sound map | available | Writers Lab videos pitch-deck review (/dashboard/writing-lab/:projectId/:scriptId/videos) | GET /api/v1/pitch-decks/{jobId}/storyboard/sound-map | story:read | sleeperhit pitch-deck sound-map <jobId> [--chapter <chapterIndex>] | get_pitch_deck_sound_map |
| Read the pitch deck's score to picture | available | Writers Lab videos pitch-deck review (/dashboard/writing-lab/:projectId/:scriptId/videos) | GET /api/v1/pitch-decks/{jobId}/score-to-picture | story:read | sleeperhit pitch-deck score-to-picture <jobId> show | get_pitch_deck_score_to_picture |
| Score the pitch deck to picture | available | Writers Lab videos pitch-deck review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/pitch-decks/{jobId}/score-to-picture | artifact:publish | sleeperhit pitch-deck score-to-picture <jobId> start [--direction <text>] [--confirm] | score_pitch_deck_to_picture |
| Revert the pitch deck to its scene beds | available | Writers Lab videos pitch-deck review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/pitch-decks/{jobId}/score-to-picture/revert | story:write | sleeperhit pitch-deck score-to-picture <jobId> revert | revert_pitch_deck_score_to_picture |
| Read the pitch deck's bell on the beat | available | Writers Lab videos pitch-deck review (/dashboard/writing-lab/:projectId/:scriptId/videos) | GET /api/v1/pitch-decks/{jobId}/bell-lane | story:read | sleeperhit pitch-deck bell <jobId> show | get_pitch_deck_bell_lane |
| Strike a bell on every beat of the pitch deck | available | Writers Lab videos pitch-deck review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/pitch-decks/{jobId}/bell-lane | story:write | sleeperhit pitch-deck bell <jobId> strike [--asset <id>\|--from-deck <jobId>\|--prompt <text>] [--every 1\|2] [--from <s>\|start] [--to <s>\|end] [--skip <keys>\|none] [--accent on\|off] [--level <0-1>] [--duck on\|off] | strike_pitch_deck_bell_on_the_beat |
| Take the bell off the pitch deck | available | Writers Lab videos pitch-deck review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/pitch-decks/{jobId}/bell-lane/remove | story:write | sleeperhit pitch-deck bell <jobId> remove | remove_pitch_deck_bell_lane |
| List the sounds a project uses | available | Writers Lab project library (/dashboard/writing-lab) | GET /api/v1/story-projects/{projectId}/sounds | story:read | sleeperhit projects sounds <projectId> [--kind bell\|music\|sfx] [--query <text>] | list_project_sounds |
| Read the trailer's score to picture | available | Writers Lab videos trailer review (/dashboard/writing-lab/:projectId/:scriptId/videos) | GET /api/v1/trailers/{jobId}/score-to-picture | story:read | sleeperhit trailer score-to-picture <jobId> show | get_trailer_score_to_picture |
| Score the trailer to picture | available | Writers Lab videos trailer review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/trailers/{jobId}/score-to-picture | artifact:publish | sleeperhit trailer score-to-picture <jobId> start [--direction <text>] [--confirm] | score_trailer_to_picture |
| Revert the trailer to its scene beds | available | Writers Lab videos trailer review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/trailers/{jobId}/score-to-picture/revert | story:write | sleeperhit trailer score-to-picture <jobId> revert | revert_trailer_score_to_picture |
| Read trailer plan coverage | available | Writers Lab coverage panel (/dashboard/writing-lab/:projectId/:scriptId/coverage) | GET /api/v1/trailers/{jobId}/storyboard/coverage | story:read | sleeperhit trailer coverage <jobId> | get_storyboard_coverage |
| Generate trailer plan coverage | available | Writers Lab coverage panel (/dashboard/writing-lab/:projectId/:scriptId/coverage) | POST /api/v1/trailers/{jobId}/storyboard/coverage | story:write | sleeperhit trailer coverage <jobId> --generate | generate_storyboard_coverage |
| Read a trailer's intent | available | Writers Lab videos trailer review (/dashboard/writing-lab/:projectId/:scriptId/videos) | GET /api/v1/trailers/{jobId}/intent | story:read | sleeperhit trailer intent <jobId> | get_video_intent |
| Edit a draft trailer's intent | available | Writers Lab videos trailer review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/trailers/{jobId}/intent | story:write | sleeperhit trailer intent <jobId> [--purpose <text>] [--audience <text>] [--logline <text>] [--theme <text>] [--central-question <text>] [--stakes <text>] [--viewer-promise <text>] [--ending <text>] [--arc <json>] | update_video_intent |
| Refine one trailer beat | available | Writers Lab videos trailer review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/trailers/{jobId}/beats/refine | story:write | sleeperhit trailer refine <jobId> --beat <n> [--story-beat <text>] [--shot-type <text>] [--motion-prompt <text>] [--transition-prompt <text>] [--transition-in <text>] [--caption <text>] [--composition image\|text\|both\|capture] [--capture <captureId>] [--keep-sound \| --no-sound] [--visible-characters <a,b>] [--featured-character <name>] [--location <key>] [--duration <4..30>] [--shots <json>] [--character-action <text>] [--staging-notes <text>] [--arc-stage setup\|escalation\|turn\|closing_question] [--advances-question <text>] [--why-it-follows <text>] [--montage \| --no-montage] [--narration <text>] | refine_trailer_beat |
| Play an app capture in a trailer beat | available | Writers Lab videos trailer review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/trailers/{jobId}/beats/refine | story:write | sleeperhit trailer refine <jobId> --beat <n> --composition capture --capture <captureId> | refine_trailer_beat |
| Keep a capture beat's own sound | available | Writers Lab videos trailer review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/trailers/{jobId}/beats/refine | story:write | sleeperhit trailer refine <jobId> --beat <n> --keep-sound \| --no-sound | refine_trailer_beat |
| Render one trailer beat again | available | Writers Lab videos trailer review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/trailers/{jobId}/beats/render-clip | artifact:publish | sleeperhit trailer render-clip <jobId> --beat <n> [--call <callId>] [--confirm] | render_trailer_beat_clip |
| Select a take of one trailer call | available | Writers Lab videos trailer review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/trailers/{jobId}/beats/{beatIndex}/select-take | story:write | sleeperhit trailer select-take <jobId> --beat <n> --call <callId> --take <n> | select_trailer_take |
| Repair one take of a trailer call in place | available | Writers Lab videos trailer review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/trailers/{jobId}/beats/{beatIndex}/repair-take | artifact:publish | sleeperhit trailer repair-take <jobId> --beat <n> --call <callId> --take <n> [--confirm] | repair_trailer_take |
| Override the repair decision on one trailer take | available | Writers Lab videos trailer review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/trailers/{jobId}/beats/{beatIndex}/take-repair-override | story:write | sleeperhit trailer override-repair <jobId> --beat <n> --call <callId> --take <n> --keep\|--restore\|--rewatch | override_trailer_take_repair |
| Trim one take of a trailer call | available | Writers Lab videos trailer review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/trailers/{jobId}/beats/{beatIndex}/trim-take | story:write | sleeperhit trailer trim-take <jobId> --beat <n> --call <callId> --take <n> --keep <start>-<end> | trim_trailer_take |
| Stage one trailer take's line as a voice-over | available | Writers Lab videos trailer review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/trailers/{jobId}/beats/{beatIndex}/stage-voice-over | artifact:publish | sleeperhit trailer stage-voice-over <jobId> --beat <n> --call <callId> --take <n> [--confirm] | stage_trailer_take_as_voice_over |
| Finish the trailer | available | Writers Lab videos trailer review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/trailers/{jobId}/finish | artifact:publish | sleeperhit trailer finish <jobId> [--resolution 720p\|1080p] [--confirm] [--acknowledge-video-coverage] | finish_trailer |
| Re-assemble a trailer whose assembly failed, or rebuild its master | available | Writers Lab videos trailer review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/trailers/{jobId}/reassemble | story:write | sleeperhit trailer reassemble <jobId> | reassemble_trailer |
| Let one trailer take still out at the provider go | available | Writers Lab videos trailer review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/trailers/{jobId}/beats/{beatIndex}/abandon-take | artifact:publish | sleeperhit trailer abandon-take <jobId> --beat <beatIndex> --call <callId> --take <n> | abandon_trailer_take |
| Stop a trailer's render | available | Writers Lab videos trailer review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/trailers/{jobId}/cancel-render | artifact:publish | sleeperhit trailer cancel-render <jobId> | cancel_trailer_render |
| Let the trailer's automatic fixes try more | available | Writers Lab videos trailer review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/trailers/{jobId}/more-fixes | artifact:publish | sleeperhit trailer more-fixes <jobId> [--confirm] | allow_more_trailer_fixes |
| Read trailer video coverage | available | Writers Lab videos trailer review (/dashboard/writing-lab/:projectId/:scriptId/videos) | GET /api/v1/trailers/{jobId}/video-coverage | story:read | sleeperhit trailer video-coverage <jobId> | get_video_coverage |
| Cover the trailer video again | available | Writers Lab videos trailer review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/trailers/{jobId}/video-coverage | story:write | sleeperhit trailer video-coverage <jobId> --generate | generate_video_coverage |
| Move a trailer beat to another position | available | Writers Lab videos trailer review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/trailers/{jobId}/storyboard/move-beat | story:write | sleeperhit trailer move-beat <jobId> --from <n> --to <n> | move_trailer_beat |
| Insert a blank trailer beat | available | Writers Lab videos trailer review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/trailers/{jobId}/storyboard/insert-beat | story:write | sleeperhit trailer insert-beat <jobId> [--at <n> \| --after <n>] | insert_trailer_beat |
| Remove a trailer beat | available | Writers Lab videos trailer review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/trailers/{jobId}/storyboard/remove-beat | story:write | sleeperhit trailer remove-beat <jobId> --beat <n> | remove_trailer_beat |
| Read a trailer beat's earlier cuts | available | Writers Lab videos trailer review (/dashboard/writing-lab/:projectId/:scriptId/videos) | GET /api/v1/trailers/{jobId}/storyboard/takes | story:read | sleeperhit trailer takes <jobId> [--beat <n>] | get_trailer_beat_takes |
| Put an earlier cut of a beat back | available | Writers Lab videos trailer review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/trailers/{jobId}/storyboard/restore-take | story:write | sleeperhit trailer restore-take <jobId> --beat <n> --url <url> | restore_trailer_take |
| Direct how a trailer beat's text moves | available | Writers Lab videos trailer review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/trailers/{jobId}/storyboard/direct-text-motion | story:write | sleeperhit trailer direct-text-motion <jobId> --beat <n> --direction <text> \| --closing-element quote\|coming-soon\|production-credit --direction <text> \| --clear | direct_trailer_text_motion |
| Render one trailer text layer | available | Writers Lab videos trailer review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/trailers/{jobId}/storyboard/regenerate-text | artifact:publish | sleeperhit trailer regenerate-text <jobId> --beat <n> [--confirm] | regenerate_trailer_text |
| Re-stitch the finished trailer master | available | Writers Lab videos trailer review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/trailers/{jobId}/video-export | story:write | sleeperhit trailer export <jobId> | export_trailer_video |
| Approve the trailer plan into the render | available | Writers Lab videos trailer review (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/trailers/{jobId}/plan/approve | story:write | sleeperhit trailer approve-plan <jobId> [--confirm] [--acknowledge-plan-coverage "<reason>"] | approve_trailer_plan |
| List My-Library images | available | My Library (/dashboard/library) | GET /api/v1/library/images | story:read | sleeperhit library images [--limit N] [--cursor C] | list_my_library_images |
| List reusable My-Library audio | available | My Library (/dashboard/library) | GET /api/v1/library/audio | story:read | sleeperhit library audio list [--kind music\|sfx\|soundscape] [--query <text>] [--limit N] [--cursor C] | list_my_library_audio |
| Import reusable audio | available | My Library (/dashboard/library) | POST /api/v1/library/audio | story:write | sleeperhit library audio import (--file <path> \| --source-url <url>) --kind <kind> --label <text> | import_my_library_audio |
| Rename a reusable audio asset | available | Writers Lab table-read sound picker (/dashboard/writing-lab/:projectId/:scriptId/table-read) | PATCH /api/v1/library/audio/{assetId} | story:write | sleeperhit library audio rename <assetId> <label> | rename_my_library_audio |
| Manage sound effects | available | Writers Lab table-read studio (/dashboard/writing-lab/:projectId/:scriptId/table-read) | POST /api/v1/artifacts/{artifactId}/sfx | artifact:publish | sleeperhit sfx add\|update\|remove <artifactId> | add_sfx/update_sfx/remove_sfx |
| List sound effects | available | Writers Lab table-read studio (/dashboard/writing-lab/:projectId/:scriptId/table-read) | GET /api/v1/artifacts/{artifactId}/sfx | artifact:read | sleeperhit sfx list <artifactId> | list_sfx |
| Read the location plates | available | Writers Lab videos asset panel (/dashboard/writing-lab/:projectId/:scriptId/videos) | GET /api/v1/artifacts/{artifactId}/location-plates | artifact:read | sleeperhit locations get <artifactId> | get_location_plates |
| Remake one location plate | available | Writers Lab videos asset panel (/dashboard/writing-lab/:projectId/:scriptId/videos) | POST /api/v1/artifacts/{artifactId}/location-plates/{plateKey}/remake | artifact:publish | sleeperhit locations remake <artifactId> <plateKey> [--confirm] | remake_location_plate |
| List publishing provider config | available | Writers Lab publishing (/dashboard/writing-lab/:projectId/:scriptId/publishing) | GET /api/v1/publishing-provider-configs | publishing:connect | sleeperhit publishing provider-configs list | list_publishing_provider_configs |
| Upsert publishing provider config | available | Writers Lab publishing (/dashboard/writing-lab/:projectId/:scriptId/publishing) | POST /api/v1/publishing-provider-configs | publishing:connect | sleeperhit publishing provider-configs upsert --provider <provider> --medium <medium> | upsert_publishing_provider_config |
| Create a publishing series | available | Writers Lab publishing (/dashboard/writing-lab/:projectId/:scriptId/publishing) | POST /api/v1/story-projects/{projectId}/publishing-series | publishing:write | sleeperhit publishing series create <projectId> [--title <title>] | create_publishing_series |
| List publishing series | available | Writers Lab publishing (/dashboard/writing-lab/:projectId/:scriptId/publishing) | GET /api/v1/story-projects/{projectId}/publishing-series | publishing:read | sleeperhit publishing series list <projectId> | list_publishing_series |
| Read a publishing series | available | Writers Lab publishing (/dashboard/writing-lab/:projectId/:scriptId/publishing) | GET /api/v1/publishing-series/{seriesId} | publishing:read | sleeperhit publishing series get <seriesId> | get_publishing_series |
| Update a publishing series | available | Writers Lab publishing (/dashboard/writing-lab/:projectId/:scriptId/publishing) | PATCH /api/v1/publishing-series/{seriesId} | publishing:write | sleeperhit publishing series update <seriesId> [--title <title>] [--status <status>] [--standing-approval-key <keyId\|self\|null>] [--episode-credit-cap <n>] [--monthly-credit-cap <n>] [--publish-policy auto\|hold] [--confirm] | update_publishing_series |
| List interesting recurring sources | available | Writers Lab publishing — Show (/dashboard/writing-lab/:projectId/:scriptId/publishing) | GET /api/v1/show-source-templates | publishing:read | sleeperhit publishing series templates | list_show_source_templates |
| Quote a recurring show | available | Writers Lab publishing — Show (/dashboard/writing-lab/:projectId/:scriptId/publishing) | GET /api/v1/publishing-series/{seriesId}/quote | publishing:read | sleeperhit publishing series quote <seriesId> | get_show_quote |
| Preview a show's sources | available | Writers Lab publishing — Show (/dashboard/writing-lab/:projectId/:scriptId/publishing) | POST /api/v1/publishing-series/{seriesId}/source-preview | publishing:read | sleeperhit publishing series preview-sources <seriesId> [--sources <json>] [--lookback-days <n>] | preview_show_sources |
| Make a show episode now (a preview until live) | available | Writers Lab publishing — Show (/dashboard/writing-lab/:projectId/:scriptId/publishing) | POST /api/v1/publishing-series/{seriesId}/episodes | publishing:write | sleeperhit publishing series produce <seriesId> [--prompt <text>] [--episode-type <key>] [--live] [--confirm] | produce_show_episode |
| List a show's episodes | available | Writers Lab publishing — Show (/dashboard/writing-lab/:projectId/:scriptId/publishing) | GET /api/v1/publishing-series/{seriesId}/episodes | publishing:read | sleeperhit publishing series episodes <seriesId> | list_show_episodes |
| Generate podcast cover art | available | Writers Lab publishing (/dashboard/writing-lab/:projectId/:scriptId/publishing) | POST /api/v1/publishing-series/{seriesId}/generate-cover-art | publishing:write | sleeperhit publishing series generate-cover-art <seriesId> [--title <title>] [--description <text>] [--podcast-category <text>] [--podcast-subcategory <text>] | generate_publishing_cover_art |
| List publishing destinations | available | Writers Lab publishing (/dashboard/writing-lab/:projectId/:scriptId/publishing) | GET /api/v1/publishing-series/{seriesId}/destinations | publishing:read | sleeperhit publishing destinations list <seriesId> | list_publishing_destinations |
| Connect a publishing destination | available | Writers Lab publishing (/dashboard/writing-lab/:projectId/:scriptId/publishing) | POST /api/v1/publishing-series/{seriesId}/destinations | publishing:connect | sleeperhit publishing destinations upsert <seriesId> --provider rss | upsert_publishing_destination |
| List publishing releases | available | Writers Lab publishing (/dashboard/writing-lab/:projectId/:scriptId/publishing) | GET /api/v1/publishing-series/{seriesId}/releases | publishing:read | sleeperhit publishing releases list <seriesId> | list_publishing_releases |
| Promote an artifact into a publishing release | available | Writers Lab publishing (/dashboard/writing-lab/:projectId/:scriptId/publishing) | POST /api/v1/publishing-series/{seriesId}/releases | publishing:write | sleeperhit publishing releases create <seriesId> --source-artifact-id <artifactId> --title <title> | create_publishing_release |
| Read a publishing release | available | Writers Lab publishing (/dashboard/writing-lab/:projectId/:scriptId/publishing) | GET /api/v1/publishing-releases/{releaseId} | publishing:read | sleeperhit publishing releases get <releaseId> | get_publishing_release |
| Update publishing release metadata | available | Writers Lab publishing episode editor (/dashboard/writing-lab/:projectId/:scriptId/publishing) | PATCH /api/v1/publishing-releases/{releaseId} | publishing:write | sleeperhit publishing releases update <releaseId> [--title <title>] [--description <text>] | update_publishing_release |
| Generate a podcast episode description | available | Writers Lab publishing episode editor (/dashboard/writing-lab/:projectId/:scriptId/publishing) | POST /api/v1/publishing-releases/{releaseId}/description/generate | publishing:write | sleeperhit publishing releases generate-description <releaseId> [--direction <text>] | generate_publishing_release_description |
| Schedule a publishing release | available | Writers Lab publishing (/dashboard/writing-lab/:projectId/:scriptId/publishing) | POST /api/v1/publishing-releases/{releaseId}/schedule | publishing:publish | sleeperhit publishing releases schedule <releaseId> --at <iso> --confirm | schedule_publishing_release |
| Publish a release | available | Writers Lab publishing (/dashboard/writing-lab/:projectId/:scriptId/publishing) | POST /api/v1/publishing-releases/{releaseId}/publish | publishing:publish | sleeperhit publishing releases publish <releaseId> --confirm | publish_publishing_release |
| Refresh published release media | available | Writers Lab publishing episode editor (/dashboard/writing-lab/:projectId/:scriptId/publishing) | POST /api/v1/publishing-releases/{releaseId}/refresh-media | publishing:publish | sleeperhit publishing releases refresh-media <releaseId> --source-artifact-id <artifactId> | refresh_published_release_media |
| Cancel a publishing release | available | Writers Lab publishing (/dashboard/writing-lab/:projectId/:scriptId/publishing) | POST /api/v1/publishing-releases/{releaseId}/cancel | publishing:publish | sleeperhit publishing releases cancel <releaseId> | cancel_publishing_release |
| Unpublish a published release | available | Writers Lab publishing (/dashboard/writing-lab/:projectId/:scriptId/publishing) | POST /api/v1/publishing-releases/{releaseId}/unpublish | publishing:publish | sleeperhit publishing releases unpublish <releaseId> --confirm | unpublish_publishing_release |
| List publishing release targets | available | Writers Lab publishing (/dashboard/writing-lab/:projectId/:scriptId/publishing) | GET /api/v1/publishing-releases/{releaseId}/targets | publishing:read | sleeperhit publishing releases targets <releaseId> | list_publishing_release_targets |
| List publishing analytics | available | Writers Lab publishing listening numbers (/dashboard/writing-lab/:projectId/:scriptId/publishing) | GET /api/v1/publishing-series/{seriesId}/analytics | publishing:analytics | sleeperhit publishing analytics list <seriesId> | list_publishing_analytics |
| Read RSS feed | available | Writers Lab publishing (/dashboard/writing-lab/:projectId/:scriptId/publishing) | GET /api/v1/publishing-feeds/{seriesSlug}.xml |  | sleeperhit publishing feed <seriesSlug> | get_publishing_rss_feed |
| Record an app capture from a tour | available | Planned: hosted capture (app-to-trailer Phase 2, 2.8) (/dashboard/writing-lab/:projectId) |  |  | sleeperhit capture record <tour.json> --out <dir> [--storage-state <file>] [--audio-from <url\|file> [--offset <seconds>]] [--browser chrome\|chromium] [--app-version <tag>] [--upload --project <projectId> [--label <text>]] |  |

## Machine-readable versions

- `/agent-index.json` - page, section, and operation map for agents.
- `/docs/search-index.json` - lightweight search corpus.
- `/docs/surface-contract.json` - structured UI/API/CLI/MCP contract snapshot.
- `/docs/cli-commands.json` - structured CLI command map.
- `/docs/mcp-tools.json` - structured MCP tool/resource map.
