Model guide

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.

Suno V6 on Revana at a glance
ItemDetail
Model idsuno-v6
Makesa song with vocals, or an instrumental
Tracks per jobtwo takes of the same request
Inputsprompt, style, lyrics, instrumental
Prompt lengthup to 3,000 characters
Price$0.08 per job, for both tracks
Routesone 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.

Suno V6 cost by batch size
JobsTracks you getTotal
12$0.08
1020$0.80
100200$8.00
1,0002,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

  • prompt describes the song you want in plain words: the mood, what it is about, who it is for.
  • style names the genre and sound, such as "lo-fi hip hop, soft piano, vinyl crackle" or "upbeat pop punk, female vocals".
  • lyrics are your own words to be sung. Section tags such as [Verse] and [Chorus] on their own lines help the model shape the song.
  • instrumental set to true makes 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.

cURL
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"
Python
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.js
// 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);
Response
{
  "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:

Download both tracks
# 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:

Request body
{
  "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:

Request body
{
  "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.