API reference
LyricWinter REST API reference (beta)
Base URL, authentication, response envelope, and every endpoint group in the LyricWinter REST API beta, generated from the public OpenAPI 3.1 contract.
BetaUpdated
The LyricWinter REST API is a JSON-over-HTTPS API for LyricWinter Studio. It is in beta. This reference is generated from the public OpenAPI 3.1 contract, the same file that API tools and code generators can download.
| Property | Value |
|---|---|
| Base URL | https://lyricwinter.com/api/v1 |
| Authentication | Authorization: Bearer lw_... (details) |
| Request format | Content-Type: application/json, UTF-8 |
| Response format | { "data": ..., "request_id": "req_..." } (details) |
| IDs | Lowercase UUIDs |
| Timestamps | ISO 8601 in UTC |
| OpenAPI contract | /api/v1/openapi.json |
Use the OpenAPI contract#
Load https://lyricwinter.com/api/v1/openapi.json into Postman, Insomnia, Bruno, or an OpenAPI code generator to get a typed client for every endpoint below. Coding agents should read the contract instead of guessing field names.
curl https://lyricwinter.com/api/v1/openapi.json -o lyricwinter-openapi.jsonConventions#
- Scopes. Each endpoint lists the API key scope it requires. Studio endpoints need
studio:readorstudio:write. - Versions. Writes that change shared state take the version you last read, such as
document_version, and fail with409instead of overwriting newer work. See Studio concepts. - Safe retries. Studio writes take a
client_mutation_id; exports take anIdempotency-Keyheader. See Errors and retries. - Asynchronous work. Workflows and exports return
202 Accepted. Poll the returned resource until it reaches a terminal status. - Media. Audio is served from short-lived signed URLs returned by the API. Fetch fresh URLs instead of storing them.
Endpoint groups
Character voice design
Design a Studio character voice, read its exact job and candidates, select before expiry, or request cancellation. Retain original mutation/request/job identities. Voice creation does not generate speech; assignment_outcome and the current document determine whether casting succeeded. The project preference selects the engine for future designs independently of the sample-design provider.
- GET/studio/projects/{projectId}/new-voice-engine
- PATCH/studio/projects/{projectId}/new-voice-engine
- GET/studio/projects/{projectId}/speakers/{speakerId}/voice-materialization-jobs
- POST/studio/projects/{projectId}/speakers/{speakerId}/voice-materialization-jobs
- GET/studio/voice-materialization-jobs/{jobId}
- POST/studio/voice-materialization-jobs/{jobId}/cancel
- POST/studio/voice-materialization-jobs/{jobId}/selection
Voices and uploads
Discover accessible voices, inspect current engine eligibility, and upload a private voice through the ordinary asynchronous upload flow. Retain original voice, resource and operation identifiers when recovering an interrupted upload.
Voice creation recovery
Read the recorded result of a voice creation request without starting another creation.
Voice preparation
Check whether an ElevenLabs voice is already prepared and whether new preparation is currently available. New custom voices require UltraWinter and shared capacity; prepared current-revision voices remain usable on eligible paid plans. This read-only check does not create voices or reserve allowance.
Account and API keys
Check API health, read the account and available generation balance behind an API key, and create, list, or revoke scoped API keys.
Projects
A Studio project groups ordered sections (chapters) that share one cast of speakers. Standalone stories appear as unassigned stories until you turn them into a named project.
Sections
A section is one chapter or scene of story text inside a project. Create a standalone story with one section, add sections to a project, reorder them, or delete them.
- POST/studio/sections
- GET/studio/projects/{projectId}/sections
- POST/studio/projects/{projectId}/sections
- PATCH/studio/projects/{projectId}/sections/{sectionId}
- GET/studio/projects/{projectId}/sections/{sectionId}/deletion-info
- DELETE/studio/projects/{projectId}/sections/{sectionId}
- GET/studio/projects/{projectId}/story
Documents and speakers
Every section has a versioned document of narration and dialogue blocks attributed to speakers. Read the document before editing it or generating audio, and list the project's speakers and casting.
Workflows
Workflows are durable, asynchronous jobs. A prepare workflow structures text into narration and dialogue; a Create Audio workflow casts voices and generates multi-voice audio. Poll a workflow until it reaches a terminal status. Provider-quota failures can appear as failed steps with `STUDIO_WORKFLOW_PROVIDER_QUOTA_EXCEEDED`; generation-batch targets report `PROVIDER_QUOTA_EXCEEDED`, `ELEVENLABS_ACCOUNT_PREPARATION_LIMIT`, or `ELEVENLABS_SHARED_PREPARATION_LIMIT`. Completed audio remains available. New custom ElevenLabs voices require UltraWinter and a dynamic shared allocation, subject to live provider capacity. If preparation is unavailable, choose a prepared current-revision voice or explicitly choose another engine, or wait and recheck availability before resuming. Do not assume a fixed quota or provider reset date. An engine switch must be an explicit choice; do not automatically resubmit quota failures. For other provider-account outages, contact us before resuming.
Media and playback
Check whether generation can start separately from whether audio already exists. Read per-block media freshness and generation activity, compile a playback manifest for current audio, and mint short-lived URLs. Generation availability checks plan access, voice/compiler eligibility, and ElevenLabs preparation capacity; exhausted or unverified capacity blocks new preparation, not eligible paid-plan reuse of prepared current-revision voices. It is not a promise of audio, synthesis quota, or funding. Free accounts cannot generate with ElevenLabs v4, but existing audio remains playable.
Exports
Render one section or a project's selected sections into downloadable MP3, WAV, M4B, synchronized EPUB, or SRT files. Poll a project job for every child export, then download files individually and fetch each child's immutable manifest for matching timings. No ZIP is produced. Freshness includes document, cast, mastering and saved spatial settings, but does not prove current audio takes or artifact readiness.
- GET/studio/projects/{projectId}/mastering-profile
- POST/studio/projects/{projectId}/exports
- GET/studio/projects/{projectId}/exports
- GET/studio/projects/{projectId}/exports/{exportId}
- GET/studio/projects/{projectId}/export-freshness
- GET/studio/exports
- POST/studio/exports
- GET/studio/exports/{exportId}
- GET/studio/exports/{exportId}/manifest
- POST/studio/exports/{exportId}/cancel
Sharing
Share chapters at one story link once Stories publishing opens for your account, inspect sharing state, or unpublish chapters. Before your rollout, these endpoints retain the older listening-link behavior. New chapters start as drafts.
Sound library
Upload sound effects and ambience up to 256 MiB and 65 minutes into the Studio sound library, manage their metadata, publish them to the public catalog, and link them to projects so Create Audio can place them automatically. Processing verifies duration; the sanitized WAV can be up to 720 MiB. Pinned project sounds can play as long ambience overlays; provider-generated SFX remain limited to five minutes.
- GET/studio/sounds
- POST/studio/sounds
- POST/studio/sounds/{soundId}/uploads/{uploadId}/complete
- GET/studio/sounds/{soundId}/uploads/latest
- GET/studio/sounds/{soundId}
- PATCH/studio/sounds/{soundId}
- DELETE/studio/sounds/{soundId}
- POST/studio/sounds/{soundId}/preview-url
- GET/studio/projects/{projectId}/sounds
- POST/studio/projects/{projectId}/sounds
- DELETE/studio/projects/{projectId}/sounds/{soundId}
- GET/sounds
- GET/sounds/{soundId}
Feedback
Send product feedback with screenshots and other images so our team can see what you mean.