Mureka AI Mureka V9.5 Generate Song API Documentation
Playground
Try it on WaveSpeedAI!Mureka 9.5 Generate Song creates complete AI songs from prompts and lyrics via the Mureka official API, supporting vocal tracks, instrumentals, songwriting demos, music production, and creative audio workflows. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.
Features
Mureka V9.5 Generate Song creates one complete song from supplied lyrics. You can optionally guide the musical style with a prompt, choose the output format, or use existing Mureka reference, vocal, and melody IDs for more controlled generation.
Why Choose This?
-
Lyrics-to-song generation
Generate a complete song from provided lyrics. -
Optional style guidance
Usepromptto describe genre, mood, instrumentation, tempo, vocal direction, or production style. -
Reference ID support
Use existing reference, vocal, or melody IDs to guide the final track. -
Multiple output formats
Choosemp3,wav, orflacbased on your workflow needs. -
Simple music workflow
Provide lyrics, add optional guidance, and generate a full song in one request.
Parameters
| Parameter | Required | Description |
|---|---|---|
| lyrics | Yes | Song lyrics. Maximum length: 5000 characters. |
| prompt | No | Optional style prompt describing genre, mood, instruments, tempo, vocal style, or production direction. |
| output_format | No | Output audio format: mp3, wav, or flac. |
| reference_id | No | Existing Mureka reference file ID used to guide the song style or audio direction. |
| vocal_id | No | Existing Mureka vocal file ID used to guide the vocal identity or singing style. |
| melody_id | No | Existing Mureka melody file ID used to guide the melody direction. |
How to Use
- Enter lyrics — Provide the lyrics for the song.
- Add a style prompt optional — Describe the genre, mood, instruments, tempo, vocal style, or production direction.
- Add reference IDs optional — Use
reference_id,vocal_id, ormelody_idwhen you want stronger control. - Choose output format — Select
mp3,wav, orflac. - Submit — Generate the song and retrieve the output URL.
Pricing
Pricing is fixed at $0.225 per song.
| Output | Cost |
|---|---|
| One generated song | $0.225 |
Each request generates one song. output_format, reference_id, vocal_id, and melody_id do not add separate charges.
Best Use Cases
- Song generation from lyrics — Turn written lyrics into a complete track.
- Demo production — Create quick song demos from draft lyrics and style prompts.
- Vocal-guided generation — Use a
vocal_idwhen a specific vocal direction is needed. - Melody-guided generation — Use a
melody_idto guide the musical contour or theme. - Reference-based music creation — Use
reference_idto guide the style or arrangement direction. - Content and media workflows — Generate songs for videos, campaigns, social content, or creative projects.
Pro Tips
- Use structured lyrics with sections such as verse, chorus, bridge, or outro for clearer arrangement.
- Add a style prompt when genre, mood, tempo, or instrumentation matters.
- Use
reference_idwhen you want the song to follow an existing reference direction. - Use
vocal_idwhen vocal identity or singing style matters. - Use
melody_idwhen the melody direction should follow an existing melody reference. - Choose
mp3for compact delivery, orwav/flacwhen higher-quality audio files are needed.
Notes
reference_idandmelody_idcan be prepared with Create Upload ID.vocal_idcan be created with Vocal Clone.- Use IDs from compatible Mureka workflows to avoid reference mismatch.
- Changing
output_formatdoes not add a format surcharge.
Related Models
- Mureka V9.5 Prompt-to-Song — Generate a song from a music prompt.
- Mureka V9.5 Generate BGM — Generate background music for media and creative workflows.
- Mureka V9.5 Generate Song — Generate a complete song from supplied lyrics.
Authentication
For authentication details, please refer to the Authentication Guide.
API Endpoints
Submit Task & Query Result
set -euo pipefail
export WAVESPEED_API_KEY="your-api-key"
REQUEST_BODY=$(cat <<'JSON'
{
"lyrics": "Waves rise softly under the morning light",
"output_format": "mp3"
}
JSON
)
# 1. Submit the prediction.
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
-X POST "https://api.wavespeed.ai/api/v3/mureka-ai/mureka-v9.5/generate-song" \
-H "Authorization: Bearer ${WAVESPEED_API_KEY}" \
-H "Content-Type: application/json" \
-d "${REQUEST_BODY}")
TASK=$(printf '%s' "${SUBMIT_RESPONSE}" | jq 'if type == "object" and has("data") then .data else . end')
PREDICTION_ID=$(printf '%s' "${TASK}" | jq -r '.id // empty')
if [ -z "${PREDICTION_ID}" ]; then
printf 'Submission response did not contain a prediction id
' >&2
exit 1
fi
RESULT_URL="https://api.wavespeed.ai/api/v3/predictions/${PREDICTION_ID}/result"
# 2. Poll until the prediction finishes.
while true; do
RESPONSE=$(curl --silent --show-error --fail-with-body \
"${RESULT_URL}" \
-H "Authorization: Bearer ${WAVESPEED_API_KEY}")
RESULT=$(printf '%s' "${RESPONSE}" | jq 'if type == "object" and has("data") then .data else . end')
STATUS=$(printf '%s' "${RESULT}" | jq -r '.status // empty')
case "${STATUS}" in
completed) printf '%s\n' "${RESULT}" | jq '.outputs'; break ;;
failed|cancelled|timeout|deleted) printf '%s\n' "${RESULT}" | jq . >&2; exit 1 ;;
*) sleep 2 ;;
esac
doneParameters
Task Submission Parameters
Request Parameters
| Parameter | Type | Required | Default | Range | Description |
|---|---|---|---|---|---|
| lyrics | string | Yes | - | - | Lyrics for the generated song. Official limit: up to 5000 characters. |
| prompt | string | No | - | Optional style prompt for the song. Official limit: up to 1024 characters. | |
| output_format | string | No | mp3 | mp3, wav, flac | Output audio format after re-uploading to WaveSpeed CDN. |
Response Parameters
| Parameter | Type | Description |
|---|---|---|
| code | integer | HTTP status code (e.g., 200 for success) |
| message | string | Status message (e.g., “success”) |
| data.id | string | Unique identifier for the prediction, Task Id |
| data.model | string | Model ID used for the prediction |
| data.outputs | array | Output values, usually URL strings; some models return text strings or structured result objects (empty when status is not completed) |
| data.urls | object | Object containing related API endpoints |
| data.status | string | Task status. completed is successful; failed, cancelled, timeout, and deleted are failure terminal statuses. |
| data.created_at | string | ISO timestamp of when the request was created (e.g., “2023-04-01T12:34:56.789Z”) |
| data.error | string | Error message (empty if no error occurred) |
| data.timings | object | Object containing timing details |
| data.timings.inference | integer | Inference time in milliseconds |
Result Request Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| id | string | Yes | - | Task ID |
Result Response Parameters
| Parameter | Type | Description |
|---|---|---|
| code | integer | HTTP status code (e.g., 200 for success) |
| message | string | Status message (e.g., “success”) |
| data | object | The prediction data object containing all details |
| data.id | string | Unique identifier for the prediction |
| data.model | string | Model ID used for the prediction |
| data.outputs | array<string | object> | Array of generated outputs (empty when status is not completed). Items are usually URL strings, but may be text strings or structured result objects, depending on the model. |
| data.urls | object | Object containing related API endpoints |
| data.status | string | Status: completed is successful; failed, cancelled, timeout, and deleted are failure terminal statuses |
| data.created_at | string | ISO timestamp of when the request was created |
| data.error | string | Error message (empty if no error occurred) |
| data.timings | object | Object containing timing details |
| data.timings.inference | integer | Inference time in milliseconds |