Skip to content
API Reference
API Reference

Suno Extend-Music

Use the extend music endpoint to create an asynchronous Task.

01

Overview

Use the extend music endpoint with a supported model. Use the returned Task ID to retrieve its state, or provide callback_url for the deliveries documented below.

Quick start

  1. Create an API key and set it as RUNAPI_API_KEY.
  2. Choose a supported model and send a POST request whose body matches that model's schema.
  3. Store the returned task ID, then poll until a terminal state or handle the callbacks documented below.

Endpoint

POST /api/v1/suno/extend_music
Base URL
https://runapi.ai
API version
v1
Authentication
Authorization: Bearer YOUR_API_TOKEN
02

Supported models

Open a model page for current pricing, rate limits, and commercial-usage details.

03

Request schema

JSON body

Fields and allowed values depend on the selected model. When supplied, callback_url receives the Task deliveries documented below.

suno-v420 fields
audio_idstring
Optional

Source audio ID to extend. Provide one of task_id, audio_id, audio_url, or upload_url.

audio_urlstring
Optional

Source audio URL to extend. Provide one of task_id, audio_id, audio_url, or upload_url.

audio_weightnumber
Optional

Audio weight (0-1).

Range: 0 - 1
callback_urlstring
Optional

Webhook URL for async notifications.

continue_atnumber
Optional

Seconds into the source to continue from. Required in custom parameter mode.

instrumentalboolean
Optional

When true, generate without vocals.

lyricsstring
Optional

Exact lyrics. Only allowed when extending uploaded audio in custom parameter mode.

Bound: 5000
modelstring
Required

Model slug.

negative_tagsstring
Optional

Styles to avoid.

parameter_modestring
Required

Inherit the source track's parameters (source) or supply custom ones (custom).

Allowed values: source, custom
persona_idstring
Optional

Persona ID.

persona_typestring
Optional

Persona type.

Allowed values: style, voice
promptstring
Optional

Extension brief. Cannot be combined with lyrics.

Bound: 5000
stylestring
Optional

Style preset. Required in custom parameter mode.

Bound: 1000
style_weightnumber
Optional

Style adherence weight (0-1).

Range: 0 - 1
task_idstring
Optional

Source task ID to extend. Provide one of task_id, audio_id, audio_url, or upload_url.

titlestring
Optional

Song title. Required in custom parameter mode.

Bound: 80
upload_urlstring
Optional

Uploaded source audio URL to extend. Provide one of task_id, audio_id, audio_url, or upload_url.

vocal_genderstring
Optional

Vocal gender.

Allowed values: male, female
weirdness_constraintnumber
Optional

Weirdness constraint (0-1).

Range: 0 - 1
suno-v4.520 fields
audio_idstring
Optional

Source audio ID to extend. Provide one of task_id, audio_id, audio_url, or upload_url.

audio_urlstring
Optional

Source audio URL to extend. Provide one of task_id, audio_id, audio_url, or upload_url.

audio_weightnumber
Optional

Audio weight (0-1).

Range: 0 - 1
callback_urlstring
Optional

Webhook URL for async notifications.

continue_atnumber
Optional

Seconds into the source to continue from. Required in custom parameter mode.

instrumentalboolean
Optional

When true, generate without vocals.

lyricsstring
Optional

Exact lyrics. Only allowed when extending uploaded audio in custom parameter mode.

Bound: 5000
modelstring
Required

Model slug.

negative_tagsstring
Optional

Styles to avoid.

parameter_modestring
Required

Inherit the source track's parameters (source) or supply custom ones (custom).

Allowed values: source, custom
persona_idstring
Optional

Persona ID.

persona_typestring
Optional

Persona type.

Allowed values: style, voice
promptstring
Optional

Extension brief. Cannot be combined with lyrics.

Bound: 5000
stylestring
Optional

Style preset. Required in custom parameter mode.

Bound: 1000
style_weightnumber
Optional

Style adherence weight (0-1).

Range: 0 - 1
task_idstring
Optional

Source task ID to extend. Provide one of task_id, audio_id, audio_url, or upload_url.

titlestring
Optional

Song title. Required in custom parameter mode.

Bound: 80
upload_urlstring
Optional

Uploaded source audio URL to extend. Provide one of task_id, audio_id, audio_url, or upload_url.

vocal_genderstring
Optional

Vocal gender.

Allowed values: male, female
weirdness_constraintnumber
Optional

Weirdness constraint (0-1).

Range: 0 - 1
suno-v4.5-all20 fields
audio_idstring
Optional

Source audio ID to extend. Provide one of task_id, audio_id, audio_url, or upload_url.

audio_urlstring
Optional

Source audio URL to extend. Provide one of task_id, audio_id, audio_url, or upload_url.

audio_weightnumber
Optional

Audio weight (0-1).

Range: 0 - 1
callback_urlstring
Optional

Webhook URL for async notifications.

continue_atnumber
Optional

Seconds into the source to continue from. Required in custom parameter mode.

instrumentalboolean
Optional

When true, generate without vocals.

lyricsstring
Optional

Exact lyrics. Only allowed when extending uploaded audio in custom parameter mode.

Bound: 5000
modelstring
Required

Model slug.

negative_tagsstring
Optional

Styles to avoid.

parameter_modestring
Required

Inherit the source track's parameters (source) or supply custom ones (custom).

Allowed values: source, custom
persona_idstring
Optional

Persona ID.

persona_typestring
Optional

Persona type.

Allowed values: style, voice
promptstring
Optional

Extension brief. Cannot be combined with lyrics.

Bound: 5000
stylestring
Optional

Style preset. Required in custom parameter mode.

Bound: 1000
style_weightnumber
Optional

Style adherence weight (0-1).

Range: 0 - 1
task_idstring
Optional

Source task ID to extend. Provide one of task_id, audio_id, audio_url, or upload_url.

titlestring
Optional

Song title. Required in custom parameter mode.

Bound: 80
upload_urlstring
Optional

Uploaded source audio URL to extend. Provide one of task_id, audio_id, audio_url, or upload_url.

vocal_genderstring
Optional

Vocal gender.

Allowed values: male, female
weirdness_constraintnumber
Optional

Weirdness constraint (0-1).

Range: 0 - 1
suno-v4.5-plus20 fields
audio_idstring
Optional

Source audio ID to extend. Provide one of task_id, audio_id, audio_url, or upload_url.

audio_urlstring
Optional

Source audio URL to extend. Provide one of task_id, audio_id, audio_url, or upload_url.

audio_weightnumber
Optional

Audio weight (0-1).

Range: 0 - 1
callback_urlstring
Optional

Webhook URL for async notifications.

continue_atnumber
Optional

Seconds into the source to continue from. Required in custom parameter mode.

instrumentalboolean
Optional

When true, generate without vocals.

lyricsstring
Optional

Exact lyrics. Only allowed when extending uploaded audio in custom parameter mode.

Bound: 5000
modelstring
Required

Model slug.

negative_tagsstring
Optional

Styles to avoid.

parameter_modestring
Required

Inherit the source track's parameters (source) or supply custom ones (custom).

Allowed values: source, custom
persona_idstring
Optional

Persona ID.

persona_typestring
Optional

Persona type.

Allowed values: style, voice
promptstring
Optional

Extension brief. Cannot be combined with lyrics.

Bound: 5000
stylestring
Optional

Style preset. Required in custom parameter mode.

Bound: 1000
style_weightnumber
Optional

Style adherence weight (0-1).

Range: 0 - 1
task_idstring
Optional

Source task ID to extend. Provide one of task_id, audio_id, audio_url, or upload_url.

titlestring
Optional

Song title. Required in custom parameter mode.

Bound: 80
upload_urlstring
Optional

Uploaded source audio URL to extend. Provide one of task_id, audio_id, audio_url, or upload_url.

vocal_genderstring
Optional

Vocal gender.

Allowed values: male, female
weirdness_constraintnumber
Optional

Weirdness constraint (0-1).

Range: 0 - 1
suno-v520 fields
audio_idstring
Optional

Source audio ID to extend. Provide one of task_id, audio_id, audio_url, or upload_url.

audio_urlstring
Optional

Source audio URL to extend. Provide one of task_id, audio_id, audio_url, or upload_url.

audio_weightnumber
Optional

Audio weight (0-1).

Range: 0 - 1
callback_urlstring
Optional

Webhook URL for async notifications.

continue_atnumber
Optional

Seconds into the source to continue from. Required in custom parameter mode.

instrumentalboolean
Optional

When true, generate without vocals.

lyricsstring
Optional

Exact lyrics. Only allowed when extending uploaded audio in custom parameter mode.

Bound: 5000
modelstring
Required

Model slug.

negative_tagsstring
Optional

Styles to avoid.

parameter_modestring
Required

Inherit the source track's parameters (source) or supply custom ones (custom).

Allowed values: source, custom
persona_idstring
Optional

Persona ID.

persona_typestring
Optional

Persona type.

Allowed values: style, voice
promptstring
Optional

Extension brief. Cannot be combined with lyrics.

Bound: 5000
stylestring
Optional

Style preset. Required in custom parameter mode.

Bound: 1000
style_weightnumber
Optional

Style adherence weight (0-1).

Range: 0 - 1
task_idstring
Optional

Source task ID to extend. Provide one of task_id, audio_id, audio_url, or upload_url.

titlestring
Optional

Song title. Required in custom parameter mode.

Bound: 80
upload_urlstring
Optional

Uploaded source audio URL to extend. Provide one of task_id, audio_id, audio_url, or upload_url.

vocal_genderstring
Optional

Vocal gender.

Allowed values: male, female
weirdness_constraintnumber
Optional

Weirdness constraint (0-1).

Range: 0 - 1
suno-v5.520 fields
audio_idstring
Optional

Source audio ID to extend. Provide one of task_id, audio_id, audio_url, or upload_url.

audio_urlstring
Optional

Source audio URL to extend. Provide one of task_id, audio_id, audio_url, or upload_url.

audio_weightnumber
Optional

Audio weight (0-1).

Range: 0 - 1
callback_urlstring
Optional

Webhook URL for async notifications.

continue_atnumber
Optional

Seconds into the source to continue from. Required in custom parameter mode.

instrumentalboolean
Optional

When true, generate without vocals.

lyricsstring
Optional

Exact lyrics. Only allowed when extending uploaded audio in custom parameter mode.

Bound: 5000
modelstring
Required

Model slug.

negative_tagsstring
Optional

Styles to avoid.

parameter_modestring
Required

Inherit the source track's parameters (source) or supply custom ones (custom).

Allowed values: source, custom
persona_idstring
Optional

Persona ID.

persona_typestring
Optional

Persona type.

Allowed values: style, voice
promptstring
Optional

Extension brief. Cannot be combined with lyrics.

Bound: 5000
stylestring
Optional

Style preset. Required in custom parameter mode.

Bound: 1000
style_weightnumber
Optional

Style adherence weight (0-1).

Range: 0 - 1
task_idstring
Optional

Source task ID to extend. Provide one of task_id, audio_id, audio_url, or upload_url.

titlestring
Optional

Song title. Required in custom parameter mode.

Bound: 80
upload_urlstring
Optional

Uploaded source audio URL to extend. Provide one of task_id, audio_id, audio_url, or upload_url.

vocal_genderstring
Optional

Vocal gender.

Allowed values: male, female
weirdness_constraintnumber
Optional

Weirdness constraint (0-1).

Range: 0 - 1
suno-v620 fields
audio_idstring
Optional

Source audio ID to extend. Provide one of task_id, audio_id, audio_url, or upload_url.

audio_urlstring
Optional

Source audio URL to extend. Provide one of task_id, audio_id, audio_url, or upload_url.

audio_weightnumber
Optional

Audio weight (0-1).

Range: 0 - 1
callback_urlstring
Optional

Webhook URL for async notifications.

continue_atnumber
Optional

Seconds into the source to continue from. Required in custom parameter mode.

instrumentalboolean
Optional

When true, generate without vocals.

lyricsstring
Optional

Exact lyrics. Only allowed when extending uploaded audio in custom parameter mode.

Bound: 5000
modelstring
Required

Model slug.

negative_tagsstring
Optional

Styles to avoid.

parameter_modestring
Required

Inherit the source track's parameters (source) or supply custom ones (custom).

Allowed values: source, custom
persona_idstring
Optional

Persona ID.

persona_typestring
Optional

Persona type.

Allowed values: style, voice
promptstring
Optional

Extension brief. Cannot be combined with lyrics.

Bound: 5000
stylestring
Optional

Style preset. Required in custom parameter mode.

Bound: 1000
style_weightnumber
Optional

Style adherence weight (0-1).

Range: 0 - 1
task_idstring
Optional

Source task ID to extend. Provide one of task_id, audio_id, audio_url, or upload_url.

titlestring
Optional

Song title. Required in custom parameter mode.

Bound: 80
upload_urlstring
Optional

Uploaded source audio URL to extend. Provide one of task_id, audio_id, audio_url, or upload_url.

vocal_genderstring
Optional

Vocal gender.

Allowed values: male, female
weirdness_constraintnumber
Optional

Weirdness constraint (0-1).

Range: 0 - 1
suno-v6-mini20 fields
audio_idstring
Optional

Source audio ID to extend. Provide one of task_id, audio_id, audio_url, or upload_url.

audio_urlstring
Optional

Source audio URL to extend. Provide one of task_id, audio_id, audio_url, or upload_url.

audio_weightnumber
Optional

Audio weight (0-1).

Range: 0 - 1
callback_urlstring
Optional

Webhook URL for async notifications.

continue_atnumber
Optional

Seconds into the source to continue from. Required in custom parameter mode.

instrumentalboolean
Optional

When true, generate without vocals.

lyricsstring
Optional

Exact lyrics. Only allowed when extending uploaded audio in custom parameter mode.

Bound: 5000
modelstring
Required

Model slug.

negative_tagsstring
Optional

Styles to avoid.

parameter_modestring
Required

Inherit the source track's parameters (source) or supply custom ones (custom).

Allowed values: source, custom
persona_idstring
Optional

Persona ID.

persona_typestring
Optional

Persona type.

Allowed values: style, voice
promptstring
Optional

Extension brief. Cannot be combined with lyrics.

Bound: 5000
stylestring
Optional

Style preset. Required in custom parameter mode.

Bound: 1000
style_weightnumber
Optional

Style adherence weight (0-1).

Range: 0 - 1
task_idstring
Optional

Source task ID to extend. Provide one of task_id, audio_id, audio_url, or upload_url.

titlestring
Optional

Song title. Required in custom parameter mode.

Bound: 80
upload_urlstring
Optional

Uploaded source audio URL to extend. Provide one of task_id, audio_id, audio_url, or upload_url.

vocal_genderstring
Optional

Vocal gender.

Allowed values: male, female
weirdness_constraintnumber
Optional

Weirdness constraint (0-1).

Range: 0 - 1
suno-v6-wild20 fields
audio_idstring
Optional

Source audio ID to extend. Provide one of task_id, audio_id, audio_url, or upload_url.

audio_urlstring
Optional

Source audio URL to extend. Provide one of task_id, audio_id, audio_url, or upload_url.

audio_weightnumber
Optional

Audio weight (0-1).

Range: 0 - 1
callback_urlstring
Optional

Webhook URL for async notifications.

continue_atnumber
Optional

Seconds into the source to continue from. Required in custom parameter mode.

instrumentalboolean
Optional

When true, generate without vocals.

lyricsstring
Optional

Exact lyrics. Only allowed when extending uploaded audio in custom parameter mode.

Bound: 5000
modelstring
Required

Model slug.

negative_tagsstring
Optional

Styles to avoid.

parameter_modestring
Required

Inherit the source track's parameters (source) or supply custom ones (custom).

Allowed values: source, custom
persona_idstring
Optional

Persona ID.

persona_typestring
Optional

Persona type.

Allowed values: style, voice
promptstring
Optional

Extension brief. Cannot be combined with lyrics.

Bound: 5000
stylestring
Optional

Style preset. Required in custom parameter mode.

Bound: 1000
style_weightnumber
Optional

Style adherence weight (0-1).

Range: 0 - 1
task_idstring
Optional

Source task ID to extend. Provide one of task_id, audio_id, audio_url, or upload_url.

titlestring
Optional

Song title. Required in custom parameter mode.

Bound: 80
upload_urlstring
Optional

Uploaded source audio URL to extend. Provide one of task_id, audio_id, audio_url, or upload_url.

vocal_genderstring
Optional

Vocal gender.

Allowed values: male, female
weirdness_constraintnumber
Optional

Weirdness constraint (0-1).

Range: 0 - 1
04

Create acceptance

HTTP 202

POST /api/v1/suno/extend_music

Response schema
JSON
{
  "properties": {
    "billing": {
      "properties": {
        "refund": {
          "oneOf": [
            {
              "properties": {
                "refunded_at": {
                  "type": "string"
                }
              },
              "required": [
                "refunded_at"
              ],
              "type": "object",
              "unevaluatedProperties": false
            },
            {
              "enum": [
                null
              ]
            }
          ]
        },
        "reservation": {
          "oneOf": [
            {
              "properties": {
                "amount_cents": {
                  "type": "integer"
                }
              },
              "required": [
                "amount_cents"
              ],
              "type": "object",
              "unevaluatedProperties": false
            },
            {
              "enum": [
                null
              ]
            }
          ]
        },
        "settlement": {
          "oneOf": [
            {
              "properties": {
                "amount_micro_cents": {
                  "type": "integer"
                },
                "charged_amount_cents": {
                  "type": "integer"
                }
              },
              "required": [
                "charged_amount_cents",
                "amount_micro_cents"
              ],
              "type": "object",
              "unevaluatedProperties": false
            },
            {
              "enum": [
                null
              ]
            }
          ]
        }
      },
      "required": [
        "reservation",
        "settlement",
        "refund"
      ],
      "type": "object",
      "unevaluatedProperties": false
    },
    "id": {
      "type": "string"
    },
    "status": {
      "enum": [
        "processing"
      ],
      "type": "string"
    },
    "task_replayed": {
      "type": "boolean"
    }
  },
  "required": [
    "id",
    "status",
    "billing"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

Response example

JSON
{
  "billing": {
    "refund": null,
    "reservation": null,
    "settlement": null
  },
  "id": "tsk_reference_demo",
  "status": "processing"
}
05

Polling processing

HTTP 200

GET /api/v1/suno/extend_music/:id

Response schema
JSON
{
  "properties": {
    "audios": {
      "items": {
        "properties": {
          "audio_url": {
            "type": "string",
            "x-runapi-generated-media": true
          },
          "duration": {
            "type": "number"
          },
          "id": {
            "type": "string"
          },
          "image_url": {
            "type": "string",
            "x-runapi-generated-media": true
          },
          "lyrics": {
            "type": "string"
          },
          "model_name": {
            "type": "string"
          },
          "stream_audio_url": {
            "type": "string",
            "x-runapi-generated-media": true
          },
          "tags": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "title": {
            "type": "string"
          }
        },
        "required": [
          "id"
        ],
        "type": "object",
        "unevaluatedProperties": false
      },
      "type": "array"
    },
    "billing": {
      "properties": {
        "refund": {
          "oneOf": [
            {
              "properties": {
                "refunded_at": {
                  "type": "string"
                }
              },
              "required": [
                "refunded_at"
              ],
              "type": "object",
              "unevaluatedProperties": false
            },
            {
              "enum": [
                null
              ]
            }
          ]
        },
        "reservation": {
          "oneOf": [
            {
              "properties": {
                "amount_cents": {
                  "type": "integer"
                }
              },
              "required": [
                "amount_cents"
              ],
              "type": "object",
              "unevaluatedProperties": false
            },
            {
              "enum": [
                null
              ]
            }
          ]
        },
        "settlement": {
          "oneOf": [
            {
              "properties": {
                "amount_micro_cents": {
                  "type": "integer"
                },
                "charged_amount_cents": {
                  "type": "integer"
                }
              },
              "required": [
                "charged_amount_cents",
                "amount_micro_cents"
              ],
              "type": "object",
              "unevaluatedProperties": false
            },
            {
              "enum": [
                null
              ]
            }
          ]
        }
      },
      "required": [
        "reservation",
        "settlement",
        "refund"
      ],
      "type": "object",
      "unevaluatedProperties": false
    },
    "generation_stage": {
      "enum": [
        "text_generated",
        "first_audio_ready"
      ],
      "type": "string"
    },
    "id": {
      "type": "string"
    },
    "status": {
      "enum": [
        "processing"
      ],
      "type": "string"
    }
  },
  "required": [
    "id",
    "status",
    "billing"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

Response example

JSON
{
  "billing": {
    "refund": null,
    "reservation": null,
    "settlement": null
  },
  "generation_stage": "text_generated",
  "id": "tsk_reference_demo",
  "status": "processing"
}
06

Polling completed

HTTP 200

GET /api/v1/suno/extend_music/:id

Response schema
JSON
{
  "properties": {
    "audios": {
      "items": {
        "properties": {
          "audio_url": {
            "type": "string",
            "x-runapi-generated-media": true
          },
          "duration": {
            "type": "number"
          },
          "id": {
            "type": "string"
          },
          "image_url": {
            "type": "string",
            "x-runapi-generated-media": true
          },
          "lyrics": {
            "type": "string"
          },
          "model_name": {
            "type": "string"
          },
          "stream_audio_url": {
            "type": "string",
            "x-runapi-generated-media": true
          },
          "tags": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "title": {
            "type": "string"
          }
        },
        "required": [
          "id"
        ],
        "type": "object",
        "unevaluatedProperties": false
      },
      "type": "array"
    },
    "billing": {
      "properties": {
        "refund": {
          "oneOf": [
            {
              "properties": {
                "refunded_at": {
                  "type": "string"
                }
              },
              "required": [
                "refunded_at"
              ],
              "type": "object",
              "unevaluatedProperties": false
            },
            {
              "enum": [
                null
              ]
            }
          ]
        },
        "reservation": {
          "oneOf": [
            {
              "properties": {
                "amount_cents": {
                  "type": "integer"
                }
              },
              "required": [
                "amount_cents"
              ],
              "type": "object",
              "unevaluatedProperties": false
            },
            {
              "enum": [
                null
              ]
            }
          ]
        },
        "settlement": {
          "oneOf": [
            {
              "properties": {
                "amount_micro_cents": {
                  "type": "integer"
                },
                "charged_amount_cents": {
                  "type": "integer"
                }
              },
              "required": [
                "charged_amount_cents",
                "amount_micro_cents"
              ],
              "type": "object",
              "unevaluatedProperties": false
            },
            {
              "enum": [
                null
              ]
            }
          ]
        }
      },
      "required": [
        "reservation",
        "settlement",
        "refund"
      ],
      "type": "object",
      "unevaluatedProperties": false
    },
    "generation_stage": {
      "enum": [
        "text_generated",
        "first_audio_ready",
        "all_audios_ready",
        "failed"
      ],
      "type": "string"
    },
    "id": {
      "type": "string"
    },
    "status": {
      "enum": [
        "completed"
      ],
      "type": "string"
    }
  },
  "required": [
    "id",
    "status",
    "audios",
    "billing"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

Response example

JSON
{
  "audios": [
    {
      "audio_url": "https://file.runapi.ai/reference-audio.mp3",
      "id": "audio_reference"
    }
  ],
  "billing": {
    "refund": null,
    "reservation": null,
    "settlement": null
  },
  "id": "tsk_reference_demo",
  "status": "completed"
}
07

Polling failed

HTTP 200

GET /api/v1/suno/extend_music/:id

Response schema
JSON
{
  "properties": {
    "billing": {
      "properties": {
        "refund": {
          "oneOf": [
            {
              "properties": {
                "refunded_at": {
                  "type": "string"
                }
              },
              "required": [
                "refunded_at"
              ],
              "type": "object",
              "unevaluatedProperties": false
            },
            {
              "enum": [
                null
              ]
            }
          ]
        },
        "reservation": {
          "oneOf": [
            {
              "properties": {
                "amount_cents": {
                  "type": "integer"
                }
              },
              "required": [
                "amount_cents"
              ],
              "type": "object",
              "unevaluatedProperties": false
            },
            {
              "enum": [
                null
              ]
            }
          ]
        },
        "settlement": {
          "oneOf": [
            {
              "properties": {
                "amount_micro_cents": {
                  "type": "integer"
                },
                "charged_amount_cents": {
                  "type": "integer"
                }
              },
              "required": [
                "charged_amount_cents",
                "amount_micro_cents"
              ],
              "type": "object",
              "unevaluatedProperties": false
            },
            {
              "enum": [
                null
              ]
            }
          ]
        }
      },
      "required": [
        "reservation",
        "settlement",
        "refund"
      ],
      "type": "object",
      "unevaluatedProperties": false
    },
    "error": {
      "type": "string"
    },
    "id": {
      "type": "string"
    },
    "status": {
      "enum": [
        "failed"
      ],
      "type": "string"
    }
  },
  "required": [
    "id",
    "status",
    "error",
    "billing"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

Response example

JSON
{
  "billing": {
    "refund": null,
    "reservation": null,
    "settlement": null
  },
  "error": "Task processing failed.",
  "id": "tsk_reference_demo",
  "status": "failed"
}
08

Customer callback: processing

HTTP 200

POST callback_url

Response schema
JSON
{
  "properties": {
    "audios": {
      "items": {
        "properties": {
          "audio_url": {
            "type": "string",
            "x-runapi-generated-media": true
          },
          "duration": {
            "type": "number"
          },
          "id": {
            "type": "string"
          },
          "image_url": {
            "type": "string",
            "x-runapi-generated-media": true
          },
          "lyrics": {
            "type": "string"
          },
          "model_name": {
            "type": "string"
          },
          "stream_audio_url": {
            "type": "string",
            "x-runapi-generated-media": true
          },
          "tags": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "title": {
            "type": "string"
          }
        },
        "required": [
          "id"
        ],
        "type": "object",
        "unevaluatedProperties": false
      },
      "type": "array"
    },
    "generation_stage": {
      "enum": [
        "text_generated",
        "first_audio_ready"
      ],
      "type": "string"
    },
    "id": {
      "type": "string"
    },
    "status": {
      "enum": [
        "processing"
      ],
      "type": "string"
    }
  },
  "required": [
    "id",
    "status"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

Response example

JSON
{
  "generation_stage": "text_generated",
  "id": "tsk_reference_demo",
  "status": "processing"
}
09

Customer callback: completed

HTTP 200

POST callback_url

Response schema
JSON
{
  "properties": {
    "audios": {
      "items": {
        "properties": {
          "audio_url": {
            "type": "string",
            "x-runapi-generated-media": true
          },
          "duration": {
            "type": "number"
          },
          "id": {
            "type": "string"
          },
          "image_url": {
            "type": "string",
            "x-runapi-generated-media": true
          },
          "lyrics": {
            "type": "string"
          },
          "model_name": {
            "type": "string"
          },
          "stream_audio_url": {
            "type": "string",
            "x-runapi-generated-media": true
          },
          "tags": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "title": {
            "type": "string"
          }
        },
        "required": [
          "id"
        ],
        "type": "object",
        "unevaluatedProperties": false
      },
      "type": "array"
    },
    "generation_stage": {
      "enum": [
        "text_generated",
        "first_audio_ready",
        "all_audios_ready",
        "failed"
      ],
      "type": "string"
    },
    "id": {
      "type": "string"
    },
    "status": {
      "enum": [
        "completed"
      ],
      "type": "string"
    }
  },
  "required": [
    "id",
    "status",
    "audios"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

Response example

JSON
{
  "audios": [
    {
      "audio_url": "https://file.runapi.ai/reference-audio.mp3",
      "id": "audio_reference"
    }
  ],
  "id": "tsk_reference_demo",
  "status": "completed"
}
10

Customer callback: failed

HTTP 200

POST callback_url

Response schema
JSON
{
  "properties": {
    "error": {
      "oneOf": [
        {
          "type": "string"
        },
        {
          "properties": {
            "code": {
              "type": "string"
            },
            "limit_cents": {
              "type": "integer"
            },
            "message": {
              "type": "string"
            },
            "reset_at": {
              "format": "date-time",
              "type": [
                "string",
                "null"
              ]
            },
            "used_cents": {
              "type": "integer"
            },
            "window": {
              "enum": [
                "1h",
                "1d",
                "7d",
                "daily",
                "weekly",
                "monthly",
                "lifetime"
              ],
              "type": "string"
            }
          },
          "required": [
            "code",
            "message"
          ],
          "type": "object",
          "unevaluatedProperties": false
        }
      ]
    },
    "id": {
      "type": "string"
    },
    "status": {
      "enum": [
        "failed"
      ],
      "type": "string"
    }
  },
  "required": [
    "id",
    "status",
    "error"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

Response example

JSON
{
  "error": {
    "code": "generation_failed",
    "message": "Task processing failed."
  },
  "id": "tsk_reference_demo",
  "status": "failed"
}
11

Errors

HTTP 401

POST /api/v1/suno/extend_music

Response schema
JSON
{
  "properties": {
    "error": {
      "description": "Human-readable error message.",
      "type": "string"
    }
  },
  "required": [
    "error"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

Response example

JSON
{
  "error": "Authentication required"
}
12

Errors

HTTP 401

GET /api/v1/suno/extend_music/:id

Response schema
JSON
{
  "properties": {
    "error": {
      "description": "Human-readable error message.",
      "type": "string"
    }
  },
  "required": [
    "error"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

Response example

JSON
{
  "error": "Authentication required"
}
13

Errors

HTTP 400

POST /api/v1/suno/extend_music

Response schema
JSON
{
  "oneOf": [
    {
      "properties": {
        "error": {
          "description": "Human-readable error message.",
          "type": "string"
        }
      },
      "required": [
        "error"
      ],
      "type": "object",
      "unevaluatedProperties": false
    },
    {
      "properties": {
        "error": {
          "description": "Human-readable validation summary.",
          "type": "string"
        },
        "errors": {
          "additionalProperties": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "description": "Validation messages keyed by public request field, with an array of human-readable strings for each field.",
          "type": "object"
        }
      },
      "required": [
        "error",
        "errors"
      ],
      "type": "object",
      "unevaluatedProperties": false
    }
  ]
}

Response example

JSON
{
  "error": "model must be one of: suno-v4, suno-v4.5, suno-v4.5-all, suno-v4.5-plus, suno-v5, suno-v5.5, suno-v6, suno-v6-mini, suno-v6-wild"
}
14

Errors

HTTP 402

POST /api/v1/suno/extend_music

Response schema
JSON
{
  "properties": {
    "error": {
      "description": "Human-readable error message.",
      "type": "string"
    }
  },
  "required": [
    "error"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

Response example

JSON
{
  "error": "Insufficient balance"
}
15

Errors

HTTP 429

POST /api/v1/suno/extend_music

Response schema
JSON
{
  "properties": {
    "error": {
      "description": "Human-readable error message.",
      "type": "string"
    }
  },
  "required": [
    "error"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

Response example

JSON
{
  "error": "API key credit limit exceeded"
}
16

Errors

HTTP 409

POST /api/v1/suno/extend_music

Response schema
JSON
{
  "properties": {
    "error": {
      "description": "Human-readable error message.",
      "type": "string"
    }
  },
  "required": [
    "error"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

Response example

JSON
{
  "error": "The request uses features that are not supported for the selected model"
}
17

Errors

HTTP 429

POST /api/v1/suno/extend_music

Response schema
JSON
{
  "properties": {
    "error": {
      "description": "Human-readable error message.",
      "type": "string"
    }
  },
  "required": [
    "error"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

Response example

JSON
{
  "error": "Rate limit reached. Please retry later."
}
18

Errors

HTTP 503

POST /api/v1/suno/extend_music

Response schema
JSON
{
  "properties": {
    "error": {
      "description": "Human-readable error message.",
      "type": "string"
    }
  },
  "required": [
    "error"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

Response example

JSON
{
  "error": "Service under maintenance, please try again later"
}
19

Errors

HTTP 504

POST /api/v1/suno/extend_music

Response schema
JSON
{
  "properties": {
    "error": {
      "description": "Human-readable error message.",
      "type": "string"
    }
  },
  "required": [
    "error"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

Response example

JSON
{
  "error": "The request timed out"
}
20

Errors

HTTP 404

GET /api/v1/suno/extend_music/:id

Response schema
JSON
{
  "properties": {
    "error": {
      "description": "Human-readable error message.",
      "type": "string"
    }
  },
  "required": [
    "error"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

Response example

JSON
{
  "error": "Task with id 'tsk_reference_demo' not found"
}
21

Generated Code Samples

Use cURL directly, or install an SDK for your language. Each sample submits the validated request shown in this reference.

Install

Shell
pip install runapi-suno
PYTHON
import os
from runapi.suno import SunoClient

client = SunoClient(api_key=os.environ["RUNAPI_API_KEY"])
task = client.extend_music.create(
  model="suno-v5",
  upload_url="https://cdn.runapi.ai/public/samples/music.mp3",
  parameter_mode="custom",
  instrumental=False,
  prompt="Continue the arrangement with a brighter chorus.",
  style="Acoustic pop with warm piano.",
  title="Brighter Chorus",
  continue_at=60,
  persona_id="persona_reference",
  persona_type="style"
)