Speech generation API

Updated 2026-09-18 · Suno-API team

Endpoint description

Speech turns a speech script or a one-line description into "talking/speech" audio, optionally with background music. It suits speeches, toasts, narration, voice-over scripts, audio content and similar scenarios.

Please note: this endpoint generates speech audio, not a sung song (no melody, no sung vocals). If you need singing, use the simple mode generation API or the custom mode generation API.

Endpoint: POST /api/music/speech

Billing: Paid, currently 0.6 ¥ per call by default. Each call usually returns 2 audio items; the amount actually charged follows the back-office price configuration.

Max Mode / Variety: this endpoint supports the optional parameters max_mode and variety (0-4). With max_mode on, this call is billed at 2× the price (0.6 → 1.2 ¥ per call); variety costs nothing extra. What they mean and how to send them is in the "Advanced parameters" section of the New API overview.

Wait times and timeouts (important): this is a synchronous endpoint — an order is only accepted and handed to generation when the response arrives. Measured, most requests return within seconds (1–10 s); but like other synchronous generation endpoints, it can take longer in extreme cases. Set your client timeout to 300 seconds or more; no response does not mean nothing was generated, and do not retry immediately after a timeout (that duplicates the order and charges again). If the connection dropped, confirm later with GET /api/music/songs. See "Wait times and timeout settings" in the New API overview.

Content compliance: the platform checks the script for copyright and content policy. If it is judged to involve copyrighted material (for example quoting someone else's lyrics or the verbatim text of a well-known work), this call fails and the full amount is refunded automatically. Switch to your own wording, or turn the quotation into a paraphrase, and try again.

Request parameters

Headers

Parameter Type Required Notes
Authorization string yes Bearer YOUR_API_KEY
Content-Type string yes application/json

Body parameters

Parameter Type Required Default Notes
script string yes - Full speech text; at most 3000 characters (longer returns 400, not charged)
tone string no - Tone / pace / emotion / setting description, such as "energetic and forceful, speeding up from slow; school hall"; at most 1000 characters
song_title string no - Title; at most 100 characters
gender string no any Speaker gender: m, f (also accepts male, female); you may instead pass the same value as vocal_gender
backing_music boolean no true Whether to add background music; false gives a speech with voice only
model string no suno-v6 Customer-facing model name: suno-v6, suno-v6-wild or suno-v6-mini
wait_completion boolean no false Whether to wait for generation to finish before responding
max_mode boolean no false When on, this call is billed at 2× the price
variety integer no - Style variation 0-4; see "Advanced parameters" in the overview

This endpoint does not support duration: sending it returns HTTP 400 rather than being silently ignored. The speech length is determined by the content length of script.

Request examples

Minimal request (just the script)

curl -X POST https://www.suno-api.io/api/music/speech \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  --max-time 300 \
  -d '{
    "script": "Good morning, everyone! Today my talk is about making the most of our time and pressing on."
  }'

Full request (with tone, gender and background music off)

curl -X POST https://www.suno-api.io/api/music/speech \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  --max-time 300 \
  -d '{
    "script": "Good evening everyone, thank you all for coming to celebrate this special day with us.",
    "tone": "warm and slow, wedding reception",
    "song_title": "Wedding Toast",
    "gender": "f",
    "backing_music": false,
    "model": "suno-v6"
  }'

Python example

import requests

response = requests.post(
    'https://www.suno-api.io/api/music/speech',
    headers={'Authorization': 'Bearer YOUR_API_KEY'},
    json={
        'script': 'Good afternoon, colleagues. Let me report on this week\'s progress.',
        'tone': 'calm and clear, meeting report',
        'gender': 'male',
        'backing_music': True,
    },
    timeout=300,
)
response.raise_for_status()
items = response.json()          # usually 2 items
for item in items:
    print(item['song_id'], item['status'])

Parameter notes

script (the speech, required)

tone (tone and setting, optional)

It describes how to speak rather than what to say. Include four kinds of information: tone, pace/rhythm, emotion, setting.

Energetic and forceful, speeding up from slow, clear pauses; school hall, addressing all students and staff
Warm and soft, an even pace; wedding reception
Composed and restrained, steady and clear; board report

The limit is 1000 characters. When omitted, the model judges from the content of script.

gender / vocal_gender (speaker gender, optional)

backing_music (background music, optional)

model (model, optional)

All three customer-facing models are available at the same price (0.6 ¥ per call). Speech is generated by the Suno v6 family; when omitted it is treated as suno-v6. Unless you have a specific preference, you normally do not need to send this field.

Parameter validation and text limits

The following cases return HTTP 400, and all of them are blocked before billing, so no charge is produced:

Case Error message
script missing, or only whitespace script is required for speech
gender is not m/f/male/female gender must be one of m, f, male, female
backing_music is not a boolean backing_music must be a boolean
An unsupported duration was sent duration is not supported on /api/music/speech

Text field limits

Over-length text also returns HTTP 400 and does not start generation or pre-charge anything. Counting is by Unicode characters (one Chinese character counts as 1), and leading/trailing spaces are included:

Field Limit
script (the speech) 3000 characters
tone (tone description) 1000 characters
song_title (title) 100 characters

The error looks like script must not exceed 3000 characters; received 4120: the first word is the field that exceeded the limit and the end is the actual count, so on a 400 you can trim straight from those two numbers.

Response

The response is an array of songs exactly like that of the other generation endpoints (usually 2 items); save the song_id and use the song query API to check the final status and audio address:

[
  {
    "song_id": "b7529174-b495-465b-8c5e-cd21bea2df8c",
    "song_title": "Making the Most of Our Time",
    "status": "pending",
    "audio_url": "",
    "cover_url": "",
    "video_url": "",
    "model_version": "suno-v6",
    "generation_type": "generate",
    "created_at": "2026-10-08T01:00:00Z"
  }
]
Field Notes
song_id Track ID; used for all later queries and downloads
status pending (submitted, generating), processing, completed, failed
song_title Title (generated by the model when song_title was not sent; may be empty)
audio_url Audio address; empty before generation finishes, and directly playable or downloadable once it does

Generation failure and refunds

When generation fails, the charge for that call is refunded in full automatically; there is no need to contact support. The reason can be seen in the response or in the error_message of the song query API.

The most common failure is the platform judging the content to involve copyrighted material, for example:

Your lyrics contain copyrighted material. Please change it and try again.

In that case, replace the script with your own wording (or turn the quotation into a paraphrase) and submit again.

FAQ

Q: Why is the result "speech" instead of singing? A: This is the speech endpoint, and its output is speech audio. For singing, use the generation or custom mode endpoints.

Q: Why do I get 2 items each time? A: Like the platform's other generation endpoints, one generation produces 2 candidates; query them separately by song_id and keep the one you like.

Q: How do I control the length? A: It is determined by the length of script; this endpoint does not accept a duration parameter.

Q: Can I specify a voice (for example my cloned voice)? A: The current version does not support that. Speech uses a fixed set of speech voices, and gender selects male or female; if you need your own voice, use the related capability of the voice profile creation API (recommended).

Q: What happens if I omit tone? A: The model judges tone and rhythm from the content of script. To reproduce a style reliably, write tone, pace and setting into tone.

Compatible fields

Recommended field Compatible field Notes
gender vocal_gender Pass either one; m/f/male/female are all accepted

New integrations should use snake_case throughout. The other fields (script, tone, song_title, backing_music) have no camelCase aliases.

Next steps

Once you have the song_id:

  1. Use the song query API to check the generation status and audio address;
  2. When it completes, use the song media download and preview API to download or preview it;
  3. For batch downloads or copying to your own storage, see the download centre endpoints.
NextSound effects API

Get an API key

Create an API key in the console after signing up. ¥0.6 per run returns 2 tracks, downloads are unlimited, and no phone number is required.

Get API key Back to overview