Skip to content
AceDataCloudPublic

Latest commit

 

History

249 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 

Repository files navigation

Suno Music Generation API

MP3 export

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.

Platform API Docs

Suno Music Generation

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

Custom Models (Beta)

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.

Studio Projects (Beta)

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.

Project workflow

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.

Overview

<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
🎵
16
Available Actions
🤖
6
Model Versions
📡
12
API Endpoints
📦
5
Output Formats

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.

🔄

16 Actions, One API

Generate, Extend, Cover, Blend, Stems, Remaster, Underpaint, Overpaint, Replace Section, etc.—all accomplished through the /suno/audios endpoint.

🎤

Custom Persona

Create and save custom singer voice styles through the Persona API. Reuse a consistent vocal identity across unlimited song generations.

📝

AI Lyrics Generation

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.

🔀

Multi-format Output

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.

⚡

Streaming and Webhook

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
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"
}'
Response
{
"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

Get API Key

Register on Ace Data Cloud and obtain your Bearer Token from the console

2

Send POST Request

Send a request to /suno/audios with your prompt and model preferences

3

Get Your Song

Receive audio URL, cover image, lyrics, and video—ready to use

16 Actions, One API

The most comprehensive Suno API—covering every music creation workflow

✨

Generate

Create songs from text prompts in inspiration or custom mode

⏩

Extend

Continue a song from any timestamp, adding new lyrics and styles

🎭

Cover

Create a new version of any song in a completely different style

🔗

Concat

Merge continued segments into a seamless complete track

🎚️

Stems

Separate vocals, drums, bass, melodies, and other tracks

🎧

Remaster

Upgrade old songs with improved audio quality (v4.5+ / v5)

🎸

Underpaint

Add instrumental accompaniment to uploaded vocal tracks

🎤

Overpaint

Add AI vocals to uploaded pure instrumental tracks

✂️

Replace Section

Regenerate content in a specified time range of an existing song

🔀

Blend

Fuse two reference songs into a new creation

📤

Upload + Extend

Upload your own audio and continue it with AI generation

🎯

Persona

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

🎮

Music Creation Apps

Build consumer applications that allow users to generate custom songs, share, and collaborate

🎬

Video and Content

Automatically generate copyright-free background music for videos, short films, and podcasts

🤖

AI Agent and MCP

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

Register and Get API Key

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

Quick Start

curl --request POST "https://api.acedata.cloud/suno/audios" \
  --header "Authorization: Bearer YOUR_API_KEY" \
  --header "Content-Type: application/json" \
  --data '{}'

APIs and Guides

Explore the supported endpoints and integration guides for Suno Music Generation.

API Path Integration Guidance
Suno Audios Generation API /suno/audios Suno Audios Generation API Integration Guide
Suno Persona API /suno/persona Suno Persona API Integration Guide
Suno MP4 API /suno/mp4 Suno MP4 API Integration Guide
Suno Vox API /suno/vox Suno Vox API Integration Guide
$t(document_title_suno_timing_generation_api) /suno/timing Suno Timing API Integration Guide
Suno Wav API /suno/wav Suno Wav API Integration Guide
Suno MIDI API /suno/midi Suno MIDI API Integration Guide
Suno Style Generation API /suno/style Suno Style API Integration Guide
Suno Lyrics Generation API /suno/lyrics Suno Lyrics Generation API Integration Guide
Suno MashupLyrics Generation API /suno/mashup-lyrics Suno Mashup Lyrics Generation API Integration Guide
Suno Tasks API /suno/tasks Suno Tasks API Integration Guide
Suno Upload API /suno/upload Suno Upload API Integration Guide
Suno Studio Projects API (Beta) /suno/projects Project workflow

Related Resources

Support

If you meet any issue, please check support info or browse the latest documentation on docs.acedata.cloud.

Releases

Packages

Contributors