---
title: Suno Prolonger la musique | RunAPI
description: Utilisez le point de terminaison extend music pour créer une Task asynchrone.
url: https://runapi.ai/fr/docs/api/suno/extend-music.md
canonical: https://runapi.ai/fr/docs/api/suno/extend-music
locale: fr
---

> Version HTML: https://runapi.ai/fr/docs/api/suno/extend-music
> Index du site pour les agents: https://runapi.ai/llms.txt

# Suno Prolonger la musique

## 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

## 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.

- [suno-v4](https://runapi.ai/fr/models/suno/v4)
- [suno-v4.5](https://runapi.ai/fr/models/suno/v4.5)
- [suno-v4.5-all](https://runapi.ai/fr/models/suno/v4.5-all)
- [suno-v4.5-plus](https://runapi.ai/fr/models/suno/v4.5-plus)
- [suno-v5](https://runapi.ai/fr/models/suno/v5)
- [suno-v5.5](https://runapi.ai/fr/models/suno/v5.5)

## Schéma de requête

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-v4

```json
{
  "audio_id": {
    "description": "ID audio source à étendre. Fournissez l'un de task_id, audio_id, audio_url ou upload_url.",
    "type": "string"
  },
  "audio_url": {
    "description": "URL audio source à étendre. Fournissez l'un de task_id, audio_id, audio_url ou upload_url.",
    "type": "string"
  },
  "audio_weight": {
    "description": "Poids audio (0-1).",
    "max": 1,
    "min": 0,
    "type": "number"
  },
  "callback_url": {
    "description": "URL de webhook pour les notifications asynchrones.",
    "type": "string"
  },
  "continue_at": {
    "description": "Secondes dans la source à partir desquelles continuer. Obligatoire en mode paramètre personnalisé.",
    "type": "number"
  },
  "instrumental": {
    "description": "Si vrai, génère sans voix.",
    "type": "boolean"
  },
  "lyrics": {
    "description": "Paroles exactes. Uniquement autorisé lors de l'extension d'un audio téléchargé en mode de paramètres personnalisés.",
    "length": true,
    "max": 5000,
    "type": "string"
  },
  "model": {
    "description": "Slug du modèle.",
    "required": true,
    "type": "string"
  },
  "negative_tags": {
    "description": "Styles à éviter.",
    "type": "string"
  },
  "parameter_mode": {
    "description": "Hérite des paramètres de la piste source (source) ou fournit des paramètres personnalisés (custom).",
    "enum": [
      "source",
      "custom"
    ],
    "required": true,
    "type": "string"
  },
  "persona_id": {
    "description": "ID du persona.",
    "type": "string"
  },
  "persona_type": {
    "description": "Type de persona.",
    "enum": [
      "style",
      "voice"
    ],
    "type": "string"
  },
  "prompt": {
    "description": "Description de l'extension. Ne peut pas être combinée avec des paroles.",
    "length": true,
    "max": 5000,
    "type": "string"
  },
  "style": {
    "description": "Préréglage de style. Obligatoire en mode de paramètre personnalisé.",
    "length": true,
    "max": 1000,
    "type": "string"
  },
  "style_weight": {
    "description": "Poids d'adhérence au style (0-1).",
    "max": 1,
    "min": 0,
    "type": "number"
  },
  "task_id": {
    "description": "ID de task source à étendre. Fournissez l'un de task_id, audio_id, audio_url ou upload_url.",
    "type": "string"
  },
  "title": {
    "description": "Titre de la chanson. Obligatoire en mode paramètre personnalisé.",
    "length": true,
    "max": 80,
    "type": "string"
  },
  "upload_url": {
    "description": "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.",
    "type": "string"
  },
  "vocal_gender": {
    "description": "Genre vocal.",
    "enum": [
      "male",
      "female"
    ],
    "type": "string"
  },
  "weirdness_constraint": {
    "description": "Contrainte d'originalité (0-1).",
    "max": 1,
    "min": 0,
    "type": "number"
  }
}
```

### suno-v4.5

```json
{
  "audio_id": {
    "description": "ID audio source à étendre. Fournissez l'un de task_id, audio_id, audio_url ou upload_url.",
    "type": "string"
  },
  "audio_url": {
    "description": "URL audio source à étendre. Fournissez l'un de task_id, audio_id, audio_url ou upload_url.",
    "type": "string"
  },
  "audio_weight": {
    "description": "Poids audio (0-1).",
    "max": 1,
    "min": 0,
    "type": "number"
  },
  "callback_url": {
    "description": "URL de webhook pour les notifications asynchrones.",
    "type": "string"
  },
  "continue_at": {
    "description": "Secondes dans la source à partir desquelles continuer. Obligatoire en mode paramètre personnalisé.",
    "type": "number"
  },
  "instrumental": {
    "description": "Si vrai, génère sans voix.",
    "type": "boolean"
  },
  "lyrics": {
    "description": "Paroles exactes. Uniquement autorisé lors de l'extension d'un audio téléchargé en mode de paramètres personnalisés.",
    "length": true,
    "max": 5000,
    "type": "string"
  },
  "model": {
    "description": "Slug du modèle.",
    "required": true,
    "type": "string"
  },
  "negative_tags": {
    "description": "Styles à éviter.",
    "type": "string"
  },
  "parameter_mode": {
    "description": "Hérite des paramètres de la piste source (source) ou fournit des paramètres personnalisés (custom).",
    "enum": [
      "source",
      "custom"
    ],
    "required": true,
    "type": "string"
  },
  "persona_id": {
    "description": "ID du persona.",
    "type": "string"
  },
  "persona_type": {
    "description": "Type de persona.",
    "enum": [
      "style",
      "voice"
    ],
    "type": "string"
  },
  "prompt": {
    "description": "Description de l'extension. Ne peut pas être combinée avec des paroles.",
    "length": true,
    "max": 5000,
    "type": "string"
  },
  "style": {
    "description": "Préréglage de style. Obligatoire en mode de paramètre personnalisé.",
    "length": true,
    "max": 1000,
    "type": "string"
  },
  "style_weight": {
    "description": "Poids d'adhérence au style (0-1).",
    "max": 1,
    "min": 0,
    "type": "number"
  },
  "task_id": {
    "description": "ID de task source à étendre. Fournissez l'un de task_id, audio_id, audio_url ou upload_url.",
    "type": "string"
  },
  "title": {
    "description": "Titre de la chanson. Obligatoire en mode paramètre personnalisé.",
    "length": true,
    "max": 80,
    "type": "string"
  },
  "upload_url": {
    "description": "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.",
    "type": "string"
  },
  "vocal_gender": {
    "description": "Genre vocal.",
    "enum": [
      "male",
      "female"
    ],
    "type": "string"
  },
  "weirdness_constraint": {
    "description": "Contrainte d'originalité (0-1).",
    "max": 1,
    "min": 0,
    "type": "number"
  }
}
```

### suno-v4.5-all

```json
{
  "audio_id": {
    "description": "ID audio source à étendre. Fournissez l'un de task_id, audio_id, audio_url ou upload_url.",
    "type": "string"
  },
  "audio_url": {
    "description": "URL audio source à étendre. Fournissez l'un de task_id, audio_id, audio_url ou upload_url.",
    "type": "string"
  },
  "audio_weight": {
    "description": "Poids audio (0-1).",
    "max": 1,
    "min": 0,
    "type": "number"
  },
  "callback_url": {
    "description": "URL de webhook pour les notifications asynchrones.",
    "type": "string"
  },
  "continue_at": {
    "description": "Secondes dans la source à partir desquelles continuer. Obligatoire en mode paramètre personnalisé.",
    "type": "number"
  },
  "instrumental": {
    "description": "Si vrai, génère sans voix.",
    "type": "boolean"
  },
  "lyrics": {
    "description": "Paroles exactes. Uniquement autorisé lors de l'extension d'un audio téléchargé en mode de paramètres personnalisés.",
    "length": true,
    "max": 5000,
    "type": "string"
  },
  "model": {
    "description": "Slug du modèle.",
    "required": true,
    "type": "string"
  },
  "negative_tags": {
    "description": "Styles à éviter.",
    "type": "string"
  },
  "parameter_mode": {
    "description": "Hérite des paramètres de la piste source (source) ou fournit des paramètres personnalisés (custom).",
    "enum": [
      "source",
      "custom"
    ],
    "required": true,
    "type": "string"
  },
  "persona_id": {
    "description": "ID du persona.",
    "type": "string"
  },
  "persona_type": {
    "description": "Type de persona.",
    "enum": [
      "style",
      "voice"
    ],
    "type": "string"
  },
  "prompt": {
    "description": "Description de l'extension. Ne peut pas être combinée avec des paroles.",
    "length": true,
    "max": 5000,
    "type": "string"
  },
  "style": {
    "description": "Préréglage de style. Obligatoire en mode de paramètre personnalisé.",
    "length": true,
    "max": 1000,
    "type": "string"
  },
  "style_weight": {
    "description": "Poids d'adhérence au style (0-1).",
    "max": 1,
    "min": 0,
    "type": "number"
  },
  "task_id": {
    "description": "ID de task source à étendre. Fournissez l'un de task_id, audio_id, audio_url ou upload_url.",
    "type": "string"
  },
  "title": {
    "description": "Titre de la chanson. Obligatoire en mode paramètre personnalisé.",
    "length": true,
    "max": 80,
    "type": "string"
  },
  "upload_url": {
    "description": "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.",
    "type": "string"
  },
  "vocal_gender": {
    "description": "Genre vocal.",
    "enum": [
      "male",
      "female"
    ],
    "type": "string"
  },
  "weirdness_constraint": {
    "description": "Contrainte d'originalité (0-1).",
    "max": 1,
    "min": 0,
    "type": "number"
  }
}
```

### suno-v4.5-plus

```json
{
  "audio_id": {
    "description": "ID audio source à étendre. Fournissez l'un de task_id, audio_id, audio_url ou upload_url.",
    "type": "string"
  },
  "audio_url": {
    "description": "URL audio source à étendre. Fournissez l'un de task_id, audio_id, audio_url ou upload_url.",
    "type": "string"
  },
  "audio_weight": {
    "description": "Poids audio (0-1).",
    "max": 1,
    "min": 0,
    "type": "number"
  },
  "callback_url": {
    "description": "URL de webhook pour les notifications asynchrones.",
    "type": "string"
  },
  "continue_at": {
    "description": "Secondes dans la source à partir desquelles continuer. Obligatoire en mode paramètre personnalisé.",
    "type": "number"
  },
  "instrumental": {
    "description": "Si vrai, génère sans voix.",
    "type": "boolean"
  },
  "lyrics": {
    "description": "Paroles exactes. Uniquement autorisé lors de l'extension d'un audio téléchargé en mode de paramètres personnalisés.",
    "length": true,
    "max": 5000,
    "type": "string"
  },
  "model": {
    "description": "Slug du modèle.",
    "required": true,
    "type": "string"
  },
  "negative_tags": {
    "description": "Styles à éviter.",
    "type": "string"
  },
  "parameter_mode": {
    "description": "Hérite des paramètres de la piste source (source) ou fournit des paramètres personnalisés (custom).",
    "enum": [
      "source",
      "custom"
    ],
    "required": true,
    "type": "string"
  },
  "persona_id": {
    "description": "ID du persona.",
    "type": "string"
  },
  "persona_type": {
    "description": "Type de persona.",
    "enum": [
      "style",
      "voice"
    ],
    "type": "string"
  },
  "prompt": {
    "description": "Description de l'extension. Ne peut pas être combinée avec des paroles.",
    "length": true,
    "max": 5000,
    "type": "string"
  },
  "style": {
    "description": "Préréglage de style. Obligatoire en mode de paramètre personnalisé.",
    "length": true,
    "max": 1000,
    "type": "string"
  },
  "style_weight": {
    "description": "Poids d'adhérence au style (0-1).",
    "max": 1,
    "min": 0,
    "type": "number"
  },
  "task_id": {
    "description": "ID de task source à étendre. Fournissez l'un de task_id, audio_id, audio_url ou upload_url.",
    "type": "string"
  },
  "title": {
    "description": "Titre de la chanson. Obligatoire en mode paramètre personnalisé.",
    "length": true,
    "max": 80,
    "type": "string"
  },
  "upload_url": {
    "description": "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.",
    "type": "string"
  },
  "vocal_gender": {
    "description": "Genre vocal.",
    "enum": [
      "male",
      "female"
    ],
    "type": "string"
  },
  "weirdness_constraint": {
    "description": "Contrainte d'originalité (0-1).",
    "max": 1,
    "min": 0,
    "type": "number"
  }
}
```

### suno-v5

```json
{
  "audio_id": {
    "description": "ID audio source à étendre. Fournissez l'un de task_id, audio_id, audio_url ou upload_url.",
    "type": "string"
  },
  "audio_url": {
    "description": "URL audio source à étendre. Fournissez l'un de task_id, audio_id, audio_url ou upload_url.",
    "type": "string"
  },
  "audio_weight": {
    "description": "Poids audio (0-1).",
    "max": 1,
    "min": 0,
    "type": "number"
  },
  "callback_url": {
    "description": "URL de webhook pour les notifications asynchrones.",
    "type": "string"
  },
  "continue_at": {
    "description": "Secondes dans la source à partir desquelles continuer. Obligatoire en mode paramètre personnalisé.",
    "type": "number"
  },
  "instrumental": {
    "description": "Si vrai, génère sans voix.",
    "type": "boolean"
  },
  "lyrics": {
    "description": "Paroles exactes. Uniquement autorisé lors de l'extension d'un audio téléchargé en mode de paramètres personnalisés.",
    "length": true,
    "max": 5000,
    "type": "string"
  },
  "model": {
    "description": "Slug du modèle.",
    "required": true,
    "type": "string"
  },
  "negative_tags": {
    "description": "Styles à éviter.",
    "type": "string"
  },
  "parameter_mode": {
    "description": "Hérite des paramètres de la piste source (source) ou fournit des paramètres personnalisés (custom).",
    "enum": [
      "source",
      "custom"
    ],
    "required": true,
    "type": "string"
  },
  "persona_id": {
    "description": "ID du persona.",
    "type": "string"
  },
  "persona_type": {
    "description": "Type de persona.",
    "enum": [
      "style",
      "voice"
    ],
    "type": "string"
  },
  "prompt": {
    "description": "Description de l'extension. Ne peut pas être combinée avec des paroles.",
    "length": true,
    "max": 5000,
    "type": "string"
  },
  "style": {
    "description": "Préréglage de style. Obligatoire en mode de paramètre personnalisé.",
    "length": true,
    "max": 1000,
    "type": "string"
  },
  "style_weight": {
    "description": "Poids d'adhérence au style (0-1).",
    "max": 1,
    "min": 0,
    "type": "number"
  },
  "task_id": {
    "description": "ID de task source à étendre. Fournissez l'un de task_id, audio_id, audio_url ou upload_url.",
    "type": "string"
  },
  "title": {
    "description": "Titre de la chanson. Obligatoire en mode paramètre personnalisé.",
    "length": true,
    "max": 80,
    "type": "string"
  },
  "upload_url": {
    "description": "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.",
    "type": "string"
  },
  "vocal_gender": {
    "description": "Genre vocal.",
    "enum": [
      "male",
      "female"
    ],
    "type": "string"
  },
  "weirdness_constraint": {
    "description": "Contrainte d'originalité (0-1).",
    "max": 1,
    "min": 0,
    "type": "number"
  }
}
```

### suno-v5.5

```json
{
  "audio_id": {
    "description": "ID audio source à étendre. Fournissez l'un de task_id, audio_id, audio_url ou upload_url.",
    "type": "string"
  },
  "audio_url": {
    "description": "URL audio source à étendre. Fournissez l'un de task_id, audio_id, audio_url ou upload_url.",
    "type": "string"
  },
  "audio_weight": {
    "description": "Poids audio (0-1).",
    "max": 1,
    "min": 0,
    "type": "number"
  },
  "callback_url": {
    "description": "URL de webhook pour les notifications asynchrones.",
    "type": "string"
  },
  "continue_at": {
    "description": "Secondes dans la source à partir desquelles continuer. Obligatoire en mode paramètre personnalisé.",
    "type": "number"
  },
  "instrumental": {
    "description": "Si vrai, génère sans voix.",
    "type": "boolean"
  },
  "lyrics": {
    "description": "Paroles exactes. Uniquement autorisé lors de l'extension d'un audio téléchargé en mode de paramètres personnalisés.",
    "length": true,
    "max": 5000,
    "type": "string"
  },
  "model": {
    "description": "Slug du modèle.",
    "required": true,
    "type": "string"
  },
  "negative_tags": {
    "description": "Styles à éviter.",
    "type": "string"
  },
  "parameter_mode": {
    "description": "Hérite des paramètres de la piste source (source) ou fournit des paramètres personnalisés (custom).",
    "enum": [
      "source",
      "custom"
    ],
    "required": true,
    "type": "string"
  },
  "persona_id": {
    "description": "ID du persona.",
    "type": "string"
  },
  "persona_type": {
    "description": "Type de persona.",
    "enum": [
      "style",
      "voice"
    ],
    "type": "string"
  },
  "prompt": {
    "description": "Description de l'extension. Ne peut pas être combinée avec des paroles.",
    "length": true,
    "max": 5000,
    "type": "string"
  },
  "style": {
    "description": "Préréglage de style. Obligatoire en mode de paramètre personnalisé.",
    "length": true,
    "max": 1000,
    "type": "string"
  },
  "style_weight": {
    "description": "Poids d'adhérence au style (0-1).",
    "max": 1,
    "min": 0,
    "type": "number"
  },
  "task_id": {
    "description": "ID de task source à étendre. Fournissez l'un de task_id, audio_id, audio_url ou upload_url.",
    "type": "string"
  },
  "title": {
    "description": "Titre de la chanson. Obligatoire en mode paramètre personnalisé.",
    "length": true,
    "max": 80,
    "type": "string"
  },
  "upload_url": {
    "description": "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.",
    "type": "string"
  },
  "vocal_gender": {
    "description": "Genre vocal.",
    "enum": [
      "male",
      "female"
    ],
    "type": "string"
  },
  "weirdness_constraint": {
    "description": "Contrainte d'originalité (0-1).",
    "max": 1,
    "min": 0,
    "type": "number"
  }
}
```

## 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"
}
```

## 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"
}
```

## 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"
}
```

## É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"
}
```

## 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"
}
```

## 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"
}
```

## 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"
}
```

## 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"
}
```

## 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"
}
```

## 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"
}
```

## 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"
}
```

## 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"
}
```

## 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"
}
```

## 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."
}
```

## 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"
}
```

## 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"
}
```

## 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"
}
```

## 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.

### curl

```curl
curl -X POST https://runapi.ai/api/v1/suno/extend_music \
  -H 'Authorization: Bearer YOUR_API_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{"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"}'
```

### javascript

#### Installer

```bash
npm install @runapi.ai/suno
```

```javascript
import { SunoClient } from "@runapi.ai/suno";

const client = new SunoClient({ apiKey: process.env.RUNAPI_API_KEY });
const task = await client.extendMusic.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"
});
```

### python

#### Installer

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

### go

#### Installer

```bash
go get github.com/runapi-ai/suno-sdk/go@latest
```

```go
package main

import (
  "context"
  "log"
  "os"

  "github.com/runapi-ai/core-sdk/go/option"
  suno "github.com/runapi-ai/suno-sdk/go/suno"
)

func main() {
  client, err := suno.NewClient(option.WithAPIKey(os.Getenv("RUNAPI_API_KEY")))
  if err != nil {
    log.Fatal(err)
  }

  task, err := client.ExtendMusic.Create(context.Background(), suno.ExtendMusicParams{
    Model: suno.SunoModel("suno-v5"),
    UploadURL: "https://cdn.runapi.ai/public/samples/music.mp3",
    ParameterMode: suno.ParameterMode("custom"),
    Instrumental: func(value bool) *bool { return &value }(false),
    Prompt: "Continue the arrangement with a brighter chorus.",
    Style: "Acoustic pop with warm piano.",
    Title: "Brighter Chorus",
    ContinueAt: func(value float64) *float64 { return &value }(60),
    PersonaID: "persona_reference",
    PersonaType: suno.PersonaType("style"),
  })
  if err != nil {
    log.Fatal(err)
  }
  _ = task
}
```

### ruby

#### Installer

```bash
gem install runapi-suno
```

```ruby
require "runapi/suno"

client = RunApi::Suno::Client.new(api_key: ENV.fetch("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"
)
```

### java

#### Installer

```kotlin
implementation("ai.runapi:runapi-suno")
```

```java
import ai.runapi.suno.SunoClient;
import ai.runapi.suno.types.ExtendMusicParams;
import ai.runapi.core.polling.TaskCreateResponse;

public final class Example {
  public static void main(String[] args) {
    SunoClient client = SunoClient.builder()
        .apiKey(System.getenv("RUNAPI_API_KEY"))
        .build();
    TaskCreateResponse task = client.extendMusic().create(
        ExtendMusicParams.builder()
        .model("suno-v5")
        .uploadUrl("https://cdn.runapi.ai/public/samples/music.mp3")
        .parameterMode("custom")
        .instrumental(false)
        .prompt("Continue the arrangement with a brighter chorus.")
        .style("Acoustic pop with warm piano.")
        .title("Brighter Chorus")
        .continueAt(60)
        .personaId("persona_reference")
        .personaType("style")
            .build()
    );
  }
}
```

### php

#### Installer

```bash
composer require runapi-ai/suno
```

```php
<?php

require __DIR__ . '/vendor/autoload.php';

use RunApi\Core\ClientOptions;
use RunApi\Suno\SunoClient;

$client = new SunoClient(new ClientOptions(apiKey: getenv('RUNAPI_API_KEY')));
$task = $client->extendMusic->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"
]);
```

## Guides associés

- [Authentification](https://runapi.ai/fr/docs/guides/authentication.md)
- [Démarrage rapide](https://runapi.ai/fr/docs/guides/task-api/quickstart.md)

---

## Plus de ressources de RunAPI

- [Accueil](https://runapi.ai/fr/.md)
- [Catalogue de modèles](https://runapi.ai/fr/models.md)
- [Tarifs](https://runapi.ai/fr/pricing.md)
- [Fournisseurs](https://runapi.ai/fr/models)
- [Documentation](https://runapi.ai/fr/docs/guides)
- [SDK](https://runapi.ai/fr/sdk.md)
- [CLI](https://runapi.ai/fr/cli.md)
- [Serveur MCP](https://runapi.ai/fr/mcp.md)
- [Claude Code vs Cursor](https://runapi.ai/fr/claude-code-vs-cursor.md)
- [Configuration de l’API Cursor](https://runapi.ai/fr/cursor-api-setup.md)
- [RunAPI vs OpenRouter](https://runapi.ai/fr/openrouter-alternative.md)
- [Entreprise](https://runapi.ai/fr/contact.md)
- [Contact](https://runapi.ai/fr/contact.md)
- [Conditions](https://runapi.ai/fr/terms.md)
- [Confidentialité](https://runapi.ai/fr/privacy.md)
- [Index du site pour les agents](https://runapi.ai/llms.txt)

Contact: contact@runapi.ai

## Données structurées

```json
[
  {
    "@context": "https://schema.org",
    "inLanguage": "fr",
    "@type": "WebSite",
    "name": "RunAPI",
    "url": "https://runapi.ai/fr",
    "potentialAction": {
      "@type": "SearchAction",
      "target": {
        "@type": "EntryPoint",
        "urlTemplate": "https://runapi.ai/fr/models?q={search_term_string}"
      },
      "query-input": "required name=search_term_string"
    }
  },
  {
    "@context": "https://schema.org",
    "inLanguage": "fr",
    "@type": "Organization",
    "name": "RunAPI",
    "url": "https://runapi.ai/fr",
    "logo": {
      "@type": "ImageObject",
      "url": "https://runapi.ai/fricon.svg"
    },
    "sameAs": [
      "https://github.com/runapi-ai"
    ]
  },
  {
    "@context": "https://schema.org",
    "inLanguage": "fr",
    "@type": "TechArticle",
    "headline": "Suno Prolonger la musique",
    "description": "Utilisez le point de terminaison extend music pour créer une Task asynchrone.",
    "url": "https://runapi.ai/fr/docs/api/suno/extend-music",
    "mainEntityOfPage": "https://runapi.ai/fr/docs/api/suno/extend-music"
  }
]
```
