Get API Key Get API
Docs

Style cover

- Cover an existing song in a different style.

  • Reference the source track: specified by task_id + audio_index, no need to record any extra id
  • Async task: submitting returns a task_id; poll GET /v1/music/tasks/:task_id for the result
Info

Source Audio Reference: No additional IDs are needed for tracks based on existing songs. Just pass task_id (the task ID from the previous run of this task) + audio_index (which result track in the data.result.music[] list, 1-based, default is 1).

Warning

custom determines which fields take effect. All submitted fields must still meet their type, range, and length requirements, even when they do not take effect in the current mode. With custom=true, prompt (lyrics), title, tags, negative_tags, style_weight, weirdness, audio_weight, and persona_id take effect, while gpt_description is ignored. With custom=false, only gpt_description is used; it is required, and omitting it returns 400 during submission. vocal_gender takes effect in both modes. If custom is omitted, the backend infers it in this order: prompt present → true; no prompt but gpt_description present → false; otherwise, tags or title present → true.

Usage

Usage A — cover in a specified style (most common, recommended)

Provide the source song + target style tags; no need to worry about custom (when the system sees tags it automatically treats it as custom=true):

{
  "model": "suno",
  "task_id": "task_xxx",   // source song: a completed music task
  "audio_index": 1,         // which track in the source job (1-based, defaults to 1)
  "version": "v6",
  "tags": "jazz, slow"      // target style → automatically custom=true
}

For more control you can also add prompt (lyrics) / title.

Usage B — inspiration mode (custom=false)

Don't specify a concrete style and let the model improvise, but you must provide gpt_description describing the effect you want:

{
  "model": "suno",
  "task_id": "task_xxx",
  "audio_index": 1,
  "version": "v6",
  "custom": false,
  "gpt_description": "Cover this song in a slow jazz style"   // required when custom=false
}

Pick one of the two usages — don't pass only custom=false without gpt_description (that fails with 400 at submission).

Request example

curl -X POST https://api.openveer.com/v1/music/generations/coverSong \
  -H 'Authorization: Bearer <token>' \
  -H 'Content-Type: application/json' \
  --data '{
    "model": "suno",
    "task_id": "task_01ABC",
    "audio_index": 1,
    "version": "v6",
    "tags": "jazz, slow"
  }'

Response example

{
  "code": 200,
  "data": [
    {
      "status": "submitted",
      "task_id": "task_01K8SGYNNNVBQTXNR4MM964S7K"
    }
  ]
}

Authorizations

Authorization string

All endpoints require authentication using a Bearer Token

Get an API Key:

Visit the API Key management page to get your API Key

Add the following to the request headers when using it:

Authorization: Bearer YOUR_API_KEY

Body

model string

Audio model. Currently pass suno (defaults to suno if omitted).

task_id string

Our task_id of the job that produced the source track. If missing or the source cannot be resolved, a 400 is returned at submission time.

audio_index integer

Selects a track from the source task's data.result.music[] array (1-based: 1 is the first track; default 1).

version string

Public version: v6 / v6-wild / v6-mini. Defaults to v6; omit this field when using custom_model_id.

custom_model_id string

The full UUID returned by the model-creation task. Mutually exclusive with version and persona_id.

custom boolean

true=custom mode (prompt used as lyrics); false=inspiration mode (uses gpt_description); if omitted, inferred from the content (see the Warning above).

prompt string

Lyrics. Takes effect when custom=true (ignored in inspiration mode).

gpt_description string

Inspiration prompt. Required when custom=false — if missing, the request fails with 400 at submission (nothing is charged).

title string

Title. Only takes effect when custom=true.

tags string

Target style tags. Only takes effect when custom=true.

negative_tags string

Style tags to exclude. Only takes effect when custom=true.

style_weight number

Style weight, 0.00–1.00 (out-of-range values return 400 directly at submission time). Only takes effect when custom=true.

weirdness number

Creativity weight, 0.00 – 1.00. Compatible with the old name weirdness_constraint; new requests should use weirdness.

audio_weight number

Audio weight, 0.00–1.00. Only takes effect when custom=true.

vocal_gender string

Vocal gender: Male / Female. Works in both modes.

persona_id string

Persona Style ID. Only applies when custom=true is used and mutually exclusive with custom_model_id.

duration_s integer

target generation duration, range 10-360 seconds. Only available when set as custom=true; actual duration will be based on the result.

variety string

Style variation: off / normal / high / extra / max. Optional.

max_mode boolean

Enables Max mode. Requires custom mode and is billed at twice the standard price.

audio_format string

Output audio format: mp3 / m4a / wav.

Note

Get Result: This is an asynchronous task. After submission, you will receive task_id and then poll GET /v1/music/tasks/{task_id} every 3–5 seconds until status becomes completed or failed (music generation usually takes 30–120 seconds; while generation is in progress, status may be pending or processing, and progress is an integer from 0 to 100 and is not guaranteed to change at fixed intervals). Once completed, read audio_url from data.result.music[]. In case of failure, data.error.message provides the reason and the deducted amount will be automatically refunded.

Response

code integer

Response status code

data array
Returned data array
status string

Task status

  * submitted - Submitted
task_id string

Unique task identifier (used to poll GET /v1/music/tasks/{task_id} for the result)

This documentation is built and hosted on Mintlify, a developer documentation platform.