/api/v1/producer/*⚠️ Migration Notice (2026-04, updated 2026-05)
Producer API is powered by Google Lyria 3 Pro. The legacy FUZZ-* models have been retired upstream and are silently aliased to Lyria 3 Pro — your existing SDK calls continue to work without code changes. cover_musicis supported again (re-enabled 2026-05-20 after a brief gap during the April migration). It accepts a newstrengthparameter (0–1); the legacycover_strengthfield is kept as an alias for back-compat.The following operations remain unsupported and return HTTP 410 Gone: music_variation— no direct replacement; re-runcreate_musicwith the same prompt and a differentseedfor an alternate version.swap_music_vocals— usereplace_musictargeting the vocals time window.swap_music_sound— usereplace_musictargeting the instrumental time window.The advanced parameters make_instrumental,lyrics_strength,sound_strength, andweirdnessare accepted at the API surface for backwards compatibility but are silently ignored — Lyria 3 Pro does not support them. To produce instrumental output, include"instrumental, no vocals"in yoursoundprompt and leavelyricsempty.
sound and lyrics/api/v1/producerAuthorization: Bearer <YOUR_MUSICAPI_KEY>Content-Type: application/jsonPOST /api/v1/producer/createGET /api/v1/producer/task/{task_id}POST /api/v1/producer/uploadPOST /api/v1/producer/downloadmv parameter accepts the following model:| Model | Avg. Generation Time | Notes |
|---|---|---|
| Lyria 3 Pro (Default) | ~30s | Google Lyria 3 production-ready model — vocals, instrumentals, and full tracks |
mv values from the previous platform are still accepted at the API surface and silently mapped to Lyria 3 Pro. You do not need to update existing SDK calls.FUZZ-2.0, FUZZ-2.0 Pro, FUZZ-2.0 Raw, FUZZ-1.1 Pro, FUZZ-1.0 Pro, FUZZ-1.1, FUZZ-1.0, FUZZ-0.8, FUZZ-3-Demo, Lyria 3 preview. All of these will be processed as Lyria 3 Pro.The samples below were generated under the legacy FUZZ models and are kept here for reference only. New generations use Lyria 3 Pro and are not directly comparable to these clips.
| Model | Sample Audio |
|---|---|
| FUZZ-2.0 Pro | Listen |
| FUZZ-2.0 | Listen |
| FUZZ-2.0 Raw | Listen |
| FUZZ-1.1 Pro | Listen |
| FUZZ-1.0 Pro | Listen |
| FUZZ-1.0 | Listen |
| FUZZ-1.1 | Listen |
| FUZZ-0.8 | Listen |
| Lyria 3 preview | Listen |
| FUZZ-3-Demo | Listen |
| Model | Sample Audio |
|---|---|
| FUZZ-2.0 Pro | Listen |
| FUZZ-2.0 | Listen |
| FUZZ-2.0 Raw | Listen |
| FUZZ-1.1 Pro | Listen |
| FUZZ-1.0 Pro | Listen |
| FUZZ-1.0 | Listen |
| FUZZ-1.1 | Listen |
| FUZZ-0.8 | Listen |
| Lyria 3 preview | Listen |
| FUZZ-3-Demo | Listen |
| Parameter | Type | Required | Description |
|---|---|---|---|
task_type | string | Yes | Task type: create_music, extend_music, replace_music, cover_music, or cover_upload_music |
sound | string | No* | Audio style prompt describing the desired sound. *Required if lyrics is empty |
lyrics | string | No* | Song lyrics text. *Required if sound is empty |
mv | string | No | Model version. Defaults to Lyria 3 Pro. Legacy values (FUZZ-*) are accepted as aliases. See Available Models. |
title | string | No | Track title (max 80 characters) |
seed | string | No | Random seed for reproducible generation |
bpm | string | number | No | Target beats per minute (≥ 1) |
length | integer | No | Target duration in seconds (1–240) |
instruction | string | Conditional | Edit/extension/cover guidance. Required for extend_music, replace_music, and cover_music if sound/lyrics are not provided as fallback. |
clip_id | string | No** | Parent clip ID. **Required for: extend_music, replace_music, cover_music, cover_upload_music |
starts_at | number | No*** | For extend_music: time in source clip where extension begins. For replace_music: replacement window start. ***Required for replace_music |
ends_at | number | No*** | For replace_music: replacement window end (must exceed starts_at). ***Required for replace_music |
strength | number | No**** | For cover_music / cover_upload_music: transformation intensity (0–1). Defaults to 0.5 if neither strength nor legacy cover_strength is provided. |
webhook_url | string | No | HTTPS URL to receive task completion/failure notifications |
webhook_secret | string | No | Secret for signing webhook payloads (used with webhook_url) |
Important: The soundparameter can be used independently to achieve prompt-based generation similar to description/prompt mode.
make_instrumental — to produce instrumentals, leave lyrics empty and include "instrumental, no vocals" in your sound prompt.lyrics_strength, sound_strength, weirdness — Lyria infers these from prompt quality.cover_url — cover-art generation control has been removed.Legacy alias kept: cover_strengthis accepted as a legacy alias for the newstrengthparameter oncover_music. Existing SDK calls that passcover_strengthcontinue to work without code changes.
"Energetic rock anthem with distorted electric guitars, driving drums, and powerful vocals"
"Calm ambient meditation music with soft piano, gentle strings, and nature sounds"
"90s hip-hop beat with vinyl scratches, deep bass, and smooth jazz samples"
"Instrumental cinematic orchestral piece, no vocals, sweeping strings and brass"[Verse 1]
Walking through the city lights
Feeling the rhythm of the night
Every step a new surprise
Under these electric skies
[Chorus]
We're alive, we're free tonight
Dancing till the morning lightsound: "music"
sound: "test"
lyrics: "la la la"
lyrics: "test lyrics here"strength is in the range 0–1 and controls how strongly the cover transforms the source clip — lower values stay closer to the original, higher values diverge more aggressively. Use cover_upload_music instead when the clip_id came from /api/v1/producer/upload.webhook_url is provided, the API will send a POST request to the URL when the task completes or fails. The webhook payload includes the task result. If webhook_secret is provided, the payload will be signed with HMAC-SHA256 for verification.{
"code": 200,
"data": [
{
"clip_id": "abc123",
"title": "Epic Orchestral Trailer",
"sound": null,
"lyrics": null,
"lyrics_id": "e59f87f2-2252-5d52-b60d-6f00cfab6041",
"lyrics_timing_markers": [[0, 0], [5, 9.874], [7, 19.748]],
"image_url": "https://storage.googleapis.com/producer-app-public/assets/...jpg",
"audio_url": "https://storage.googleapis.com/producer-app-public/clips/...m4a",
"wav_url": "https://storage.googleapis.com/producer-app-public/clips/...wav",
"video_url": null,
"created_at": "2026-04-27T14:11:57.984846Z",
"mv": null,
"seed": null,
"duration": null,
"state": "succeeded"
}
],
"message": "success"
}Note on Lyria 3 Pro responses: sound,lyrics,mv,seed, anddurationmay benullbecause the upstream does not echo these back. The new fieldswav_url,lyrics_id, andlyrics_timing_markersare exposed when available.
{
"code": 202,
"type": "not_ready",
"error": "Task is still processing. Please wait a few seconds and try again."
}{
"type": "endpoint_deprecated",
"error": "'swap_music_vocals' is no longer supported by the upstream model platform. Use 'replace_music' with start_s/end_s targeting the vocals segment to achieve a similar effect.",
"docs": "https://docs.musicapi.ai"
}{
"code": 500,
"error": "Internal Server Error"
}| Code | Status | Description |
|---|---|---|
| 200 | OK | Task completed successfully |
| 202 | Accepted | Task is still processing, query again later |
| 400 | Bad Request | Invalid parameters or validation error |
| 401 | Unauthorized | Invalid or missing API key |
| 403 | Forbidden | Insufficient credits or permission denied |
| 404 | Not Found | Task not found |
| 410 | Gone | Operation has been retired upstream (music_variation, swap_music_vocals, swap_music_sound) |
| 429 | Too Many Requests | Concurrency limit reached |
| 500 | Internal Server Error | Server error occurred |
extend_music, replace_music, or cover_upload_music operations (costs 2 credits).| Parameter | Type | Required | Description |
|---|---|---|---|
audio_url | string | Yes | Public URL of the audio file to upload |
webhook_url | string | No | HTTPS URL to receive upload completion notification |
webhook_secret | string | No | Secret for signing webhook payloads |
{ "message": "success", "task_id": "<uuid>" }GET /api/v1/producer/task/{task_id} until completion. The result will include clip_id, audio_url, and lyrics.clip_id with task types extend_music, replace_music, or cover_upload_music.Auto-refund: If the upstream upload fails, the 2-credit charge is automatically refunded.
| Parameter | Type | Required | Description |
|---|---|---|---|
clip_id | string | Yes | Music clip ID to download |
format | string | No | Download format: mp3 or wav. Default: mp3 |
{ "message": "success", "task_id": "<uuid>" }GET /api/v1/producer/task/{task_id} until completion. The result will include audio_url with the download link.Auto-refund: If the upstream download fails, the 2-credit charge is automatically refunded.
webhook_url to receive notifications instead of pollingseed parameter for consistent results during testing and A/B testingbpm for tracks that need to match a specific tempo (e.g., DJ mixes, fitness videos)length (1–240 seconds) to bound the duration of the generated clip"instrumental, no vocals" in sound and leave lyrics empty — Lyria responds well to explicit "no vocals" cues in the promptextend_music and replace_music, supplying an explicit instruction produces better results than relying on the sound/lyrics fallback