Suno Music Generation API
Use POST /suno/mp3 with the completed song's audio_id. Set async=true to receive a task ID and poll /suno/tasks; use the final returned audio_url. See the MP3 integration guide .
Suno AI music and lyrics generation service.
API home page: Ace Data Cloud - Suno Music Generation
Keywords: suno-api, ai-music, music-generation, lyrics-generation, rest-api, ai-api, aiaudio, AI API, REST API, Developer API, Ace Data Cloud
Why Use Suno Music Generation on Ace Data Cloud
Unified developer platform with one API key, billing system, and usage tracking
Production-ready AI API endpoints served from https://api.acedata.cloud
English integration guides, API references, and service documentation
Global-ready workflow for developers building chat, image, video, music, and search products
Create a reusable music model from 6–24 authorized audio files, query its status, and generate new tracks through POST /suno/custom-models. See the custom models integration guide .
Use POST /suno/projects to manage versioned multitrack projects. The public API reference and integration guide contain the complete schema and recorded examples.
Send Authorization: Bearer YOUR_API_KEY, Content-Type: application/json, and an Idempotency-Key of 1–128 characters for every action except retrieve. Use a new key for each new operation. The same key and request replay the original success or failure without regenerating; changing the request under the same key returns 409. If submission times out, query the original task or replay with the same key before considering a new paid operation.
Action
Required inputs beyond action
Result and next step
create
title (1–200 characters)
Synchronous; retain data.id as the project ID.
retrieve
id
Synchronous; read the latest data.version_id and complete data.state.
save
id, complete state, latest version_id
Synchronous even if a task_id is returned; use the new version. Only the first save of an empty project may omit version_id.
upload
id, version_id, public HTTPS audio_url
Async; read response.data.candidate.audio_id from the completed task.
add_track
id, version_id, completed audio_id
Async; add the source audio and retain the new version.
render
id, version_id, title
Async; read response.data.audio_id and audio_url for the mix.
generate_track
id, version_id, source_audio_id, render_audio_id, model, start_seconds, end_seconds, stem_control_tags
Async; produces candidates without changing the project. Save an empty target track before generating.
replace_section
id, version_id, source_audio_id, model, start_seconds, end_seconds
Async; produces replacement candidates without changing the project; no render reference required.
commit_candidate
id, version_id, operation_id, candidate_id, track_id
Async; submit a selected candidate and retain the new version.
remove_track
id, version_id, track_id
Synchronous; retain the new version.
For async actions, async=false does not make them synchronous. Poll POST /suno/tasks with {"action":"retrieve","id":"TASK_ID"}, or set callback_url. A task ID means accepted, not successful: wait for finished_at and check response.success; failures are in response.error. See the task result guide .
save replaces the entire state, not a partial patch. Retrieve it first, edit only the intended fields, and preserve unknown fields. Save a uniquely identified audio track with type:"audio" and clips:[] before generating a new-track candidate, because candidates are tied to that saved version. Do not create the target track after generation. Read operation_id and candidates[].id from the completed generation task, and track_id from the project's state.tracks[].id; none of these is the project ID or the new submission's task ID.
Timing and optional controls
start_seconds / end_seconds select a range in the source audio, with 0 ≤ start_seconds < end_seconds. Replacement must not extend past the source duration. The selected range does not guarantee candidate output length.
start_beats / end_beats are project timeline beats. state.timing.bps is positive beats per second, default 2. Clip fields startBeats, endBeats, and readStartBeats also use project beats. Adding 41 seconds at beat 0 gives a default end of beat 82 at 2 bps.
add_track accepts name, color (default #7251F7), title, start_beats (default 0), end_beats, and nonnegative gain (default 1). The default end is start plus audio duration times bps.
Generation and replacement accept title, tags, and negative_tags. generate_track additionally accepts prompt, batch_size (1–4, default 2), instrumental (default true), and vocal_gender (f, m, or unspecified, default unspecified). stem_control_tags is a description such as add Piano, not an enum.
For replacement, prompt supplies source lyrics or context, while replacement_lyrics supplies the new lyrics. fixed defaults to false; fixed=true requires a range shorter than 26 seconds and remains unverified in the recorded workflow.
For new-track commits, optional name, nonnegative gain (default 1), and non-overlapping start_beats / end_beats control placement. Defaults use the source clip's start and the candidate's actual duration. Replacement commits target the original track containing the unique source clip and must omit start_beats and end_beats.
Rendering accepts lyrics (default [Instrumental]), tags, and an optional beat range. Without a range it uses the earliest and latest audible clips; muted clips are excluded and solo tracks take precedence. An empty or inaudible project cannot be rendered.
The generation model enums are chirp-v3-5, chirp-v4, chirp-v4-5, chirp-v4-5-plus, chirp-v5, chirp-v5-5, chirp-v6, chirp-v6-wild, and chirp-v6-mini. Passing validation does not guarantee that the model supports the selected operation; check the terminal task result. There is no automatic model substitution.
Beta limitations and recovery
The recorded October 9, 2026 workflow generated and committed a new-track candidate, but rendering the project containing it failed with studio_audio_unavailable. Removing that candidate track and rendering the latest version succeeded. The same workflow produced 36-second replacement candidates for an 8-second selection in a 41-second source; committing one failed with bad_request, leaving the original track unchanged. Candidate generation, a playable URL, or a successful commit is not proof that the whole project can be rendered.
On project_version_conflict or project_candidate_stale (409), retrieve the latest project and replan; do not replay stale candidates. If a candidate duration cannot safely match the source or selected section, retain the original track and inspect the candidate rather than forcing guessed beat positions. For audio-access failures, preserve the project and check the source and trace_id. Do not automatically repeat paid generation to resolve these failures. Projects and candidates are bound to their application and execution environment; do not assume cross-application reuse or automatic failover. Use only audio you have rights to process and retain final exported audio URLs.
<style>
.suno-page * { box-sizing: border-box; }
.suno-page h1, .suno-page h2, .suno-page h3, .suno-page h4, .suno-page h5, .suno-page h6, .suno-page p, .suno-page ul, .suno-page ol, .suno-page li, .suno-page pre, .suno-page blockquote, .suno-page table, .suno-page td, .suno-page th { margin: 0; padding: 0; }
.suno-page {
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
color: var(--el-text-color-primary);
background: var(--el-bg-color);
line-height: 1.6;
}
.suno-page a { text-decoration: none; color: inherit; }
.suno-page a:hover { text-decoration: none; }
.suno-page ul { list-style: none; }
.markdown-body .suno-page a { color: inherit !important; text-decoration: none !important; }
.markdown-body .suno-page a:hover { text-decoration: none !important; }
.markdown-body .suno-page a.s-btn-primary,
.markdown-body .suno-page a.price-btn-fill,
.markdown-body .suno-page a.btn-cta-light { color: #ffffff !important; }
.markdown-body .suno-page a.s-btn-secondary { color: var(--el-text-color-primary) !important; }
.markdown-body .suno-page a.price-btn-out { color: var(--el-text-color-primary) !important; }
.markdown-body .suno-page a.btn-cta-ghost { color: #94a3b8 !important; }
.markdown-body .suno-page a.btn-cta-ghost:hover { color: #e2e8f0 !important; }
.markdown-body .suno-page h1, .markdown-body .suno-page h2 { border-bottom: none !important; padding-bottom: 0 !important; }
.s-container { max-width: 1200px; margin: 0 auto; padding: 0 24px; }
.s-container-narrow { max-width: 800px; margin: 0 auto; padding: 0 24px; }
.s-container-wide { max-width: 1100px; margin: 0 auto; padding: 0 32px; }
.s-section { padding: 80px 0; }
.s-section-lg { padding: 100px 0; }
.s-section-sm { padding: 48px 0; }
.s-bg-white { background: var(--el-bg-color); }
.s-bg-gray { background: var(--el-bg-color-page); }
.s-bg-dark { background: #0f172a; color: #f8fafc; }
.s-header { text-align: center; margin-bottom: 64px; }
.s-header h2 {
font-size: clamp(28px, 4vw, 40px);
font-weight: 700;
color: var(--el-text-color-primary);
letter-spacing: normal;
margin-bottom: 20px;
line-height: 1.15;
}
.s-header p {
font-size: clamp(16px, 2vw, 18px);
color: var(--el-text-color-regular);
max-width: 640px;
margin: 0 auto;
line-height: 1.6;
}
.s-bg-dark .s-header h2 { color: #f8fafc; }
.s-bg-dark .s-header p { color: var(--el-text-color-secondary); }
.suno-page .s-btn-primary {
display: inline-flex; align-items: center; gap: 6px;
padding: 14px 28px;
background: #277186; color: #ffffff !important;
border-radius: 9999px; font-size: 15px; font-weight: 600;
transition: background 0.2s, transform 0.15s;
border: none; cursor: pointer;
text-decoration: none !important;
}
.suno-page .s-btn-primary:hover { background: #1f5a6b; transform: translateY(-1px); text-decoration: none !important; }
.suno-page .s-btn-secondary {
display: inline-flex; align-items: center; gap: 6px;
padding: 14px 28px;
background: var(--el-bg-color); color: var(--el-text-color-primary) !important;
border: 1px solid var(--el-border-color-light);
border-radius: 9999px; font-size: 15px; font-weight: 600;
transition: border-color 0.2s, background 0.2s;
cursor: pointer;
text-decoration: none !important;
}
.suno-page .s-btn-secondary:hover { background: var(--el-bg-color-page); text-decoration: none !important; }
.suno-hero {
padding: 100px 0 80px;
text-align: center;
background: var(--el-bg-color);
position: relative;
overflow: hidden;
}
.suno-hero::before {
content: '';
position: absolute;
top: -200px; left: 50%;
transform: translateX(-50%);
width: 900px; height: 500px;
background: radial-gradient(ellipse, rgba(39, 113, 134, 0.06) 0%, transparent 70%);
pointer-events: none;
}
.hero-badge {
display: inline-flex; align-items: center; gap: 8px;
padding: 6px 16px;
background: var(--el-bg-color-page); border: 1px solid var(--el-border-color-light);
border-radius: 9999px; font-size: 13px; font-weight: 600; color: var(--el-text-color-regular);
margin-bottom: 28px;
}
.hero-badge .badge-dot {
width: 6px; height: 6px; background: #10b981; border-radius: 50%;
display: inline-block;
}
.suno-hero h1 {
font-size: clamp(36px, 5vw, 60px);
font-weight: 700; line-height: 1.05;
letter-spacing: normal; color: var(--el-text-color-primary);
margin-bottom: 20px;
position: relative;
}
.suno-hero h1 span { color: #277186; }
.suno-page .hero-subtitle {
font-size: clamp(16px, 2vw, 20px);
color: var(--el-text-color-regular); line-height: 1.6;
max-width: 620px; margin: 0 auto 56px;
position: relative;
}
.hero-actions {
display: flex; gap: 12px; justify-content: center;
flex-wrap: wrap; margin-bottom: 56px; position: relative;
}
.hero-highlights {
display: flex; align-items: center; justify-content: center;
gap: 16px; flex-wrap: wrap; position: relative;
}
.hero-highlights .h-item { font-size: 14px; color: var(--el-text-color-regular); font-weight: 500; }
.hero-highlights .h-div { width: 1px; height: 16px; background: var(--el-border-color-light); }
@media (max-width: 640px) {
.hero-highlights .h-div { display: none; }
.hero-highlights { gap: 8px 16px; }
.hero-actions { flex-direction: column; align-items: center; }
.hero-actions a { width: 100%; max-width: 280px; justify-content: center; }
}
.suno-stats {
padding: 48px 0;
background: var(--el-bg-color-page);
border-top: 1px solid var(--el-border-color-lighter);
border-bottom: 1px solid var(--el-border-color-lighter);
}
.stats-grid {
display: grid; grid-template-columns: repeat(4, 1fr);
gap: 32px; text-align: center;
}
.stat-icon { font-size: 28px; margin-bottom: 12px; }
.stat-val {
font-size: clamp(28px, 4vw, 40px);
font-weight: 700; color: var(--el-text-color-primary);
letter-spacing: normal; margin-bottom: 4px;
}
.stat-lbl { font-size: 14px; color: var(--el-text-color-secondary); font-weight: 500; }
@media (max-width: 768px) { .stats-grid { grid-template-columns: repeat(2, 1fr); gap: 24px; } } @media (max-width: 480px) { .stats-grid { grid-template-columns: 1fr; gap: 20px; } }
.features-grid {
display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px;
}
.feat-card {
padding: 32px 28px;
border: none; border-radius: 20px; box-shadow: 0 2px 12px 0 rgba(0,0,0,0.08);
background: var(--el-bg-color);
transition: border-color 0.2s, box-shadow 0.2s, transform 0.15s;
}
.feat-card:hover { box-shadow: 0 8px 24px 0 rgba(0,0,0,0.12);
transform: translateY(-2px);
}
.feat-icon { font-size: 32px; margin-bottom: 16px; }
.feat-card h3 { font-size: 18px; font-weight: 700; color: var(--el-text-color-primary); margin-bottom: 8px; }
.feat-card p { font-size: 15px; color: var(--el-text-color-regular); line-height: 1.6; }
@media (max-width: 1024px) { .features-grid { grid-template-columns: repeat(2, 1fr); } } @media (max-width: 640px) { .features-grid { grid-template-columns: 1fr; } } .code-split {
display: flex; gap: 48px; align-items: center;
}
.code-left { flex: 1; min-width: 0; }
.code-right { flex: 1; }
.code-wrap {
border-radius: 16px !important; overflow: hidden !important;
border: 1px solid #334155 !important; background: #0f172a !important;
}
.markdown-body .suno-page .code-wrap {
border-radius: 16px !important; overflow: hidden !important;
border: 1px solid #334155 !important; background: #0f172a !important;
}
.code-bar {
display: flex !important; align-items: center !important; justify-content: space-between !important;
padding: 12px 20px !important; background: #1e293b !important;
border-bottom: 1px solid #334155 !important;
}
.code-dots { display: flex; gap: 6px; }
.code-dots i {
width: 10px; height: 10px; border-radius: 50%;
display: inline-block;
}
.code-dots .r { background: #ef4444; }
.code-dots .y { background: #f59e0b; }
.code-dots .g { background: #10b981; }
.code-lang {
font-size: 12px; color: var(--el-text-color-secondary); font-weight: 600;
text-transform: uppercase; letter-spacing: 0.05em;
}
.code-block {
padding: 24px !important; margin: 0 !important; overflow-x: auto !important;
font-family: 'JetBrains Mono', 'Fira Code', 'SF Mono', monospace !important;
font-size: 13.5px !important; line-height: 1.7 !important; color: #e2e8f0 !important;
white-space: pre !important; background: transparent !important;
border: none !important; border-radius: 0 !important;
}
.markdown-body .suno-page .code-block {
padding: 24px !important; margin: 0 !important; overflow-x: auto !important;
font-family: 'JetBrains Mono', 'Fira Code', 'SF Mono', monospace !important;
font-size: 13.5px !important; line-height: 1.7 !important; color: #e2e8f0 !important;
white-space: pre !important; background: transparent !important;
border: none !important; border-radius: 0 !important;
}
.code-right h2 {
font-size: clamp(24px, 3vw, 32px);
font-weight: 700; color: var(--el-text-color-primary); margin-bottom: 12px;
letter-spacing: normal;
}
.code-right > p { font-size: 16px; color: var(--el-text-color-regular); line-height: 1.6; margin-bottom: 32px; }
.explain-steps { display: flex; flex-direction: column; gap: 20px; }
.explain-step { display: flex; gap: 16px; align-items: flex-start; }
.step-num {
width: 32px; height: 32px; border-radius: 50%;
background: var(--el-bg-color-page); border: 1px solid var(--el-border-color-light);
display: flex; align-items: center; justify-content: center;
font-size: 14px; font-weight: 700; color: var(--el-text-color-regular);
flex-shrink: 0;
}
.step-text h4 { font-size: 15px; font-weight: 700; color: var(--el-text-color-primary); margin-bottom: 2px; }
.step-text p { font-size: 14px; color: var(--el-text-color-secondary); line-height: 1.5; }
@media (max-width: 768px) {
.code-split { flex-direction: column; }
.code-left { order: 2; }
.code-right { order: 1; }
} .actions-grid {
display: grid; grid-template-columns: repeat(4, 1fr); gap: 20px;
}
.act-card {
padding: 28px 24px; background: var(--el-bg-color);
border: none; border-radius: 20px; box-shadow: 0 2px 12px 0 rgba(0,0,0,0.08);
text-align: center;
transition: border-color 0.2s, box-shadow 0.2s, transform 0.15s;
}
.act-card:hover { box-shadow: 0 8px 24px 0 rgba(0,0,0,0.12);
transform: translateY(-2px);
}
.act-icon { font-size: 36px; margin-bottom: 16px; }
.act-card h3 { font-size: 17px; font-weight: 700; color: var(--el-text-color-primary); margin-bottom: 8px; }
.act-card p { font-size: 14px; color: var(--el-text-color-regular); line-height: 1.6; }
@media (max-width: 1024px) { .actions-grid { grid-template-columns: repeat(2, 1fr); } } @media (max-width: 480px) { .actions-grid { grid-template-columns: 1fr; } } .usecases-grid {
display: grid; grid-template-columns: repeat(4, 1fr); gap: 20px;
}
.uc-card {
padding: 28px 24px; background: var(--el-bg-color);
border: none; border-radius: 20px; box-shadow: 0 2px 12px 0 rgba(0,0,0,0.08);
text-align: center;
transition: border-color 0.2s, box-shadow 0.2s, transform 0.15s;
}
.uc-card:hover { box-shadow: 0 8px 24px 0 rgba(0,0,0,0.12);
transform: translateY(-2px);
}
.uc-icon { font-size: 36px; margin-bottom: 16px; }
.uc-card h3 { font-size: 17px; font-weight: 700; color: var(--el-text-color-primary); margin-bottom: 8px; }
.uc-card p { font-size: 14px; color: var(--el-text-color-regular); line-height: 1.6; }
@media (max-width: 1024px) { .usecases-grid { grid-template-columns: repeat(2, 1fr); } } @media (max-width: 480px) { .usecases-grid { grid-template-columns: 1fr; } }
.steps-row {
display: flex; align-items: flex-start; justify-content: center;
margin-bottom: 48px;
}
.stp-card { flex: 1; max-width: 320px; text-align: center; padding: 0 24px; }
.stp-num {
font-size: clamp(48px, 6vw, 72px);
font-weight: 700; color: #e2e8f0;
letter-spacing: -0.04em; line-height: 1;
margin-bottom: 20px;
}
.stp-card h3 { font-size: 18px; font-weight: 700; color: var(--el-text-color-primary); margin-bottom: 10px; }
.stp-card p { font-size: 15px; color: var(--el-text-color-regular); line-height: 1.6; }
.stp-conn {
width: 60px; height: 2px; background: var(--el-border-color-light);
margin-top: 36px; flex-shrink: 0;
}
.steps-cta { text-align: center; }
@media (max-width: 768px) {
.steps-row { flex-direction: column; align-items: center; gap: 32px; }
.stp-conn { width: 2px; height: 32px; margin: 0; }
.stp-card { max-width: 100%; }
} .cmp-wrap { overflow-x: auto; -webkit-overflow-scrolling: touch; }
.suno-page .cmp-table {
display: table !important;
width: 100%; max-width: 860px; margin: 0 auto;
border-collapse: collapse; font-size: 15px;
}
.suno-page .cmp-table th, .cmp-table td {
padding: 16px 20px; text-align: center;
border-bottom: 1px solid var(--el-border-color-light);
}
.suno-page .cmp-table th {
font-weight: 700; color: var(--el-text-color-regular); font-size: 14px;
text-transform: uppercase; letter-spacing: 0.04em;
background: var(--el-bg-color-page);
}
.suno-page .cmp-table td:first-child, .cmp-table th:first-child {
text-align: left; font-weight: 600; color: var(--el-text-color-primary);
}
.cmp-us { font-weight: 700; }
.cmp-brand { font-weight: 700; color: var(--el-text-color-primary); }
.ck { color: #10b981; font-weight: 700; font-size: 18px; }
.cx { color: #d1d5db; font-weight: 700; font-size: 18px; }
@media (max-width: 640px) {
.cmp-table th, .cmp-table td { padding: 12px 10px; font-size: 13px; }
} .models-grid {
display: grid; grid-template-columns: repeat(3, 1fr);
gap: 24px; max-width: 960px; margin: 0 auto;
}
.mdl-card {
padding: 32px 28px;
border: none; border-radius: 20px; box-shadow: 0 2px 12px 0 rgba(0,0,0,0.08);
background: var(--el-bg-color); position: relative;
}
.mdl-card.mdl-rec { border-color: #277186; border-width: 2px; }
.mdl-rec-badge {
position: absolute; top: -12px; left: 50%;
transform: translateX(-50%);
padding: 4px 14px; background: #277186; color: #ffffff;
border-radius: 9999px; font-size: 12px; font-weight: 700;
text-transform: uppercase; letter-spacing: 0.04em;
}
.mdl-head { display: flex; align-items: center; gap: 10px; margin-bottom: 12px; }
.mdl-head h3 { font-size: 20px; font-weight: 700; color: var(--el-text-color-primary); }
.mdl-tag {
padding: 3px 10px; background: var(--el-bg-color-page); border-radius: 9999px;
font-size: 11px; font-weight: 700; color: var(--el-text-color-regular);
text-transform: uppercase; letter-spacing: 0.04em;
}
.mdl-tag-blue { background: #eff6ff; color: #2563eb; }
.mdl-tag-purple { background: #e9f1f3; color: #277186; }
.suno-page .mdl-desc { font-size: 15px; color: var(--el-text-color-regular); line-height: 1.6; margin-bottom: 20px; }
.mdl-feats { display: flex; flex-direction: column; gap: 8px; }
.mdl-feats li { font-size: 14px; color: var(--el-text-color-regular); line-height: 1.4; }
@media (max-width: 768px) { .models-grid { grid-template-columns: 1fr; } } .price-grid {
display: grid !important; grid-template-columns: repeat(2, 1fr) !important;
gap: 24px !important; max-width: 720px !important; margin: 0 auto !important;
align-items: start;
}
.price-card {
padding: 36px 32px;
border: 1px solid var(--el-border-color-light); border-radius: 20px;
background: var(--el-bg-color); position: relative;
}
.price-card-feat {
border: 2px solid #277186;
box-shadow: 0 8px 32px rgba(0,0,0,0.08);
transform: scale(1.03);
}
.price-feat-badge {
position: absolute; top: -13px; left: 50%;
transform: translateX(-50%);
padding: 5px 18px; background: #277186; color: #ffffff;
border-radius: 9999px; font-size: 12px; font-weight: 700;
text-transform: uppercase; letter-spacing: 0.04em;
white-space: nowrap;
}
.price-tier {
font-size: 16px; font-weight: 700; color: var(--el-text-color-regular);
text-transform: uppercase; letter-spacing: 0.06em; margin-bottom: 12px;
}
.price-amt {
font-size: clamp(36px, 5vw, 48px);
font-weight: 700; color: var(--el-text-color-primary); letter-spacing: normal;
}
.price-per { font-size: 16px; color: var(--el-text-color-secondary); font-weight: 500; }
.suno-page .price-desc { font-size: 14px; color: var(--el-text-color-secondary); margin-bottom: 24px; margin-top: 8px; }
.suno-page .price-feats { display: flex; flex-direction: column; gap: 10px; margin-bottom: 36px; }
.suno-page .price-feats li { font-size: 14px; color: var(--el-text-color-regular); line-height: 1.4; display: flex; align-items: center; gap: 8px; }
.price-ck { color: #10b981; font-weight: 700; font-size: 14px; flex-shrink: 0; }
.price-btn {
display: block; text-align: center; padding: 14px 0;
border-radius: 9999px; font-size: 15px; font-weight: 600;
transition: background 0.2s, border-color 0.2s, transform 0.15s;
width: 100%; cursor: pointer;
}
.suno-page .price-btn-fill { background: #277186; color: #ffffff !important; border: none; text-decoration: none !important; }
.suno-page .price-btn-fill:hover { background: #1f5a6b; transform: translateY(-1px); text-decoration: none !important; }
.suno-page .price-btn-out { background: var(--el-bg-color); color: var(--el-text-color-primary) !important; border: 1px solid var(--el-border-color-light); text-decoration: none !important; }
.suno-page .price-btn-out:hover { background: var(--el-bg-color-page); text-decoration: none !important; }
@media (max-width: 768px) {
.price-grid { grid-template-columns: 1fr; }
.price-card-feat { transform: none; }
}
.faq-list { display: flex; flex-direction: column; }
.faq-item { border-bottom: 1px solid var(--el-border-color-light); }
.faq-item:first-child { border-top: 1px solid #e5e7eb; }
.faq-q {
display: flex; justify-content: space-between; align-items: center;
padding: 20px 0; cursor: pointer;
font-size: 16px; font-weight: 600; color: var(--el-text-color-primary);
list-style: none; user-select: none;
transition: color 0.2s;
}
.faq-q::-webkit-details-marker { display: none; }
.faq-q:hover { color: var(--el-text-color-primary); }
.faq-chev { font-size: 18px; color: var(--el-text-color-secondary); transition: transform 0.2s; flex-shrink: 0; }
.faq-item[open] .faq-chev { transform: rotate(180deg); }
.faq-a { padding: 0 0 20px; }
.faq-a p { font-size: 15px; color: var(--el-text-color-regular); line-height: 1.7; }
.rel-grid {
display: grid; grid-template-columns: repeat(2, 1fr);
gap: 16px; max-width: 800px; margin: 0 auto;
}
.rel-card {
display: flex; align-items: center; gap: 16px;
padding: 20px 24px; background: var(--el-bg-color);
border: none; border-radius: 20px; box-shadow: 0 2px 12px 0 rgba(0,0,0,0.08);
transition: border-color 0.2s, box-shadow 0.2s;
}
.rel-card:hover { box-shadow: 0 4px 12px rgba(0,0,0,0.05); }
.rel-icon { font-size: 28px; flex-shrink: 0; }
.rel-info { flex: 1; min-width: 0; }
.rel-info h3 { font-size: 15px; font-weight: 700; color: var(--el-text-color-primary); margin-bottom: 2px; }
.rel-info p { font-size: 13px; color: var(--el-text-color-secondary); line-height: 1.4; }
.rel-arrow {
font-size: 18px; color: #cbd5e1; flex-shrink: 0;
transition: color 0.2s, transform 0.2s;
}
.rel-card:hover .rel-arrow { color: var(--el-text-color-regular); transform: translateX(3px); }
@media (max-width: 640px) { .rel-grid { grid-template-columns: 1fr; } } .suno-cta {
padding: 100px 0; background: #0f172a;
text-align: center; position: relative; overflow: hidden;
}
.suno-cta::before {
content: '';
position: absolute; top: -100px; left: 50%;
transform: translateX(-50%);
width: 700px; height: 400px;
background: radial-gradient(ellipse, rgba(39, 113, 134, 0.12) 0%, transparent 70%);
pointer-events: none;
}
.suno-cta h2 {
font-size: clamp(28px, 4vw, 44px);
font-weight: 700; color: #f8fafc;
letter-spacing: normal; margin-bottom: 28px;
position: relative;
}
.suno-cta > div > p {
font-size: clamp(16px, 2vw, 18px);
color: var(--el-text-color-secondary); max-width: 520px;
margin: 0 auto 56px; line-height: 1.6;
position: relative;
}
.cta-actions {
display: flex; gap: 12px; justify-content: center;
flex-wrap: wrap; position: relative;
}
.suno-page .btn-cta-light {
display: inline-flex; align-items: center; gap: 6px;
padding: 14px 32px; background: #277186; color: #ffffff !important;
border-radius: 9999px; font-size: 15px; font-weight: 700;
transition: background 0.2s, transform 0.15s;
text-decoration: none !important;
}
.suno-page .btn-cta-light:hover { background: #1f5a6b; transform: translateY(-1px); text-decoration: none !important; }
.suno-page .btn-cta-ghost {
display: inline-flex; align-items: center;
padding: 14px 32px; background: transparent; color: #94a3b8 !important;
border: 1px solid #334155; border-radius: 9999px;
font-size: 15px; font-weight: 600;
transition: border-color 0.2s, color 0.2s;
text-decoration: none !important;
}
.suno-page .btn-cta-ghost:hover { border-color: var(--el-text-color-regular); color: #e2e8f0 !important; text-decoration: none !important; }
.suno-page code {
background: #dbeafe !important;
padding: 2px 8px !important;
border-radius: 5px !important;
font-size: 13px !important;
font-family: 'JetBrains Mono', 'Fira Code', 'SF Mono', monospace !important;
color: #1e40af !important;
border: 1px solid #bfdbfe !important;
}
.s-text-dark { color: var(--el-text-color-primary); }
.s-text-brand { color: #277186; }
.s-section-body { font-size: 16px; color: var(--el-text-color-regular); line-height: 1.8; text-align: center; max-width: 680px; margin: 0 auto; }
.s-section-body p + p { margin-top: 16px; }
.s-text-muted { color: var(--el-text-color-secondary); }
.tag-row {
display: flex; gap: 8px; flex-wrap: wrap;
justify-content: center; margin-top: 16px;
}
.tag-item
```css
{
padding: 4px 12px; background: var(--el-bg-color-page);
border: 1px solid var(--el-border-color-light); border-radius: 9999px;
font-size: 12px; font-weight: 600; color: var(--el-text-color-regular);
}
html.dark .suno-page { background: var(--el-bg-color); color: var(--el-text-color-primary); }
html.dark .suno-page a { color: inherit; }
html.dark .markdown-body .suno-page a { color: inherit !important; }
html.dark .markdown-body .suno-page a.s-btn-primary,
html.dark .markdown-body .suno-page a.price-btn-fill,
html.dark .markdown-body .suno-page a.btn-cta-light { color: #ffffff !important; }
html.dark .markdown-body .suno-page a.s-btn-secondary { color: var(--el-text-color-primary) !important; }
html.dark .markdown-body .suno-page a.price-btn-out { color: var(--el-text-color-primary) !important; }
html.dark .markdown-body .suno-page a.btn-cta-ghost { color: #94a3b8 !important; }
html.dark .markdown-body .suno-page a.btn-cta-ghost:hover { color: var(--el-text-color-primary) !important; }
html.dark .s-bg-white { background: var(--el-bg-color); }
html.dark .s-bg-gray { background: var(--el-bg-color-page); }
html.dark .s-bg-dark { background: var(--el-bg-color); }
html.dark .s-header h2 { color: var(--el-text-color-primary); }
html.dark .s-header p { color: var(--el-text-color-secondary); }
html.dark .suno-page .s-btn-primary { background: #277186; color: #ffffff !important; }
html.dark .suno-page .s-btn-primary:hover { background: #1f5a6b; }
html.dark .suno-page .s-btn-secondary {
background: #1e293b; color: var(--el-text-color-primary) !important;
border-color: #475569;
}
html.dark .suno-page .s-btn-secondary:hover { background: var(--el-border-color); border-color: var(--el-text-color-regular); }
html.dark .suno-hero { background: var(--el-bg-color); }
html.dark .suno-hero::before {
background: radial-gradient(ellipse, rgba(39, 113, 134, 0.15) 0%, transparent 70%);
}
html.dark .hero-badge { background: var(--el-bg-color-page); border-color: var(--el-border-color); color: var(--el-text-color-secondary); }
html.dark .suno-hero h1 { color: var(--el-text-color-primary); }
html.dark .suno-hero h1 span { color: #3b9ab5; }
html.dark .suno-page .hero-subtitle { color: var(--el-text-color-secondary); }
html.dark .hero-highlights .h-item { color: var(--el-text-color-secondary); }
html.dark .hero-highlights .h-div { background: var(--el-border-color); }
html.dark .suno-stats { background: var(--el-bg-color-page); border-color: var(--el-border-color); }
html.dark .stat-val { color: var(--el-text-color-primary); }
html.dark .stat-lbl { color: var(--el-text-color-regular); }
html.dark .feat-card {
background: var(--el-bg-color-page); border-color: var(--el-border-color);
}
html.dark .feat-card:hover { border-color: var(--el-text-color-regular); box-shadow: 0 4px 16px rgba(0,0,0,0.3); }
html.dark .feat-card h3 { color: var(--el-text-color-primary); }
html.dark .feat-card p { color: var(--el-text-color-secondary); }
html.dark .code-right h2 { color: var(--el-text-color-primary); }
html.dark .code-right > p { color: var(--el-text-color-secondary); }
html.dark .step-num { background: var(--el-border-color); border-color: var(--el-text-color-regular); color: var(--el-text-color-secondary); }
html.dark .step-text h4 { color: var(--el-text-color-primary); }
html.dark .step-text p { color: var(--el-text-color-regular); }
html.dark .suno-page code {
background: #1e3a5f !important; color: #93c5fd !important; border-color: #2563eb !important;
}
html.dark .s-text-dark { color: var(--el-text-color-primary); }
html.dark .s-text-brand { color: #3b9ab5; }
html.dark .s-section-body { color: var(--el-text-color-secondary); }
html.dark .act-card { background: var(--el-bg-color-page); border-color: var(--el-border-color); }
html.dark .act-card:hover { border-color: var(--el-text-color-regular); box-shadow: 0 4px 16px rgba(0,0,0,0.3); }
html.dark .act-card h3 { color: var(--el-text-color-primary); }
html.dark .act-card p { color: var(--el-text-color-secondary); }
html.dark .uc-card { background: var(--el-bg-color-page); border-color: var(--el-border-color); }
html.dark .uc-card:hover { border-color: var(--el-text-color-regular); box-shadow: 0 4px 16px rgba(0,0,0,0.3); }
html.dark .uc-card h3 { color: var(--el-text-color-primary); }
html.dark .uc-card p { color: var(--el-text-color-secondary); }
html.dark .stp-num { color: #334155; }
html.dark .stp-card h3 { color: var(--el-text-color-primary); }
html.dark .stp-card p { color: var(--el-text-color-secondary); }
html.dark .stp-conn { background: var(--el-border-color); }
html.dark .cmp-table th { background: var(--el-bg-color-page); color: var(--el-text-color-secondary); }
html.dark .cmp-table td { border-color: var(--el-border-color); }
html.dark .cmp-table th { border-color: var(--el-border-color); }
html.dark .cmp-table td:first-child { color: var(--el-text-color-primary); }
html.dark .cmp-brand { color: var(--el-text-color-primary); }
html.dark .cx { color: var(--el-text-color-regular); }
html.dark .mdl-card { background: var(--el-bg-color-page); border-color: var(--el-border-color); }
html.dark .mdl-card.mdl-rec { border-color: #277186; }
html.dark .mdl-head h3 { color: var(--el-text-color-primary); }
html.dark .mdl-tag { background: var(--el-border-color); color: var(--el-text-color-secondary); }
html.dark .mdl-tag-blue { background: #1e3a5f; color: #60a5fa; }
html.dark .mdl-tag-purple { background: rgba(39, 113, 134, 0.2); color: #3b9ab5; }
html.dark .mdl-desc { color: var(--el-text-color-secondary); }
html.dark .mdl-feats li { color: var(--el-text-color-secondary); }
html.dark .price-card { background: var(--el-bg-color-page); border-color: var(--el-border-color); }
html.dark .price-card-feat { border-color: #277186; box-shadow: 0 8px 32px rgba(0,0,0,0.3); }
html.dark .price-tier { color: var(--el-text-color-secondary); }
html.dark .price-amt { color: var(--el-text-color-primary); }
html.dark .price-desc { color: var(--el-text-color-regular); }
html.dark .price-feats li { color: var(--el-text-color-secondary); }
html.dark .suno-page .price-btn-out {
background: #1e293b; color: var(--el-text-color-primary) !important; border-color: #334155;
}
html.dark .suno-page .price-btn-out:hover { background: var(--el-border-color); border-color: var(--el-text-color-regular); }
html.dark .faq-item { border-color: var(--el-border-color); }
html.dark .faq-q { color: var(--el-text-color-primary); }
html.dark .faq-q:hover { color: #ffffff; }
html.dark .faq-chev { color: var(--el-text-color-regular); }
html.dark .faq-a p { color: var(--el-text-color-secondary); }
html.dark .rel-card { background: var(--el-bg-color-page); border-color: var(--el-border-color); }
html.dark .rel-card:hover { border-color: var(--el-text-color-regular); box-shadow: 0 4px 12px rgba(0,0,0,0.3); }
html.dark .rel-info h3 { color: var(--el-text-color-primary); }
html.dark .rel-info p { color: var(--el-text-color-regular); }
html.dark .rel-arrow { color: var(--el-text-color-regular); }
html.dark .rel-card:hover .rel-arrow { color: var(--el-text-color-secondary); }
html.dark .suno-cta { background: #020617; }
html.dark .suno-cta::before {
background: radial-gradient(ellipse, rgba(39, 113, 134, 0.2) 0%, transparent 70%);
}
html.dark .tag-item { background: var(--el-border-color); border-color: var(--el-text-color-regular); color: var(--el-text-color-secondary); }
html.dark .suno-page .btn-cta-light { color: #ffffff !important; }
html.dark .suno-page .btn-cta-ghost { color: #94a3b8 !important; }
html.dark .suno-page .btn-cta-ghost:hover { color: var(--el-text-color-primary) !important; }
html.dark .suno-page .price-btn-fill { color: #ffffff !important; }
</style>
Suno API · Ace Data Cloud
Suno API:
Generate AI Music
Integrate Suno AI music generation capabilities into your application through a stable and comprehensive REST API. Create custom songs, pure music, remixes, covers, and more—all through a unified interface.
```
⚡ 6 Model Versions
🎵 16 Actions
📄 OpenAPI 3.0 Specification
🔑 Bearer Token Authentication
Does Suno have an official API?
Suno currently does not provide a public, self-service REST API. Its music generation features can only be accessed through the Suno official website and application.
Ace Data Cloud fills this gap by providing a stable, production-ready API , allowing you to programmatically access all of Suno's music generation features—including the latest Chirp v5 model—through a simple REST interface, equipped with OpenAPI specifications, Webhook support, streaming, and pay-as-you-go pricing.
All Features of the Suno API
A comprehensive API suite covering the complete workflow of Suno music generation
🎵
Complete Music Generation
Generate complete songs with lyrics, vocals, and instruments from text prompts, or create pure instrumental music. Supports inspiration mode and custom mode, providing fine control.
🔄
Generate, Extend, Cover, Blend, Stems, Remaster, Underpaint, Overpaint, Replace Section, etc.—all accomplished through the /suno/audios endpoint.
🎤
Create and save custom singer voice styles through the Persona API. Reuse a consistent vocal identity across unlimited song generations.
📝
Automatically generate structured lyrics with paragraph markers (verse, chorus, bridge). The required model parameter accepts default or remi-v1. Also supports mashup lyrics, blending the lyrics of two songs.
🔀
Supports output in MP3 (default), MP4 (with visualized video), WAV (lossless audio), and MIDI (music notation) formats. Vocal separation can extract vocals, drums, bass, etc.
⚡
Supports NDJSON real-time streaming for progress updates, or set a callback_url to asynchronously receive results. No polling required.
Example URL note: Media hosts in historical response snapshots are normalized to media.example.com for publication; they show response structure and are not downloadable assets. Terminal audio and WAV results preferentially use Ace Data Cloud CDN URLs, while intermediate preview URLs are not persisted.
curl -X POST https://api.acedata.cloud/suno/audios \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"action": "generate",
"prompt": "A cheerful pop song about a summer road trip",
"model": "chirp-v6",
"custom": false,
"callback_url": "https://your-app.com/webhook"
}'
{
"success": true,
"task_id": "b3d7a1...",
"data": [{
"id": "a8f2c9...",
"title": "Summer Highway",
"style": "cheerful pop, driving beat",
"duration": 124.5,
"audio_url": "https://media.example.com/suno/a8f2c9.mp3",
"image_url": "https://media.example.com/suno/a8f2c9.jpeg",
"video_url": "https://media.example.com/suno/a8f2c9.mp4",
"state": "succeeded"
}]
}
Quick Start - Get Started in 5 Minutes
A simple REST API using Bearer Token authentication. One request to generate your first AI song.
1
Register on Ace Data Cloud and obtain your Bearer Token from the console
2
Send a request to /suno/audios with your prompt and model preferences
3
Receive audio URL, cover image, lyrics, and video—ready to use
The most comprehensive Suno API—covering every music creation workflow
✨
Create songs from text prompts in inspiration or custom mode
⏩
Continue a song from any timestamp, adding new lyrics and styles
🎭
Create a new version of any song in a completely different style
🔗
Merge continued segments into a seamless complete track
🎚️
Separate vocals, drums, bass, melodies, and other tracks
🎧
Upgrade old songs with improved audio quality (v4.5+ / v5)
🎸
Add instrumental accompaniment to uploaded vocal tracks
🎤
Add AI vocals to uploaded pure instrumental tracks
✂️
Regenerate content in a specified time range of an existing song
🔀
Fuse two reference songs into a new creation
📤
Upload your own audio and continue it with AI generation
🎯
Maintain a consistent singer identity across multiple songs
+ Upload Cover
+ Persona Voice
+ Sample
+ Full Stems
What can you build with the Suno API?
From consumer applications to enterprise platforms—developers are building these projects
🎮
Build consumer applications that allow users to generate custom songs, share, and collaborate
🎬
Automatically generate copyright-free background music for videos, short films, and podcasts
🤖
Integrate with Claude, ChatGPT, or any AI Agent through our MCP Server for natural language music creation
🏪
E-commerce and Advertising
Generate brand music, advertising music, and product audio content in bulk
3 Steps to Get Started Quickly
From registration to generating your first AI song in under 5 minutes
01
Create a free account on Ace Data Cloud. Generate your Bearer Token from the API management console.
02
Initiate Your First API Call
Send a POST request to /suno/audios with a text prompt. You can use SDK, cURL, or any HTTP client.
03
Integration and Expansion
Embed the API into your application. Use Webhook for asynchronous processing and confidently scale to production.
Why choose Ace Data Cloud over other Suno APIs?
See our comparative advantages on the features that matter most to developers
Feature
Ace Data Cloud
Other Platforms
Chirp v5 Model
✓
Partially supported
16 Actions (Extend, Cover, Stems, etc.)
✓
Partially supported
OpenAPI 3.0 Specification
✓
Partially supported
Webhook Callback
✓
Partially supported
NDJSON Streaming
✓
Partially supported
Custom Persona
✓
Partially supported
MP3 + MP4 + WAV + MIDI
✓
Partially supported
MCP Server (AI Agent Integration)
✓
Partially supported
Pay-as-you-go
✓
Partially supported
No Watermark
✓
Partially supported
Comparison of Suno with Other AI Models
Hesitating between Suno, Udio, and other AI music platforms? Check out their comparison.
Capability
Suno (via Ace Data)
Udio
Others
Songs with Vocals
✓
✓
✗
Custom Lyrics
✓
✓
✗
Pure Instrumental
✓
✓
✓
Song Continuation and Remixing
✓
✓
✗
Vocal Separation
✓
✗
✗
Persona Voice Cloning
✓
✗
✗
API Access
✓
✗
Limited
Which model is right for you?
Choose from 6 Suno model versions based on your quality and speed needs
curl --request POST " https://api.acedata.cloud/suno/audios" \
--header " Authorization: Bearer YOUR_API_KEY" \
--header " Content-Type: application/json" \
--data ' {}'
Explore the supported endpoints and integration guides for Suno Music Generation.
If you meet any issue, please check support info or browse the latest documentation on docs.acedata.cloud .