Symptom
Since ~2026-08-01, suno cover (and generate) fails on a captcha-cleared Pro account:
HTTP 422: {'type': 'string_type', 'loc': ['body', 'params', 'title'], 'msg': 'Input should be a valid string'}
(schema_drift error; the API returns body.params.* locs for the flat fields the CLI sends.)
Root cause
Suno's POST /api/generate/v2-web/ now requires fields that GenerateRequest (src/api/types.rs) omits:
token_provider (present as explicit null)
duration (null)
edit_session_id (null)
project_id (null)
lyrics_project_id (null)
lyricist_id (null)
The current web app sends all of them (reverse-engineered from the live suno.com JS bundle on 2026-08-01; body is still flat, no params wrapper — the body.params.* error loc is server-side wrapping).
Working body (validated HTTP 200, clips returned)
{
"generation_type": "TEXT",
"title": "...", "tags": "...", "negative_tags": "",
"mv": "chirp-fenix", "prompt": "", "make_instrumental": false,
"token": null, "token_provider": null,
"user_uploaded_images_b64": null,
"metadata": { "web_client_pathname": "/create", "is_max_mode": false,
"is_mumble": false, "create_mode": "custom", "user_tier": "",
"create_session_token": "<uuid>", "disable_volume_normalization": false },
"override_fields": [],
"cover_clip_id": "<clip>", "cover_start_s": null, "cover_end_s": null,
"persona_id": null, "artist_clip_id": null, "artist_start_s": null,
"artist_end_s": null, "continue_clip_id": null,
"continued_aligned_prompt": null, "continue_at": null,
"transaction_uuid": "<uuid>",
"duration": null, "edit_session_id": null, "project_id": null,
"lyrics_project_id": null, "lyricist_id": null
}
Note
The types.rs comment says token_provider "422s on a string" — with the new schema the KEY must be present (explicit null is fine). gpt_description_prompt is also sent for describe mode. Happy to open a PR with the updated GenerateRequest + tests if useful.
Symptom
Since ~2026-08-01,
suno cover(and generate) fails on a captcha-cleared Pro account:(schema_drift error; the API returns
body.params.*locs for the flat fields the CLI sends.)Root cause
Suno's
POST /api/generate/v2-web/now requires fields thatGenerateRequest(src/api/types.rs) omits:token_provider(present as explicitnull)duration(null)edit_session_id(null)project_id(null)lyrics_project_id(null)lyricist_id(null)The current web app sends all of them (reverse-engineered from the live suno.com JS bundle on 2026-08-01; body is still flat, no
paramswrapper — thebody.params.*error loc is server-side wrapping).Working body (validated HTTP 200, clips returned)
{ "generation_type": "TEXT", "title": "...", "tags": "...", "negative_tags": "", "mv": "chirp-fenix", "prompt": "", "make_instrumental": false, "token": null, "token_provider": null, "user_uploaded_images_b64": null, "metadata": { "web_client_pathname": "/create", "is_max_mode": false, "is_mumble": false, "create_mode": "custom", "user_tier": "", "create_session_token": "<uuid>", "disable_volume_normalization": false }, "override_fields": [], "cover_clip_id": "<clip>", "cover_start_s": null, "cover_end_s": null, "persona_id": null, "artist_clip_id": null, "artist_start_s": null, "artist_end_s": null, "continue_clip_id": null, "continued_aligned_prompt": null, "continue_at": null, "transaction_uuid": "<uuid>", "duration": null, "edit_session_id": null, "project_id": null, "lyrics_project_id": null, "lyricist_id": null }Note
The types.rs comment says
token_provider"422s on a string" — with the new schema the KEY must be present (explicit null is fine).gpt_description_promptis also sent for describe mode. Happy to open a PR with the updatedGenerateRequest+ tests if useful.