Skip to main content

Suno v6 Wild API for experimental songs: a style brief and your lyrics in, two textured, less predictable MP3 takes with vocals out, or let it write the words.

From $0.072/request

Workbench

Send a request

Quickstart

Examples use the selected endpoint’s public parameter definitions. Replace the API key and example media, then send the request from your server.

SDKs & integrations
POSThttps://api.spicyapi.ai/api/v1/jobs/createTask

API authentication

Keep the API key in the server environment variable SPICY_API_KEY. Use Bearer authentication and Content-Type: application/json for JSON requests.

Authorization: Bearer $SPICY_API_KEY
# Generate the idempotency key once; reuse it when retrying after a lost response.
export SPICY_IDEMPOTENCY_KEY="${SPICY_IDEMPOTENCY_KEY:-$(uuidgen)}"
curl -X POST https://api.spicyapi.ai/api/v1/jobs/createTask \
  -H "Authorization: Bearer $SPICY_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $SPICY_IDEMPOTENCY_KEY" \
  -d '{
  "model": "suno/v6-wild/text-to-audio",
  "input": {
    "prompt": "Calm ambient pads with a slow rising motif"
  }
}'

# Copy data.taskId from the response into TASK_ID, then poll the status.
TASK_ID="TASK_ID_FROM_RESPONSE"
curl "https://api.spicyapi.ai/api/v1/jobs/recordInfo?taskId=$TASK_ID" \
  -H "Authorization: Bearer $SPICY_API_KEY"

Generated from this model’s input schema — the same one the API validates every request against.

Input parameters

Place these fields inside the request body’s input object. Names and types match the API. Do not assume a default when none is specified.

promptstringRequired

The style brief. With your own lyrics or instrumental on, it is the style only: genre, tempo, instruments, voice, mood, up to 1,000 characters. With no lyrics and generate_lyrics on, it is the idea for the song and the model writes the words from it, up to 3,000 characters. Describe styles in words; prompts that name real artists are refused. Does not change the price.

Default
Not specified
Constraints
minLength:1
maxLength:3000
reference_audio_urlsarray<string>Optional

One reference audio file (6 seconds to 30 minutes, up to 500 MB) that inspires the song. Only with generated lyrics: no lyrics, instrumental off, generate_lyrics on. Use audio you have the right to use. Does not change the price.

Default
Not specified
Constraints
maxItems:1
reference_video_urlsarray<string>Optional

One reference video (MP4, MOV or WebM, up to 100 MB and 241 seconds) the song is built around, for instance to score it. Only with generated lyrics: no lyrics, instrumental off, generate_lyrics on. Does not change the price.

Default
Not specified
Constraints
maxItems:1
image_urlsarray<string>Optional

Up to 5 mood images (JPEG, PNG, WebP or BMP, each up to 10 MB) that the model draws on for the feel of the song. Only with generated lyrics: no lyrics, instrumental off, generate_lyrics on. In other modes it returns a clear error. Does not change the price.

Default
Not specified
Constraints
maxItems:5
persona_modelstringOptional

Tells the model what persona_id is: style_persona (carry its musical style) or voice_persona (carry its voice). Send it together with persona_id. Applies with your own lyrics or instrumental on only. Does not change the price.

Default
Not specified
Allowed values
"style_persona""voice_persona"
persona_idstringOptional

The ID of a saved Suno persona or voice to sing or play the song. Optional. Applies with your own lyrics or instrumental on only. Use together with persona_model. Does not change the price.

Default
Not specified
Constraints
minLength:1
maxLength:200
varietyintegerOptional

How much the model varies your style prompt, as a whole number from 0 (off: your style tags are used exactly as written) to 4 (maximum). Default 1. This is Suno's own description of the setting; we have not tested it. Applies with your own lyrics or instrumental on only. Does not change the price.

Default
Not specified
Constraints
minimum:0
maximum:4
audio_weightnumberOptional

How strongly the input audio shapes the result, from 0 to 1 in steps of 0.01. Suno does not support it for songs without vocals. Applies with your own lyrics or instrumental on only. Does not change the price.

Default
Not specified
Constraints
minimum:0
maximum:1
weirdnessnumberOptional

How far the song may stray from the expected, from 0 (conventional) to 1 (adventurous), in steps of 0.01. Applies with your own lyrics or instrumental on only. Does not change the price.

Default
Not specified
Constraints
minimum:0
maximum:1
style_weightnumberOptional

How strictly the song follows your style brief, from 0 to 1 in steps of 0.01. Applies with your own lyrics or instrumental on only; elsewhere it returns a clear error. Does not change the price.

Default
Not specified
Constraints
minimum:0
maximum:1
vocal_genderstringOptional

Leans the lead vocal female or male. It is a preference, not a guarantee, and we have not tested how often it holds. Applies with your own lyrics or instrumental on only; sending it with generated lyrics returns a clear error. Does not change the price.

Default
Not specified
Allowed values
"female""male"
negative_promptstringOptional

Styles, sounds or moods to keep out of the song, as a short comma-separated list, for example “harsh distortion, spoken word”. Optional. Does not change the price.

Default
Not specified
Constraints
minLength:1
maxLength:500
titlestringOptional

Name for the song, up to 80 characters. Applies with your own lyrics or with instrumental on; with generated lyrics the model picks the title. Optional. Does not change the price.

Default
Not specified
Constraints
minLength:1
maxLength:80
instrumentalbooleanOptional

Switch on for a track with no vocals. prompt then describes the style (up to 1,000 characters) and lyrics is not needed. Off by default. Does not change the price.

Default
false
generate_lyricsbooleanOptional

On by default: when lyrics is empty and instrumental is off, the model writes the lyrics from prompt. Lyrics you provide are never rewritten. Turn it off only if you send lyrics or switch on instrumental. Does not change the price.

Default
true
lyricsstringOptional

The words to sing, up to 5,000 characters, one line per row. Section tags such as [Verse], [Chorus], [Bridge] and [Outro] on their own rows shape the structure and are not sung. In our tests every line was sung in the order written and the chorus was not repeated unless you repeated it. Leave empty to have lyrics written (see generate_lyrics). Does not change the price.

Default
Not specified
Constraints
minLength:1
maxLength:5000

Track the task

HTTP 202 means the task was accepted, not completed. Save the returned taskId and query that task. Do not create another task while waiting for its result.

Accepted response
HTTP/1.1 202 Accepted
Location: /api/v1/jobs/recordInfo?taskId=job_01k3m8x9q2z4v7n5p6r8s0t1w3

{
  "code": 200,
  "msg": "success",
  "request_id": "req_example_create",
  "data": {
    "taskId": "job_01k3m8x9q2z4v7n5p6r8s0t1w3",
    "state": "queued",
    "estimatedCost": "0.750000"
  }
}

The accepted response includes the estimate so your app can show the same amount in task history and billing.

Read the job
curl --get "https://api.spicyapi.ai/api/v1/jobs/recordInfo" \
  --data-urlencode "taskId=$TASK_ID" \
  -H "Authorization: Bearer $SPICY_API_KEY"

Start polling at about 2 seconds and gradually increase the interval. Stop at a terminal state. After a connection failure, query the original taskId. Retry creation only with the original idempotency key and body.

Or let the callback find you
import { verifyWebhook } from "@spicyapi/sdk";

// express.raw keeps the bytes we signed; express.json never matches.
app.post("/hooks/spicy", express.raw({ type: "application/json" }), (req, res) => {
  const { payload } = verifyWebhook({
    rawBody: req.body,
    timestamp: req.header("X-Webhook-Timestamp"),
    signature: req.header("X-Webhook-Signature"),
    payloadVersion: Number(req.header("X-Webhook-Payload-Version")),
    secret: process.env.SPICY_WEBHOOK_SECRET,
  });
  res.status(200).end();
  void handleFinishedTask(payload);
});

Pass callBackUrl when you create the task and the finished record is POSTed to you — no polling loop at all. Every delivery carries X-Webhook-Timestamp, X-Webhook-Signature and X-Webhook-Payload-Version. The signature is a base64 HMAC-SHA256 over taskId.timestamp.sha256(body), so it must be checked against the raw bytes: parsing the JSON and re-serialising it changes them and the check will fail. Failed deliveries are retried, so the same taskId can arrive twice — make the handler idempotent. Answer 2xx first and do the work afterwards; a slow handler is treated as a failed delivery.

Read the result

Consume output only when state is succeeded. On failure, use errorCode, errorMessage and request_id to investigate. Example costs and states do not represent an actual bill.

Completed response example
{
  "code": 200,
  "msg": "success",
  "request_id": "req_example_record",
  "data": {
    "taskId": "job_01k3m8x9q2z4v7n5p6r8s0t1w3",
    "model": "suno/v6-wild/text-to-audio",
    "state": "succeeded",
    "output": {
      "assets": [
        {
          "key": "tasks/2026/08/28/job_01k3m8x9q2z4v7n5p6r8s0t1w3/3f7a1c9e5b2d48f0a6c1e3d5b7f9a1c3.mp3",
          "mime": "audio/mpeg",
          "url": "https://example.r2.cloudflarestorage.com/results/job_01k3m8x9q2z4v7n5p6r8s0t1w3/result.mp3?X-Amz-Signature=SIGNATURE_FROM_RESPONSE",
          "expiresAt": "2026-08-28T12:20:08.000Z"
        }
      ]
    },
    "cost": "0.750000",
    "settled": true,
    "createdAt": "2026-08-28T12:00:00Z",
    "completedAt": "2026-08-28T12:00:30Z"
  }
}

For each available asset, open or download assets[].url directly without an API Authorization header. The signed URL expires at expiresAt; poll the task again to refresh it while the asset remains within its retention period. A pending or unavailable asset has no URL. Treat signed URLs as private.

SDKs & integrations

Use SpicyAPI in your app, terminal, AI assistant or visual workflow. Choose a setup guide below.

Use it in ComfyUI

Install the SpicyAPI nodes from ComfyUI Manager or with the command below, then search for Suno v6 Wild · Text to Music on the canvas. The node has the same options as this page and shows its price before it runs.

cd ComfyUI/custom_nodes
git clone https://github.com/spicyapi-ai/comfyui-spicyapi