Skip to main content

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

  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.

Optional parameters

  • vocalGender (string): Vocal gender preference. Use m for male, f for 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
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