{"version":1,"generatedAt":"1970-01-01T00:00:00.000Z","baseUrl":"https://docs.sleeperhit.studio","sources":[{"name":"Surface registry","path":"packages/web/src/lib/api-v1/surface-registry.ts"},{"name":"OpenAPI builder","path":"packages/web/src/lib/api-v1/openapi.ts"},{"name":"OpenAPI schemas","path":"packages/web/src/lib/api-v1/openapi-schemas.ts"},{"name":"Capabilities manifest","path":"packages/web/src/lib/api-v1/capabilities.ts"},{"name":"Examples manifest","path":"packages/web/src/lib/api-v1/examples.ts"},{"name":"MCP server tool schemas","path":"packages/mcp-server/src/index.ts"},{"name":"CLI command router","path":"packages/cli/src/cli.ts"}],"counts":{"operations":49,"openApiOperations":44,"examples":14},"surfaceCoverage":{"totalOperations":49,"completeFourSurfaceOperations":47,"bySurface":{"ui":49,"api":49,"cli":47,"mcp":47},"gaps":[{"operationId":"projects.delete","missing":["cli","mcp"]},{"operationId":"sources.delete","missing":["cli","mcp"]}]},"developmentFlowWarnings":[{"id":"series_bible_before_screenplay","title":"Complete the Series Bible before screenplay pages","stage":"before_screenplay_generation","blocking":false,"surfaces":["ui","api","cli","mcp"],"guidance":"Before planning or generating a screenplay-backed table_read artifact, read, save, or generate the project Series Bible and confirm the format, audience, season arc, episode map, character roster, canon/world rules, visual style, audio style, and open questions are usable. If the user proceeds anyway, carry the missing areas into the StoryPlan review instead of silently ignoring them."},{"id":"coverage_round_after_screenplay","title":"Run one coverage round after the screenplay exists","stage":"after_screenplay_exists","blocking":false,"surfaces":["ui","api","cli","mcp"],"guidance":"Once a screenplay-backed table_read artifact exists, read or poll the first coverage report before treating the script as ready for finalization, pitch packaging, or later installment generation. Table-read jobs queue the initial coverage pass when pages are created; request a new report only if none exists or the user wants another pass. Use the report, especially top fixes, to drive one revision pass. This is guidance, not an enforcement gate."}],"operations":[{"id":"capabilities","title":"Discover live capabilities","description":"Read the feature manifest before integrating a flow.","availability":"available","tags":["discovery"],"docsSlug":"api-reference","docsPath":"/api-reference","surfaces":{"ui":{"label":"Developer console and docs","path":"/dashboard/api","context":"Read live capabilities, docs, API keys, and backend-managed agent guidance."},"api":{"method":"GET","path":"/api/v1/capabilities","operationId":"getCapabilities","scope":"story:read","idempotent":false,"summary":"Discover supported sources, artifacts, scopes, and documentation surfaces.","requestSchema":null,"responseSchema":"Capabilities"},"cli":{"command":"sleeperhit capabilities"},"mcp":{"tool":null,"resource":"sleeperhit://capabilities"}}},{"id":"agent-guidance","title":"Read agent guidance","description":"Read the backend-managed workflow guidance for Story API, CLI, and MCP agents.","availability":"available","tags":["discovery"],"docsSlug":"api-reference","docsPath":"/api-reference","surfaces":{"ui":{"label":"Developer console and docs","path":"/dashboard/api","context":"Read live capabilities, docs, API keys, and backend-managed agent guidance."},"api":{"method":"GET","path":"/api/v1/agent-guidance","operationId":"getAgentGuidance","scope":"story:read","idempotent":false,"summary":"Read backend-managed agent workflow guidance.","requestSchema":null,"responseSchema":"AgentGuidance"},"cli":{"command":"sleeperhit guidance"},"mcp":{"tool":"get_agent_guidance","resource":"sleeperhit://agent-guidance"}}},{"id":"credits.read","title":"Read Studio Credit balance","description":"Read available credits before starting generation work.","availability":"available","tags":["credits"],"docsSlug":"api-reference","docsPath":"/api-reference","surfaces":{"ui":{"label":"Dashboard credit meter","path":"/dashboard","context":"Read the current Studio Credit balance before generation work."},"api":{"method":"GET","path":"/api/v1/credits","operationId":"getCredits","scope":"credits:read","idempotent":false,"summary":"Get Studio Credit balance for the authenticated account.","requestSchema":null,"responseSchema":"CreditsSummary"},"cli":{"command":"sleeperhit credits"},"mcp":{"tool":"get_credits","resource":null}}},{"id":"projects.create","title":"Create a story project","description":"Create a workspace that groups sources, plans, jobs, and artifacts.","availability":"available","tags":["projects"],"docsSlug":"quickstart","docsPath":"/quickstart","surfaces":{"ui":{"label":"Writers Lab project library","path":"/dashboard/writing-lab","context":"Create, select, rename, archive, and review projects from the Writers Lab landing page."},"api":{"method":"POST","path":"/api/v1/story-projects","operationId":"createStoryProject","scope":"story:write","idempotent":true,"summary":"Create a new story project workspace.","requestSchema":"StoryProjectCreate","responseSchema":"StoryProjectEnvelope"},"cli":{"command":"sleeperhit projects create --name <name>"},"mcp":{"tool":"create_project","resource":null}}},{"id":"projects.list","title":"List story projects","description":"Cursor-paginated project list.","availability":"available","tags":["projects"],"docsSlug":"api-reference","docsPath":"/api-reference","surfaces":{"ui":{"label":"Writers Lab project library","path":"/dashboard/writing-lab","context":"Create, select, rename, archive, and review projects from the Writers Lab landing page."},"api":{"method":"GET","path":"/api/v1/story-projects","operationId":"listStoryProjects","scope":"story:read","idempotent":false,"summary":"List story projects owned by the authenticated account.","requestSchema":null,"responseSchema":"StoryProjectList"},"cli":{"command":"sleeperhit projects list"},"mcp":{"tool":"list_projects","resource":null}}},{"id":"projects.get","title":"Read a story project","description":"Fetch one project by id.","availability":"available","tags":["projects"],"docsSlug":"api-reference","docsPath":"/api-reference","surfaces":{"ui":{"label":"Writers Lab project library","path":"/dashboard/writing-lab","context":"Create, select, rename, archive, and review projects from the Writers Lab landing page."},"api":{"method":"GET","path":"/api/v1/story-projects/{projectId}","operationId":"getStoryProject","scope":"story:read","idempotent":false,"summary":"Read a story project by id.","requestSchema":null,"responseSchema":"StoryProjectEnvelope"},"cli":{"command":"sleeperhit projects get <projectId>"},"mcp":{"tool":"get_project","resource":null}}},{"id":"projects.update","title":"Update a story project","description":"Rename a project or patch its description, metadata, or archived state from the API, CLI, or MCP.","availability":"available","tags":["projects"],"docsSlug":"api-reference","docsPath":"/api-reference","surfaces":{"ui":{"label":"Writers Lab project library","path":"/dashboard/writing-lab","context":"Create, select, rename, archive, and review projects from the Writers Lab landing page."},"api":{"method":"PATCH","path":"/api/v1/story-projects/{projectId}","operationId":"updateStoryProject","scope":"story:write","idempotent":false,"summary":"Update a story project.","requestSchema":"StoryProjectPatch","responseSchema":"StoryProjectEnvelope"},"cli":{"command":"sleeperhit projects update <projectId> [--name <text>] [--description <text>] [--metadata <json>] [--archived true|false]"},"mcp":{"tool":"update_project","resource":null}}},{"id":"projects.delete","title":"Archive a story project","description":"Soft-delete a project from the API.","availability":"available","tags":["projects"],"docsSlug":"api-reference","docsPath":"/api-reference","surfaces":{"ui":{"label":"Writers Lab project library","path":"/dashboard/writing-lab","context":"Create, select, rename, archive, and review projects from the Writers Lab landing page."},"api":{"method":"DELETE","path":"/api/v1/story-projects/{projectId}","operationId":"deleteStoryProject","scope":"story:write","idempotent":false,"summary":"Soft-delete a story project.","requestSchema":null,"responseSchema":"DeletionAck"},"cli":null,"mcp":null}},{"id":"projects.series-bible.get","title":"Read a project Series Bible","description":"Fetch the durable project-level canon and continuity document; use it as the preferred first gate before screenplay generation.","availability":"available","tags":["projects","documents"],"docsSlug":"api-reference","docsPath":"/api-reference","surfaces":{"ui":{"label":"Writers Lab project canon","path":"/dashboard/writing-lab","context":"Create or edit the project Series Bible and canon before screenplay-backed work."},"api":{"method":"GET","path":"/api/v1/story-projects/{projectId}/series-bible","operationId":"getProjectSeriesBible","scope":"story:read","idempotent":false,"summary":"Read the project Series Bible.","requestSchema":null,"responseSchema":"SeriesBibleEnvelope"},"cli":{"command":"sleeperhit bible get <projectId>"},"mcp":{"tool":"get_series_bible","resource":null}}},{"id":"projects.series-bible.save","title":"Save a project Series Bible","description":"Persist full project canon, episode map, characters, and style/audio direction before planning or generating screenplay pages.","availability":"available","tags":["projects","documents"],"docsSlug":"api-reference","docsPath":"/api-reference","surfaces":{"ui":{"label":"Writers Lab project canon","path":"/dashboard/writing-lab","context":"Create or edit the project Series Bible and canon before screenplay-backed work."},"api":{"method":"PATCH","path":"/api/v1/story-projects/{projectId}/series-bible","operationId":"saveProjectSeriesBible","scope":"story:write","idempotent":false,"summary":"Save the project Series Bible.","requestSchema":"SeriesBiblePatch","responseSchema":"SeriesBibleEnvelope"},"cli":{"command":"sleeperhit bible save <projectId> --json <object>"},"mcp":{"tool":"save_series_bible","resource":null}}},{"id":"projects.series-bible.generate","title":"Generate a project Series Bible","description":"Use the backend sidecar to synthesize or refresh full project-level canon from project context before screenplay generation.","availability":"available","tags":["projects","documents"],"docsSlug":"api-reference","docsPath":"/api-reference","surfaces":{"ui":{"label":"Writers Lab project canon","path":"/dashboard/writing-lab","context":"Create or edit the project Series Bible and canon before screenplay-backed work."},"api":{"method":"POST","path":"/api/v1/story-projects/{projectId}/series-bible","operationId":"generateProjectSeriesBible","scope":"story:write","idempotent":true,"summary":"Generate or refresh the project Series Bible.","requestSchema":"SeriesBibleGenerateRequest","responseSchema":"SeriesBibleEnvelope"},"cli":{"command":"sleeperhit bible generate <projectId>"},"mcp":{"tool":"generate_series_bible","resource":null}}},{"id":"sources.create","title":"Attach a source","description":"Attach text, markdown, URL, or PDF source material to a project.","availability":"available","tags":["sources"],"docsSlug":"quickstart","docsPath":"/quickstart","surfaces":{"ui":{"label":"Writers Lab project workflow","path":"/dashboard/writing-lab","context":"Move the active project through source intake, planning, generation, artifact review, and follow-up actions."},"api":{"method":"POST","path":"/api/v1/story-projects/{projectId}/sources","operationId":"createStorySource","scope":"source:write","idempotent":true,"summary":"Attach a source to a project.","requestSchema":"StorySourceCreate","responseSchema":"StorySourceEnvelope"},"cli":{"command":"sleeperhit sources add <projectId> --type text|markdown|url|pdf"},"mcp":{"tool":"add_source","resource":null}}},{"id":"sources.list","title":"List sources","description":"List sources attached to a project.","availability":"available","tags":["sources"],"docsSlug":"api-reference","docsPath":"/api-reference","surfaces":{"ui":{"label":"Writers Lab project workflow","path":"/dashboard/writing-lab","context":"Move the active project through source intake, planning, generation, artifact review, and follow-up actions."},"api":{"method":"GET","path":"/api/v1/story-projects/{projectId}/sources","operationId":"listStorySources","scope":"source:read","idempotent":false,"summary":"List sources attached to a project.","requestSchema":null,"responseSchema":"StorySourceList"},"cli":{"command":"sleeperhit sources list <projectId>"},"mcp":{"tool":"list_sources","resource":null}}},{"id":"sources.get","title":"Read a source","description":"Poll one source until extraction and digest states are terminal.","availability":"available","tags":["sources"],"docsSlug":"api-reference","docsPath":"/api-reference","surfaces":{"ui":{"label":"Writers Lab project workflow","path":"/dashboard/writing-lab","context":"Move the active project through source intake, planning, generation, artifact review, and follow-up actions."},"api":{"method":"GET","path":"/api/v1/story-projects/{projectId}/sources/{sourceId}","operationId":"getStorySource","scope":"source:read","idempotent":false,"summary":"Read a source by id.","requestSchema":null,"responseSchema":"StorySourceEnvelope"},"cli":{"command":"sleeperhit sources get <projectId> <sourceId>"},"mcp":{"tool":"get_source","resource":null}}},{"id":"sources.delete","title":"Delete a source","description":"Soft-delete one source and clear extracted preview data.","availability":"available","tags":["sources"],"docsSlug":"api-reference","docsPath":"/api-reference","surfaces":{"ui":{"label":"Writers Lab project workflow","path":"/dashboard/writing-lab","context":"Move the active project through source intake, planning, generation, artifact review, and follow-up actions."},"api":{"method":"DELETE","path":"/api/v1/story-projects/{projectId}/sources/{sourceId}","operationId":"deleteStorySource","scope":"source:write","idempotent":false,"summary":"Soft-delete a source.","requestSchema":null,"responseSchema":"DeletionAck"},"cli":null,"mcp":null}},{"id":"plans.create","title":"Generate a StoryPlan","description":"Generate the source-grounded plan that drives artifact jobs; before a screenplay/table_read plan, read or generate the full Series Bible and carry its canon into review.","availability":"available","tags":["plans"],"docsSlug":"quickstart","docsPath":"/quickstart","surfaces":{"ui":{"label":"Writers Lab project workflow","path":"/dashboard/writing-lab","context":"Move the active project through source intake, planning, generation, artifact review, and follow-up actions."},"api":{"method":"POST","path":"/api/v1/story-projects/{projectId}/story-plans","operationId":"createStoryPlan","scope":"story:write","idempotent":true,"summary":"Create a StoryPlan and enqueue its async generation.","requestSchema":"StoryPlanCreate","responseSchema":"StoryPlanEnvelopeResponse"},"cli":{"command":"sleeperhit plans create <projectId> --target ... --artifact ..."},"mcp":{"tool":"create_plan","resource":null}}},{"id":"plans.list","title":"List StoryPlans","description":"List generated plans for a project.","availability":"available","tags":["plans"],"docsSlug":"api-reference","docsPath":"/api-reference","surfaces":{"ui":{"label":"Writers Lab project workflow","path":"/dashboard/writing-lab","context":"Move the active project through source intake, planning, generation, artifact review, and follow-up actions."},"api":{"method":"GET","path":"/api/v1/story-projects/{projectId}/story-plans","operationId":"listStoryPlans","scope":"story:read","idempotent":false,"summary":"List StoryPlans for a project.","requestSchema":null,"responseSchema":"StoryPlanList"},"cli":{"command":"sleeperhit plans list <projectId>"},"mcp":{"tool":"list_plans","resource":null}}},{"id":"plans.get","title":"Read a StoryPlan","description":"Poll a StoryPlan until it is ready, approved, rejected, or failed.","availability":"available","tags":["plans"],"docsSlug":"api-reference","docsPath":"/api-reference","surfaces":{"ui":{"label":"Writers Lab project workflow","path":"/dashboard/writing-lab","context":"Move the active project through source intake, planning, generation, artifact review, and follow-up actions."},"api":{"method":"GET","path":"/api/v1/story-plans/{planId}","operationId":"getStoryPlan","scope":"story:read","idempotent":false,"summary":"Read a StoryPlan by id.","requestSchema":null,"responseSchema":"StoryPlanEnvelopeResponse"},"cli":{"command":"sleeperhit plans get <planId>"},"mcp":{"tool":"get_plan","resource":null}}},{"id":"plans.approve","title":"Approve a StoryPlan","description":"Move a plan out of the human approval hold.","availability":"available","tags":["plans"],"docsSlug":"api-reference","docsPath":"/api-reference","surfaces":{"ui":{"label":"Writers Lab project workflow","path":"/dashboard/writing-lab","context":"Move the active project through source intake, planning, generation, artifact review, and follow-up actions."},"api":{"method":"POST","path":"/api/v1/story-plans/{planId}/approve","operationId":"approveStoryPlan","scope":"story:write","idempotent":true,"summary":"Approve a generated StoryPlan.","requestSchema":null,"responseSchema":"StoryPlanEnvelopeResponse"},"cli":{"command":"sleeperhit plans approve <planId>"},"mcp":{"tool":"approve_plan","resource":null}}},{"id":"plans.reject","title":"Reject a StoryPlan","description":"Reject a plan with an optional reason.","availability":"available","tags":["plans"],"docsSlug":"api-reference","docsPath":"/api-reference","surfaces":{"ui":{"label":"Writers Lab project workflow","path":"/dashboard/writing-lab","context":"Move the active project through source intake, planning, generation, artifact review, and follow-up actions."},"api":{"method":"POST","path":"/api/v1/story-plans/{planId}/reject","operationId":"rejectStoryPlan","scope":"story:write","idempotent":true,"summary":"Reject a generated StoryPlan.","requestSchema":null,"responseSchema":"StoryPlanEnvelopeResponse"},"cli":{"command":"sleeperhit plans reject <planId>"},"mcp":{"tool":"reject_plan","resource":null}}},{"id":"jobs.create","title":"Create a story job","description":"Reserve credits and enqueue artifact generation for an approved plan; if this creates screenplay pages, confirm the Series Bible first and run coverage after the artifact is ready.","availability":"available","tags":["jobs"],"docsSlug":"quickstart","docsPath":"/quickstart","surfaces":{"ui":{"label":"Writers Lab project workflow","path":"/dashboard/writing-lab","context":"Move the active project through source intake, planning, generation, artifact review, and follow-up actions."},"api":{"method":"POST","path":"/api/v1/story-jobs","operationId":"createStoryJob","scope":"story:write","idempotent":true,"summary":"Create an artifact-generation job against an APPROVED StoryPlan.","requestSchema":"StoryJobCreate","responseSchema":"StoryJobEnvelope"},"cli":{"command":"sleeperhit jobs create <planId>"},"mcp":{"tool":"create_job","resource":null}}},{"id":"jobs.list","title":"List story jobs","description":"List queued and completed jobs.","availability":"available","tags":["jobs"],"docsSlug":"api-reference","docsPath":"/api-reference","surfaces":{"ui":{"label":"Writers Lab project workflow","path":"/dashboard/writing-lab","context":"Move the active project through source intake, planning, generation, artifact review, and follow-up actions."},"api":{"method":"GET","path":"/api/v1/story-jobs","operationId":"listStoryJobs","scope":"story:read","idempotent":false,"summary":"List story jobs owned by the authenticated account.","requestSchema":null,"responseSchema":"StoryJobList"},"cli":{"command":"sleeperhit jobs list"},"mcp":{"tool":"list_jobs","resource":null}}},{"id":"jobs.get","title":"Read a story job","description":"Poll job status and artifact readiness.","availability":"available","tags":["jobs"],"docsSlug":"quickstart","docsPath":"/quickstart","surfaces":{"ui":{"label":"Writers Lab project workflow","path":"/dashboard/writing-lab","context":"Move the active project through source intake, planning, generation, artifact review, and follow-up actions."},"api":{"method":"GET","path":"/api/v1/story-jobs/{jobId}","operationId":"getStoryJob","scope":"story:read","idempotent":false,"summary":"Read a story job by id, including its artifacts.","requestSchema":null,"responseSchema":"StoryJobEnvelope"},"cli":{"command":"sleeperhit jobs get <jobId>"},"mcp":{"tool":"get_job","resource":null}}},{"id":"jobs.cancel","title":"Cancel a story job","description":"Cancel a non-terminal job and release unsettled credits.","availability":"available","tags":["jobs"],"docsSlug":"api-reference","docsPath":"/api-reference","surfaces":{"ui":{"label":"Writers Lab project workflow","path":"/dashboard/writing-lab","context":"Move the active project through source intake, planning, generation, artifact review, and follow-up actions."},"api":{"method":"POST","path":"/api/v1/story-jobs/{jobId}/cancel","operationId":"cancelStoryJob","scope":"story:write","idempotent":true,"summary":"Cancel a story job and release its reserved credits.","requestSchema":null,"responseSchema":"StoryJobEnvelope"},"cli":{"command":"sleeperhit jobs cancel <jobId>"},"mcp":{"tool":"cancel_job","resource":null}}},{"id":"artifacts.list","title":"List job artifacts","description":"List artifacts produced by a job.","availability":"available","tags":["artifacts"],"docsSlug":"api-reference","docsPath":"/api-reference","surfaces":{"ui":{"label":"Writers Lab project workflow","path":"/dashboard/writing-lab","context":"Move the active project through source intake, planning, generation, artifact review, and follow-up actions."},"api":{"method":"GET","path":"/api/v1/story-jobs/{jobId}/artifacts","operationId":"listStoryJobArtifacts","scope":"artifact:read","idempotent":false,"summary":"List the artifacts produced by a story job.","requestSchema":null,"responseSchema":"StoryArtifactListResponse"},"cli":{"command":"sleeperhit jobs artifacts <jobId>"},"mcp":{"tool":"list_artifacts","resource":null}}},{"id":"artifacts.get","title":"Read an artifact","description":"Read a generated artifact, manifest URLs, and revision state.","availability":"available","tags":["artifacts"],"docsSlug":"api-reference","docsPath":"/api-reference","surfaces":{"ui":{"label":"Writers Lab project workflow","path":"/dashboard/writing-lab","context":"Move the active project through source intake, planning, generation, artifact review, and follow-up actions."},"api":{"method":"GET","path":"/api/v1/artifacts/{artifactId}","operationId":"getStoryArtifact","scope":"artifact:read","idempotent":false,"summary":"Read a single artifact and its manifest.","requestSchema":null,"responseSchema":"StoryArtifactEnvelope"},"cli":{"command":"sleeperhit artifacts get <artifactId>"},"mcp":{"tool":"get_artifact","resource":null}}},{"id":"artifacts.renderVideo","title":"Render a table-read video","description":"Queue the opt-in MP4 render for a ready table-read artifact.","availability":"available","tags":["artifacts","video"],"docsSlug":"api-reference","docsPath":"/api-reference","surfaces":{"ui":{"label":"Writers Lab table-read studio","path":"/dashboard/writing-lab/:projectSlug/table-read","context":"Operate on the active table read: cast, voices, avatars, soundtrack, sound effects, live read, and renders."},"api":{"method":"POST","path":"/api/v1/artifacts/{artifactId}/render-video","operationId":"renderArtifactVideo","scope":"artifact:publish","idempotent":true,"summary":"Trigger the opt-in MP4 render for a table read artifact.","requestSchema":null,"responseSchema":"ArtifactRenderAck"},"cli":{"command":"sleeperhit artifacts render-video <artifactId>"},"mcp":{"tool":"render_artifact_video","resource":null}}},{"id":"artifacts.refine","title":"Refine a table read","description":"Revise a table read in place while keeping the artifact id and share URLs stable.","availability":"available","tags":["artifacts","table_read"],"docsSlug":"api-reference","docsPath":"/api-reference","surfaces":{"ui":{"label":"Writers Lab table-read studio","path":"/dashboard/writing-lab/:projectSlug/table-read","context":"Operate on the active table read: cast, voices, avatars, soundtrack, sound effects, live read, and renders."},"api":{"method":"POST","path":"/api/v1/artifacts/{artifactId}/refine","operationId":"refineArtifact","scope":"artifact:publish","idempotent":true,"summary":"Conversationally revise a table read artifact in place.","requestSchema":null,"responseSchema":null},"cli":{"command":"sleeperhit refine <artifactId> <instruction...>"},"mcp":{"tool":"refine_artifact","resource":null}}},{"id":"artifacts.finalize","title":"Finalize a durable MP3 or MP4","description":"Render a durable audio or video file for a table-read artifact.","availability":"available","tags":["artifacts","table_read"],"docsSlug":"api-reference","docsPath":"/api-reference","surfaces":{"ui":{"label":"Writers Lab table-read studio","path":"/dashboard/writing-lab/:projectSlug/table-read","context":"Operate on the active table read: cast, voices, avatars, soundtrack, sound effects, live read, and renders."},"api":{"method":"POST","path":"/api/v1/artifacts/{artifactId}/finalize","operationId":"finalizeArtifact","scope":"artifact:publish","idempotent":true,"summary":"Durably render a table read artifact as an MP3 or MP4.","requestSchema":null,"responseSchema":null},"cli":{"command":"sleeperhit finalize <artifactId> --mode audio|video"},"mcp":{"tool":"finalize_artifact","resource":null}}},{"id":"artifacts.cast","title":"Read a table-read cast","description":"Read voice assignments from the artifact manifest.","availability":"available","tags":["artifacts","voice"],"docsSlug":"api-reference","docsPath":"/api-reference","surfaces":{"ui":{"label":"Writers Lab table-read studio","path":"/dashboard/writing-lab/:projectSlug/table-read","context":"Operate on the active table read: cast, voices, avatars, soundtrack, sound effects, live read, and renders."},"api":{"method":"GET","path":"/api/v1/artifacts/{artifactId}","operationId":"getStoryArtifact","scope":"artifact:read","idempotent":false,"summary":"Read a single artifact and its manifest.","requestSchema":null,"responseSchema":"StoryArtifactEnvelope"},"cli":{"command":"sleeperhit cast <artifactId>"},"mcp":{"tool":"get_cast","resource":null}}},{"id":"artifacts.script.get","title":"Read table-read script content","description":"Read the backing script entries for a table-read artifact.","availability":"available","tags":["artifacts","table_read","script"],"docsSlug":"api-reference","docsPath":"/api-reference","surfaces":{"ui":{"label":"Writers Lab table-read studio","path":"/dashboard/writing-lab/:projectSlug/table-read","context":"Operate on the active table read: cast, voices, avatars, soundtrack, sound effects, live read, and renders."},"api":{"method":"GET","path":"/api/v1/artifacts/{artifactId}/script","operationId":"getArtifactScript","scope":"artifact:read","idempotent":false,"summary":"Read actual script content for a table read artifact.","requestSchema":null,"responseSchema":"ArtifactScriptContentEnvelope"},"cli":{"command":"sleeperhit script get <artifactId>"},"mcp":{"tool":"get_table_read_script","resource":null}}},{"id":"artifacts.script.page","title":"Read script content by page","description":"Read actual script entries on one rendered page.","availability":"available","tags":["artifacts","table_read","script"],"docsSlug":"api-reference","docsPath":"/api-reference","surfaces":{"ui":{"label":"Writers Lab table-read studio","path":"/dashboard/writing-lab/:projectSlug/table-read","context":"Operate on the active table read: cast, voices, avatars, soundtrack, sound effects, live read, and renders."},"api":{"method":"GET","path":"/api/v1/artifacts/{artifactId}/script","operationId":"getArtifactScript","scope":"artifact:read","idempotent":false,"summary":"Read actual script content for a table read artifact.","requestSchema":null,"responseSchema":"ArtifactScriptContentEnvelope"},"cli":{"command":"sleeperhit script page <artifactId> <page>"},"mcp":{"tool":"get_script_page","resource":null}}},{"id":"artifacts.script.scene","title":"Read script content by scene","description":"Read actual script entries in one scene window.","availability":"available","tags":["artifacts","table_read","script"],"docsSlug":"api-reference","docsPath":"/api-reference","surfaces":{"ui":{"label":"Writers Lab table-read studio","path":"/dashboard/writing-lab/:projectSlug/table-read","context":"Operate on the active table read: cast, voices, avatars, soundtrack, sound effects, live read, and renders."},"api":{"method":"GET","path":"/api/v1/artifacts/{artifactId}/script","operationId":"getArtifactScript","scope":"artifact:read","idempotent":false,"summary":"Read actual script content for a table read artifact.","requestSchema":null,"responseSchema":"ArtifactScriptContentEnvelope"},"cli":{"command":"sleeperhit script scene <artifactId> <sceneIndex>"},"mcp":{"tool":"get_script_scene","resource":null}}},{"id":"artifacts.script.character","title":"Read character lines","description":"Read actual dialogue entries for one character.","availability":"available","tags":["artifacts","table_read","script"],"docsSlug":"api-reference","docsPath":"/api-reference","surfaces":{"ui":{"label":"Writers Lab table-read studio","path":"/dashboard/writing-lab/:projectSlug/table-read","context":"Operate on the active table read: cast, voices, avatars, soundtrack, sound effects, live read, and renders."},"api":{"method":"GET","path":"/api/v1/artifacts/{artifactId}/script","operationId":"getArtifactScript","scope":"artifact:read","idempotent":false,"summary":"Read actual script content for a table read artifact.","requestSchema":null,"responseSchema":"ArtifactScriptContentEnvelope"},"cli":{"command":"sleeperhit script character <artifactId> <character...>"},"mcp":{"tool":"get_character_lines","resource":null}}},{"id":"artifacts.recastVoice","title":"Recast a character voice","description":"Reassign one character voice on a table read without changing share URLs.","availability":"available","tags":["artifacts","voice"],"docsSlug":"api-reference","docsPath":"/api-reference","surfaces":{"ui":{"label":"Writers Lab table-read studio","path":"/dashboard/writing-lab/:projectSlug/table-read","context":"Operate on the active table read: cast, voices, avatars, soundtrack, sound effects, live read, and renders."},"api":{"method":"POST","path":"/api/v1/artifacts/{artifactId}/voice","operationId":"recastArtifactVoice","scope":"artifact:publish","idempotent":true,"summary":"Recast a single character's voice on a table read artifact.","requestSchema":null,"responseSchema":null},"cli":{"command":"sleeperhit voice set <artifactId> --character <c> --voice-id <id> --voice-name <name>"},"mcp":{"tool":"recast_voice","resource":null}}},{"id":"artifacts.recastAvatar","title":"Regenerate a character avatar","description":"Re-render one character avatar portrait on a table read in place (async, queue-backed) without changing share URLs.","availability":"available","tags":["artifacts","cast","avatar"],"docsSlug":"api-reference","docsPath":"/api-reference","surfaces":{"ui":{"label":"Writers Lab table-read studio","path":"/dashboard/writing-lab/:projectSlug/table-read","context":"Operate on the active table read: cast, voices, avatars, soundtrack, sound effects, live read, and renders."},"api":{"method":"POST","path":"/api/v1/artifacts/{artifactId}/avatar","operationId":"recastArtifactAvatar","scope":"artifact:publish","idempotent":true,"summary":"Regenerate a single character's avatar portrait on a table read artifact.","requestSchema":"AvatarRecastRequest","responseSchema":"AvatarRecastResponse"},"cli":{"command":"sleeperhit avatar set <artifactId> --character <c> [--refine <text>] [--style <style>]"},"mcp":{"tool":"recast_avatar","resource":null}}},{"id":"artifacts.updateCast","title":"Update the cast (voices + avatars)","description":"Batch-reassign voices and/or queue per-character avatar renders (with an optional cast-wide restyle) on a table read in place.","availability":"available","tags":["artifacts","cast","voice","avatar"],"docsSlug":"api-reference","docsPath":"/api-reference","surfaces":{"ui":{"label":"Writers Lab table-read studio","path":"/dashboard/writing-lab/:projectSlug/table-read","context":"Operate on the active table read: cast, voices, avatars, soundtrack, sound effects, live read, and renders."},"api":{"method":"POST","path":"/api/v1/artifacts/{artifactId}/cast","operationId":"updateArtifactCast","scope":"artifact:publish","idempotent":true,"summary":"Batch-update the cast (voices + avatars) on a table read artifact.","requestSchema":"CastBatchRequest","responseSchema":"CastBatchResponse"},"cli":{"command":"sleeperhit cast update <artifactId> --json '<entries-or-{entries,avatarStyle}>'  (cast-wide restyle: sleeperhit cast restyle <artifactId> --style <s>)"},"mcp":{"tool":"update_cast","resource":null}}},{"id":"artifacts.getCast","title":"Read the enriched cast","description":"Read each character voice merged with its avatar (url, style, render status) for a table read; poll after avatar renders.","availability":"available","tags":["artifacts","cast","voice","avatar"],"docsSlug":"api-reference","docsPath":"/api-reference","surfaces":{"ui":{"label":"Writers Lab table-read studio","path":"/dashboard/writing-lab/:projectSlug/table-read","context":"Operate on the active table read: cast, voices, avatars, soundtrack, sound effects, live read, and renders."},"api":{"method":"GET","path":"/api/v1/artifacts/{artifactId}/cast","operationId":"getArtifactCast","scope":"artifact:read","idempotent":false,"summary":"Read the enriched cast for a table read artifact.","requestSchema":null,"responseSchema":"CastEnvelope"},"cli":{"command":"sleeperhit cast <artifactId>"},"mcp":{"tool":"get_cast","resource":null}}},{"id":"artifacts.coverage.generate","title":"Generate script coverage","description":"Generate the recommended first development coverage round for the screenplay backing a table read before finalization, pitch packaging, or later-installment work.","availability":"available","tags":["artifacts","coverage"],"docsSlug":"api-reference","docsPath":"/api-reference","surfaces":{"ui":{"label":"Writers Lab coverage panel","path":"/dashboard/writing-lab/:projectSlug/coverage","context":"Generate, poll, and read the screenplay coverage round for the active project."},"api":{"method":"POST","path":"/api/v1/artifacts/{artifactId}/coverage","operationId":"generateArtifactCoverage","scope":"story:write","idempotent":true,"summary":"Generate professional script coverage for a table read artifact.","requestSchema":null,"responseSchema":"CoverageDispatchAck"},"cli":{"command":"sleeperhit coverage generate <artifactId>"},"mcp":{"tool":"generate_coverage","resource":null}}},{"id":"artifacts.coverage.get","title":"Read script coverage","description":"Poll or read the latest coverage report for a table-read artifact.","availability":"available","tags":["artifacts","coverage"],"docsSlug":"api-reference","docsPath":"/api-reference","surfaces":{"ui":{"label":"Writers Lab coverage panel","path":"/dashboard/writing-lab/:projectSlug/coverage","context":"Generate, poll, and read the screenplay coverage round for the active project."},"api":{"method":"GET","path":"/api/v1/artifacts/{artifactId}/coverage","operationId":"getArtifactCoverage","scope":"artifact:read","idempotent":false,"summary":"Read the coverage report for a table read artifact.","requestSchema":null,"responseSchema":"CoverageReportEnvelope"},"cli":{"command":"sleeperhit coverage get <artifactId>"},"mcp":{"tool":"get_coverage","resource":null}}},{"id":"artifacts.music.generate","title":"Generate scene music","description":"Render scene music for a table-read artifact: durable per-scene music clips on defined-clip scripts (pass scene indexes to re-render specific clips), or regenerate adaptive soundtrack directions on realtime scripts. Clips render instrumental unless vocals are explicitly enabled per scene.","availability":"available","tags":["artifacts","music"],"docsSlug":"api-reference","docsPath":"/api-reference","surfaces":{"ui":{"label":"Writers Lab table-read studio","path":"/dashboard/writing-lab/:projectSlug/table-read","context":"Operate on the active table read: cast, voices, avatars, soundtrack, sound effects, live read, and renders."},"api":{"method":"POST","path":"/api/v1/artifacts/{artifactId}/music","operationId":"generateArtifactMusic","scope":"artifact:publish","idempotent":true,"summary":"Generate adaptive soundtrack for a table read artifact.","requestSchema":"MusicGenerateRequest","responseSchema":"MusicGenerateResponse"},"cli":{"command":"sleeperhit music generate <artifactId> [--coverage <0..1|0..100>] [--scenes 0,2,5]"},"mcp":{"tool":"generate_music","resource":null}}},{"id":"artifacts.music.update","title":"Update scene music","description":"Switch the script music mode (defined_clips ⟷ realtime_streaming), edit one scene's defined clip (prompt, explicit vocals opt-in, disable, volume), or tune realtime soundtrack direction for a whole read, one scene, or one entry.","availability":"available","tags":["artifacts","music"],"docsSlug":"api-reference","docsPath":"/api-reference","surfaces":{"ui":{"label":"Writers Lab table-read studio","path":"/dashboard/writing-lab/:projectSlug/table-read","context":"Operate on the active table read: cast, voices, avatars, soundtrack, sound effects, live read, and renders."},"api":{"method":"POST","path":"/api/v1/artifacts/{artifactId}/music","operationId":"generateArtifactMusic","scope":"artifact:publish","idempotent":true,"summary":"Generate adaptive soundtrack for a table read artifact.","requestSchema":"MusicGenerateRequest","responseSchema":"MusicGenerateResponse"},"cli":{"command":"sleeperhit music update <artifactId> [--music-mode defined_clips|realtime_streaming] [--scene <n> --clip-prompt <text>] [--scope screenplay|scene|entry] [--mode merge|replace]"},"mcp":{"tool":"update_music","resource":null}}},{"id":"artifacts.music.get","title":"Read scene music status","description":"Poll scene-music readiness for a table-read artifact — music mode, status, and per-scene defined clips (prompt, vocals, render status, audio URL).","availability":"available","tags":["artifacts","music"],"docsSlug":"api-reference","docsPath":"/api-reference","surfaces":{"ui":{"label":"Writers Lab table-read studio","path":"/dashboard/writing-lab/:projectSlug/table-read","context":"Operate on the active table read: cast, voices, avatars, soundtrack, sound effects, live read, and renders."},"api":{"method":"GET","path":"/api/v1/artifacts/{artifactId}/music","operationId":"getArtifactMusic","scope":"artifact:read","idempotent":false,"summary":"Read adaptive soundtrack status for a table read artifact.","requestSchema":null,"responseSchema":"MusicStatusEnvelope"},"cli":{"command":"sleeperhit music get <artifactId>"},"mcp":{"tool":"get_music","resource":null}}},{"id":"artifacts.voiceModification","title":"Modify voices over a range","description":"Apply a voice effect (autotune) to a contiguous range of dialogue entries on a table-read artifact.","availability":"available","tags":["artifacts","voice"],"docsSlug":"api-reference","docsPath":"/api-reference","surfaces":{"ui":{"label":"Writers Lab table-read studio","path":"/dashboard/writing-lab/:projectSlug/table-read","context":"Operate on the active table read: cast, voices, avatars, soundtrack, sound effects, live read, and renders."},"api":{"method":"POST","path":"/api/v1/artifacts/{artifactId}/voice-modification","operationId":"modifyArtifactVoice","scope":"artifact:publish","idempotent":true,"summary":"Apply a voice effect to a range of lines on a table read artifact.","requestSchema":"VoiceModificationRequest","responseSchema":"VoiceModificationResponse"},"cli":{"command":"sleeperhit modify-voice <artifactId> --start <n> --end <n>"},"mcp":{"tool":"modify_voice","resource":null}}},{"id":"artifacts.performance","title":"Refine character performance","description":"Adjust emotion, speed (absolute or relative %), volume, and cadence across ALL of one character's lines — including the NARRATOR or ALL voiced lines — on a table-read artifact. A prompt-driven delivery refine, e.g. \"make the narration flatter and 20% faster\".","availability":"available","tags":["artifacts","performance","voice"],"docsSlug":"api-reference","docsPath":"/api-reference","surfaces":{"ui":{"label":"Writers Lab table-read studio","path":"/dashboard/writing-lab/:projectSlug/table-read","context":"Operate on the active table read: cast, voices, avatars, soundtrack, sound effects, live read, and renders."},"api":{"method":"POST","path":"/api/v1/artifacts/{artifactId}/performance","operationId":"updateArtifactPerformance","scope":"artifact:publish","idempotent":true,"summary":"Refine the delivery of all of one character's lines on a table read artifact.","requestSchema":"PerformanceDirectiveRequest","responseSchema":"PerformanceDirectiveResponse"},"cli":{"command":"sleeperhit performance <artifactId> --character <name|NARRATOR|ALL> [--speed-factor 1.2] [--emotions a,b]"},"mcp":{"tool":"refine_performance","resource":null}}},{"id":"voices.list","title":"List my studio voices","description":"List the caller's reusable studio voices — designed (text-description) and cloned (recorded sample) — with provider and source tagging.","availability":"available","tags":["voices"],"docsSlug":"api-reference","docsPath":"/api-reference","surfaces":{"ui":{"label":"Writers Lab","path":"/dashboard/writing-lab","context":"Use the active project workspace."},"api":{"method":"GET","path":"/api/v1/voices","operationId":"listStudioVoices","scope":"story:read","idempotent":false,"summary":"List the caller's reusable studio voices.","requestSchema":null,"responseSchema":"StudioVoiceListResponse"},"cli":{"command":"sleeperhit voices list"},"mcp":{"tool":"list_voices","resource":null}}},{"id":"voices.cloneLink","title":"Mint a voice-clone recording link","description":"Mint a short-lived browser URL (My Library with the recorder ready) where the user records a 15-60s sample; the clone lands in their library as a reusable voice (tagged \"cloned\"). Headless surfaces hand this URL to the human — recording needs a microphone.","availability":"available","tags":["voices"],"docsSlug":"api-reference","docsPath":"/api-reference","surfaces":{"ui":{"label":"Writers Lab","path":"/dashboard/writing-lab","context":"Use the active project workspace."},"api":{"method":"POST","path":"/api/v1/voices/clone-link","operationId":"createVoiceCloneLink","scope":"story:write","idempotent":true,"summary":"Mint a short-lived browser recording link for voice cloning.","requestSchema":null,"responseSchema":"VoiceCloneLinkResponse"},"cli":{"command":"sleeperhit voices clone"},"mcp":{"tool":"create_voice_clone_link","resource":null}}},{"id":"artifacts.sfx.manage","title":"Manage sound effects","description":"Add, update, mute, retime, regenerate, or remove line-level SFX cues for a table-read artifact.","availability":"available","tags":["artifacts","sfx"],"docsSlug":"api-reference","docsPath":"/api-reference","surfaces":{"ui":{"label":"Writers Lab table-read studio","path":"/dashboard/writing-lab/:projectSlug/table-read","context":"Operate on the active table read: cast, voices, avatars, soundtrack, sound effects, live read, and renders."},"api":{"method":"POST","path":"/api/v1/artifacts/{artifactId}/sfx","operationId":"manageArtifactSfx","scope":"artifact:publish","idempotent":true,"summary":"Manage line-level sound-effect cues for a table read artifact.","requestSchema":"SfxManageRequest","responseSchema":"SfxMutationResponse"},"cli":{"command":"sleeperhit sfx add|update|remove <artifactId>"},"mcp":{"tool":"add_sfx/update_sfx/remove_sfx","resource":null}}},{"id":"artifacts.sfx.list","title":"List sound effects","description":"List timed SFX cues for a table-read artifact.","availability":"available","tags":["artifacts","sfx"],"docsSlug":"api-reference","docsPath":"/api-reference","surfaces":{"ui":{"label":"Writers Lab table-read studio","path":"/dashboard/writing-lab/:projectSlug/table-read","context":"Operate on the active table read: cast, voices, avatars, soundtrack, sound effects, live read, and renders."},"api":{"method":"GET","path":"/api/v1/artifacts/{artifactId}/sfx","operationId":"listArtifactSfx","scope":"artifact:read","idempotent":false,"summary":"List sound-effect cues for a table read artifact.","requestSchema":null,"responseSchema":"SfxListResponse"},"cli":{"command":"sleeperhit sfx list <artifactId>"},"mcp":{"tool":"list_sfx","resource":null}}}],"openApiOperations":[{"method":"GET","path":"/agent-guidance","operationId":"getAgentGuidance","summary":"Read backend-managed agent workflow guidance.","tags":["Discovery"],"scope":"story:read","idempotent":false,"requestSchema":null,"responseSchema":"AgentGuidance"},{"method":"GET","path":"/artifacts/{artifactId}","operationId":"getStoryArtifact","summary":"Read a single artifact and its manifest.","tags":["Artifacts"],"scope":"artifact:read","idempotent":false,"requestSchema":null,"responseSchema":"StoryArtifactEnvelope"},{"method":"POST","path":"/artifacts/{artifactId}/avatar","operationId":"recastArtifactAvatar","summary":"Regenerate a single character's avatar portrait on a table read artifact.","tags":["Artifacts"],"scope":"artifact:publish","idempotent":true,"requestSchema":"AvatarRecastRequest","responseSchema":"AvatarRecastResponse"},{"method":"GET","path":"/artifacts/{artifactId}/cast","operationId":"getArtifactCast","summary":"Read the enriched cast for a table read artifact.","tags":["Artifacts"],"scope":"artifact:read","idempotent":false,"requestSchema":null,"responseSchema":"CastEnvelope"},{"method":"POST","path":"/artifacts/{artifactId}/cast","operationId":"updateArtifactCast","summary":"Batch-update the cast (voices + avatars) on a table read artifact.","tags":["Artifacts"],"scope":"artifact:publish","idempotent":true,"requestSchema":"CastBatchRequest","responseSchema":"CastBatchResponse"},{"method":"GET","path":"/artifacts/{artifactId}/coverage","operationId":"getArtifactCoverage","summary":"Read the coverage report for a table read artifact.","tags":["Artifacts"],"scope":"artifact:read","idempotent":false,"requestSchema":null,"responseSchema":"CoverageReportEnvelope"},{"method":"POST","path":"/artifacts/{artifactId}/coverage","operationId":"generateArtifactCoverage","summary":"Generate professional script coverage for a table read artifact.","tags":["Artifacts"],"scope":"story:write","idempotent":true,"requestSchema":null,"responseSchema":"CoverageDispatchAck"},{"method":"POST","path":"/artifacts/{artifactId}/finalize","operationId":"finalizeArtifact","summary":"Durably render a table read artifact as an MP3 or MP4.","tags":["Artifacts"],"scope":"artifact:publish","idempotent":true,"requestSchema":null,"responseSchema":null},{"method":"GET","path":"/artifacts/{artifactId}/music","operationId":"getArtifactMusic","summary":"Read adaptive soundtrack status for a table read artifact.","tags":["Artifacts"],"scope":"artifact:read","idempotent":false,"requestSchema":null,"responseSchema":"MusicStatusEnvelope"},{"method":"POST","path":"/artifacts/{artifactId}/music","operationId":"generateArtifactMusic","summary":"Generate adaptive soundtrack for a table read artifact.","tags":["Artifacts"],"scope":"artifact:publish","idempotent":true,"requestSchema":"MusicGenerateRequest","responseSchema":"MusicGenerateResponse"},{"method":"POST","path":"/artifacts/{artifactId}/performance","operationId":"updateArtifactPerformance","summary":"Refine the delivery of all of one character's lines on a table read artifact.","tags":["Artifacts"],"scope":"artifact:publish","idempotent":true,"requestSchema":"PerformanceDirectiveRequest","responseSchema":"PerformanceDirectiveResponse"},{"method":"POST","path":"/artifacts/{artifactId}/refine","operationId":"refineArtifact","summary":"Conversationally revise a table read artifact in place.","tags":["Artifacts"],"scope":"artifact:publish","idempotent":true,"requestSchema":null,"responseSchema":null},{"method":"POST","path":"/artifacts/{artifactId}/render-video","operationId":"renderArtifactVideo","summary":"Trigger the opt-in MP4 render for a table read artifact.","tags":["Artifacts"],"scope":"artifact:publish","idempotent":true,"requestSchema":null,"responseSchema":"ArtifactRenderAck"},{"method":"GET","path":"/artifacts/{artifactId}/script","operationId":"getArtifactScript","summary":"Read actual script content for a table read artifact.","tags":["Artifacts"],"scope":"artifact:read","idempotent":false,"requestSchema":null,"responseSchema":"ArtifactScriptContentEnvelope"},{"method":"GET","path":"/artifacts/{artifactId}/sfx","operationId":"listArtifactSfx","summary":"List sound-effect cues for a table read artifact.","tags":["Artifacts"],"scope":"artifact:read","idempotent":false,"requestSchema":null,"responseSchema":"SfxListResponse"},{"method":"POST","path":"/artifacts/{artifactId}/sfx","operationId":"manageArtifactSfx","summary":"Manage line-level sound-effect cues for a table read artifact.","tags":["Artifacts"],"scope":"artifact:publish","idempotent":true,"requestSchema":"SfxManageRequest","responseSchema":"SfxMutationResponse"},{"method":"POST","path":"/artifacts/{artifactId}/voice-modification","operationId":"modifyArtifactVoice","summary":"Apply a voice effect to a range of lines on a table read artifact.","tags":["Artifacts"],"scope":"artifact:publish","idempotent":true,"requestSchema":"VoiceModificationRequest","responseSchema":"VoiceModificationResponse"},{"method":"POST","path":"/artifacts/{artifactId}/voice","operationId":"recastArtifactVoice","summary":"Recast a single character's voice on a table read artifact.","tags":["Artifacts"],"scope":"artifact:publish","idempotent":true,"requestSchema":null,"responseSchema":null},{"method":"GET","path":"/capabilities","operationId":"getCapabilities","summary":"Discover supported sources, artifacts, scopes, and documentation surfaces.","tags":["Discovery"],"scope":"story:read","idempotent":false,"requestSchema":null,"responseSchema":"Capabilities"},{"method":"GET","path":"/credits","operationId":"getCredits","summary":"Get Studio Credit balance for the authenticated account.","tags":["Credits"],"scope":"credits:read","idempotent":false,"requestSchema":null,"responseSchema":"CreditsSummary"},{"method":"GET","path":"/story-jobs","operationId":"listStoryJobs","summary":"List story jobs owned by the authenticated account.","tags":["Jobs"],"scope":"story:read","idempotent":false,"requestSchema":null,"responseSchema":"StoryJobList"},{"method":"POST","path":"/story-jobs","operationId":"createStoryJob","summary":"Create an artifact-generation job against an APPROVED StoryPlan.","tags":["Jobs"],"scope":"story:write","idempotent":true,"requestSchema":"StoryJobCreate","responseSchema":"StoryJobEnvelope"},{"method":"GET","path":"/story-jobs/{jobId}","operationId":"getStoryJob","summary":"Read a story job by id, including its artifacts.","tags":["Jobs"],"scope":"story:read","idempotent":false,"requestSchema":null,"responseSchema":"StoryJobEnvelope"},{"method":"GET","path":"/story-jobs/{jobId}/artifacts","operationId":"listStoryJobArtifacts","summary":"List the artifacts produced by a story job.","tags":["Artifacts"],"scope":"artifact:read","idempotent":false,"requestSchema":null,"responseSchema":"StoryArtifactListResponse"},{"method":"POST","path":"/story-jobs/{jobId}/cancel","operationId":"cancelStoryJob","summary":"Cancel a story job and release its reserved credits.","tags":["Jobs"],"scope":"story:write","idempotent":true,"requestSchema":null,"responseSchema":"StoryJobEnvelope"},{"method":"GET","path":"/story-plans/{planId}","operationId":"getStoryPlan","summary":"Read a StoryPlan by id.","tags":["Plans"],"scope":"story:read","idempotent":false,"requestSchema":null,"responseSchema":"StoryPlanEnvelopeResponse"},{"method":"POST","path":"/story-plans/{planId}/approve","operationId":"approveStoryPlan","summary":"Approve a generated StoryPlan.","tags":["Plans"],"scope":"story:write","idempotent":true,"requestSchema":null,"responseSchema":"StoryPlanEnvelopeResponse"},{"method":"POST","path":"/story-plans/{planId}/reject","operationId":"rejectStoryPlan","summary":"Reject a generated StoryPlan.","tags":["Plans"],"scope":"story:write","idempotent":true,"requestSchema":null,"responseSchema":"StoryPlanEnvelopeResponse"},{"method":"GET","path":"/story-projects","operationId":"listStoryProjects","summary":"List story projects owned by the authenticated account.","tags":["Projects"],"scope":"story:read","idempotent":false,"requestSchema":null,"responseSchema":"StoryProjectList"},{"method":"POST","path":"/story-projects","operationId":"createStoryProject","summary":"Create a new story project workspace.","tags":["Projects"],"scope":"story:write","idempotent":true,"requestSchema":"StoryProjectCreate","responseSchema":"StoryProjectEnvelope"},{"method":"DELETE","path":"/story-projects/{projectId}","operationId":"deleteStoryProject","summary":"Soft-delete a story project.","tags":["Projects"],"scope":"story:write","idempotent":false,"requestSchema":null,"responseSchema":"DeletionAck"},{"method":"GET","path":"/story-projects/{projectId}","operationId":"getStoryProject","summary":"Read a story project by id.","tags":["Projects"],"scope":"story:read","idempotent":false,"requestSchema":null,"responseSchema":"StoryProjectEnvelope"},{"method":"PATCH","path":"/story-projects/{projectId}","operationId":"updateStoryProject","summary":"Update a story project.","tags":["Projects"],"scope":"story:write","idempotent":false,"requestSchema":"StoryProjectPatch","responseSchema":"StoryProjectEnvelope"},{"method":"GET","path":"/story-projects/{projectId}/series-bible","operationId":"getProjectSeriesBible","summary":"Read the project Series Bible.","tags":["Projects"],"scope":"story:read","idempotent":false,"requestSchema":null,"responseSchema":"SeriesBibleEnvelope"},{"method":"PATCH","path":"/story-projects/{projectId}/series-bible","operationId":"saveProjectSeriesBible","summary":"Save the project Series Bible.","tags":["Projects"],"scope":"story:write","idempotent":false,"requestSchema":"SeriesBiblePatch","responseSchema":"SeriesBibleEnvelope"},{"method":"POST","path":"/story-projects/{projectId}/series-bible","operationId":"generateProjectSeriesBible","summary":"Generate or refresh the project Series Bible.","tags":["Projects"],"scope":"story:write","idempotent":true,"requestSchema":"SeriesBibleGenerateRequest","responseSchema":"SeriesBibleEnvelope"},{"method":"GET","path":"/story-projects/{projectId}/sources","operationId":"listStorySources","summary":"List sources attached to a project.","tags":["Sources"],"scope":"source:read","idempotent":false,"requestSchema":null,"responseSchema":"StorySourceList"},{"method":"POST","path":"/story-projects/{projectId}/sources","operationId":"createStorySource","summary":"Attach a source to a project.","tags":["Sources"],"scope":"source:write","idempotent":true,"requestSchema":"StorySourceCreate","responseSchema":"StorySourceEnvelope"},{"method":"DELETE","path":"/story-projects/{projectId}/sources/{sourceId}","operationId":"deleteStorySource","summary":"Soft-delete a source.","tags":["Sources"],"scope":"source:write","idempotent":false,"requestSchema":null,"responseSchema":"DeletionAck"},{"method":"GET","path":"/story-projects/{projectId}/sources/{sourceId}","operationId":"getStorySource","summary":"Read a source by id.","tags":["Sources"],"scope":"source:read","idempotent":false,"requestSchema":null,"responseSchema":"StorySourceEnvelope"},{"method":"GET","path":"/story-projects/{projectId}/story-plans","operationId":"listStoryPlans","summary":"List StoryPlans for a project.","tags":["Plans"],"scope":"story:read","idempotent":false,"requestSchema":null,"responseSchema":"StoryPlanList"},{"method":"POST","path":"/story-projects/{projectId}/story-plans","operationId":"createStoryPlan","summary":"Create a StoryPlan and enqueue its async generation.","tags":["Plans"],"scope":"story:write","idempotent":true,"requestSchema":"StoryPlanCreate","responseSchema":"StoryPlanEnvelopeResponse"},{"method":"GET","path":"/voices","operationId":"listStudioVoices","summary":"List the caller's reusable studio voices.","tags":["Voices"],"scope":"story:read","idempotent":false,"requestSchema":null,"responseSchema":"StudioVoiceListResponse"},{"method":"POST","path":"/voices/clone-link","operationId":"createVoiceCloneLink","summary":"Mint a short-lived browser recording link for voice cloning.","tags":["Voices"],"scope":"story:write","idempotent":true,"requestSchema":null,"responseSchema":"VoiceCloneLinkResponse"}],"examples":[{"id":"discover-capabilities","title":"Discover supported features before integrating","status":"available","scopes":["story:read"],"steps":[{"title":"GET /capabilities","method":"GET","path":"/capabilities"}]},{"id":"check-credits","title":"Check Studio Credit balance before generating","status":"available","scopes":["credits:read"],"steps":[{"title":"GET /credits","method":"GET","path":"/credits"}]},{"id":"handle-errors","title":"Recover from auth, rate limit, and idempotency errors","status":"available","scopes":[],"steps":[{"title":"Match on the stable error code","method":"GET","path":"/capabilities"}]},{"id":"create-project-and-attach-text-source","title":"Create a project and attach an inline text source","status":"available","scopes":["story:write","source:write"],"steps":[{"title":"POST /story-projects","method":"POST","path":"/story-projects"},{"title":"POST /story-projects/{projectId}/sources","method":"POST","path":"/story-projects/{projectId}/sources"}]},{"id":"project-series-bible","title":"Read, save, or generate a project Series Bible","status":"available","scopes":["story:read","story:write"],"steps":[{"title":"POST /story-projects/{projectId}/series-bible","method":"POST","path":"/story-projects/{projectId}/series-bible"}]},{"id":"generate-story-plan","title":"Create a StoryPlan from sources and poll until terminal","status":"available","scopes":["story:write","story:read"],"steps":[{"title":"POST /story-projects/{projectId}/story-plans","method":"POST","path":"/story-projects/{projectId}/story-plans"},{"title":"Poll the plan until terminal","method":"GET","path":"/story-plans/{planId}"},{"title":"Approve the plan","method":"POST","path":"/story-plans/{planId}/approve"}]},{"id":"ingest-pdf-source","title":"Ingest a PDF source (async, polled)","status":"available","scopes":["source:write","source:read"],"steps":[{"title":"POST a pdf source","method":"POST","path":"/story-projects/{projectId}/sources"}]},{"id":"ingest-url-source","title":"Ingest a URL source (async, polled)","status":"available","scopes":["source:write","source:read"],"steps":[{"title":"POST a url source","method":"POST","path":"/story-projects/{projectId}/sources"},{"title":"Poll until terminal","method":"GET","path":"/story-projects/{projectId}/sources/{sourceId}"}]},{"id":"refine-table-read","title":"Refine a table read artifact with a free-form instruction","status":"available","scopes":["artifact:publish","story:read","artifact:read"],"steps":[{"title":"POST /artifacts/{artifactId}/refine","method":"POST","path":"/artifacts/{artifactId}/refine"},{"title":"Poll GET /story-jobs/{jobId} until terminal","method":"GET","path":"/story-jobs/{jobId}"}]},{"id":"modify-voice-range","title":"Apply a voice effect to a range of lines","status":"available","scopes":["artifact:publish"],"steps":[{"title":"POST /artifacts/{artifactId}/voice-modification","method":"POST","path":"/artifacts/{artifactId}/voice-modification"}]},{"id":"recast-avatars","title":"Regenerate a character avatar, restyle the cast, and poll the enriched cast","status":"available","scopes":["artifact:publish","artifact:read"],"steps":[{"title":"POST /artifacts/{artifactId}/avatar — regenerate one character","method":"POST","path":"/artifacts/{artifactId}/avatar"},{"title":"POST /artifacts/{artifactId}/cast — restyle the whole cast","method":"POST","path":"/artifacts/{artifactId}/cast"},{"title":"Poll GET /artifacts/{artifactId}/cast until avatars are ready","method":"GET","path":"/artifacts/{artifactId}/cast"}]},{"id":"finalize-audio-mp3","title":"Finalize a table read artifact as a durable MP3","status":"available","scopes":["artifact:publish"],"steps":[{"title":"POST /artifacts/{artifactId}/finalize","method":"POST","path":"/artifacts/{artifactId}/finalize"},{"title":"Poll GET /artifacts/{artifactId} until finalize is complete","method":"GET","path":"/artifacts/{artifactId}"}]},{"id":"idempotent-post-recipe","title":"Safely retry expensive POSTs with Idempotency-Key","status":"planned","scopes":["story:write"],"steps":[{"title":"POST with Idempotency-Key","method":"POST","path":"/story-jobs"}]},{"id":"generate-table-read","title":"Generate a table read from an approved plan, then read the share URLs","status":"available","scopes":["story:write","story:read","artifact:read"],"steps":[{"title":"POST /story-jobs","method":"POST","path":"/story-jobs"},{"title":"Poll GET /story-jobs/{jobId} until terminal","method":"GET","path":"/story-jobs/{jobId}"},{"title":"Read actual script content","method":"GET","path":"/artifacts/{artifactId}/script?scope=page&page=1"},{"title":"Open a player, or drive the live feed yourself","method":"POST","path":"/api/share/table-read/start-live"}]}]}