Seedance 2.5 is live — 30-second cinematic video with native audio & real-person references
rreAPI Docs

Suno V6

Suno V6, V6 Mini and V6 Wild on reAPI — full songs with vocals from a prompt or your own lyrics. Version rules, parameter reference, and billing dimensions for the eight V6 generation operations.

Suno's current model generation, live on reAPI. V6, V6_MINI and V6_WILD are selected per request through the version field, and every generation returns two finished tracks with their own ids. This page covers the eight operations that take a V6 version; the full 18-operation family reference — WAV, stems, MIDI, cover art, music video, lyrics and voice cloning — is at Suno. See pricing on the model page.

Quick example

curl https://reapi.ai/api/v1/audio/generations \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "suno-music",
    "version": "V6",
    "custom_mode": false,
    "instrumental": false,
    "prompt": "A dreamy synthwave track about driving through a neon city at midnight"
  }'
import requests

resp = requests.post(
    "https://reapi.ai/api/v1/audio/generations",
    headers={
        "Authorization": "Bearer YOUR_API_KEY",
        "Content-Type": "application/json",
    },
    json={
        "model": "suno-music",
        "version": "V6",
        "custom_mode": False,
        "instrumental": False,
        "prompt": "A dreamy synthwave track about driving through a neon city at midnight",
    },
    timeout=30,
)
print(resp.json())
const r = await fetch("https://reapi.ai/api/v1/audio/generations", {
  method: "POST",
  headers: {
    Authorization: "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    model: "suno-music",
    version: "V6",
    custom_mode: false,
    instrumental: false,
    prompt: "A dreamy synthwave track about driving through a neon city at midnight",
  }),
});
console.log(await r.json());
package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "io"
    "net/http"
)

func main() {
    body, _ := json.Marshal(map[string]any{
        "model":        "suno-music",
        "version":      "V6",
        "custom_mode":  false,
        "instrumental": false,
        "prompt":       "A dreamy synthwave track about driving through a neon city at midnight",
    })
    req, _ := http.NewRequest("POST",
        "https://reapi.ai/api/v1/audio/generations", bytes.NewReader(body))
    req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
    req.Header.Set("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    out, _ := io.ReadAll(resp.Body)
    fmt.Println(string(out))
}

Authentication

Every call needs a Bearer token. Generate keys at reapi.ai/settings/apikeys.

Authorization: Bearer YOUR_API_KEY

Endpoint

POST /api/v1/audio/generations
GET  /api/v1/tasks/{id}

Submission is async. The POST returns immediately with a task_id; the task endpoint returns the same envelope until completion. Polling does not consume credits. The model field selects the operation, not the model version — the version lives in version.

Versions

ValueCharacter
V6Greater musical expression, more natural vocals, richer detail. The default wherever version is optional.
V6_MINILightweight and fast — balances quality against speed.
V6_WILDPushes creative boundaries for bolder, more distinctive results.

All three take the same request fields, so moving between them changes one value and nothing else.

V4, V4_5, V4_5PLUS, V4_5ALL, V5 and V5_5 are discontinued upstream. The schema still accepts them so older integrations do not break at the gateway, but a request that names one fails at the provider and is refunded. Send a V6 value.

Modes: inspiration vs custom

Generation-class operations (suno-music, suno-upload-cover, suno-mashup) run in one of two modes:

  • custom_mode: false (inspiration)prompt describes the song idea and Suno writes the lyrics. Capped at 3000 characters on suno-music, 500 on suno-upload-cover and suno-mashup.
  • custom_mode: true (custom)prompt is used strictly as lyrics; style and title become required. With instrumental: true, prompt is not needed. duration is honoured only in this mode.

On the V6 family the custom-mode caps are prompt 5000 characters, style 1000 characters, title 80 characters.

Operations

Eight operations take a V6 version. Every one posts to /api/v1/audio/generations and is selected by model.

modelWhat it doesFields beyond the generation set
suno-musicSong from a text idea or your own lyrics
suno-extendContinue a track you generatedaudio_id, default_param_flag, continue_at
suno-upload-coverRe-imagine an uploaded song in a new styleupload_url
suno-upload-extendExtend an uploaded song in its own styleupload_url, default_param_flag, continue_at
suno-add-vocalsSing new vocals over an uploaded backing trackupload_url; prompt, title, style, negative_tags required
suno-add-instrumentalBuild accompaniment under uploaded vocalsupload_url, tags; title, negative_tags required
suno-mashupBlend two uploaded songs into oneupload_url_list (exactly 2)
suno-soundsShort sounds and loops, not songssound_loop, sound_tempo, sound_key, grab_lyrics

version is required on all of them except suno-add-vocals and suno-add-instrumental, where it is optional and defaults to V6.

Full per-operation request tables, plus the ten operations that take no model version (WAV, stem separation, MIDI, cover art, music video, section replace, lyrics writing and the voice-cloning flow), are in the Suno reference.

Request body — suno-music

FieldTypeDefaultNotes
modelstringsuno-music. Required.
versionstringV6 / V6_MINI / V6_WILD. Required. Discontinued values are accepted by the schema and fail upstream.
custom_modebooleanRequired. false = inspiration mode, true = your text is the lyrics.
instrumentalbooleanRequired. true generates a track with no vocals. In custom mode it decides whether prompt is required.
promptstringConditional. Inspiration mode: the idea, max 3000 characters, required. Custom mode: the exact sung lyrics, max 5000 characters, required when instrumental is false.
stylestringConditional. Genre, mood and vocal direction ("synthwave, dreamy, female vocal"). Required in custom mode, max 1000 characters. Ignored in inspiration mode.
titlestringConditional. Track title, max 80 characters. Required in custom mode, ignored in inspiration mode.
negative_tagsstringComma-separated styles or traits to steer away from.
vocal_genderstringm or f. Effective in custom mode; biases the voice rather than guaranteeing it.
style_weightnumber01, up to 2 decimal places. How strictly the result follows style.
weirdness_constraintnumber01, up to 2 decimal places. How far the result may deviate.
audio_weightnumber01, up to 2 decimal places. Balance of audio features against the other inputs.
persona_idstringPersona or cloned-voice id, custom mode only. Persona ids come from POST /api/v1/audio/suno/persona; voice ids from suno-voice-generate.
persona_modelstringstyle_persona or voice_persona — which kind of id persona_id is. V6 family only.
durationinteger20 (upstream)Target track length in seconds, 10360, whole seconds only. Honoured only in custom mode on the V6 family. Omit to let Suno choose.

The other seven operations reuse this field set and add the columns listed in Operations; their own required combinations are documented per operation in the Suno reference.

No data: URIs. reAPI rejects base64 inputs platform-wide. Every media field (upload_url, upload_url_list) must be a public HTTP(S) URL, up to eight minutes of audio. Upload to your own object storage and pass the URL.

Response envelope

Submit and poll share the same shape — only status and output fill in over time.

{
  "id": "task_018f5a3a1b6e7d9f8c2b4d6e8f0a2c4e",
  "model": "suno-music",
  "status": "completed",
  "created_at": 1735000000,
  "output": {
    "audio_urls": ["https://cdn.reapi.ai/media/tasks/.../0.mp3"],
    "tracks": [
      {
        "id": "track id — reuse as audio_id",
        "url": "https://cdn.reapi.ai/media/tasks/.../0.mp3",
        "title": "Midnight Drive",
        "duration": 128.5,
        "tags": "synthwave, dreamy",
        "lyrics": "..."
      }
    ]
  },
  "error": null
}

Poll GET /api/v1/tasks/{id} (see the Tasks reference) until status === "completed". A generation request returns two entries: output.audio_urls[] holds one URL per variation and output.tracks[] is index-aligned with it. Only url is guaranteed — metadata keys are omitted when the upstream returns them empty.

Keep output.tracks[].id. It is the audio_id that suno-extend takes, and the same id feeds WAV conversion, stem separation, MIDI extraction and music-video rendering on the Suno reference page.

Pricing dimensions

Flat rate per request — nothing scales with duration, version or output length. V6, V6_MINI and V6_WILD cost the same. The seven generation-class operations share one rate that covers both returned tracks; suno-sounds has its own, lower rate.

credits = price_usd × 1000     1 credit = $0.001

Current rates are on the model page, which renders them from the live price. Failed and rejected requests are refunded automatically.

Errors

Failures use the standard envelope { "error": { "code", "message", "request_id" } } — see the error catalog.

CaseCodeBehaviour
Schema violation (bad version, missing style in custom mode, over-length prompt)400 at submitNothing is charged
Invalid parameter combination the upstream rejects80007Refunded, upstream reason passed through
Content flagged by moderation80006Refunded
Upstream generation failure80003Refunded
Discontinued version sent80003 / 80007Fails at the provider and is refunded — send a V6 value

Tips

  • Start in inspiration mode: one prompt line is enough. Move to custom mode when the exact words matter.
  • Pick the version per job, not per project: V6_MINI when a queue is backing up, V6_WILD when a predictable result is the wrong result.
  • style reads best as comma-separated genre + mood + vocal tags.
  • duration is ignored outside custom mode. If a length request seems to have no effect, check custom_mode.
  • Need more than six minutes? Generate the opening, then suno-extend it from a second you choose.
  • suno-sounds is the cheap path for stingers, ambience and loops — do not pay song rates for a five-second effect.

Table of Contents