Generate audio with Suno Extend Music via the Muapi REST API. Pay per generation — no subscription needed.
POST https://api.muapi.ai/api/v1/suno-extend-musicSubmit a job with your MuApi API key in the x-api-key header, then poll https://api.muapi.ai/api/v1/predictions/{request_id}/result until status is completed.
| Name | Type | Required | Description |
|---|---|---|---|
| prompt | string | Yes | A description of the desired audio content. The prompt will be strictly used as the lyrics and sung in the generated track. Maximum 3000 characters |
| audio_url | string | Yes | The URL for uploading audio files. Ensure the uploaded audio does not exceed 2 minutes in length. |
| style | string | Yes | Music style specification for the generated audio. |
| model | string | No | The AI model version to use for generation.Options: V3_5, V4, V4_5, V4_5PLUS, V4_5ALL, V5, V5_5Default: "V5" |
| custom_mode | boolean | No | Enable custom mode for advanced settings.Default: true |
| title | string | No | Title for the generated music track (optional). |
| persona_id | string | No | Persona ID or custom voice ID to apply to the generated music (optional). Pair with persona_model to disambiguate. |
| persona_model | string | No | What kind of persona_id this is. Set to voice_persona when persona_id is a cloned voice ID from suno-voice-clone. Requires model V5 or V5_5.Options: style_persona, voice_persona |
| continue_at | int | No | The time point (in seconds) from which to start extending the music. Value range: greater than 0 and less than the total duration of the uploaded audio. Specifies the position in the original track where the extension should begin.Default: 1 |
| instrumental | boolean | No | Enable this option to generate music without prompt. If false prompt will used as the exact lyrics.Default: true |
| negative_tags | string | No | Music styles or traits to exclude from the generated audio (optional). Use to avoid specific styles. |
| vocal_gender | string | No | Vocal gender preference for the singing voice (optional).Options: male, femaleDefault: "male" |
| style_weight | int | No | Strength of adherence to the specified style (optional). Range 0–1, up to 2 decimal places.Default: 0.65 |
| weirdness_constraint | int | No | Controls experimental/creative deviation (optional). Range 0–1, up to 2 decimal places.Default: 0.65 |
| audio_weight | int | No | Balance weight for audio features vs. other factors (optional). Range 0–1, up to 2 decimal places.Default: 0.65 |
REQUEST_ID=$(curl -s -X POST https://api.muapi.ai/api/v1/suno-extend-music \
-H "x-api-key: $MUAPI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"prompt":"<prompt>","audio_url":"https://example.com/your-audio_url","style":"<style>"}' | jq -r .request_id)
curl -s https://api.muapi.ai/api/v1/predictions/$REQUEST_ID/result -H "x-api-key: $MUAPI_API_KEY"import os, time, requests
API = "https://api.muapi.ai/api/v1"
headers = {"x-api-key": os.environ["MUAPI_API_KEY"]}
r = requests.post(f"{API}/suno-extend-music", headers=headers, json={"prompt":"<prompt>","audio_url":"https://example.com/your-audio_url","style":"<style>"})
request_id = r.json()["request_id"]
while True:
res = requests.get(f"{API}/predictions/{request_id}/result", headers=headers).json()
if res["status"] == "completed":
print(res["outputs"]); break
if res["status"] == "failed":
raise RuntimeError(res.get("error"))
time.sleep(3)Full docs and agent/MCP integration: llms.txt. Get an API key at muapi.ai/access-keys.