Vai al contenuto
Riferimento API
Riferimento API

Suno Estendi musica

Usa l'endpoint extend music per creare un Task asincrono.

01

Panoramica

Usa l'endpoint extend music con un modello supportato. Usa il Task ID restituito per recuperarne lo stato, oppure fornisci callback_url per le consegne documentate di seguito.

Avvio rapido

  1. Crea una Chiave API e impostala come RUNAPI_API_KEY.
  2. Scegli un modello supportato e invia una richiesta POST il cui corpo corrisponda allo schema di quel modello.
  3. Conserva l'ID attività restituito, quindi esegui il polling fino a uno stato terminale o gestisci i callback documentati di seguito.

Endpoint

POST /api/v1/suno/extend_music
URL di base
https://runapi.ai
Versione API
v1
Autenticazione
Authorization: Bearer YOUR_API_TOKEN
02

Modelli supportati

Apri la pagina di un modello per i prezzi correnti, i limiti di frequenza e i dettagli sull'uso commerciale.

03

Schema della richiesta

Corpo JSON

I campi e i valori consentiti dipendono dal modello selezionato. Se fornito, callback_url riceve le notifiche Task documentate di seguito.

suno-v420 campi
audio_idstring
Opzionale

ID audio sorgente da estendere. Fornisci uno tra task_id, audio_id, audio_url o upload_url.

audio_urlstring
Opzionale

URL audio sorgente da estendere. Fornisci uno tra task_id, audio_id, audio_url o upload_url.

audio_weightnumber
Opzionale

Peso audio (0-1).

Intervallo: 0 - 1
callback_urlstring
Opzionale

URL webhook per notifiche asincrone.

continue_atnumber
Opzionale

Secondi nella sorgente da cui continuare. Obbligatorio in modalità parametro personalizzato.

instrumentalboolean
Opzionale

Se true, genera senza parti vocali.

lyricsstring
Opzionale

Testo esatto dei testi. Consentito solo quando si estende audio caricato in modalità parametro personalizzato.

Vincolo: 5000
modelstring
Obbligatorio

Slug del modello.

negative_tagsstring
Opzionale

Stili da evitare.

parameter_modestring
Obbligatorio

Eredita i parametri della traccia sorgente (source) o fornisci parametri personalizzati (custom).

Valori consentiti: source, custom
persona_idstring
Opzionale

ID persona.

persona_typestring
Opzionale

Tipo di persona.

Valori consentiti: style, voice
promptstring
Opzionale

Breve di estensione. Non può essere combinato con i testi.

Vincolo: 5000
stylestring
Opzionale

Preset di stile. Obbligatorio nella modalità parametri personalizzati.

Vincolo: 1000
style_weightnumber
Opzionale

Peso di aderenza allo stile (0-1).

Intervallo: 0 - 1
task_idstring
Opzionale

ID task sorgente da estendere. Fornisci uno tra task_id, audio_id, audio_url o upload_url.

titlestring
Opzionale

Titolo del brano. Obbligatorio in modalità parametro personalizzato.

Vincolo: 80
upload_urlstring
Opzionale

URL dell'audio sorgente caricato da estendere. Fornisci uno tra task_id, audio_id, audio_url o upload_url.

vocal_genderstring
Opzionale

Genere vocale.

Valori consentiti: male, female
weirdness_constraintnumber
Opzionale

Vincolo di stranezza (0-1).

Intervallo: 0 - 1
suno-v4.520 campi
audio_idstring
Opzionale

ID audio sorgente da estendere. Fornisci uno tra task_id, audio_id, audio_url o upload_url.

audio_urlstring
Opzionale

URL audio sorgente da estendere. Fornisci uno tra task_id, audio_id, audio_url o upload_url.

audio_weightnumber
Opzionale

Peso audio (0-1).

Intervallo: 0 - 1
callback_urlstring
Opzionale

URL webhook per notifiche asincrone.

continue_atnumber
Opzionale

Secondi nella sorgente da cui continuare. Obbligatorio in modalità parametro personalizzato.

instrumentalboolean
Opzionale

Se true, genera senza parti vocali.

lyricsstring
Opzionale

Testo esatto dei testi. Consentito solo quando si estende audio caricato in modalità parametro personalizzato.

Vincolo: 5000
modelstring
Obbligatorio

Slug del modello.

negative_tagsstring
Opzionale

Stili da evitare.

parameter_modestring
Obbligatorio

Eredita i parametri della traccia sorgente (source) o fornisci parametri personalizzati (custom).

Valori consentiti: source, custom
persona_idstring
Opzionale

ID persona.

persona_typestring
Opzionale

Tipo di persona.

Valori consentiti: style, voice
promptstring
Opzionale

Breve di estensione. Non può essere combinato con i testi.

Vincolo: 5000
stylestring
Opzionale

Preset di stile. Obbligatorio nella modalità parametri personalizzati.

Vincolo: 1000
style_weightnumber
Opzionale

Peso di aderenza allo stile (0-1).

Intervallo: 0 - 1
task_idstring
Opzionale

ID task sorgente da estendere. Fornisci uno tra task_id, audio_id, audio_url o upload_url.

titlestring
Opzionale

Titolo del brano. Obbligatorio in modalità parametro personalizzato.

Vincolo: 80
upload_urlstring
Opzionale

URL dell'audio sorgente caricato da estendere. Fornisci uno tra task_id, audio_id, audio_url o upload_url.

vocal_genderstring
Opzionale

Genere vocale.

Valori consentiti: male, female
weirdness_constraintnumber
Opzionale

Vincolo di stranezza (0-1).

Intervallo: 0 - 1
suno-v4.5-all20 campi
audio_idstring
Opzionale

ID audio sorgente da estendere. Fornisci uno tra task_id, audio_id, audio_url o upload_url.

audio_urlstring
Opzionale

URL audio sorgente da estendere. Fornisci uno tra task_id, audio_id, audio_url o upload_url.

audio_weightnumber
Opzionale

Peso audio (0-1).

Intervallo: 0 - 1
callback_urlstring
Opzionale

URL webhook per notifiche asincrone.

continue_atnumber
Opzionale

Secondi nella sorgente da cui continuare. Obbligatorio in modalità parametro personalizzato.

instrumentalboolean
Opzionale

Se true, genera senza parti vocali.

lyricsstring
Opzionale

Testo esatto dei testi. Consentito solo quando si estende audio caricato in modalità parametro personalizzato.

Vincolo: 5000
modelstring
Obbligatorio

Slug del modello.

negative_tagsstring
Opzionale

Stili da evitare.

parameter_modestring
Obbligatorio

Eredita i parametri della traccia sorgente (source) o fornisci parametri personalizzati (custom).

Valori consentiti: source, custom
persona_idstring
Opzionale

ID persona.

persona_typestring
Opzionale

Tipo di persona.

Valori consentiti: style, voice
promptstring
Opzionale

Breve di estensione. Non può essere combinato con i testi.

Vincolo: 5000
stylestring
Opzionale

Preset di stile. Obbligatorio nella modalità parametri personalizzati.

Vincolo: 1000
style_weightnumber
Opzionale

Peso di aderenza allo stile (0-1).

Intervallo: 0 - 1
task_idstring
Opzionale

ID task sorgente da estendere. Fornisci uno tra task_id, audio_id, audio_url o upload_url.

titlestring
Opzionale

Titolo del brano. Obbligatorio in modalità parametro personalizzato.

Vincolo: 80
upload_urlstring
Opzionale

URL dell'audio sorgente caricato da estendere. Fornisci uno tra task_id, audio_id, audio_url o upload_url.

vocal_genderstring
Opzionale

Genere vocale.

Valori consentiti: male, female
weirdness_constraintnumber
Opzionale

Vincolo di stranezza (0-1).

Intervallo: 0 - 1
suno-v4.5-plus20 campi
audio_idstring
Opzionale

ID audio sorgente da estendere. Fornisci uno tra task_id, audio_id, audio_url o upload_url.

audio_urlstring
Opzionale

URL audio sorgente da estendere. Fornisci uno tra task_id, audio_id, audio_url o upload_url.

audio_weightnumber
Opzionale

Peso audio (0-1).

Intervallo: 0 - 1
callback_urlstring
Opzionale

URL webhook per notifiche asincrone.

continue_atnumber
Opzionale

Secondi nella sorgente da cui continuare. Obbligatorio in modalità parametro personalizzato.

instrumentalboolean
Opzionale

Se true, genera senza parti vocali.

lyricsstring
Opzionale

Testo esatto dei testi. Consentito solo quando si estende audio caricato in modalità parametro personalizzato.

Vincolo: 5000
modelstring
Obbligatorio

Slug del modello.

negative_tagsstring
Opzionale

Stili da evitare.

parameter_modestring
Obbligatorio

Eredita i parametri della traccia sorgente (source) o fornisci parametri personalizzati (custom).

Valori consentiti: source, custom
persona_idstring
Opzionale

ID persona.

persona_typestring
Opzionale

Tipo di persona.

Valori consentiti: style, voice
promptstring
Opzionale

Breve di estensione. Non può essere combinato con i testi.

Vincolo: 5000
stylestring
Opzionale

Preset di stile. Obbligatorio nella modalità parametri personalizzati.

Vincolo: 1000
style_weightnumber
Opzionale

Peso di aderenza allo stile (0-1).

Intervallo: 0 - 1
task_idstring
Opzionale

ID task sorgente da estendere. Fornisci uno tra task_id, audio_id, audio_url o upload_url.

titlestring
Opzionale

Titolo del brano. Obbligatorio in modalità parametro personalizzato.

Vincolo: 80
upload_urlstring
Opzionale

URL dell'audio sorgente caricato da estendere. Fornisci uno tra task_id, audio_id, audio_url o upload_url.

vocal_genderstring
Opzionale

Genere vocale.

Valori consentiti: male, female
weirdness_constraintnumber
Opzionale

Vincolo di stranezza (0-1).

Intervallo: 0 - 1
suno-v520 campi
audio_idstring
Opzionale

ID audio sorgente da estendere. Fornisci uno tra task_id, audio_id, audio_url o upload_url.

audio_urlstring
Opzionale

URL audio sorgente da estendere. Fornisci uno tra task_id, audio_id, audio_url o upload_url.

audio_weightnumber
Opzionale

Peso audio (0-1).

Intervallo: 0 - 1
callback_urlstring
Opzionale

URL webhook per notifiche asincrone.

continue_atnumber
Opzionale

Secondi nella sorgente da cui continuare. Obbligatorio in modalità parametro personalizzato.

instrumentalboolean
Opzionale

Se true, genera senza parti vocali.

lyricsstring
Opzionale

Testo esatto dei testi. Consentito solo quando si estende audio caricato in modalità parametro personalizzato.

Vincolo: 5000
modelstring
Obbligatorio

Slug del modello.

negative_tagsstring
Opzionale

Stili da evitare.

parameter_modestring
Obbligatorio

Eredita i parametri della traccia sorgente (source) o fornisci parametri personalizzati (custom).

Valori consentiti: source, custom
persona_idstring
Opzionale

ID persona.

persona_typestring
Opzionale

Tipo di persona.

Valori consentiti: style, voice
promptstring
Opzionale

Breve di estensione. Non può essere combinato con i testi.

Vincolo: 5000
stylestring
Opzionale

Preset di stile. Obbligatorio nella modalità parametri personalizzati.

Vincolo: 1000
style_weightnumber
Opzionale

Peso di aderenza allo stile (0-1).

Intervallo: 0 - 1
task_idstring
Opzionale

ID task sorgente da estendere. Fornisci uno tra task_id, audio_id, audio_url o upload_url.

titlestring
Opzionale

Titolo del brano. Obbligatorio in modalità parametro personalizzato.

Vincolo: 80
upload_urlstring
Opzionale

URL dell'audio sorgente caricato da estendere. Fornisci uno tra task_id, audio_id, audio_url o upload_url.

vocal_genderstring
Opzionale

Genere vocale.

Valori consentiti: male, female
weirdness_constraintnumber
Opzionale

Vincolo di stranezza (0-1).

Intervallo: 0 - 1
suno-v5.520 campi
audio_idstring
Opzionale

ID audio sorgente da estendere. Fornisci uno tra task_id, audio_id, audio_url o upload_url.

audio_urlstring
Opzionale

URL audio sorgente da estendere. Fornisci uno tra task_id, audio_id, audio_url o upload_url.

audio_weightnumber
Opzionale

Peso audio (0-1).

Intervallo: 0 - 1
callback_urlstring
Opzionale

URL webhook per notifiche asincrone.

continue_atnumber
Opzionale

Secondi nella sorgente da cui continuare. Obbligatorio in modalità parametro personalizzato.

instrumentalboolean
Opzionale

Se true, genera senza parti vocali.

lyricsstring
Opzionale

Testo esatto dei testi. Consentito solo quando si estende audio caricato in modalità parametro personalizzato.

Vincolo: 5000
modelstring
Obbligatorio

Slug del modello.

negative_tagsstring
Opzionale

Stili da evitare.

parameter_modestring
Obbligatorio

Eredita i parametri della traccia sorgente (source) o fornisci parametri personalizzati (custom).

Valori consentiti: source, custom
persona_idstring
Opzionale

ID persona.

persona_typestring
Opzionale

Tipo di persona.

Valori consentiti: style, voice
promptstring
Opzionale

Breve di estensione. Non può essere combinato con i testi.

Vincolo: 5000
stylestring
Opzionale

Preset di stile. Obbligatorio nella modalità parametri personalizzati.

Vincolo: 1000
style_weightnumber
Opzionale

Peso di aderenza allo stile (0-1).

Intervallo: 0 - 1
task_idstring
Opzionale

ID task sorgente da estendere. Fornisci uno tra task_id, audio_id, audio_url o upload_url.

titlestring
Opzionale

Titolo del brano. Obbligatorio in modalità parametro personalizzato.

Vincolo: 80
upload_urlstring
Opzionale

URL dell'audio sorgente caricato da estendere. Fornisci uno tra task_id, audio_id, audio_url o upload_url.

vocal_genderstring
Opzionale

Genere vocale.

Valori consentiti: male, female
weirdness_constraintnumber
Opzionale

Vincolo di stranezza (0-1).

Intervallo: 0 - 1
04

Crea accettazione

HTTP 202

POST /api/v1/suno/extend_music

Schema della risposta
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
}

Esempio di risposta

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

Polling in elaborazione

HTTP 200

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

Schema della risposta
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
}

Esempio di risposta

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

Polling completato

HTTP 200

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

Schema della risposta
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
}

Esempio di risposta

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 non riuscito

HTTP 200

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

Schema della risposta
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
}

Esempio di risposta

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

Callback cliente: in elaborazione

HTTP 200

POST callback_url

Schema della risposta
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
}

Esempio di risposta

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

Callback cliente: completato

HTTP 200

POST callback_url

Schema della risposta
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
}

Esempio di risposta

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

Callback cliente: fallito

HTTP 200

POST callback_url

Schema della risposta
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
}

Esempio di risposta

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

Errori

HTTP 401

POST /api/v1/suno/extend_music

Schema della risposta
JSON
{
  "properties": {
    "error": {
      "description": "Messaggio di errore leggibile.",
      "type": "string"
    }
  },
  "required": [
    "error"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

Esempio di risposta

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

Errori

HTTP 401

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

Schema della risposta
JSON
{
  "properties": {
    "error": {
      "description": "Messaggio di errore leggibile.",
      "type": "string"
    }
  },
  "required": [
    "error"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

Esempio di risposta

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

Errori

HTTP 400

POST /api/v1/suno/extend_music

Schema della risposta
JSON
{
  "oneOf": [
    {
      "properties": {
        "error": {
          "description": "Messaggio di errore leggibile.",
          "type": "string"
        }
      },
      "required": [
        "error"
      ],
      "type": "object",
      "unevaluatedProperties": false
    },
    {
      "properties": {
        "error": {
          "description": "Riepilogo di convalida leggibile dall'utente.",
          "type": "string"
        },
        "errors": {
          "additionalProperties": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "description": "Messaggi di convalida con chiave per campo della richiesta pubblica, con un array di stringhe leggibili dall'utente per ogni campo.",
          "type": "object"
        }
      },
      "required": [
        "error",
        "errors"
      ],
      "type": "object",
      "unevaluatedProperties": false
    }
  ]
}

Esempio di risposta

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"
}
14

Errori

HTTP 402

POST /api/v1/suno/extend_music

Schema della risposta
JSON
{
  "properties": {
    "error": {
      "description": "Messaggio di errore leggibile.",
      "type": "string"
    }
  },
  "required": [
    "error"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

Esempio di risposta

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

Errori

HTTP 429

POST /api/v1/suno/extend_music

Schema della risposta
JSON
{
  "properties": {
    "error": {
      "description": "Messaggio di errore leggibile.",
      "type": "string"
    }
  },
  "required": [
    "error"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

Esempio di risposta

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

Errori

HTTP 409

POST /api/v1/suno/extend_music

Schema della risposta
JSON
{
  "properties": {
    "error": {
      "description": "Messaggio di errore leggibile.",
      "type": "string"
    }
  },
  "required": [
    "error"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

Esempio di risposta

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

Errori

HTTP 429

POST /api/v1/suno/extend_music

Schema della risposta
JSON
{
  "properties": {
    "error": {
      "description": "Messaggio di errore leggibile.",
      "type": "string"
    }
  },
  "required": [
    "error"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

Esempio di risposta

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

Errori

HTTP 503

POST /api/v1/suno/extend_music

Schema della risposta
JSON
{
  "properties": {
    "error": {
      "description": "Messaggio di errore leggibile.",
      "type": "string"
    }
  },
  "required": [
    "error"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

Esempio di risposta

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

Errori

HTTP 504

POST /api/v1/suno/extend_music

Schema della risposta
JSON
{
  "properties": {
    "error": {
      "description": "Messaggio di errore leggibile.",
      "type": "string"
    }
  },
  "required": [
    "error"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

Esempio di risposta

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

Errori

HTTP 404

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

Schema della risposta
JSON
{
  "properties": {
    "error": {
      "description": "Messaggio di errore leggibile.",
      "type": "string"
    }
  },
  "required": [
    "error"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

Esempio di risposta

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

Esempi di Codice Generati

Usa cURL direttamente, oppure installa un SDK per il tuo linguaggio. Ogni esempio invia la richiesta validata mostrata in questo riferimento.

Installa

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"
)