Skip to main content
Use the Studio (Song Editor) APIs to edit a single clip and export a new song.
  • Base path: POST /suno/v2/studio/*
  • Async: every call returns { "taskId": "..." } — poll Get Task Status until status=success, then read the new clip from data
  • Account: pass the source clip_id only (same-account ownership). Do not pass the original song taskId for routing

What Studio does / does not do

Studio exports one new clip from one source clip. Build timeline / mixer UI on the client.

vs legacy /audio/* endpoints

Both can coexist. Prefer Studio for Song Editor UX and chained edits.

Critical conventions

  1. Time unit is seconds, relative to the current timeline.
  2. In /studio/edit, ops run in order. Seconds for op N are after ops 1…N−1 have already changed the timeline — not original source seconds.
  3. One in-flight Studio task per user + clip_id (~20 minutes). Wait until success / failed / timeout before the next call.
  4. Chain edits with the previous export’s new clip_id. Never race an unfinished task.
  5. Wait for status=success before the next Studio call (do not use stream clips for Studio — ownership may not be ready).
  6. Error messages are English — show or map them in the product UI.

Optional beat (metronome export)

Most Studio export endpoints accept an optional beat object. Omit it for legacy behavior (no metronome). Supported on: /studio/edit, atomic trim shortcuts (crop, removeSection, duplicate, reverse, fadeIn, fadeOut, setSpeed), and Add Section Commit. Not used by addSection phase-1 or /studio/replace.
Product tips:
  • Batch panel “Apply” into one /studio/edit to reduce exports and lock conflicts.
  • Separate edit vs generate (add section / replace) buttons and show credit cost.
  • After add-section commit, continue polish using the new clip.

Endpoints

Batch edit (preferred for multiple trims)

Supported op values: crop, removeSection, duplicate, split, reverse, fadeIn, fadeOut, setSpeed.

Atomic shortcuts

Generate-class (separate)

Add Section (two phases)

1

Phase 1 — generate candidates

Call Add Section with clip_id + insert_at_s. Poll until success. Result is { clips, studio } (two candidates + commit context).
2

Phase 2 — commit

Call Add Section Commit with the chosen candidate_clip_id (optional source clip_id for validation). The server reverse-looks up phase 1 — no taskId needed.

Polling

Poll every 3–5s. Phase-1 addSection may take minutes; commit often tens of seconds to ~2 minutes.

Common errors

Quick example — batch edit

Then: GET /suno/v2/status?taskId=...