Suno API
Suno audio generation: create songs, lyrics and sound effects, and edit existing tracks (extend, cover, stems, fades, mashup, remaster, MV, persona and more) — one model selected by the `action` field.
- Text to music
- Audio reference
- Multiple actions
Starting at
$0.075
per generation
Suno playground
Input
Custom mode: detailed lyrics / prompt (also the lyrics or sound description)
Audio file URL to operate on
music-video: cover image URL to show inside the ring (default: the source track's cover art when available)
voice: URL to the voice recording
voice: URL to the verification-phrase recording
Public audio URLs. inspo: 1–4 inspiration references; custom-model: 6–24 training tracks (MP3, WAV or M4A).
Runs are charged to your balance.
Output
Output will appear here.
Suno API pricing
| Option | Price per generation |
|---|---|
| music | $0.075 |
| bpm | $0.002 |
| vox | $0.002 |
| wav | $0.002 |
| concat | $0.002 |
| boost-style | $0.002 |
| music-video | $0.002 |
| timestamped-lyrics | $0.002 |
| upload | $0.006 |
| crop | $0.012 |
| lyrics | $0.012 |
| fade-in | $0.012 |
| fade-out | $0.012 |
| remove-section | $0.012 |
| sound | $0.015 |
| voice | $0.024 |
| adjust-speed | $0.036 |
| midi | $0.075 |
| cover | $0.075 |
| extend | $0.075 |
| mashup | $0.075 |
| sample | $0.075 |
| add-stem | $0.075 |
| remaster | $0.075 |
| add-vocals | $0.075 |
| music-cover | $0.075 |
| replace-section | $0.075 |
| add-instrumental | $0.075 |
| inspo | $0.102 |
| stems | $0.15 |
| stems-all | $0.36 |
Quick start
Full API reference →1curl -X POST https://api.api-stock.com/api/v1/generation/create \2 -H "Authorization: Bearer $API_STOCK_KEY" \3 -H "Content-Type: application/json" \4 -d '{5 "model": "suno",6 "input": {7 "action": "music",8 "makeInstrumental": false,9 "maxMode": false,10 "aspectRatio": "9:16",11 "quality": "compact"12 }13 }'
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
action | string | No | music | Suno operationOne of: music, extend, cover, add-instrumental, add-vocals, sound, stems, stems-all, wav, lyrics, voice, timestamped-lyrics, boost-style, music-cover, replace-section, music-video, inspo, upload, remaster, add-stem, vox, remove-section, crop, fade-in, fade-out, adjust-speed, concat, mashup, sample, midi, bpm, custom-model |
mv | string | No | — | Engine version. Audio actions: v6 (default) | v6-wild | v6-mini | custom. The retired versions v3.5 … v5.5 are still accepted and run on v6. lyrics: remi-v1 | default. Not used by stems/stems-all/wav/voice. variety, maxMode, audioFormat, duration and customModelId need a V6 engine (any value except custom). |
custom | boolean | No | — | false for simple mode, true for custom mode |
gptDescriptionPrompt | string | No | — | Simple mode: song / effect description (with optional lyrics) |
prompt | string | No | — | Custom mode: detailed lyrics / prompt (also the lyrics or sound description) |
tags | string | No | — | Custom mode: genre / style tags |
title | string | No | — | Title for the result |
makeInstrumental | boolean | No | false | Generate an instrumental-only track |
negativeTags | string | No | — | Styles to avoid (custom mode / sound) |
personaId | string | No | — | ID of a custom voice (persona) to sing the generated music |
customModel | string | No | — | Inline custom model definition (required when mv=custom) |
customModelId | string | No | — | Id of a reusable custom model created by the `custom-model` action (its `output.customModelId`). Generates in that model's style; cannot be combined with mv or personaId. |
variety | string | No | — | Style variation: off | normal | high | extra | max. V6 generative actions.One of: off, normal, high, extra, max |
maxMode | boolean | No | false | Max mode: higher-quality V6 generation, billed at twice the regular price. Requires custom mode, except on inspo and replace-section. |
audioFormat | string | No | — | Output audio format: mp3 | m4a | wav. V6 generative actions plus sound, remaster, stems and stems-all.One of: mp3, m4a, wav |
duration | number | No | — | music / extend / cover: target length in seconds (10–360), custom mode only. The actual length is decided by the model. |
audioUrl | string | No | — | Audio file URL to operate on |
continueAt | number | No | — | extend: time in seconds where the extension should begin (at least 1 for a sourceTaskId or audioUrl source) |
sourceTaskId | string | No | — | Reference to one of your prior Suno generations (its taskId), used by stateful actions such as extend, music-cover, replace-section, timestamped-lyrics, music-video, voice and wav. |
audioId | string | No | — | The track to operate on, identified by its id (as returned in a prior generation's `output.tracks[].audioId`). A generation usually produces 2 tracks; omit to use the first. |
fullLyrics | string | No | — | replace-section: complete lyrics for the whole track after the edit |
author | string | No | — | music-video: artist / creator name on the cover (max 50) |
domainName | string | No | — | music-video: brand / site watermark at the bottom (max 50) |
aspectRatio | string | No | 9:16 | music-video: output aspect ratioOne of: 9:16, 16:9, 1:1, 3:4, 4:3 |
backgroundColors | string[] | No | — | music-video: 1–4 hex colors for the blurred gradient backdrop (e.g. ["#1B2635", "#8A6A4F"]) |
imageUrl | string | No | — | music-video: cover image URL to show inside the ring (default: the source track's cover art when available) |
quality | string | No | compact | music-video: output quality. `compact` — small share-friendly file (~5MB / 3 min); `high` — sharper 720p-class output at roughly double the size; `max` — 1080p-class, ~4× compactOne of: compact, high, max |
startS | number | No | — | Start time (seconds) of the affected range. Used by remove-section / crop / sample (the range), replace-section (the infill range) and vox / voice-from-track (the vocal window). |
endS | number | No | — | End time (seconds) of the affected range (> startS). See startS for the actions that use it. |
bpm | number | No | — | sound: tempo in BPM |
key | string | No | — | sound: musical key (Major C–B; Minor Cm–Bm) |
type | string | No | — | sound: 'one-shot' or 'loop' (defaults to one-shot)One of: one-shot, loop |
voiceAudioUrl | string | No | — | voice: URL to the voice recording |
verificationAudioUrl | string | No | — | voice: URL to the verification-phrase recording |
phraseId | string | No | — | voice: phrase ID from the verification-phrase endpoint |
name | string | No | — | voice / custom-model: name |
description | string | No | — | voice: description |
styles | string | No | — | voice: genre tags (e.g. 'funk edm') |
singerSkillLevel | string | No | — | voice: singer skill levelOne of: Beginner, Intermediate, Advanced, Professional |
audioUrls | string[] | No | — | Public audio URLs. inspo: 1–4 inspiration references; custom-model: 6–24 training tracks (MP3, WAV or M4A). |
styleWeight | number | No | — | Style weight (0.00–1.00) |
weirdnessConstraint | number | No | — | Creativity / weirdness weight (0.00–1.00) |
audioWeight | number | No | — | Audio weight (0.00–1.00) |
vocalGender | string | No | — | Vocal gender: Male or FemaleOne of: Male, Female |
autoLyrics | boolean | No | — | inspo: rewrite the provided lyrics creatively |
variationCategory | string | No | — | remaster: intensity (subtle / normal / high)One of: subtle, normal, high |
stemType | string | No | — | stems: which stem to extract (e.g. lead_vocal, backing_vocals, drum_kit, bass, piano, electric_guitar). Defaults to lead_vocal. |
voxAudioId | string | No | — | Deprecated and ignored: a persona is now created straight from the track (voice with sourceTaskId), no vox extraction needed. |
durationS | number | No | — | fade-in / fade-out: fade duration in seconds |
speed | number | No | — | adjust-speed: speed multiplier (0.25–4) |
keepPitch | boolean | No | — | adjust-speed: keep the original pitch (defaults to true) |
sourceTaskIds | string[] | No | — | mashup: exactly 2 prior suno generation ids (taskIds) to remix together |
audioIds | string[] | No | — | mashup: parallel array to sourceTaskIds selecting the track in each source by its audioId (as returned in output.tracks[].audioId); omit an entry to use that source's first track |
Frequently asked questions
How much does Suno cost?
Suno starts at $0.075 per generation through the API Stock API. You pay per use from a single prepaid balance — there is no subscription — and the final price scales with parameters such as resolution or duration.
When was Suno released?
Suno was released on September 9, 2026. It is available through the API Stock API with the same key and prepaid balance as every other model.
How do I get an API key for Suno?
Sign up for API Stock, top up your balance by any amount and create an API key in the dashboard — it takes a couple of minutes and needs no contract. The same key works with every model in the catalog, so there is no separate key to obtain for Suno.
How do I call the Suno API?
Send a POST request to https://api.api-stock.com/api/v1/generation/create with your API key and the model id "suno". The call returns a task id you poll, or a webhook callback when the result is ready. A ready-to-run example is in the quick start above.
What input parameters does Suno accept?
Suno accepts 53 input parameters. Their types, defaults and allowed values are listed in the parameters table above.
What happens if a Suno request fails?
API Stock automatically retries the request on a reserve provider. If every provider fails, the charge is refunded to your balance.
Can I use Suno with the same API key as other models?
Yes. Every model on API Stock — video, image, music and chat — shares one API key and one prepaid balance, so you can switch to Suno without new credentials.
Guides
- Music generationWriting songs, jingles and sound effects with Suno — simple versus custom mode, style prompts that work, extending and covering tracks, stems and voice personas.8 min read
- Going to productionKey handling, webhooks over polling, idempotency, terminal states, retry policy by error code, balance monitoring, rate limits and media storage.10 min read