Skip to main content
Music generation is asynchronous. POST /v1/music/generations returns a task ID, status, and usually poll_url. Use that URL until the task is completed or failed.

Choose what to create

Get the current music-model list from:
The example below uses suno_music with mv: "chirp-v4". For lyrics only, choose a model that documents lyric generation, send action: "LYRICS", and omit mv.

Create a music task

Prompts, titles, and tags may appear in your product history. Never place API keys, private URLs, or diagnostic data in them.

Get the finished audio

Use poll_url. If your client needs a fixed URL, call GET /v1/tasks/{id} with the returned id or task_id.

Response Shape

The create response is a task record, not the final audio:
A completed polling response can include the final media fields:
Final media fields are absent until status is completed. Failed tasks return status: "failed" with error. Statuses are pending, processing, completed, and failed. A completed task can include audio_url, video_url, title, lyrics, and other metadata. Store the final URLs so users can reopen the result without generating it again.

Show the right state

  • Show a pending state immediately after task creation.
  • Poll every 5-10s for long tasks, then stop on completed or failed.
  • Do not display a final player until the task is completed and an audio_url exists.
  • For lyric-only tasks, render text output separately from audio tasks so users understand what they are buying.
  • On refresh, resume from the stored task_id instead of creating a new task.

Billing records

Music tasks can reserve an estimated amount when created. The final amount is recorded after completion or failure. Save request_id, task_id, model, endpoint, and billing_transaction_id when it appears; use Management API usage records for the final charge.

Common Errors

API Reference