sound.description is the official tags and the title (title case, cut at 80 characters with ...). Any prompt or tags you send are overwritten. max_mode is HTTP 400.
POST /suno/v2/generate returns { "taskId" }. Poll Get Task Status. Schema: GET /suno/v2/generate/schema?task=sound.
Parameters
Do not send
max_mode.
Key
Omitsound.key for Any (user_key is not sent). Anything not in the table is HTTP 400.
Write a space before maj or min: "G maj", not "Gmaj" or "G major". Natural notes are sent unchanged. Major drops maj. Minor replaces min with m. "G" and "G maj" both become "G". "A min" becomes "Am".
The right-hand side of each cell is upstream
user_key. Loop + G maj + Auto becomes { "user_key": "G", "user_loop": true }. Add "bpm": 120 and the object also gets "user_tempo": 120.