> ## Documentation Index
> Fetch the complete documentation index at: https://docs.toapis.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Extend & Upload

> extend an existing song; uploadTask/uploadCover/uploadExtend for uploaded audio

All four operations share one entry point; the `{operation}` path segment selects the behavior:

```
POST https://toapis.com/v1/music/generations/{operation}
```

## Authorizations

<ParamField header="Authorization" type="string" required>
  Bearer Token. Get your API Key: [API Key management](https://toapis.com/console/token)
</ParamField>

## extend — continue a song ($0.05, Max $0.10)

Continue generation from a timestamp of an existing task. `custom` defaults to `true` for extend.

<ParamField body="model" type="string" required>Fixed `"suno"`</ParamField>
<ParamField body="task_id" type="string" required>Source task ID</ParamField>
<ParamField body="continue_at" type="number" required>Resume point (seconds)</ParamField>
<ParamField body="audio_index" type="number">Track index when the task has multiple tracks</ParamField>
<ParamField body="prompt" type="string">Continuation lyrics (custom mode)</ParamField>
<ParamField body="title" type="string">Title</ParamField>
<ParamField body="style" type="string">Style tags</ParamField>
<ParamField body="max_mode" type="boolean">Max tier \$0.10</ParamField>

```bash theme={null}
curl --request POST \
  --url https://toapis.com/v1/music/generations/extend \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{"model":"suno","task_id":"tsk_aud_xxx","continue_at":60,"prompt":"[Chorus] ..."}'
```

## uploadTask — register an upload (\$0.004)

Registers a public audio URL as a task. Its product is the required source for `sample`/`addVocals`/`addInstrumental`/`addStem`.

<ParamField body="model" type="string" required>Fixed `"suno"`</ParamField>
<ParamField body="audioFilePath" type="string" required>Publicly accessible audio URL</ParamField>

<Warning>Send only `model` + `audioFilePath`; extra fields such as `version` are rejected upstream.</Warning>

```bash theme={null}
curl --request POST \
  --url https://toapis.com/v1/music/generations/uploadTask \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{"model":"suno","audioFilePath":"https://example.com/my-vocals.mp3"}'
```

## uploadCover — upload + cover ($0.05, Max $0.10)

<ParamField body="model" type="string" required>Fixed `"suno"`</ParamField>
<ParamField body="audio_url" type="string" required>Source audio URL</ParamField>
<ParamField body="custom" type="boolean">Custom lyrics mode</ParamField>
<ParamField body="prompt" type="string">Lyrics (custom=true) or description</ParamField>
<ParamField body="gpt_description" type="string">Inspiration description (required when custom=false)</ParamField>
<ParamField body="style" type="string">Target style</ParamField>
<ParamField body="persona_id" type="string">Vocal persona, mutually exclusive with `custom_model_id`</ParamField>
<ParamField body="max_mode" type="boolean">Max tier</ParamField>

## uploadExtend — upload + extend ($0.05, Max $0.10)

Upload audio and continue it from a timestamp. Always treated as custom mode.

<ParamField body="model" type="string" required>Fixed `"suno"`</ParamField>
<ParamField body="audio_url" type="string" required>Source audio URL</ParamField>
<ParamField body="continue_at" type="number" required>Resume point (seconds)</ParamField>
<ParamField body="prompt" type="string">Continuation lyrics</ParamField>
<ParamField body="style" type="string">Style</ParamField>
<ParamField body="max_mode" type="boolean">Max tier</ParamField>

## Response

<ResponseField name="task_id" type="string">Task ID for status polling</ResponseField>
<ResponseField name="status" type="string">`submitted`</ResponseField>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.