---
title: "POST /producer/v1/vocals-swap"
method: POST
path: "/producer/v1/vocals-swap"
---

# POST /producer/v1/vocals-swap

`POST /producer/v1/vocals-swap`

## Request

- Base URL: `https://api.ttapi.io`
- URL: `https://api.ttapi.io/producer/v1/vocals-swap`
- Auth: API key in header `TT-API-KEY`
- TypeScript: <https://skmtc.dev/ttapi/apis/flowmusic-api-docs/docs/producer/v1/vocals-swap/post.ts> (a function with typed inputs; its response is checked against the schema)

Create a vocal cover of the generated audio

## Request body

- GenerateRequest2
  - `music_id` string, required: Parent task's musicId
  - `sound_prompt` string, required: Audio prompt, sound_prompt and lyrics_text cannot both be empty
  - `lyrics_text` string, required: Lyrics text, sound_prompt and lyrics_text cannot both be empty
  - `instrumental` boolean: Whether to generate pure music
  - `mv` 'FUZZ-2.0 Pro' | 'FUZZ-2.0' | 'FUZZ-2.0 Raw' | 'FUZZ-1.1 Pro' | 'FUZZ-1.0 Pro' | 'FUZZ-1.0' | 'FUZZ-1.1' | 'FUZZ-0.8' | 'Lyria 3 preview': Model to use, supported options listed above
  - `title` string: Title
  - `cover_art_url` string: Cover URL
  - `seed` string: Random seed
  - `lyrics_strength` number: Lyrics strength, optional 0-1
  - `sound_strength` number: Audio prompt strength, optional 0.2-1
  - `weirdness` number: Style weirdness, optional 0-1
  - `is_storage` boolean: Whether to save
  - `hook_url` string: Callback notification URL. The data returned is consistent with the task result query response

## Response `200`

Request successful

- object
  - `status` string, required
  - `message` string, required
  - `data` object, required

## Other responses

- `400`: Parameter error
- `401`: Authorization failed

---

[API](https://skmtc.dev/ttapi/apis/flowmusic-api-docs.md) - [All operations](https://skmtc.dev/ttapi/apis/flowmusic-api-docs/llms.txt) - [OpenAPI document](https://skmtc.dev/ttapi/apis/flowmusic-api-docs/revisions/f27f8a59dbd0?raw)
