Free2 download API

Updated 2026-09-18 · Suno-API team

Endpoint description

Free2 is a separate paid download channel: it resolves MP3/WAV/lyrics/metadata files from a song ID (or a suno.com song link) and returns platform-hosted download addresses. It accepts an API key only — it does not accept a browser login session — and the response never contains Suno's encrypted playback source.

Endpoint: POST /api/music/free2

Billing: Charged per successful song, currently 0.2 CNY per song by default. Choosing several file types in one request costs nothing extra; songs that fail to resolve are not charged. At most 10 songs per request (after de-duplication); the amount actually charged follows the back-office price configuration.

Recommended model: suno-v6. suno-v6, suno-v6-wild and suno-v6-mini are available.

Authentication

Parameter Type Required Notes
Authorization string yes Bearer YOUR_API_KEY
Content-Type string yes application/json

Request parameters

Parameter Type Required Default Notes
song_id string no - A single song ID; a suno.com song link (including the /s/ short link) also works
song_ids string[] no - Multi-song form (recommended); at most 10 songs per request
songs string[] no - Alias of song_ids
files string[] yes - The file types you need: mp3, wav, lyrics, metadata; m4a is not supported

Provide at least one of song_id and song_ids; provide at least one entry in files.

Request example

curl -X POST https://www.suno-api.io/api/music/free2 \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "song_ids": ["song_id_1", "song_id_2"],
    "files": ["mp3", "wav", "lyrics"]
  }'

Response

{
  "code": 200,
  "message": "success",
  "data": {
    "songs": [
      {
        "song_id": "song_id_1",
        "files": [
          {"type": "mp3", "url": "https://media.suno-api.io/assets/song_id_1-free2-v1-mp3.mp3"}
        ]
      },
      {
        "song_id": "song_id_2",
        "files": [],
        "error": {"code": "song_not_found", "message": "song not found or not owned by the current user"}
      }
    ],
    "requested_songs": 2,
    "succeeded_songs": 1,
    "price": 0.2
  }
}
Field Type Notes
songs array Per-song result: song_id, files[], and error on failure
requested_songs number Number of songs after normalisation and de-duplication
succeeded_songs number Number of successes; billing is based on this number
price number Amount actually charged for this call (yuan)

When only one song is requested, the response also returns top-level song_id and files, for compatibility with the older single-song form.

Reusing cached addresses (not charged)

For a song you have already downloaded, downloading it again does not need a new resolution and is not charged again: use POST /api/music/free2/cached to get the current addresses of the files this account downloaded before.

Endpoint: POST /api/music/free2/cached

Billing: Free. It is a read-only cache: no resolving, no transcoding, no charge; it only returns addresses that are already prepared and have not been reclaimed.

⚠️ Download address validity: 7 days — save it in time. songs[].files[].url is served by the platform's object storage and expires after 7 days by default (the files are reclaimed and the old address returns 404); save them to your own storage within those 7 days. Once an address has expired, call POST /api/music/free2 again to prepare it anew and get a fresh valid address (that re-preparation is charged under the normal rules; /api/music/free2/cached only returns cache addresses that are still valid).

Request parameters: identical to POST /api/music/free2 (any one of song_id / song_ids / songs, and at least one entry in files).

curl -X POST https://www.suno-api.io/api/music/free2/cached \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "song_ids": ["98ca3f1d-…", "a185b3d9-…"], "files": ["mp3"] }'
{
  "success": true,
  "data": {
    "items": [
      { "song_id": "98ca3f1d-…", "type": "mp3", "url": "https://…/assets/98ca3f1d-…-free2-v1-mp3.mp3" }
    ],
    "songs": [
      { "song_id": "98ca3f1d-…", "files": [ { "type": "mp3", "url": "https://…" } ], "missing_files": [] },
      { "song_id": "a185b3d9-…", "files": [], "missing_files": ["mp3"] }
    ],
    "missing": ["a185b3d9-…"]
  }
}
Field Type Notes
items array List of addresses ready to download (song_id + type + url)
songs array Per-song results; missing_files are the formats that did not hit the cache this time
missing string[] This song has no usable cache at all (you need to re-resolve with POST /api/music/free2, which is charged per song)

Addresses are returned only for songs you have downloaded before; songs with no download record, or whose assets have been reclaimed, appear only in missing and no address is returned for them.

Notes

NextSong query and history API

Get an API key

Create an API key in the console after signing up. ¥0.6 per run returns 2 tracks, downloads are unlimited, and no phone number is required.

Get API key Back to overview