Aller au contenu
Référence API
Référence API

Suno Prolonger la musique

Utilisez le point de terminaison extend music pour créer une Task asynchrone.

01

Vue d'ensemble

Utilisez le point de terminaison extend music avec un modèle pris en charge. Utilisez l'ID de Task retourné pour récupérer son état, ou fournissez callback_url pour les livraisons décrites ci-dessous.

Démarrage rapide

  1. Créez une clé API et définissez-la comme RUNAPI_API_KEY.
  2. Choisissez un modèle pris en charge et envoyez une requête POST dont le corps correspond au schéma de ce modèle.
  3. Enregistrez l'identifiant de tâche retourné, puis interrogez l'état jusqu'à atteindre un état terminal ou gérez les callbacks documentés ci-dessous.

Point de terminaison

POST /api/v1/suno/extend_music
URL de base
https://runapi.ai
Version de l'API
v1
Authentification
Authorization: Bearer YOUR_API_TOKEN
02

Modèles pris en charge

Ouvrez une page de modèle pour consulter la tarification actuelle, les limites de débit et les conditions d'utilisation commerciale.

03

Schéma de requête

Corps JSON

Les champs et les valeurs autorisées dépendent du modèle sélectionné. Lorsqu'il est fourni, callback_url reçoit les livraisons de tâches documentées ci-dessous.

suno-v420 champs
audio_idstring
Optionnel

ID audio source à étendre. Fournissez l'un de task_id, audio_id, audio_url ou upload_url.

audio_urlstring
Optionnel

URL audio source à étendre. Fournissez l'un de task_id, audio_id, audio_url ou upload_url.

audio_weightnumber
Optionnel

Poids audio (0-1).

Plage: 0 - 1
callback_urlstring
Optionnel

URL de webhook pour les notifications asynchrones.

continue_atnumber
Optionnel

Secondes dans la source à partir desquelles continuer. Obligatoire en mode paramètre personnalisé.

instrumentalboolean
Optionnel

Si vrai, génère sans voix.

lyricsstring
Optionnel

Paroles exactes. Uniquement autorisé lors de l'extension d'un audio téléchargé en mode de paramètres personnalisés.

Limite: 5000
modelstring
Requis

Slug du modèle.

negative_tagsstring
Optionnel

Styles à éviter.

parameter_modestring
Requis

Hérite des paramètres de la piste source (source) ou fournit des paramètres personnalisés (custom).

Valeurs autorisées: source, custom
persona_idstring
Optionnel

ID du persona.

persona_typestring
Optionnel

Type de persona.

Valeurs autorisées: style, voice
promptstring
Optionnel

Description de l'extension. Ne peut pas être combinée avec des paroles.

Limite: 5000
stylestring
Optionnel

Préréglage de style. Obligatoire en mode de paramètre personnalisé.

Limite: 1000
style_weightnumber
Optionnel

Poids d'adhérence au style (0-1).

Plage: 0 - 1
task_idstring
Optionnel

ID de task source à étendre. Fournissez l'un de task_id, audio_id, audio_url ou upload_url.

titlestring
Optionnel

Titre de la chanson. Obligatoire en mode paramètre personnalisé.

Limite: 80
upload_urlstring
Optionnel

URL audio source téléversée à partir de laquelle continuer. Fournissez l'un des éléments suivants : task_id, audio_id, audio_url ou upload_url.

vocal_genderstring
Optionnel

Genre vocal.

Valeurs autorisées: male, female
weirdness_constraintnumber
Optionnel

Contrainte d'originalité (0-1).

Plage: 0 - 1
suno-v4.520 champs
audio_idstring
Optionnel

ID audio source à étendre. Fournissez l'un de task_id, audio_id, audio_url ou upload_url.

audio_urlstring
Optionnel

URL audio source à étendre. Fournissez l'un de task_id, audio_id, audio_url ou upload_url.

audio_weightnumber
Optionnel

Poids audio (0-1).

Plage: 0 - 1
callback_urlstring
Optionnel

URL de webhook pour les notifications asynchrones.

continue_atnumber
Optionnel

Secondes dans la source à partir desquelles continuer. Obligatoire en mode paramètre personnalisé.

instrumentalboolean
Optionnel

Si vrai, génère sans voix.

lyricsstring
Optionnel

Paroles exactes. Uniquement autorisé lors de l'extension d'un audio téléchargé en mode de paramètres personnalisés.

Limite: 5000
modelstring
Requis

Slug du modèle.

negative_tagsstring
Optionnel

Styles à éviter.

parameter_modestring
Requis

Hérite des paramètres de la piste source (source) ou fournit des paramètres personnalisés (custom).

Valeurs autorisées: source, custom
persona_idstring
Optionnel

ID du persona.

persona_typestring
Optionnel

Type de persona.

Valeurs autorisées: style, voice
promptstring
Optionnel

Description de l'extension. Ne peut pas être combinée avec des paroles.

Limite: 5000
stylestring
Optionnel

Préréglage de style. Obligatoire en mode de paramètre personnalisé.

Limite: 1000
style_weightnumber
Optionnel

Poids d'adhérence au style (0-1).

Plage: 0 - 1
task_idstring
Optionnel

ID de task source à étendre. Fournissez l'un de task_id, audio_id, audio_url ou upload_url.

titlestring
Optionnel

Titre de la chanson. Obligatoire en mode paramètre personnalisé.

Limite: 80
upload_urlstring
Optionnel

URL audio source téléversée à partir de laquelle continuer. Fournissez l'un des éléments suivants : task_id, audio_id, audio_url ou upload_url.

vocal_genderstring
Optionnel

Genre vocal.

Valeurs autorisées: male, female
weirdness_constraintnumber
Optionnel

Contrainte d'originalité (0-1).

Plage: 0 - 1
suno-v4.5-all20 champs
audio_idstring
Optionnel

ID audio source à étendre. Fournissez l'un de task_id, audio_id, audio_url ou upload_url.

audio_urlstring
Optionnel

URL audio source à étendre. Fournissez l'un de task_id, audio_id, audio_url ou upload_url.

audio_weightnumber
Optionnel

Poids audio (0-1).

Plage: 0 - 1
callback_urlstring
Optionnel

URL de webhook pour les notifications asynchrones.

continue_atnumber
Optionnel

Secondes dans la source à partir desquelles continuer. Obligatoire en mode paramètre personnalisé.

instrumentalboolean
Optionnel

Si vrai, génère sans voix.

lyricsstring
Optionnel

Paroles exactes. Uniquement autorisé lors de l'extension d'un audio téléchargé en mode de paramètres personnalisés.

Limite: 5000
modelstring
Requis

Slug du modèle.

negative_tagsstring
Optionnel

Styles à éviter.

parameter_modestring
Requis

Hérite des paramètres de la piste source (source) ou fournit des paramètres personnalisés (custom).

Valeurs autorisées: source, custom
persona_idstring
Optionnel

ID du persona.

persona_typestring
Optionnel

Type de persona.

Valeurs autorisées: style, voice
promptstring
Optionnel

Description de l'extension. Ne peut pas être combinée avec des paroles.

Limite: 5000
stylestring
Optionnel

Préréglage de style. Obligatoire en mode de paramètre personnalisé.

Limite: 1000
style_weightnumber
Optionnel

Poids d'adhérence au style (0-1).

Plage: 0 - 1
task_idstring
Optionnel

ID de task source à étendre. Fournissez l'un de task_id, audio_id, audio_url ou upload_url.

titlestring
Optionnel

Titre de la chanson. Obligatoire en mode paramètre personnalisé.

Limite: 80
upload_urlstring
Optionnel

URL audio source téléversée à partir de laquelle continuer. Fournissez l'un des éléments suivants : task_id, audio_id, audio_url ou upload_url.

vocal_genderstring
Optionnel

Genre vocal.

Valeurs autorisées: male, female
weirdness_constraintnumber
Optionnel

Contrainte d'originalité (0-1).

Plage: 0 - 1
suno-v4.5-plus20 champs
audio_idstring
Optionnel

ID audio source à étendre. Fournissez l'un de task_id, audio_id, audio_url ou upload_url.

audio_urlstring
Optionnel

URL audio source à étendre. Fournissez l'un de task_id, audio_id, audio_url ou upload_url.

audio_weightnumber
Optionnel

Poids audio (0-1).

Plage: 0 - 1
callback_urlstring
Optionnel

URL de webhook pour les notifications asynchrones.

continue_atnumber
Optionnel

Secondes dans la source à partir desquelles continuer. Obligatoire en mode paramètre personnalisé.

instrumentalboolean
Optionnel

Si vrai, génère sans voix.

lyricsstring
Optionnel

Paroles exactes. Uniquement autorisé lors de l'extension d'un audio téléchargé en mode de paramètres personnalisés.

Limite: 5000
modelstring
Requis

Slug du modèle.

negative_tagsstring
Optionnel

Styles à éviter.

parameter_modestring
Requis

Hérite des paramètres de la piste source (source) ou fournit des paramètres personnalisés (custom).

Valeurs autorisées: source, custom
persona_idstring
Optionnel

ID du persona.

persona_typestring
Optionnel

Type de persona.

Valeurs autorisées: style, voice
promptstring
Optionnel

Description de l'extension. Ne peut pas être combinée avec des paroles.

Limite: 5000
stylestring
Optionnel

Préréglage de style. Obligatoire en mode de paramètre personnalisé.

Limite: 1000
style_weightnumber
Optionnel

Poids d'adhérence au style (0-1).

Plage: 0 - 1
task_idstring
Optionnel

ID de task source à étendre. Fournissez l'un de task_id, audio_id, audio_url ou upload_url.

titlestring
Optionnel

Titre de la chanson. Obligatoire en mode paramètre personnalisé.

Limite: 80
upload_urlstring
Optionnel

URL audio source téléversée à partir de laquelle continuer. Fournissez l'un des éléments suivants : task_id, audio_id, audio_url ou upload_url.

vocal_genderstring
Optionnel

Genre vocal.

Valeurs autorisées: male, female
weirdness_constraintnumber
Optionnel

Contrainte d'originalité (0-1).

Plage: 0 - 1
suno-v520 champs
audio_idstring
Optionnel

ID audio source à étendre. Fournissez l'un de task_id, audio_id, audio_url ou upload_url.

audio_urlstring
Optionnel

URL audio source à étendre. Fournissez l'un de task_id, audio_id, audio_url ou upload_url.

audio_weightnumber
Optionnel

Poids audio (0-1).

Plage: 0 - 1
callback_urlstring
Optionnel

URL de webhook pour les notifications asynchrones.

continue_atnumber
Optionnel

Secondes dans la source à partir desquelles continuer. Obligatoire en mode paramètre personnalisé.

instrumentalboolean
Optionnel

Si vrai, génère sans voix.

lyricsstring
Optionnel

Paroles exactes. Uniquement autorisé lors de l'extension d'un audio téléchargé en mode de paramètres personnalisés.

Limite: 5000
modelstring
Requis

Slug du modèle.

negative_tagsstring
Optionnel

Styles à éviter.

parameter_modestring
Requis

Hérite des paramètres de la piste source (source) ou fournit des paramètres personnalisés (custom).

Valeurs autorisées: source, custom
persona_idstring
Optionnel

ID du persona.

persona_typestring
Optionnel

Type de persona.

Valeurs autorisées: style, voice
promptstring
Optionnel

Description de l'extension. Ne peut pas être combinée avec des paroles.

Limite: 5000
stylestring
Optionnel

Préréglage de style. Obligatoire en mode de paramètre personnalisé.

Limite: 1000
style_weightnumber
Optionnel

Poids d'adhérence au style (0-1).

Plage: 0 - 1
task_idstring
Optionnel

ID de task source à étendre. Fournissez l'un de task_id, audio_id, audio_url ou upload_url.

titlestring
Optionnel

Titre de la chanson. Obligatoire en mode paramètre personnalisé.

Limite: 80
upload_urlstring
Optionnel

URL audio source téléversée à partir de laquelle continuer. Fournissez l'un des éléments suivants : task_id, audio_id, audio_url ou upload_url.

vocal_genderstring
Optionnel

Genre vocal.

Valeurs autorisées: male, female
weirdness_constraintnumber
Optionnel

Contrainte d'originalité (0-1).

Plage: 0 - 1
suno-v5.520 champs
audio_idstring
Optionnel

ID audio source à étendre. Fournissez l'un de task_id, audio_id, audio_url ou upload_url.

audio_urlstring
Optionnel

URL audio source à étendre. Fournissez l'un de task_id, audio_id, audio_url ou upload_url.

audio_weightnumber
Optionnel

Poids audio (0-1).

Plage: 0 - 1
callback_urlstring
Optionnel

URL de webhook pour les notifications asynchrones.

continue_atnumber
Optionnel

Secondes dans la source à partir desquelles continuer. Obligatoire en mode paramètre personnalisé.

instrumentalboolean
Optionnel

Si vrai, génère sans voix.

lyricsstring
Optionnel

Paroles exactes. Uniquement autorisé lors de l'extension d'un audio téléchargé en mode de paramètres personnalisés.

Limite: 5000
modelstring
Requis

Slug du modèle.

negative_tagsstring
Optionnel

Styles à éviter.

parameter_modestring
Requis

Hérite des paramètres de la piste source (source) ou fournit des paramètres personnalisés (custom).

Valeurs autorisées: source, custom
persona_idstring
Optionnel

ID du persona.

persona_typestring
Optionnel

Type de persona.

Valeurs autorisées: style, voice
promptstring
Optionnel

Description de l'extension. Ne peut pas être combinée avec des paroles.

Limite: 5000
stylestring
Optionnel

Préréglage de style. Obligatoire en mode de paramètre personnalisé.

Limite: 1000
style_weightnumber
Optionnel

Poids d'adhérence au style (0-1).

Plage: 0 - 1
task_idstring
Optionnel

ID de task source à étendre. Fournissez l'un de task_id, audio_id, audio_url ou upload_url.

titlestring
Optionnel

Titre de la chanson. Obligatoire en mode paramètre personnalisé.

Limite: 80
upload_urlstring
Optionnel

URL audio source téléversée à partir de laquelle continuer. Fournissez l'un des éléments suivants : task_id, audio_id, audio_url ou upload_url.

vocal_genderstring
Optionnel

Genre vocal.

Valeurs autorisées: male, female
weirdness_constraintnumber
Optionnel

Contrainte d'originalité (0-1).

Plage: 0 - 1
04

Créer une acceptation

HTTP 202

POST /api/v1/suno/extend_music

Schéma de réponse
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
}

Exemple de réponse

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

Interrogation en cours

HTTP 200

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

Schéma de réponse
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
}

Exemple de réponse

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

Interrogation terminée

HTTP 200

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

Schéma de réponse
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
}

Exemple de réponse

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

Échec de l'interrogation

HTTP 200

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

Schéma de réponse
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
}

Exemple de réponse

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

Rappel client : en cours de traitement

HTTP 200

POST callback_url

Schéma de réponse
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
}

Exemple de réponse

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

Rappel client : terminé

HTTP 200

POST callback_url

Schéma de réponse
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
}

Exemple de réponse

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

Rappel client : échoué

HTTP 200

POST callback_url

Schéma de réponse
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
}

Exemple de réponse

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

Erreurs

HTTP 401

POST /api/v1/suno/extend_music

Schéma de réponse
JSON
{
  "properties": {
    "error": {
      "description": "Message d'erreur lisible par l'humain.",
      "type": "string"
    }
  },
  "required": [
    "error"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

Exemple de réponse

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

Erreurs

HTTP 401

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

Schéma de réponse
JSON
{
  "properties": {
    "error": {
      "description": "Message d'erreur lisible par l'humain.",
      "type": "string"
    }
  },
  "required": [
    "error"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

Exemple de réponse

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

Erreurs

HTTP 400

POST /api/v1/suno/extend_music

Schéma de réponse
JSON
{
  "oneOf": [
    {
      "properties": {
        "error": {
          "description": "Message d'erreur lisible par l'humain.",
          "type": "string"
        }
      },
      "required": [
        "error"
      ],
      "type": "object",
      "unevaluatedProperties": false
    },
    {
      "properties": {
        "error": {
          "description": "Résumé de validation lisible par l'humain.",
          "type": "string"
        },
        "errors": {
          "additionalProperties": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "description": "Messages de validation indexés par champ de requête public, avec un tableau de chaînes lisibles par l'humain pour chaque champ.",
          "type": "object"
        }
      },
      "required": [
        "error",
        "errors"
      ],
      "type": "object",
      "unevaluatedProperties": false
    }
  ]
}

Exemple de réponse

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

Erreurs

HTTP 402

POST /api/v1/suno/extend_music

Schéma de réponse
JSON
{
  "properties": {
    "error": {
      "description": "Message d'erreur lisible par l'humain.",
      "type": "string"
    }
  },
  "required": [
    "error"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

Exemple de réponse

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

Erreurs

HTTP 429

POST /api/v1/suno/extend_music

Schéma de réponse
JSON
{
  "properties": {
    "error": {
      "description": "Message d'erreur lisible par l'humain.",
      "type": "string"
    }
  },
  "required": [
    "error"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

Exemple de réponse

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

Erreurs

HTTP 409

POST /api/v1/suno/extend_music

Schéma de réponse
JSON
{
  "properties": {
    "error": {
      "description": "Message d'erreur lisible par l'humain.",
      "type": "string"
    }
  },
  "required": [
    "error"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

Exemple de réponse

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

Erreurs

HTTP 429

POST /api/v1/suno/extend_music

Schéma de réponse
JSON
{
  "properties": {
    "error": {
      "description": "Message d'erreur lisible par l'humain.",
      "type": "string"
    }
  },
  "required": [
    "error"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

Exemple de réponse

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

Erreurs

HTTP 503

POST /api/v1/suno/extend_music

Schéma de réponse
JSON
{
  "properties": {
    "error": {
      "description": "Message d'erreur lisible par l'humain.",
      "type": "string"
    }
  },
  "required": [
    "error"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

Exemple de réponse

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

Erreurs

HTTP 504

POST /api/v1/suno/extend_music

Schéma de réponse
JSON
{
  "properties": {
    "error": {
      "description": "Message d'erreur lisible par l'humain.",
      "type": "string"
    }
  },
  "required": [
    "error"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

Exemple de réponse

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

Erreurs

HTTP 404

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

Schéma de réponse
JSON
{
  "properties": {
    "error": {
      "description": "Message d'erreur lisible par l'humain.",
      "type": "string"
    }
  },
  "required": [
    "error"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

Exemple de réponse

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

Exemples de code générés

Utilisez directement cURL, ou installez un SDK pour votre langage. Chaque exemple soumet la requête validée indiquée dans cette référence.

Installer

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