Upload And Extend Audio
This API extends audio tracks while preserving the original style of the audio track. It includes Suno’s upload functionality, allowing users to upload audio files for processing. The expected result is a longer track that seamlessly continues the input style.
Parameter Usage Guide
Character limits vary depending on the model version:
- For model V5: style (max 1000 chars), title (max 100 chars), prompt (max 5000 chars)
- For models V4_5PLUS and V4_5: style (max 1000 chars), title (max 100 chars), prompt (max 5000 chars)
- For model V4_5ALL: style (max 1000 chars), title (max 80 chars), prompt (max 5000 chars)
- For model V4: style (max 200 chars), title (max 80 chars), prompt (max 3000 chars)
- When defaultParamFlag is true (Custom Parameters):
- If instrumental is true: style, title, and uploadUrl are required
- If instrumental is false: style, prompt, title, and uploadUrl are required
- Character limits vary by model version (see note above)
- continueAt: the time point in seconds from which to start extending (must be greater than 0 and less than the uploaded audio duration)
- uploadUrl: specifies the upload location for audio files; ensure uploaded audio does not exceed 8 minutes.
- When defaultParamFlag is false (Default Parameters):
- Regardless of instrumental setting, only uploadUrl and prompt are required
- Other parameters will use the original audio’s parameters
Developer Notes
- Generated files will be retained for 14 days
- Model version must be consistent with the source music
- This feature is ideal for creating longer works by extending existing music
- uploadUrl parameter specifies the upload location for audio files; provide a valid URL.
Optional parameters
vocalGender(string): Vocal gender preference. Usemfor male,ffor female.styleWeight(number): Strength of adherence to style. Range 0–1, up to 2 decimals. Example:0.65.weirdnessConstraint(number): Controls creative deviation. Range 0–1, up to 2 decimals. Example:0.65.audioWeight(number): Balance weight for audio features. Range 0–1, up to 2 decimals. Example:0.65.personaId(string): Persona ID to apply to the generated music. Only available when Custom Mode is enabled. To create one, use Generate Persona.
Rate limits and quotas are enforced by Apikley and may differ from upstream providers.
OpenAPI
suno-api/suno-api.json post /api/v1/generate/upload-extend
Copy
openapi: 3.0.0
info:
title: Suno API
description: Apikley Suno API Documentation
version: 1.0.0
contact:
name: Technical Support
email: [email protected]
servers:
- url: https://api.apikley.ru
description: API Server
security:
- BearerAuth: []
paths:
/api/v1/generate/upload-extend:
post:
summary: Upload And Extend Audio
description: >-
This API extends audio tracks while preserving the original style of the
audio track. It includes Suno's upload functionality, allowing users to
upload audio files for processing. The expected result is a longer track
that seamlessly continues the input style.
### Parameter Usage Guide
- When defaultParamFlag is true (Custom Parameters):
- If instrumental is true: style, title, and uploadUrl are required
- If instrumental is false: style, prompt, title, and uploadUrl are required
- **Character limits vary by model version:**
- **V5**: prompt (max 5000 chars), style (max 1000 chars), title (max 100 chars)
- **V4_5PLUS & V4_5**: prompt (max 5000 chars), style (max 1000 chars), title (max 100 chars)
- **V4_5ALL**: prompt (max 5000 chars), style (max 1000 chars), title (max 80 chars)
- **V4**: prompt (max 3000 chars), style (max 200 chars), title (max 80 chars)
- continueAt: the time point in seconds from which to start extending (must be greater than 0 and less than the uploaded audio duration)
- uploadUrl: specifies the upload location for audio files; ensure uploaded audio does not exceed 8 minutes.
- When defaultParamFlag is false (Default Parameters):
- Regardless of instrumental setting, only uploadUrl and prompt are required
- Other parameters will use the original audio's parameters
### Developer Notes
1. Generated files will be retained for 14 days
2. Model version must be consistent with the source music
3. This feature is ideal for creating longer works by extending existing
music
4. uploadUrl parameter specifies the upload location for audio files;
provide a valid URL.
operationId: upload-and-extend-audio
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- uploadUrl
- defaultParamFlag
- callBackUrl
- model
- instrumental
- continueAt
properties:
uploadUrl:
type: string
format: uri
description: >-
The URL for uploading audio files, required regardless of
whether defaultParamFlag is true or false. Ensure the
uploaded audio does not exceed 8 minutes in length. Note:
For the V4_5ALL model, the uploaded audio must not exceed 1
minute in length.
example: https://storage.example.com/upload
defaultParamFlag:
type: boolean
description: >-
Enable custom mode for advanced audio generation settings.
- Set to `true` to use custom parameter mode (requires
`style`, `title`, and `uploadUrl`; if `instrumental` is
`false`, `uploadUrl` and `prompt` are required). If
`instrumental` is `false`, the prompt will be strictly used
as lyrics.
- Set to `false` to use non-custom mode (only `uploadUrl`
required). Lyrics will be automatically generated based on
the prompt.
example: true
instrumental:
type: boolean
description: >-
Determines whether the audio is instrumental (without
lyrics).
- In custom parameter mode (`defaultParamFlag: true`):
- If `true`: only `style`, `title`, and `uploadUrl` are required.
- If `false`: `style`, `title`, `prompt` (`prompt` will be used as exact lyrics), and `uploadUrl` are required.
- In non-custom parameter mode (`defaultParamFlag: false`):
does not affect required fields (only `uploadUrl` needed).
If `false`, lyrics will be automatically generated.
example: true
prompt:
type: string
description: >-
Description of how the music should be extended. Required
when defaultParamFlag is true. Character limits by model:
- **V5**: Maximum 5000 characters
- **V4_5PLUS & V4_5**: Maximum 5000 characters
- **V4_5ALL**: Maximum 5000 characters
- **V4**: Maximum 3000 characters
example: Extend the music with more relaxing notes
style:
type: string
description: >-
Music style, e.g., Jazz, Classical, Electronic. Character
limits by model:
- **V5**: Maximum 1000 characters
- **V4_5PLUS & V4_5**: Maximum 1000 characters
- **V4_5ALL**: Maximum 1000 characters
- **V4**: Maximum 200 characters
example: Classical
title:
type: string
description: |-
Music title. Character limits by model:
- **V5**: Maximum 100 characters
- **V4_5PLUS & V4_5**: Maximum 100 characters
- **V4_5ALL**: Maximum 80 characters
- **V4**: Maximum 80 characters
example: Peaceful Piano Extended
continueAt:
type: number
description: >-
The time point (in seconds) from which to start extending
the music.
- Required when `defaultParamFlag` is `true`.
- Value range: greater than 0 and less than the total
duration of the uploaded audio.
- Specifies the position in the original track where the
extension should begin.
example: 60
model:
type: string
description: |-
The AI model version to use for generation.
- Required for all requests.
- Available options:
- **`V5`**: Superior musical expression, faster generation.
- **`V4_5PLUS`**: V4.5+ delivers richer sound, new ways to create, max 8 min.
- **`V4_5`**: V4.5 enables smarter prompts, faster generations, max 8 min.
- **`V4_5ALL`**: V4.5ALL enables smarter prompts, faster generations, max 8 min.
- **`V4`**: V4 improves vocal quality, max 4 min.
enum:
- V4
- V4_5
- V4_5PLUS
- V4_5ALL
- V5
example: V4
negativeTags:
type: string
description: Music styles to exclude from generation
example: Relaxing Piano
callBackUrl:
type: string
format: uri
description: >-
The URL to receive audio extension task completion updates.
Required for all audio extension requests.
- System will POST task status and results to this URL when
audio extension completes
- Callback includes extended audio files that seamlessly
continue the uploaded track's style
- Your callback endpoint should accept POST requests with
JSON payload containing extended track results and audio
URLs
- For detailed callback format and implementation guide, see
[Audio Extension
Callbacks](https://docs.apikley.ru/suno-api/upload-and-extend-audio-callbacks)
- Alternatively, use the Get Music Details endpoint to poll
task status
example: https://api.example.com/callback
vocalGender:
type: string
description: >-
Vocal gender preference for the singing voice. Optional. Use
'm' for male and 'f' for female. Based on practice, this
parameter can only increase the probability but cannot
guarantee adherence to male/female voice instructions.
enum:
- m
- f
example: m
styleWeight:
type: number
description: >-
Strength of adherence to the specified style. Optional.
Range 0–1, up to 2 decimal places.
minimum: 0
maximum: 1
multipleOf: 0.01
example: 0.65
weirdnessConstraint:
type: number
description: >-
Controls experimental/creative deviation. Optional. Range
0–1, up to 2 decimal places.
minimum: 0
maximum: 1
multipleOf: 0.01
example: 0.65
audioWeight:
type: number
description: >-
Balance weight for audio features vs. other factors.
Optional. Range 0–1, up to 2 decimal places.
minimum: 0
maximum: 1
multipleOf: 0.01
example: 0.65
personaId:
type: string
description: >-
Only available when Custom Mode (`customMode: true`) is
enabled. Persona ID to apply to the generated music.
Optional. Use this to apply a specific persona style to your
music generation.
To generate a persona ID, use the [Generate
Persona](https://docs.apikley.ru/suno-api/generate-persona)
endpoint to create a personalized music Persona based on
generated music.
example: persona_123
responses:
'200':
description: Request successful
content:
application/json:
schema:
allOf:
- type: object
properties:
code:
type: integer
enum:
- 200
- 401
- 402
- 404
- 409
- 422
- 429
- 451
- 455
- 500
description: >-
Response status code
- **200**: Success - Request has been processed
successfully
- **401**: Unauthorized - Authentication credentials
are missing or invalid
- **402**: Insufficient Credits - Account does not
have enough credits to perform the operation
- **404**: Not Found - The requested resource or
endpoint does not exist
- **409**: Conflict - WAV record already exists
- **422**: Validation Error - The request parameters
failed validation checks
- **429**: Rate Limited - Request limit has been
exceeded for this resource
- **451**: Unauthorized - Failed to fetch the image.
Kindly verify any access limits set by you or your
service provider.
- **455**: Service Unavailable - System is currently
undergoing maintenance
- **500**: Server Error - An unexpected error occurred
while processing the request
msg:
type: string
description: Error message when code != 200
example: success
- type: object
properties:
data:
type: object
properties:
taskId:
type: string
description: Task ID for tracking task status
example: 5c79****be8e
'500':
$ref: '#/components/responses/Error'
callbacks:
audioExtend:
'{$request.body#/callBackUrl}':
post:
description: >-
System will call this callback when audio generation is
complete.
### Callback Example
```json
{
"code": 200,
"msg": "All generated successfully.",
"data": {
"callbackType": "complete",
"task_id": "2fac****9f72",
"data": [
{
"id": "e231****-****-****-****-****8cadc7dc",
"audio_url": "https://example.cn/****.mp3",
"source_audio_url": "https://example.cn/****.mp3",
"stream_audio_url": "https://example.cn/****",
"source_stream_audio_url": "https://example.cn/****",
"image_url": "https://example.cn/****.jpeg",
"source_image_url": "https://example.cn/****.jpeg",
"prompt": "[Verse] Night city lights shining bright",
"model_name": "chirp-v3-5",
"title": "Iron Man",
"tags": "electrifying, rock",
"createTime": "2025-01-01 00:00:00",
"duration": 198.44
}
]
}
}
```
requestBody:
content:
application/json:
schema:
type: object
properties:
code:
type: integer
description: Status code
example: 200
msg:
type: string
description: Response message
example: All generated successfully
data:
type: object
properties:
callbackType:
type: string
description: >-
Callback type: text (text generation complete),
first (first track complete), complete (all
tracks complete)
enum:
- text
- first
- complete
task_id:
type: string
description: Task ID
data:
type: array
items:
type: object
properties:
id:
type: string
description: Audio unique identifier (audioId)
audio_url:
type: string
description: Audio file URL
source_audio_url:
type: string
description: Original audio file URL
stream_audio_url:
type: string
description: Streaming audio URL
source_stream_audio_url:
type: string
description: Original streaming audio URL
image_url:
type: string
description: Cover image URL
source_image_url:
type: string
description: Original cover image URL
prompt:
type: string
description: Generation prompt/lyrics
model_name:
type: string
description: Model name used
title:
type: string
description: Music title
tags:
type: string
description: Music tags
createTime:
type: string
description: Creation time
format: date-time
duration:
type: number
description: Audio duration (seconds)
responses:
'200':
description: Callback received successfully
content:
application/json:
schema:
allOf:
- type: object
properties:
code:
type: integer
enum:
- 200
- 400
- 408
- 413
- 500
- 501
- 531
description: >-
Response status code
- **200**: Success - Request has been
processed successfully
- **400**: Validation Error - Lyrics contained
copyrighted material.
- **408**: Rate Limited - Timeout.
- **413**: Conflict - Uploaded audio matches
existing work of art.
- **500**: Server Error - An unexpected error
occurred while processing the request
- **501**: Audio generation failed.
- **531**: Server Error - Sorry, the
generation failed due to an issue. Your
credits have been refunded. Please try again.
msg:
type: string
description: Error message when code != 200
example: success
example:
code: 200
msg: success
components:
responses:
Error:
description: Server Error
securitySchemes:
BearerAuth:
type: http
scheme: bearer
bearerFormat: API Key
description: >-
All APIs require authentication via Bearer Token.
Get API Key:
1. Visit [API Key Management Page](https://app.apikley.ru/keys) to get your
API Key
Usage:
Add to request header:
Authorization: Bearer APIKLEY_API_KEY
Note:
- Keep your API Key secure and do not share it with others
- If you suspect your API Key has been compromised, reset it immediately
in the management page
To find navigation and other pages in this documentation, fetch the llms.txt file at: https://docs.apikley.ru/llms.txt