How to Generate AI Songs with the ACE Music API

22 min read • November 14, 2026

Table of contents

  1. Introduction
  2. Models and what the API can do
  3. Pricing
  4. How to generate a song with curl
    1. Add your ACE Music account
    2. Make songs from a prompt
    3. What you get back
    4. Sync, async and webhooks
  5. Sing your own lyrics
  6. Control tempo, key and time signature with ACE-Step
  7. Covers, remixes and edits
    1. Mash up two or three songs
  8. Guide songs with your own audio and images
  9. Stems, downloads and the score
    1. Split a song into stems
    2. Download MP3, WAV, MIDI and MusicXML
    3. Read the score
  10. Your Library
  11. Several ACE Music accounts
  12. Use it from Claude, ChatGPT or Cursor (MCP)
  13. Batch-generate with the scripts
  14. Examples
    1. A song from a picture
    2. Songs from a prompt
    3. Your own lyrics
    4. ACE-Step at a set tempo, key and meter
    5. A cover, a remix and an edit
    6. Mashups
    7. Your audio and pictures
    8. Stems of “Paper Lanterns”
  15. Questions
  16. Conclusion

Introduction

The useapi.net ACE Music API turns one REST call into two finished songs from ACE Music, with vocals, lyrics, a title and cover art, on the ACE Music subscription you already have. ACE Music v1 ranks #1 on Artificial Analysis’ vocal music leaderboard, ahead of Suno v6, and ACE Music v1 and v1.1 have no public API of their own (as of November 2026), so useapi.net is the only way to call them from code. The open-source ACE-Step v1.5 XL runs through the same API for no credits on any ACE Music plan, the Free plan included.

This guide starts with the three models and what a song costs, makes one song end to end with curl, then covers every other feature in a short table. The Examples at the end are 18 songs we made for this page, each with the request that made it, all from the scripts in the acemusic-api GitHub repo (Node.js and Python), for 117 credits of an Artist plan, extra takes included. useapi.net is a third-party API, not affiliated with ACE Music or its maker Timedomain.

Models and what the API can do

Every request makes two songs, and model picks who makes them:

Model model What it’s for Settings Credits per request Time in our runs
ACE Music v1 acemusic-v1 (default) The #1 vocal model: songs from a prompt or your lyrics, sung or instrumental duration 30 to 600 s, negative, styleInfluence, WAV downloads 4 46 to 89 s
ACE Music v1.1 Preview acemusic-v1.1 Writes a score first, so its covers and mashups follow a song’s melody audioInfluence, styleInfluence 4 35 to 83 s
ACE-Step v1.5 XL ace-step-1.5-xl Open source by ACE Studio and StepFun: songs, remixes and edits bpm, key, timeSignature, duration 10 to 240 s, negative, thinking. MP3 only 0 20 to 55 s

What you can do with them:

What Request Notes
Songs from a prompt POST /music prompt ACE Music writes the style, lyrics and title
Your own lyrics, instrumentals POST /music style, lyrics Any language
Lyrics and style writers POST /music/lyrics, /music/style No credits
Covers, remixes, edits, mashups POST /music mode On any song of the account
Your audio and pictures POST /files As references for new songs
Stems POST /music/stems Creator and Artist
Downloads, score GET /music/download, /music/score MP3 and the score on every plan, WAV, MIDI and MusicXML on Creator and Artist
Library, jobs, accounts GET /music, /jobs, /accounts Every song of the account, running jobs, live credits
MCP server /v1/acemusic/mcp 15 tools for AI assistants

Pricing

ACE Music charges its own credits per request, from your ACE Music plan, and useapi.net adds nothing per song (as of November 2026):

Request Credits
Two songs on ACE Music v1 or v1.1 4
Stems, vocal + instrumental 5, paid plans
Stems, every stem 60, paid plans
Score of an ACE-Step song, first read 1
Two songs on ACE-Step v1.5 XL 0, on every plan
Lyrics and style writers, uploads, downloads 0 in our tests

The ACE Music plans are Free with 20 credits a day, Creator $9.90 a month for 1,000 credits and Artist $29 a month for 2,500 credits, or $7.90 and $16.58 a month billed yearly. A song is half a request, 2 credits. The API overview has the same table.

What one song costs on each plan, cheapest on the left (a request makes two songs, so a song is half a request’s credits; as of November 2026):

Model Free
20 cr/day
Artist $16.58/m
2,500 cr/mo, billed yearly
Creator $7.90/m
1,000 cr/mo, billed yearly
Creator $9.90/m
1,000 cr/mo
Artist $29/m
2,500 cr/mo
ACE Music v1, v1.1
a song
$0 / 2 cr
10 songs/day
$0.013 / 2 cr
1,250 songs/mo
$0.016 / 2 cr
500 songs/mo
$0.020 / 2 cr
500 songs/mo
$0.023 / 2 cr
1,250 songs/mo
Stems
vocal + instrumental
paid plans $0.033 / 5 cr $0.040 / 5 cr $0.050 / 5 cr $0.058 / 5 cr
Stems
every stem
paid plans $0.40 / 60 cr $0.47 / 60 cr $0.59 / 60 cr $0.70 / 60 cr
ACE-Step score
first read
$0 / 1 cr $0.007 / 1 cr $0.008 / 1 cr $0.010 / 1 cr $0.012 / 1 cr
ACE-Step v1.5 XL
a song
$0 / 0 cr $0 / 0 cr $0 / 0 cr $0 / 0 cr $0 / 0 cr

How that compares with the other ways to call these models from code:

Model useapi.net Other APIs
ACE Music v1, v1.1 Preview from $0.013 a song on Artist billed yearly, $0 on the Free plan’s 20 daily credits none: ACE Music offers no public API for them
ACE-Step v1.5 XL $0 on every ACE Music plan, the Free plan included about $0.14 a song on the third-party acestep.io API, which needs its $49 a month Studio plan

On any ACE Music plan, the Free plan included, an ACE-Step v1.5 XL song uses no credits, against the API of the third-party acestep.io, which needs its $49 a month Studio plan (about 360 songs a month, about $0.14 a song, as of November 2026).

Start using the API

A single $15/month subscription covers every API on useapi.net — one token, all services. You connect up to 3 accounts per service, each with its own website subscription, and useapi.net handles the REST API, load balancing, and polling. Need more accounts? Each extra subscription is $10/month and adds 3 more accounts per service.

Subscribe — $15/month Pay with crypto

Pricing and volume options — full refund within the first 14 days if you have fewer than 50 successful generations. Already subscribed? Change the quantity in the Stripe Customer Portal instead of buying again.

How to generate a song with curl

You need a useapi.net API token, see Setup useapi.net, and an ACE Music account with an email and a password. One $15 a month subscription covers every useapi.net API and 3 ACE Music accounts. A Free ACE Music account works: it gets 20 credits a day, and ACE-Step songs need none. The commands use jq to read the JSON.

Add your ACE Music account

Export the token, then add the account once. The API signs in, reads the account and stores it only if ACE Music accepts the password:

export USEAPI_TOKEN="user:12345-..."
API=https://api.useapi.net/v1/acemusic

curl -s -X POST "$API/accounts" \
  -H "Authorization: Bearer $USEAPI_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "email": "[email protected]", "password": "your-acemusic-password" }'

An account made with Continue with Google or a phone number needs a password first, see Setup ACE Music, which can also add it for you.

Make songs from a prompt

Describe the song in your own words. ACE Music writes the style, the lyrics and the title, then makes two songs. This is the exact request behind the first song on this page:

curl -s -X POST "$API/music" \
  -H "Authorization: Bearer $USEAPI_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "A late-night neo-soul slow jam about two strangers sharing an umbrella at a bus stop in the rain and missing the last bus on purpose. Warm Rhodes piano, brushed drums, round upright bass, a smoky female lead with close three-part harmonies on the chorus.",
    "model": "acemusic-v1",
    "async": true
  }' | tee job.json | jq '{jobid, status, model}'

With async: true the API answers 201 at once with the job. A prompt can be up to 2,000 characters and take up to 3 reference songs and 3 pictures, see Guide songs with your own audio and images.

What you get back

While ACE Music writes the lyrics the songs are planning and Untitled, then queued and running. Poll GET /jobs/jobid every 10 seconds or so. The jobid contains : and @, so URL-encode it:

curl -s "$API/jobs/$(jq -r .jobid job.json | jq -Rr @uri)" \
  -H "Authorization: Bearer $USEAPI_TOKEN" | jq '{status, songs: [.songs[] | {title, status, duration, audioUrl}]}'

When status is completed, each song carries its links (the ids below are made up):

{
  "jobid": "j1115003713275918262m-u12345-email:[email protected]:so_7c1d9e3a5b2f4806a4e1c9d3.so_8b4f2e6a1c9d47e5a3b7c0d2-bot:acemusic",
  "type": "music",
  "status": "completed",
  "email": "[email protected]",
  "created": "2026-11-15T00:37:13.275Z",
  "model": "acemusic-v1",
  "modelUsed": "acemusic-v1",
  "songs": [
    {
      "songId": "user:[email protected]:so_7c1d9e3a5b2f4806a4e1c9d3",
      "taskId": "so_7c1d9e3a5b2f4806a4e1c9d3",
      "status": "succeeded",
      "title": "Let the 44 Roll By",
      "model": "acemusic-v1",
      "style": "Late-night neo-soul slow jam with a laid-back 1990s and early 2000s pocket, 72 BPM. …",
      "lyrics": "[Intro - Warm Rhodes chords, brushed snare rim clicks, subtle rain on asphalt]\n\n[Verse 1 …]\nWater dripping off the canvas seam\n…",
      "instrumental": false,
      "duration": 277.19,
      "audioUrl": "https://acemusic.ai/data/so_7c1d9e3a5b2f4806a4e1c9d3.mp3",
      "playUrl": "https://….r2.cloudflarestorage.com/acemusic-data-prod/users/…/audio/202611/….mp3?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20261115T003902Z&X-Amz-Expires=3599&…",
      "playUrlExpires": "2026-11-15T01:39:01.000Z",
      "coverUrl": "https://acemusic.ai/data/so_7c1d9e3a5b2f4806a4e1c9d3-cover.jpg?v=1794703081642",
      "pageUrl": "https://acemusic.ai/song/r4k8w2n6p9tz",
      "created": "2026-11-15T00:37:13.300Z",
      "finished": "2026-11-15T00:38:42.208Z",
      "kind": "original",
      "score": false
    },
    { "songId": "user:[email protected]:so_8b4f2e6a1c9d47e5a3b7c0d2", "title": "Let the 44 Roll By", "duration": 253.99, "…": "…" }
  ],
  "completed": "2026-11-15T00:38:42.208Z"
}
  • audioUrl is the song’s public MP3 link and never changes. playUrl is a direct link to the same MP3 for web players, valid until playUrlExpires (about an hour): some browsers, such as Brave, block the redirect behind audioUrl.
  • songId is what covers, mashups, stems, downloads and the score take. It names the account the song is on, so those calls run there.
  • model is the model you asked for, modelUsed the one that ran (see mashups). kind is original, cover, edit, mashup or upload, and score says whether the song has its score yet.
  • A song ACE Music could not make has status: "failed", ACE Music’s reason in error, and refunded: true when the credits came back.

And here is the first of those two songs:

ACE Music v1 — “Let the 44 Roll By” · 4:37 · generated in 89 s

Sync, async and webhooks

You send The POST answers Then
async: true 201 at once, with the job Poll GET /jobs/jobid
no async 200 with the finished job, the same JSON as above Read the songs from the answer. A request still running after 100 seconds answers 202 with the job: poll it
replyUrl and replyRef as above, for sync and async alike Your public https URL receives one POST of the finished job, with your replyRef in it

Our ACE-Step request without async came back in 37 seconds, and the webhook arrived 12 seconds after the songs finished. A job can be read for 7 days, and one still running 30 minutes after it started fails with 504. async-webhooks/ runs all three ways and includes a small webhook receiver.

Show the API call
curl -s -X POST "$API/music" \
  -H "Authorization: Bearer $USEAPI_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "A dreamy lo-fi hip hop beat for studying late at night: dusty vinyl crackle, mellow Rhodes chords, a soft upright bass and rain on the window",
    "model": "ace-step-1.5-xl",
    "replyUrl": "https://your-server.example.com/acemusic-hook",
    "replyRef": "lofi-1"
  }' | jq '{status, songs: [.songs[] | {title, duration, audioUrl}]}'

Sing your own lyrics

Send style and lyrics instead of prompt, and ACE Music sings your words in your style:

Field What it does Limits
style Genre, instruments, mood, tempo and vocals 1,000 characters, 512 on ACE-Step
lyrics Your words, any language, with [Verse], [Chorus], [Bridge] tags 5,000 characters, 2,000 on ACE-Step
title The songs’ title. Without one, ACE Music picks it 80 characters
instrumental true for no vocals. A style with no lyrics does the same  
duration The length in seconds 30 to 600 on ACE Music v1, 10 to 240 on ACE-Step
negative Styles to avoid 200 characters, ACE Music v1 and ACE-Step
styleInfluence How strictly the style is followed 0 to 100, default 80, ACE Music v1 and v1.1

Never send prompt together with these fields: the API answers 400 and names what to drop. Our ballad asked for duration: 210 came back at 210 and 209 seconds. It is in Examples with an instrumental and a song in Spanish.

No words yet? POST /music/lyrics writes lyrics and a title from a request, and POST /music/style turns a few words into a full style. Ours came back in 6 and 4 seconds, with no credits charged. Script: custom-lyrics/.

Control tempo, key and time signature with ACE-Step

ACE-Step v1.5 XL takes musical settings the ACE Music models don’t, and its songs use no credits:

Option Values
bpm 30 to 200
timeSignature 2/4, 3/4, 4/4, 6/8
key C major to B minor (C, C#, D, Eb, E, F, F#, G, Ab, A, Bb, B)
duration 10 to 240 seconds
negative styles to avoid, up to 200 characters
thinking 0 to 100: ACE-Step plans the whole song first, creative when low, steady when high

All three of our ACE-Step songs, a 3/4 waltz, a 6/8 jig and 174 bpm drum and bass, came back exactly as long as asked (Examples). These options work in mode generate on ace-step-1.5-xl only, and anywhere else the API answers 400 Parameter bpm does not apply to mode generate on acemusic-v1. Script: ace-step-options/.

Covers, remixes and edits

mode turns a request into work on songs you have. references takes their songIds: songs the API made, songs from your Library or your own uploads.

mode references Runs on Credits What it does
cover 1 song acemusic-v1.1, or ACE-Step on ace-step-1.5-xl 4 / 0 The song in a new style, following its melody, chords and structure
remix 1 song ace-step-1.5-xl 0 coverStrength keeps the original, remixStrength moves away from it (0 to 100)
edit 1 song ace-step-1.5-xl 0 Rewrites the part between start and end seconds with new lyrics, keeps the rest
mashup 2 or 3 songs acemusic-v1.1 4 One new song from several, see below

ACE Music v1.1 follows the melody it reads from a song’s score. Our first cover of an ACE Music v1 song with no score yet failed with ref_no_melody, and the 4 credits came back, so the API now reads the score of an ACE Music v1 song first, for free, before a v1.1 cover or mashup. ACE-Step songs are not read automatically: if one answers 400 with ref_no_melody, call GET /music/score on it first (1 credit), then send the request again. Script: covers-remix-edit/.

Mash up two or three songs

mode: "mashup" makes one song from 2 or 3 songs on the same account, combining their words unless you send lyrics. audioInfluence (0 to 100, default 60) sets how closely the songs are followed. A mashup has to read the songs, so it runs on ACE Music v1.1 Preview even when you ask for v1, as on the ACE Music website: our “Harbor Fiesta” reports "model": "acemusic-v1" and "modelUsed": "acemusic-v1.1", and the credits follow the model that ran. The same happens to a cover asked on v1, a prompt with more than one reference on ACE-Step, and sometimes a prompt with a reference song. Script: mashup/.

Guide songs with your own audio and images

POST /files takes the file as the raw request body with its Content-Type:

Upload Formats Up to You get Use it as
Audio MP3, WAV, FLAC, OGG, M4A, AAC 100 MB, 8 minutes A songId: a Library song, its lyrics, style, tempo and melody transcribed by ACE Music One of up to 3 references of a prompt, or the song to cover, remix, edit or mash up
Image JPEG, PNG, WebP 10 MB A mediaId One of up to 3 images of a prompt: ACE Music writes a song about it
curl -s -X POST "$API/files?title=Harbour%20Jig%20demo" \
  -H "Authorization: Bearer $USEAPI_TOKEN" \
  -H "Content-Type: audio/mpeg" \
  --data-binary @harbour-jig-demo.mp3 | jq '{songId, status, duration, bpm: .upload.bpm}'

Our 90-second upload of the “Harbour Jig” was transcribed in 14 seconds, and ACE Music heard 115 bpm (we had asked for 116). A picture of a dancing robot became a drum and bass song about its teal fur and orange high-tops. Both are in Examples. Uploads count against the account’s allowance: 10 minutes of audio on Free, 30 on Creator and 60 on Artist. Script: upload-reference/.

Stems, downloads and the score

Every finished song can be split, downloaded and read as a score:

Request Plans Credits You get
Stems, mode: "vocals" Creator, Artist 5 vocal and instrumental MP3s
Stems, mode: "all" Creator, Artist 60 Every stem ACE Music finds, as MP3s
Download mp3 (default) every plan 0 url (the same as audioUrl) and playUrl
Download wav Creator, Artist 0 A link valid for 24 hours. Not for ACE-Step songs
Download midi, musicxml Creator, Artist 0 The file itself
Score every plan 0, 1 for an ACE-Step song the first time ABC notation: the vocal melody, an instrumental line, the chords and the sections

Split a song into stems

The vocal split of “Paper Lanterns” took about 80 seconds, and the full one under 2 minutes, with 9 stems: vocals, backing vocals, drums, bass, guitar, keyboard, strings, synth and fx (listen). Stem links last 24 hours, so read the song again for fresh ones. Splitting a song again in the same mode answers at once and charges nothing.

Download MP3, WAV, MIDI and MusicXML

ACE Music makes WAV, MIDI and MusicXML on the first request: the API waits up to a minute, then answers 202, so call again a minute later. For “Paper Lanterns” all three were ready within seconds: a 40 MB WAV, an 8 KB MIDI file and a 107 KB MusicXML score.

Show the API call
SONG="user:[email protected]:so_4e7b2c9d0a5f4183b6d8e2c7"

curl -s -G "$API/music/download" --data-urlencode "songId=$SONG" -d format=wav \
  -H "Authorization: Bearer $USEAPI_TOKEN" | jq '{url, expires}'

curl -s -G "$API/music/download" --data-urlencode "songId=$SONG" -d format=midi \
  -H "Authorization: Bearer $USEAPI_TOKEN" -o paper-lanterns.mid

Read the score

Any ABC tool turns the score into sheet music. For “Paper Lanterns” it read 72 bpm, the tempo we asked for in the style. ACE Music v1.1 songs come with their score, and v1.1 covers and mashups follow it, see Covers, remixes and edits.

Show the API call
SONG="user:[email protected]:so_4e7b2c9d0a5f4183b6d8e2c7"

curl -s -G "$API/music/score" --data-urlencode "songId=$SONG" \
  -H "Authorization: Bearer $USEAPI_TOKEN" | jq -r .abc | head -14
X:1
T:
M:2/4
L:1/16
Q:1/4=72
V: Vocal clef=treble name="Vocal Melody" snm="Vocal"
V: Ins clef=treble name="Ins Melody" snm="Inst."
K:Ab
% intro
V: Vocal
Z|"Ab"z8|"Ab"z8|"Ab"z8|
V: Ins
Z|Ac2AcBA2|A2EAA2EA|Ac2AcBA2|

Script: stems-and-downloads/, which saves the stems, every download format and the score.

Your Library

Every song and upload of the account, made here or on acemusic.ai, stays in its Library until deleted:

Request What it does
GET /music A page of songs, newest first, with next for the following page. email is needed with more than one account. The songs of jobs older than 7 days are here
GET /music/songId One song with fresh links, and its stems when it was split
DELETE /music/songId 204: the song moves to the account’s trash on acemusic.ai, and the API answers 404 for it from then on
Show the API call
SONG="user:[email protected]:so_4e7b2c9d0a5f4183b6d8e2c7"

curl -s -G "$API/music" --data-urlencode "[email protected]" -d limit=20 \
  -H "Authorization: Bearer $USEAPI_TOKEN" | jq '{next, songs: [.songs[] | {title, model, kind, songId}]}'

curl -s "$API/music/$(jq -rn --arg v "$SONG" '$v|@uri')" \
  -H "Authorization: Bearer $USEAPI_TOKEN" | jq '{title, score, audioUrl, playUrl, stems: (.stems // {} | keys)}'

curl -s -o /dev/null -w "%{http_code}\n" -X DELETE "$API/music/$(jq -rn --arg v "$SONG" '$v|@uri')" \
  -H "Authorization: Bearer $USEAPI_TOKEN"

Script: library/.

Several ACE Music accounts

Each useapi.net subscription connects 3 ACE Music accounts, up to 100 in total. A request without email goes to a healthy account with a free slot, and one that names a song, an upload or an image runs where that lives. An account runs up to maxJobs requests at once, 4 by default, ACE Music’s own limit. With every account busy the API answers 429 with Retry-After, and a password ACE Music refuses makes that account answer 596 until you add it again.

GET /accounts/email reads the plan, credits and credit costs live, and POST /accounts with email and maxJobs alone changes only maxJobs. Script: accounts/.

Show the API call
curl -s "$API/accounts/$(jq -rn --arg v "[email protected]" '$v|@uri')" \
  -H "Authorization: Bearer $USEAPI_TOKEN" | jq '{plan_name, credits, maxJobs, costs}'

curl -s -X POST "$API/accounts" \
  -H "Authorization: Bearer $USEAPI_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "email": "[email protected]", "maxJobs": 2 }'

Use it from Claude, ChatGPT or Cursor (MCP)

The same features are a hosted MCP server with 15 tools, from songs, covers and mashups to stems, scores and uploads. ACE Music offers no public MCP integration of its own (as of November 2026). In Claude Code it is one command:

claude mcp add --transport http useapi-acemusic https://api.useapi.net/v1/acemusic/mcp --header "Authorization: Bearer YOUR_API_TOKEN"

Cursor, VS Code and Windsurf take the same URL and header, and the Claude app and ChatGPT sign in with OAuth, see Use it in the Claude app or ChatGPT. Then ask in plain words: “Write lyrics about a cat who loves rainy days and sing them as acoustic indie folk on ACE Music v1”.

Batch-generate with the scripts

The acemusic-api GitHub repo has one example per feature, linked from each section above: a Node.js script and a Python twin, with nothing to install. Each reads its requests from a prompts.json you edit, runs up to 4 at once, polls the jobs, and saves both songs, their cover art, the job record and a ledger.jsonl of the credits used in its output/ folder.

You need Node.js 21 or newer or Python 3.8 or newer. --only 3 runs the third prompt below, an ACE-Step song with no credits, so it works on a Free account:

git clone https://github.com/useapi/acemusic-api.git && cd acemusic-api
export USEAPI_TOKEN="user:12345-..."
node songs-from-prompt/songs-from-prompt.mjs --only 3

Each saved job record holds the songs’ songIds, and --from <job>.json --pick 1 hands song 1 to the next script to cover, mash up or split.

Expand songs-from-prompt/prompts.json
[
    {
        "_about": "ACE Music v1 (the default model, 4 credits for two songs): ACE Music writes the style, lyrics and title from your idea",
        "prompt": "A late-night neo-soul slow jam about two strangers sharing an umbrella at a bus stop in the rain and missing the last bus on purpose. Warm Rhodes piano, brushed drums, round upright bass, a smoky female lead with close three-part harmonies on the chorus.",
        "model": "acemusic-v1"
    },
    {
        "_about": "ACE Music v1.1 Preview (4 credits): writes a score first, then the audio",
        "prompt": "An anthemic Celtic folk-rock singalong about a fishing crew racing a storm back to the harbor. Fiddle and tin whistle hooks, stomping kick drum, bodhran, a gravelly male lead and the whole crew shouting the chorus.",
        "model": "acemusic-v1.1"
    },
    {
        "_about": "ACE-Step v1.5 XL (no credits on any ACE Music plan, the Free plan included)",
        "prompt": "A breezy bossa nova for a lazy Sunday afternoon in Lisbon: nylon-string guitar, soft brushed snare, upright bass, a gentle flute line and a warm male and female duet sung in Portuguese.",
        "model": "ace-step-1.5-xl"
    }
]

Examples

Every song below was made on November 14, 2026 (PST) with the repo’s scripts on an ACE Music Artist account, the first of the two songs of each request. Titles come from ACE Music unless we set one, the times run from the request to both songs finished, and the calls show made-up ids.

A song from a picture

One picture and one sentence of style in, two finished songs out. We uploaded this photo of a dancing robot mascot and asked for drum and bass; ACE Music wrote the lyrics from what it saw: “Teal fur shaking on the concrete floor, orange high-tops squeaking by the studio door”.

A fluffy teal robot mascot with a box head, an antenna and light-up eyes, dancing in orange high-top sneakers

Bouncy, playful drum and bass for a dancing robot mascot: rolling breakbeats at
174 bpm, a wobbly reese bass, bleepy robot synth hooks, vocoder chops, cheeky and
upbeat.

ACE Music v1 — “Bleep Boop Bounce” · 2:47 · generated in 72 s

Show the API call
curl -X POST 'https://api.useapi.net/v1/acemusic/files' \
  -H 'Authorization: Bearer user:12345-…' \
  -H 'Content-Type: image/png' \
  --data-binary @robot-mascot.png

curl -X POST 'https://api.useapi.net/v1/acemusic/music' \
  -H 'Authorization: Bearer user:12345-…' \
  -H 'Content-Type: application/json' \
  -d '{
    "prompt": "Bouncy, playful drum and bass for a dancing robot mascot: rolling breakbeats at 174 bpm, a wobbly reese bass, bleepy robot synth hooks, vocoder chops, cheeky and upbeat.",
    "model": "acemusic-v1",
    "images": ["user:[email protected]:cx_3b9e1d7a5c2f48e0a6d4b8c1"],
    "async": true
  }'

The song as a YouTube Short, with the photo: Bleep Boop Bounce on YouTube.

Songs from a prompt

The ACE Music v1 song from a prompt, “Let the 44 Roll By”, is in the walkthrough. Two more prompts, on the other two models:

An anthemic Celtic folk-rock singalong about a fishing crew racing a storm back
to the harbor. Fiddle and tin whistle hooks, stomping kick drum, bodhran, a
gravelly male lead and the whole crew shouting the chorus.

ACE Music v1.1 Preview — “Haul for the Harbor Light” · 2:51 · generated in 43 s

Show the API call
curl -X POST 'https://api.useapi.net/v1/acemusic/music' \
  -H 'Authorization: Bearer user:12345-…' \
  -H 'Content-Type: application/json' \
  -d '{
    "prompt": "An anthemic Celtic folk-rock singalong about a fishing crew racing a storm back to the harbor. Fiddle and tin whistle hooks, stomping kick drum, bodhran, a gravelly male lead and the whole crew shouting the chorus.",
    "model": "acemusic-v1.1",
    "async": true
  }'
A breezy bossa nova for a lazy Sunday afternoon in Lisbon: nylon-string guitar,
soft brushed snare, upright bass, a gentle flute line and a warm male and female
duet sung in Portuguese.

ACE-Step v1.5 XL, no credits — “Domingo em Alfama” · 3:28

Show the API call
curl -X POST 'https://api.useapi.net/v1/acemusic/music' \
  -H 'Authorization: Bearer user:12345-…' \
  -H 'Content-Type: application/json' \
  -d '{
    "prompt": "A breezy bossa nova for a lazy Sunday afternoon in Lisbon: nylon-string guitar, soft brushed snare, upright bass, a gentle flute line and a warm male and female duet sung in Portuguese.",
    "model": "ace-step-1.5-xl",
    "async": true
  }'

Your own lyrics

Two verses, a pre-chorus, a bridge and an outro of our own, asked for 210 seconds:

Style:  cinematic indie pop ballad, felt piano, swelling strings, deep heartbeat
        kick, intimate female vocal that opens up into a soaring chorus, 72 bpm
Lyrics: [Verse 1] We wrote our names on paper lanterns / Down by the river in July …
        [Chorus] Light it up and let it go / Every word I never said out loud …

ACE Music v1 — “Paper Lanterns” · 3:29 · generated in 61 s

Show the API call
curl -X POST 'https://api.useapi.net/v1/acemusic/music' \
  -H 'Authorization: Bearer user:12345-…' \
  -H 'Content-Type: application/json' \
  -d '{
    "title": "Paper Lanterns",
    "style": "cinematic indie pop ballad, felt piano, swelling strings, deep heartbeat kick, intimate female vocal that opens up into a soaring chorus, 72 bpm",
    "lyrics": "[Verse 1]\nWe wrote our names on paper lanterns\nDown by the river in July\nYou said the wind would know the answer\nIf we just let the fire fly\nYour hand was shaking, mine was steady\nAt least that'\''s how I tell it now\nWe watched them climb until the city\nWas just a glow beneath the clouds\n\n[Pre-Chorus]\nSo every summer I come back here\nStrike a match and hold it near\n\n[Chorus]\nLight it up and let it go\nEvery word I never said out loud\nLight it up and let it go\nHigher than the both of us somehow\nAnd if it finds you anyhow\nTell me you can see it from the clouds\n\n[Verse 2]\nThey tore the old pier down last winter\nPut up a fence and painted lines\nBut I still know the way by heartbeat\nI find the water every time\nI keep a lighter in my pocket\nI keep your laugh inside my head\nI fold the paper like you showed me\nAnd write the things I should have said\n\n[Pre-Chorus]\nSo every summer I come back here\nStrike a match and hold it near\n\n[Chorus]\nLight it up and let it go\nEvery word I never said out loud\nLight it up and let it go\nHigher than the both of us somehow\nAnd if it finds you anyhow\nTell me you can see it from the clouds\n\n[Bridge]\nPaper and fire, paper and fire\nNothing this light should rise so high\nPaper and fire, paper and fire\nMaybe that'\''s how we say goodbye\n\n[Final Chorus]\nLight it up and let it go\nEvery word I never said out loud\nLight it up and let it go\nHigher than the both of us somehow\n\n[Outro]\nDown by the river in July",
    "model": "acemusic-v1",
    "duration": 210,
    "async": true
  }'

An instrumental: instrumental: true, 150 seconds, and no vocals, choir or acoustic guitar:

Style:  cinematic synthwave instrumental for a night drive: pulsing analog bass
        arpeggio, gated reverb drums, lush pads, a soaring lead synth melody,
        builds to a big final section, 108 bpm

ACE Music v1 — “Neon Overpass” · 2:29 · generated in 46 s

Show the API call
curl -X POST 'https://api.useapi.net/v1/acemusic/music' \
  -H 'Authorization: Bearer user:12345-…' \
  -H 'Content-Type: application/json' \
  -d '{
    "title": "Neon Overpass",
    "style": "cinematic synthwave instrumental for a night drive: pulsing analog bass arpeggio, gated reverb drums, lush pads, a soaring lead synth melody, builds to a big final section, 108 bpm",
    "instrumental": true,
    "model": "acemusic-v1",
    "duration": 150,
    "negative": "vocals, choir, acoustic guitar",
    "async": true
  }'

Spanish lyrics about a rooftop party during a blackout:

Style:  modern cumbia pop, bright accordion hooks, güira and congas, warm bass,
        a festive male lead with a crowd shouting the chorus, 98 bpm
Lyrics: [Chorus] Bailando en la azotea / Con las estrellas de farol …

ACE Music v1 — “Bailando en la Azotea” · 2:32 · generated in 46 s

Show the API call
curl -X POST 'https://api.useapi.net/v1/acemusic/music' \
  -H 'Authorization: Bearer user:12345-…' \
  -H 'Content-Type: application/json' \
  -d '{
    "title": "Bailando en la Azotea",
    "style": "modern cumbia pop, bright accordion hooks, güira and congas, warm bass, a festive male lead with a crowd shouting the chorus, 98 bpm",
    "lyrics": "[Verse 1]\nSe fue la luz en todo el barrio\nY nadie quiere irse a dormir\nDoña Rosa saca el radio viejo\nY la noche empieza a sonreír\nLos vecinos suben con sus sillas\nAlguien trae limones y café\nY la ciudad allá abajo, oscura\nNos mira bailar sin saber por qué\n\n[Pre-Chorus]\nSube, sube, que la luna está invitando\nSube, sube, que la calle está cantando\n\n[Chorus]\nBailando en la azotea\nCon las estrellas de farol\nQue se entere todo el mundo\nQue esta noche no hay apagón\nBailando en la azotea\nCon el corazón de tambor\nSi se apaga la ciudad entera\nAquí arriba sobra amor\n\n[Verse 2]\nEl abuelo saca la guitarra\nLa vecina de enfrente se animó\nLos niños corren entre las sábanas\nQue el viento de la tarde colgó\nNadie sabe cuándo vuelve la corriente\nY la verdad, a nadie le importó\nEsta fiesta no la paga nadie\nEsta fiesta la invitó el apagón\n\n[Chorus]\nBailando en la azotea\nCon las estrellas de farol\nQue se entere todo el mundo\nQue esta noche no hay apagón\nBailando en la azotea\nCon el corazón de tambor\nSi se apaga la ciudad entera\nAquí arriba sobra amor\n\n[Outro]\nQue esta noche no hay apagón",
    "model": "acemusic-v1",
    "async": true
  }'

Lyrics by the lyrics writer, style by the style writer, sung by ACE-Step:

Lyrics writer: A wistful country song about an old pickup truck that still has
               her mixtape stuck in the tape deck
Style writer:  classic country ballad, pedal steel, warm baritone

ACE-Step v1.5 XL, no credits — “Side B Forever” · 3:35 · generated in 40 s, after 6 s for the lyrics and 4 s for the style

Show the API call
curl -X POST 'https://api.useapi.net/v1/acemusic/music/lyrics' \
  -H 'Authorization: Bearer user:12345-…' \
  -H 'Content-Type: application/json' \
  -d '{
    "prompt": "A wistful country song about an old pickup truck that still has her mixtape stuck in the tape deck",
    "style": "classic country ballad, pedal steel, warm baritone",
    "model": "ace-step-1.5-xl"
  }' > lyrics.json

curl -X POST 'https://api.useapi.net/v1/acemusic/music/style' \
  -H 'Authorization: Bearer user:12345-…' \
  -H 'Content-Type: application/json' \
  -d '{
    "style": "classic country ballad, pedal steel, warm baritone",
    "model": "ace-step-1.5-xl"
  }' > style.json

# sing what the writers returned
jq -n --slurpfile l lyrics.json --slurpfile s style.json \
  '{title: $l[0].title, lyrics: $l[0].lyrics, style: $s[0].style, model: "ace-step-1.5-xl", async: true}' |
curl -X POST 'https://api.useapi.net/v1/acemusic/music' \
  -H 'Authorization: Bearer user:12345-…' \
  -H 'Content-Type: application/json' \
  -d @-

ACE-Step at a set tempo, key and meter

Each came back exactly as long as asked.

3/4 · 84 bpm · D minor · 120 s · thinking 60 · avoid: trap drums, EDM, autotune
Style: dark cabaret waltz, accordion, pizzicato strings, upright bass, brushed
       snare, theatrical female vocal

ACE-Step v1.5 XL, no credits — “Midnight Waltz” · 2:00 · generated in 31 s

Show the API call
curl -X POST 'https://api.useapi.net/v1/acemusic/music' \
  -H 'Authorization: Bearer user:12345-…' \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "ace-step-1.5-xl",
    "title": "Midnight Waltz",
    "style": "dark cabaret waltz, accordion, pizzicato strings, upright bass, brushed snare, theatrical female vocal",
    "lyrics": "[Verse 1]\nThe band plays slow when the lights go low\nAnd the chandeliers begin to sway\nTake my hand, we will dance till the candles stand\nIn puddles of yesterday\n\n[Chorus]\nOne, two, three, turn around with me\nRound and round till the morning comes\nOne, two, three, oh don'\''t let me be\nThe last one dancing when the music'\''s done\n\n[Verse 2]\nThe clock strikes twelve and it laughs at itself\nEvery mirror wears a stranger'\''s face\nHold me close, we are only ghosts\nWho forgot to leave this place\n\n[Chorus]\nOne, two, three, turn around with me\nRound and round till the morning comes\nOne, two, three, oh don'\''t let me be\nThe last one dancing when the music'\''s done",
    "bpm": 84,
    "timeSignature": "3/4",
    "key": "D minor",
    "duration": 120,
    "negative": "trap drums, EDM, autotune",
    "thinking": 60,
    "async": true
  }'
6/8 · 116 bpm · G major · 90 s · instrumental
Style: lively celtic instrumental jig, fiddle and tin whistle trading the melody,
       bodhran, strummed bouzouki, foot stomps

ACE-Step v1.5 XL, no credits — “Harbour Jig” · 1:30 · generated in 20 s

Show the API call
curl -X POST 'https://api.useapi.net/v1/acemusic/music' \
  -H 'Authorization: Bearer user:12345-…' \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "ace-step-1.5-xl",
    "title": "Harbour Jig",
    "style": "lively celtic instrumental jig, fiddle and tin whistle trading the melody, bodhran, strummed bouzouki, foot stomps",
    "instrumental": true,
    "bpm": 116,
    "timeSignature": "6/8",
    "key": "G major",
    "duration": 90,
    "async": true
  }'
4/4 · 174 bpm · F minor · 150 s · thinking 80
Style: liquid drum and bass, rolling breakbeats, deep warm sub bass, airy pads,
       soulful female vocal

ACE-Step v1.5 XL, no credits — “Almost Home” · 2:30 · generated in 41 s

Show the API call
curl -X POST 'https://api.useapi.net/v1/acemusic/music' \
  -H 'Authorization: Bearer user:12345-…' \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "ace-step-1.5-xl",
    "title": "Almost Home",
    "style": "liquid drum and bass, rolling breakbeats, deep warm sub bass, airy pads, soulful female vocal",
    "lyrics": "[Verse]\nCity lights in the rear view mirror\nRunning on a borrowed night\nEvery bridge is a little bit nearer\nEvery tunnel full of light\n\n[Chorus]\nHold on, we'\''re almost home\nEvery signal turning green\nHold on, you'\''re not alone\nFaster than the in-between\n\n[Verse]\nRadio low and the windows open\nBreathing in the summer rain\nEvery promise we left unspoken\nRushing back to us again\n\n[Chorus]\nHold on, we'\''re almost home\nEvery signal turning green\nHold on, you'\''re not alone\nFaster than the in-between",
    "bpm": 174,
    "timeSignature": "4/4",
    "key": "F minor",
    "duration": 150,
    "thinking": 80,
    "async": true
  }'

A cover, a remix and an edit

“Paper Lanterns” as a cover, in a new style that keeps its melody:

mode: cover · stripped-back acoustic folk cover, fingerpicked steel-string guitar,
warm cello, soft close-mic'd male vocal

ACE Music v1.1 Preview — “Paper Lanterns (Acoustic Folk Cover)” · 3:34 · generated in 72 s

Show the API call
# our script read the score first (free for an ACE Music v1 song; the API now does this by itself)
curl 'https://api.useapi.net/v1/acemusic/music/score?songId=user%3A12345-example%40example.com-song%3Aso_4e7b2c9d0a5f4183b6d8e2c7' \
  -H 'Authorization: Bearer user:12345-…' > /dev/null

curl -X POST 'https://api.useapi.net/v1/acemusic/music' \
  -H 'Authorization: Bearer user:12345-…' \
  -H 'Content-Type: application/json' \
  -d '{
    "mode": "cover",
    "model": "acemusic-v1.1",
    "references": ["user:[email protected]:so_4e7b2c9d0a5f4183b6d8e2c7"],
    "style": "stripped-back acoustic folk cover, fingerpicked steel-string guitar, warm cello, soft close-mic'\''d male vocal",
    "async": true
  }'

“Bailando en la Azotea” as deep house. We sent no title, so ACE Music called it “Reference 1”:

mode: remix · coverStrength 40 · remixStrength 50 · deep house remix,
four-on-the-floor kick, plucky chords, rolling bassline, filtered vocal chops

ACE-Step v1.5 XL, no credits — “Reference 1” · 2:32 · generated in 31 s

Show the API call
curl -X POST 'https://api.useapi.net/v1/acemusic/music' \
  -H 'Authorization: Bearer user:12345-…' \
  -H 'Content-Type: application/json' \
  -d '{
    "mode": "remix",
    "model": "ace-step-1.5-xl",
    "references": ["user:[email protected]:so_9d3b7e2c1a6f4085b8e4d1c6"],
    "style": "deep house remix, four-on-the-floor kick, plucky chords, rolling bassline, filtered vocal chops",
    "coverStrength": 40,
    "remixStrength": 50,
    "async": true
  }'

“Paper Lanterns” with new words for seconds 30 to 50, the rest kept:

mode: edit · start 30 · end 50
Lyrics: We wrote our names on paper lanterns / Down by the harbor in the snow /
        You said the stars would keep the answer / If we were brave enough to go

ACE-Step v1.5 XL, no credits — “Reference 1” · 3:29 · generated in 41 s

Show the API call
curl -X POST 'https://api.useapi.net/v1/acemusic/music' \
  -H 'Authorization: Bearer user:12345-…' \
  -H 'Content-Type: application/json' \
  -d '{
    "mode": "edit",
    "model": "ace-step-1.5-xl",
    "references": ["user:[email protected]:so_4e7b2c9d0a5f4183b6d8e2c7"],
    "start": 30,
    "end": 50,
    "style": "cinematic indie pop ballad, felt piano, swelling strings, intimate female vocal",
    "lyrics": "We wrote our names on paper lanterns\nDown by the harbor in the snow\nYou said the stars would keep the answer\nIf we were brave enough to go",
    "async": true
  }'

Mashups

“Paper Lanterns” and “Let the 44 Roll By”:

upbeat neo-soul pop mashup, punchy live drums, warm Rhodes and strings, female
lead with a gospel-tinged choir on the chorus · audioInfluence 60

ACE Music v1.1 Preview — “Lanterns at the Bus Stop” · 3:58 · generated in 83 s

Show the API call
# our script read each song's score first (the API now does this by itself for ACE Music v1 songs)
curl -X POST 'https://api.useapi.net/v1/acemusic/music' \
  -H 'Authorization: Bearer user:12345-…' \
  -H 'Content-Type: application/json' \
  -d '{
    "mode": "mashup",
    "model": "acemusic-v1.1",
    "references": ["user:[email protected]:so_4e7b2c9d0a5f4183b6d8e2c7", "user:[email protected]:so_7c1d9e3a5b2f4806a4e1c9d3"],
    "title": "Lanterns at the Bus Stop",
    "style": "upbeat neo-soul pop mashup, punchy live drums, warm Rhodes and strings, female lead with a gospel-tinged choir on the chorus",
    "audioInfluence": 60,
    "async": true
  }'

“Haul for the Harbor Light” and “Bailando en la Azotea”, asked on ACE Music v1:

festive celtic cumbia mashup, fiddle and accordion trading hooks, congas and
bodhran, stomping kick, male lead with a big crowd chorus

ACE Music v1.1 Preview (asked: v1) — “Harbor Fiesta” · 2:38 · generated in 74 s

Show the API call
# our script read each song's score first (the API now does this by itself for ACE Music v1 songs)
curl -X POST 'https://api.useapi.net/v1/acemusic/music' \
  -H 'Authorization: Bearer user:12345-…' \
  -H 'Content-Type: application/json' \
  -d '{
    "mode": "mashup",
    "model": "acemusic-v1",
    "references": ["user:[email protected]:so_2a8f6c1e9d4b47f3b0c5e8a2", "user:[email protected]:so_9d3b7e2c1a6f4085b8e4d1c6"],
    "title": "Harbor Fiesta",
    "style": "festive celtic cumbia mashup, fiddle and accordion trading hooks, congas and bodhran, stomping kick, male lead with a big crowd chorus",
    "async": true
  }'

Three songs at once: “Paper Lanterns”, “Bailando en la Azotea” and “Let the 44 Roll By”:

warm late-night soul-pop medley, Rhodes and strings, light latin percussion,
female lead with a male answer on the last chorus

ACE Music v1.1 Preview — “Three Songs, One Night” · 3:32 · generated in 43 s

Show the API call
# our script read each song's score first (the API now does this by itself for ACE Music v1 songs)
curl -X POST 'https://api.useapi.net/v1/acemusic/music' \
  -H 'Authorization: Bearer user:12345-…' \
  -H 'Content-Type: application/json' \
  -d '{
    "mode": "mashup",
    "model": "acemusic-v1.1",
    "references": ["user:[email protected]:so_4e7b2c9d0a5f4183b6d8e2c7", "user:[email protected]:so_9d3b7e2c1a6f4085b8e4d1c6", "user:[email protected]:so_7c1d9e3a5b2f4806a4e1c9d3"],
    "title": "Three Songs, One Night",
    "style": "warm late-night soul-pop medley, Rhodes and strings, light latin percussion, female lead with a male answer on the last chorus",
    "async": true
  }'

Your audio and pictures

The “Harbour Jig” above, uploaded as an MP3 and used as the reference of a prompt. ACE Music ran it on v1.1 to keep the tune:

A rowdy pub singalong with a big shouted chorus about the last ferry home, built
on the tune of this recording

ACE Music v1.1 Preview (asked: v1) — “Last Ferry Home” · 1:36 · generated in 52 s

Show the API call
curl -X POST 'https://api.useapi.net/v1/acemusic/files?title=Harbour%20Jig%20demo' \
  -H 'Authorization: Bearer user:12345-…' \
  -H 'Content-Type: audio/mpeg' \
  --data-binary @harbour-jig-demo.mp3

curl -X POST 'https://api.useapi.net/v1/acemusic/music' \
  -H 'Authorization: Bearer user:12345-…' \
  -H 'Content-Type: application/json' \
  -d '{
    "prompt": "A rowdy pub singalong with a big shouted chorus about the last ferry home, built on the tune of this recording",
    "model": "acemusic-v1",
    "references": ["user:[email protected]:so_5f1a3c8e7b2d49a6c3e0f7b9"],
    "async": true
  }'

Stems of “Paper Lanterns”

The vocal and the instrumental from mode: "vocals" (5 credits), then the drums and the strings of the 9 stems from mode: "all" (60 credits).

Show the API call
curl -X POST 'https://api.useapi.net/v1/acemusic/music/stems' \
  -H 'Authorization: Bearer user:12345-…' \
  -H 'Content-Type: application/json' \
  -d '{
    "songId": "user:[email protected]:so_4e7b2c9d0a5f4183b6d8e2c7",
    "mode": "vocals",
    "async": true
  }'

curl -X POST 'https://api.useapi.net/v1/acemusic/music/stems' \
  -H 'Authorization: Bearer user:12345-…' \
  -H 'Content-Type: application/json' \
  -d '{
    "songId": "user:[email protected]:so_4e7b2c9d0a5f4183b6d8e2c7",
    "mode": "all",
    "async": true
  }'

Questions

Is there an ACE Music API?
Through useapi.net, yes: the ACE Music API runs ACE Music v1, ACE Music v1.1 Preview and ACE-Step v1.5 XL over REST on your ACE Music account, with covers, mashups, stems and MIDI. ACE Music v1 and v1.1 have no public API of their own (as of November 2026), so useapi.net is the only way to call them from code. ACE Music’s own API runs the older ACE-Step v1.5 and has paused new API key sign-ups.

Is there a free ACE-Step API?
Through useapi.net, yes: an ACE-Step v1.5 XL song uses no credits on any ACE Music plan, the Free plan included, with tempo, key, time signature and length settings, remixes and edits. The third-party acestep.io offers its ACE-Step API only on its $49 a month Studio plan, about $0.14 a song (as of November 2026).

How much does an ACE Music v1 song cost through the API?
Through useapi.net, an ACE Music v1 song costs 2 credits of your ACE Music plan: $0.013 on Artist billed yearly and $0.023 on Artist monthly, with nothing added per song. ACE Music v1 is not sold through any public API (as of November 2026), so your plan’s credits are the only way to pay for it per song from code. See Pricing.

Is there an ACE Music MCP server?
Through useapi.net, yes: a hosted ACE Music MCP server with 15 tools lets the Claude app, ChatGPT, Claude Code and Cursor make songs, covers, mashups and stems on your ACE Music account, with nothing to install. ACE Music does not offer a public MCP integration of its own (as of November 2026).

Conclusion

One POST makes two songs on the model that tops the vocal leaderboard, ACE-Step songs cost nothing, and every song can go on to a cover, a mashup, stems or a MIDI file in the next call. Clone the acemusic-api repo, run songs-from-prompt/ with --only 3 on a Free account, and see POST /music for every option.

Visit our Discord Server or Telegram Channel for any support questions and concerns.