Suno API: generate songs with Suno V6
Suno V6 writes and sings a full song from an idea, a style or your own lyrics, or plays an instrumental. This guide shows how to call it through a REST API, what it costs and how its four inputs fit together.
What you get from the Suno V6 API
Suno V6 is Suno's newest music model. Give it an idea, a style, your own lyrics or a mix of those, and it writes and sings a full song, or plays an instrumental. On Revana it is the model id suno-v6, called through the same endpoint as every video and image model.
| Item | Detail |
|---|---|
| Model id | suno-v6 |
| Makes | a song with vocals, or an instrumental |
| Tracks per job | two takes of the same request |
| Inputs | prompt, style, lyrics, instrumental |
| Prompt length | up to 3,000 characters |
| Price | $0.08 per job, for both tracks |
| Routes | one route |
Suno API pricing (October 2026)
Suno V6 is priced per job, not per second or per track. One job costs $0.08 and returns two tracks, so each finished song costs half that.
| Jobs | Tracks you get | Total |
|---|---|---|
| 1 | 2 | $0.08 |
| 10 | 20 | $0.80 |
| 100 | 200 | $8.00 |
| 1,000 | 2,000 | $80.00 |
A job that fails is not charged. Credit is prepaid, from $10, with no subscription; see the pricing page.
The four inputs, and how they combine
promptdescribes the song you want in plain words: the mood, what it is about, who it is for.stylenames the genre and sound, such as "lo-fi hip hop, soft piano, vinyl crackle" or "upbeat pop punk, female vocals".lyricsare your own words to be sung. Section tags such as[Verse]and[Chorus]on their own lines help the model shape the song.instrumentalset totruemakes music with no vocals.
Each request needs a style or lyrics (or both). instrumental: true cannot be sent together with lyrics, since there would be nobody to sing them; a request that breaks either rule is refused before anything is charged.
Generate a song
Send POST /v1/generations with the model id and an input, then poll until the job has succeeded or failed. This request costs $0.08.
export REVANA_API_KEY="sr_live_..."
# 1. Submit the job (returns 202 with the generation id)
curl https://api.revana.si/v1/generations \
-H "Authorization: Bearer $REVANA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "suno-v6",
"input": {
"prompt": "A warm, hopeful song about a small bakery opening before sunrise on a quiet street.",
"style": "acoustic indie folk, male vocals, fingerpicked guitar, light percussion"
},
"max_cost_usd": 0.1
}'
# 2. Poll with the id from step 1 until status is "succeeded" or "failed"
curl https://api.revana.si/v1/generations/gen_01JC2V8K5T \
-H "Authorization: Bearer $REVANA_API_KEY"import os
import time
import requests
API = "https://api.revana.si/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['REVANA_API_KEY']}"}
resp = requests.post(f"{API}/generations", headers=HEADERS, json={
"model": "suno-v6",
"input": {
"prompt": "A warm, hopeful song about a small bakery opening before sunrise on a quiet street.",
"style": "acoustic indie folk, male vocals, fingerpicked guitar, light percussion",
},
"max_cost_usd": 0.1,
})
resp.raise_for_status()
job = resp.json()
while job["status"] in ("queued", "running"):
time.sleep(5)
job = requests.get(f"{API}/generations/{job['id']}", headers=HEADERS).json()
if job["status"] == "succeeded":
print(job["output"]["urls"], job["cost_usd"])
else:
print("Failed:", job["error"])// Node 18 or later. Save as generate.mjs and run: node generate.mjs
const API = "https://api.revana.si/v1";
const headers = {
Authorization: `Bearer ${process.env.REVANA_API_KEY}`,
"Content-Type": "application/json",
};
const res = await fetch(`${API}/generations`, {
method: "POST",
headers,
body: JSON.stringify({
model: "suno-v6",
input: {
prompt: "A warm, hopeful song about a small bakery opening before sunrise on a quiet street.",
style: "acoustic indie folk, male vocals, fingerpicked guitar, light percussion",
},
max_cost_usd: 0.1,
}),
});
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
let job = await res.json();
while (job.status === "queued" || job.status === "running") {
await new Promise((r) => setTimeout(r, 5000));
job = await (await fetch(`${API}/generations/${job.id}`, { headers })).json();
}
if (job.status === "succeeded") console.log(job.output.urls, job.cost_usd);
else console.error("Failed:", job.error);{
"id": "gen_01JC2V8K5T",
"model": "suno-v6",
"status": "succeeded",
"output": {
"urls": [
"https://cdn.revana.si/g/gen_01JC2V8K5T/0.mp3",
"https://cdn.revana.si/g/gen_01JC2V8K5T/1.mp3"
]
},
"cost_usd": 0.08,
"attempts": 1,
"error": null,
"created_at": "2026-10-28T10:14:02Z",
"completed_at": "2026-10-28T10:15:31Z"
}The two files in output.urls are two takes on the same request. Download them from the API like this:
# Each Suno job returns two tracks. Fetch both once the job has succeeded.
curl -L -o take-1.mp3 https://api.revana.si/v1/generations/gen_01JC2V8K5T/content \
-H "Authorization: Bearer $REVANA_API_KEY"
curl -L -o take-2.mp3 https://api.revana.si/v1/generations/gen_01JC2V8K5T/content/2 \
-H "Authorization: Bearer $REVANA_API_KEY"Sing your own lyrics
To have Suno sing words you wrote, send them in lyrics with a style:
{
"model": "suno-v6",
"input": {
"style": "synth pop, bright female vocals, 112 bpm",
"lyrics": "[Verse]\\nCity lights are coming on\\nEvery window tells a story\\n\\n[Chorus]\\nWe run until the morning\\nWe run until the sun"
},
"max_cost_usd": 0.1
}An instrumental for a video
For background music under a clip, leave out lyrics and set instrumental:
{
"model": "suno-v6",
"input": {
"prompt": "Calm background music for a 30 second product video about a ceramic coffee mug.",
"style": "ambient electronic, soft pads, slow tempo",
"instrumental": true
},
"max_cost_usd": 0.1
}The same API key also makes the video. Pair a Suno track with a clip from any model in the video model guide, or let an agent do both through the Revana MCP server.
Suno V6 is listed with every other model on the models page, and the full request reference is in the docs. Get an API key to make your first song.
Frequently asked questions
How much does the Suno API cost?
In October 2026, Suno V6 costs $0.08 per job on Revana. Each job returns two tracks, and a failed job is not charged.
Does the Suno API return two songs?
Yes. Every Suno V6 job returns two takes of the same request. Download them from /v1/generations/{id}/content and /content/2.
Can I use my own lyrics with the Suno API?
Yes. Send them in lyrics, with a style for the sound. Section tags such as [Verse] and [Chorus] on their own lines help shape the song.
Can Suno make instrumental music?
Yes. Set instrumental to true and describe the music in prompt and style. Do not send lyrics with an instrumental request.
How long can a Suno prompt be?
Up to 3,000 characters. A longer prompt is refused before anything is charged.
Make a song with one key
One API key for Suno V6 and every video and image model. Prepaid credit from $10, charged only for jobs that succeed.