GeezerVison is showing github.com — GitHub - AceDataCloud/SunoAPI: Suno AI music and lyrics generation service.
Folders and files| Name | Name | Last commit message | Last commit date |
|---|
| | | | | | | | |
Repository files navigationSuno Music Generation API
Get your Ace Data Cloud API key
- Open Ace Data Cloud → Applications. Sign in, or register an account first.
- Find General application. If it has not been created, choose Initialize General Application. A general key can use the services available to your account; a dedicated application's key is limited to its service. Check the required service/model access and current pricing.
- Copy the API Key from the application card, or open Keys / Manage Keys → Create to create a separate key for this integration. Give it a recognizable name so you can revoke or rotate it independently.
- When creating a key, review Expiration Time, Set Usage Limitation, and Allowed APIs. Enable only the restrictions you need, allow the operations you will call, then click Create and copy the token from the key list. Task lookup does not grant permission to submit a generation. Confirm the application's balance can cover your first request; any trial allowance is whatever your account currently displays.
- Copy only the token value, without quotation marks, spaces, or
Bearer . An API Key / API Token field expects this raw value; only a manually configured HTTP Authorization header needs the Bearer prefix. A platform-... account-management token cannot replace a generation API key.


Save the key in the client's credential store or the environment variable shown below. Never put it in a prompt, shared workflow, screenshot, or Git commit. If authentication fails, check the full copied value, application/service access, expiration, usage limit, and balance before creating another key.
Trial account concurrency
Accounts with neither a successful paid top-up nor an administrator's manual credit addition may run one billable request at a time across the entire account, shared by all API keys and services. Rewards, redemption cards and transferred credits do not count as paid top-ups. A successful paid top-up or manual credit addition removes this trial restriction; balance and key usage-limit checks still apply.
A new billable request returns 429 too_many_requests while another is running. Wait for the active request's final result before submitting the next one. Free task polling remains available.
For async APIs, acceptance or a task ID is not completion: keep querying the same task until its final result. A disconnect or proxy timeout does not mean execution stopped. If a task has no terminal result for a long time, contact support with trace_id.
This restriction changes neither trial API availability nor pricing; fees are settled after execution based on actual usage.
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
Audio generation and processing
For POST /suno/audios, negative_tags excludes styles or genres only when custom is true. The API currently sets no fixed character limit for this field, but overly long content may still fail to process; keep it concise.
A downloadable audio file does not guarantee that its audio_id remains available for follow-up operations such as covers, extensions or stem separation. If suno_processing_unavailable, suno_model_unavailable or suno_processing_failed is returned, retain the task_id and trace_id and contact support. See the audio generation integration guide for the documented error messages.
Covers with a private voice
For a voice created through /suno/voices, first upload the original song to /suno/upload with mode: "standard" and the voice's persona_id. Then call /suno/audios with action: "upload_cover", the returned data.audio_id, and the same persona_id. All three steps must use the same service channel. Do not reuse an audio ID uploaded without that voice association or combine persona_id with enhanced upload mode. vocal_gender is not required and cannot replace the voice ID. Follow the private-voice cover procedure.
Audio availability check (Beta)
Before an extension or cover, optionally call POST /suno/availability with the completed song's UUID as audio_id, not its task_id. The check requires a Bearer API token, returns synchronously, and currently consumes no Credits. A successful check returns data.id and data.available: true, meaning positive evidence of availability on the current channel—not a guarantee that the next operation will succeed. If availability cannot be confirmed, 503 availability_unknown is returned instead of false; other errors are not negative availability results either. See the precheck procedure and error handling.
GET /suno/persona listing and DELETE /suno/persona deletion consume no Credits, with no extra billing-exemption header required. Bearer API authentication is still required; POST /suno/persona creation continues to follow the API's existing pricing rules. See the persona integration guide.
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 always submits two candidates; do not send batch_size. It additionally accepts prompt, 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.
AboutSuno AI music and lyrics generation service. TopicsResourcesStars5 stars Watchers0 watching Forks
|