The Suno API in 2026: How to Generate Full Songs (and What It Costs)
There is no official Suno API. How to call Suno V4.5 Plus programmatically, what each song costs, and the exact request and polling format.
Suno does not publish an official public API. If you want to generate full songs — vocals, lyrics, structure — from inside your own app, you need a provider that exposes Suno as an endpoint. Here that endpoint is suno, priced at 13.21 credits per generation, which is $0.1321 (1 credit = $0.01), and you are only charged when a song actually comes back.
That's the whole post in one paragraph. The rest is the detail you'll need to ship it.
Why "there's no official API" matters
Most model APIs are a thin wrapper over a documented public endpoint. Suno isn't. That has three practical consequences for you as a builder:
- You can't get an official price list, so per-generation cost is set by whoever fronts the model.
- Reliability is not a given. Music generation is a long-running job, and upstream capacity fluctuates.
- You need an async contract. You will not get a finished song back on an open HTTP connection — it takes far longer than a sane request timeout.
So the two things worth comparing between providers are: what you pay per finished song, and what happens when a generation fails.
What a song costs
| Model | Model id | Price per generation |
|---|---|---|
| Suno | suno | $0.1321 (13.21 credits) |
Two details that change your real cost more than the sticker price:
- Failed, errored or empty generations are refunded automatically. You pay for songs you actually receive — more on that in Never pay for a failed generation.
- Credits never expire. A $5 top-up gets you 500 credits — roughly 37 songs — and it's still there next month. Larger packs add bonus credits (+5% at $500, +10% at $1,250).
Current pricing for every model is always on the pricing page.
How to call it
Suno is a two-step, create-then-poll flow. Create the task:
POST https://you.bot/api/v1/generate
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
{
"modelId": "suno",
"input": {
"modelVersion": "V4_5PLUS",
"customMode": false,
"prompt": "An upbeat synthwave track with driving bass, bright arpeggios and a nostalgic 80s feel.",
"title": "Neon Drive",
"style": "synthwave, energetic, retro",
"instrumental": false
}
}
Response:
{ "taskId": "281e5b0…f39b9", "creditsCharged": 13.21 }
Then poll until it's done:
GET https://you.bot/api/v1/task/{taskId}?model=suno
When state is success, your audio is in resultUrls:
{ "state": "success", "resultUrls": ["https://…"] }
Prefer not to poll? Pass a callbackUrl in the create request and you'll get a signed webhook when the song is ready.
Python, end to end
import os, time, requests
API = "https://you.bot/api/v1"
H = {"Authorization": f"Bearer {os.environ['YOUBOT_API_KEY']}"}
def make_song(prompt, title, style):
r = requests.post(f"{API}/generate", headers=H, json={
"modelId": "suno",
"input": {"modelVersion": "V4_5PLUS", "prompt": prompt,
"title": title, "style": style, "instrumental": False},
}).json()
task_id = r["taskId"]
while True:
t = requests.get(f"{API}/task/{task_id}", headers=H,
params={"model": "suno"}).json()
if t["state"] == "success":
return t["resultUrls"]
if t["state"] in ("failed", "error"):
raise RuntimeError(t) # credits are refunded automatically
time.sleep(5)
print(make_song("lofi beat, rainy night, mellow keys", "Rainy Lofi", "lofi, chill"))
The input parameters that actually matter
| Parameter | Required | Notes |
|---|---|---|
prompt | Yes | Describe the music, not just the topic. Instrumentation and mood beat adjectives. |
title | Yes | Shows up as the track title. |
style | Yes | Comma-separated genre and mood tags, e.g. synthwave, energetic, retro. |
modelVersion | Yes | V5 · V4_5PLUS (default) · V4_5 · V4 |
customMode | No | Default false. Turn on for tighter control over structure and lyrics. |
instrumental | No | true for no vocals. |
vocalGender | No | m or f |
styleWeight, audioWeight, weirdnessConstraint | No | 0–1 dials. Nudge, don't slam. |
negativeTags | No | Styles to steer away from. |
callbackUrl | No | HTTPS URL for a signed completion webhook. |
Full parameter reference, plus an in-browser playground you can test with your own prompt before writing any code, is on the Suno model page. There's also a machine-readable version at /models/suno/md if you'd rather point an LLM at the docs.
Errors you should handle
| Code | Meaning |
|---|---|
| 400 / 422 | Bad or missing parameters — check prompt, title, style |
| 401 | API key problem |
| 402 | Not enough credits |
| 429 | Rate limited — back off and retry |
| 500 | Upstream or internal error — the credits come back |
Three things I'd do before shipping
Treat generation as a queue, not a request. Songs take minutes. Kick off the task, store the taskId, and let a webhook or worker finish the job. Never block a user-facing request on it.
Log creditsCharged per task. It's in the create response. Sum it per user or per feature and you have real unit economics without building a metering system.
Keep a fallback route. If you already call another provider, keep that key. Route primary traffic to the cheaper endpoint, fall back on failure — you capture the savings and don't bet uptime on one vendor.
FAQ
Is there an official Suno API?
No. Suno doesn't publish a public API, so programmatic access goes through a provider that exposes it as an endpoint — here that's the model id suno.
How much does one song cost? $0.1321 per generation (13.21 credits) as of 15 August 2026. Failed or empty generations are refunded automatically, so you only pay for songs you receive.
Can I generate instrumental-only tracks?
Yes — set "instrumental": true in the input object.
How long does a generation take?
Minutes, not seconds. Use the callbackUrl webhook or poll GET /api/v1/task/{taskId} instead of holding a request open.
Can I commercially use the output? That depends on Suno's own terms for the model tier you use — check them before you ship, because the API provider doesn't change the underlying licence.
What else can I call with the same key?
The same endpoint fronts 80+ models across text, image, video and music — you switch by changing modelId. See the music models, the full catalog, or the cheapest AI APIs in 2026.