ApiframeApiframe Docs
Follow-up ActionsSuno

Cover

Re-generate a completed Suno track in a new style while keeping its core melody.

POST /v2/music/suno/actionaction: "cover"

Equivalent to Suno's Cover feature: re-generates one of the parent job's tracks in a different style or genre while preserving its core melody and structure. The result is a fresh pair of tracks — same shape as a generation — and can itself be extended, covered, or split into stems.

Select the track to cover with index (1 or 2) or with the trackId from the parent's result.tracks[].id — exactly one of the two.

Request

ParameterTypeRequiredDescription
parentJobIdstring (uuid)YesID of the completed suno job to act on
actionstringYes"cover"
indexnumberOne of index/trackIdWhich of the parent's tracks to cover: 1 or 2
trackIdstringOne of index/trackIdTrack ID from the parent's result.tracks[].id
promptstringNoContent of the cover — lyrics when the parent was generated with custom_mode: true, a description otherwise (max 5,000 characters). Omit to reuse the source material
titlestringNoTitle for the cover (max 80 characters). Defaults to the source track's title
stylestringNoTarget style/genre tags for the cover (max 1,000 characters) — this is the main lever. Defaults to the source track's tags
negative_tagsstringNoStyles to avoid (max 500 characters)
audio_weightnumberNoHow closely the cover follows the source audio, 01. Higher values stay closer to the original melody; lower values give Suno more creative freedom
webhookUrlstringNoHTTPS URL that receives a JSON POST when the job reaches a subscribed event — see Webhooks for payload formats
webhookEventsstring[]NoEvents to be notified about: "progress", "completed", "failed". Defaults to ["completed", "failed"] when webhookUrl is set

The model version and generation mode (custom_mode, instrumental) are always inherited from the parent.

Credits

11 credits per cover (same as a generation — it produces 2 new tracks).

Example result

Once the job is COMPLETED, the result object on GET /v2/jobs/:id contains a fresh pair of tracks:

{
  "tracks": [
    {
      "id": "5f1c8a92-6d3e-4b7a-8e29-3c0d7f5a1b86",
      "audioUrl": "https://cdn2.apiframe.ai/audio/d4e5f6a7-b8c9-0123-def4-567890123456-0.mp3",
      "imageUrl": "https://cdn2.apiframe.ai/audio/d4e5f6a7-b8c9-0123-def4-567890123456-0.jpeg",
      "title": "Neon Skyline (Acoustic)",
      "tags": "acoustic, folk, warm",
      "duration": 131.2
    },
    {
      "id": "9a4e2b07-1f6d-4c8a-b573-8d2e6a0c4f19",
      "audioUrl": "https://cdn2.apiframe.ai/audio/d4e5f6a7-b8c9-0123-def4-567890123456-1.mp3",
      "imageUrl": "https://cdn2.apiframe.ai/audio/d4e5f6a7-b8c9-0123-def4-567890123456-1.jpeg",
      "title": "Neon Skyline (Acoustic)",
      "tags": "acoustic, folk, warm",
      "duration": 127.6
    }
  ]
}

Each of these tracks can be the parent of another follow-up action.

Code examples

curl -X POST https://api.apiframe.ai/v2/music/suno/action \
  -H "X-API-Key: afk_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "parentJobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "action": "cover",
    "index": 1,
    "style": "acoustic folk, warm, fingerpicked guitar"
  }'
import requests

response = requests.post(
    "https://api.apiframe.ai/v2/music/suno/action",
    headers={
        "X-API-Key": "afk_your_api_key_here",
        "Content-Type": "application/json",
    },
    json={
        "parentJobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
        "action": "cover",
        "index": 1,
        "style": "acoustic folk, warm, fingerpicked guitar",
    },
)
print(response.json())
const response = await fetch("https://api.apiframe.ai/v2/music/suno/action", {
  method: "POST",
  headers: {
    "X-API-Key": "afk_your_api_key_here",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    parentJobId: "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    action: "cover",
    index: 1,
    style: "acoustic folk, warm, fingerpicked guitar",
  }),
});
console.log(await response.json());
body := `{
  "parentJobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "action": "cover",
  "index": 1,
  "style": "acoustic folk, warm, fingerpicked guitar"
}`
req, _ := http.NewRequest("POST", "https://api.apiframe.ai/v2/music/suno/action",
    strings.NewReader(body))
req.Header.Set("X-API-Key", "afk_your_api_key_here")
req.Header.Set("Content-Type", "application/json")

resp, err := http.DefaultClient.Do(req)

Stay close to the original melody

curl -X POST https://api.apiframe.ai/v2/music/suno/action \
  -H "X-API-Key: afk_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "parentJobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "action": "cover",
    "trackId": "8b2f64d1-3c5e-4a7f-9d2b-6e1a0c4f8b3d",
    "style": "orchestral, cinematic",
    "audio_weight": 0.8,
    "title": "Neon Skyline (Orchestral)"
  }'

Try it

POST/v2/music/suno/actionTry it

On this page