Generate AI music through AceDataCloud's Producer API.
clawhub install @acedatacloud/producer. Check that the ClawHub publisher is @acedatacloud.Bearer ; a platform-... management token is not a service API key./producer/audios and /producer/tasks. Advanced workflows below may call additional routes.ACEDATACLOUD_API_TOKEN=your_api_key_here in ~/.openclaw/.env, then restart the Gateway and start a new session. For a direct terminal test, run export ACEDATACLOUD_API_TOKEN="your_api_key_here" in that shell. Never put the key in a prompt or commit an .env file.Illustrated key setup, first run, and troubleshooting · Token details
bash
curl -X POST https://api.acedata.cloud/producer/audios \
-H "Authorization: Bearer $ACEDATACLOUD_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"action": "generate", "lyric": "", "prompt": "upbeat electronic dance track with synth leads"}'
Async: All generation is async. See async task polling. Poll via
POST /producer/taskswith{"id": "..."}every 3-5 seconds.
ModelNotesFUZZ-2.0 ProDefault, highest qualityFUZZ-2.0Standard qualityFUZZ-2.0 RawRaw output variantFUZZ-1.1 ProPro v1.1FUZZ-1.0 ProPro v1.0FUZZ-1.0v1.0FUZZ-1.1v1.1FUZZ-0.8Legacy
ActionDescriptiongenerateCreate a new song from prompt or custom lyricscoverCreate a cover version of an existing songextendContinue a song from a specific timestampreplace_sectionReplace a time range in an existing songswap_vocalsExtract and swap vocal tracksswap_instrumentalsExtract and swap instrumental tracksvariationGenerate a variation of an existing songstemsSeparate a song into stems
json
POST /producer/audios
{
"action": "generate",
"lyric": "",
"prompt": "chill lo-fi hip hop with rain sounds and soft piano"
}
json
POST /producer/audios
{
"action": "generate",
"custom": true,
"title": "Midnight City",
"lyric": "[Verse]\nNeon lights reflect on wet streets\n[Chorus]\nMidnight city never sleeps",
"prompt": "nocturnal electronic pop",
"instrumental": false
}
json
POST /producer/audios
{
"action": "generate",
"lyric": "",
"prompt": "epic orchestral soundtrack for a movie trailer",
"instrumental": true
}
json
POST /producer/audios
{
"action": "extend",
"audio_id": "existing-audio-id",
"lyric": "",
"prompt": "",
"continue_at": 30
}
json
POST /producer/audios
{
"action": "replace_section",
"audio_id": "existing-audio-id",
"lyric": "",
"prompt": "",
"replace_section_start": 15,
"replace_section_end": 30
}
json
POST /producer/audios
{
"action": "stems",
"audio_id": "existing-audio-id",
"lyric": "",
"prompt": ""
}
json
POST /producer/lyrics
{
"prompt": "a love song about stargazing on a summer night"
}
json
POST /producer/wav
{"audio_id": "your-audio-id"}
POST /producer/videos
{"audio_id": "your-audio-id"}
json
POST /producer/upload
{
"audio_url": "https://example.com/reference.mp3"
}
ParameterTypeDescriptionactionstringRequired for every /producer/audios request; see actions tablepromptstringRequired for every /producer/audios request; use an empty string when an edit action does not use a promptmodelstringModel (e.g., "FUZZ-2.0 Pro")custombooleanEnable custom lyrics modeinstrumentalbooleanPure instrumental (no vocals)titlestringSong titlelyricstringRequired for every /producer/audios request; custom lyrics use [Verse], [Chorus] tags, otherwise use an empty stringaudio_idstringExisting audio ID (for edit actions)continue_atnumberSeconds — where to extend fromreplace_section_startnumberStart time of section to replacereplace_section_endnumberEnd time of section to replacelyrics_strength0-1Lyrics adherence (default: 0.7)sound_strength0.2-1Sound quality weight (default: 0.7)weirdness0-1Creative randomness (default: 0.5)seedstringSeed for reproducibility
json
{
"data": [
{
"id": "audio-id",
"audio_url": "https://cdn.example.com/song.mp3",
"video_url": "https://cdn.example.com/video.mp4",
"image_url": "https://cdn.example.com/cover.jpg",
"title": "Song Title",
"lyric": "full lyrics...",
"style": "electronic, dance",
"model": "FUZZ-2.0 Pro"
}
]
}
[Verse], [Chorus], [Bridge], [Outro] tags in custom lyricscontinue_at is in seconds — the song extends from that pointreplace_section_start / replace_section_end define the time range to regenerateweirdness at 0 = predictable, at 1 = highly experimental/producer/upload to get an audio ID for use with cover or extendstate field in task responses — only state: "complete" with success: true means done. During pending, the API may return intermediate audio_url values (streaming previews). Do NOT stop polling just because audio_url is non-empty