Home / Blog / Suno API Response Fields: request_id vs song_id
API

Suno API Response Fields: request_id vs song_id

Understand Suno API request IDs, task indexes, song IDs and status fields. Learn which endpoint to call next and how to debug empty queries.

Request receipt and task cards flowing into a completed audio result

Photo: Pexels

Short answer: request_id tracks an asynchronous acceptance order. tasks[].song_id is the real song identifier used for status, detail and download calls. tasks[].index only records the position inside that request, so it is not a song ID.

The objects in one generation

FieldWhat it identifiesNext use
Idempotency-KeyYour business-level retry keyReuse after uncertain network failures
request_idPlatform asynchronous acceptanceCall GET /api/music/requests/{request_id}
tasks[].indexPosition inside one acceptanceStore with request_id for recovery
song_idReal generated songQuery status, details and download media
client_request_idPersisted business request referenceTrace source in detail responses

What request progress looks like

{
  "success": true,
  "data": {
    "request_id": "ac_2026102709000000000000000001",
    "status": "processing",
    "tasks": [
      {
        "index": 0,
        "status": "processing",
        "song_id": "f3fa09f5-3d55-4953-826c-0d23f043ec57"
      },
      {
        "index": 1,
        "status": "pending"
      }
    ]
  }
}

The first task now has a real song ID while the second does not. Save each task independently. Never invent or copy a song ID for the unfinished slot.

Two status layers

LayerStatusMeaning
AcceptancequeuedAccepted, but songs may not be registered yet
AcceptanceprocessingGeneration is running
AcceptancepartialSome songs are complete
AcceptancecompletedAll tasks are complete and song IDs are available
AcceptancefailedAcceptance failed; read error_message
Songpending / processingStill generating; media fields may be empty
Songcompleted / playableReady for media retrieval
SongfailedThis individual song failed

How to send song_ids

The current query contract recommends a comma-separated string:

curl -X POST "https://www.suno-api.io/api/music/query" \
  -H "Authorization: Bearer $SUNO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "suno-v6",
    "song_ids": "id_one,id_two"
  }'

The query response is normally a song array without another data envelope. Add a compatibility fallback for older envelopes, but do not infer the response shape from a fixed position.

Important result fields

FieldPurposeCaution
song_idPrimary key for later callsPersist it in your database
statusControls the workflowDo not infer failure from an empty URL
audio_urlMP3 media locationCan be empty while processing; expires
wav_urlPrepared WAV mediaPrepare it through the WAV endpoint when needed
cover_urlCover imageMay appear only after completion
durationLength in secondsFormat for presentation
parametersRetained generation input in detail responsesHistorical fields can be unavailable

Debug checklist

  1. Only request_id: keep checking request progress.
  2. Song ID but no audio: inspect the song status first.
  3. Empty song query: reject pending: placeholders and verify account scope.
  4. Completed but no media: call the download endpoint and record the song ID if media is still absent.
  5. Old URL returns 404: refresh the URL; do not regenerate the song.

Minimum persistence model

generation_request(client_request_id, idempotency_key, request_id, status)
generated_song(request_id, task_index, song_id, song_status, media_url)

FAQ

Can request_id download a song?

No. It identifies the acceptance workflow. Use song_id for all media operations.

Is song_ids an array or a comma-separated string?

Use the current comma-separated string form for new integrations.

Why did a song query return an empty array?

Check the ID type and account scope. The task may still be represented by a request receipt rather than a queryable song yet.

Read the related generation API, query API, and polling guide.

¥0.6 per generation, 2 tracks, unlimited downloads

Runs on the Suno V6 engine. Download MP3 or WAV as often as you like. Signing up needs an email address, not a phone number.