> This is a page from the ElevenLabs documentation. For a complete page index, fetch https://elevenlabs.io/docs/llms.txt. For the full documentation in a single file, fetch https://elevenlabs.io/docs/llms-full.txt.

# Importer de la musique

POST https://api.elevenlabs.io/v1/music/upload
Content-Type: multipart/form-data

Importez un fichier musical à utiliser ultérieurement pour l’inpainting. Le tarif de l’importation est identique à celui de la génération de chansons. Tous les contenus importés sont contrôlés pour détecter toute atteinte aux droits d’auteur. Si du contenu protégé est détecté, la moitié du coût de la requête reste facturée.

Reference: https://elevenlabs.io/docs/api-reference/music/upload

## Servers

- `https://api.elevenlabs.io` (Production, default)
- `https://api.us.elevenlabs.io` (Production US)
- `https://api.eu.residency.elevenlabs.io` (Production EU)
- `https://api.in.residency.elevenlabs.io` (Production India)
- `https://api.sg.residency.elevenlabs.io` (Production Singapore)

## Request

### Body (multipart/form-data)

This endpoint expects a multipart form containing a file.

- `file` (file, required) — Fichier audio à importer.
- `extract_composition_plan` (V1MusicUploadPostRequestBodyContentMultipartFormDataSchemaExtractCompositionPlan, optional) — Indique s'il faut générer et renvoyer le plan de composition du morceau importé. Fournissez un ID de modèle (`music_v1`, `music_v2` ou `music_v2_5`) pour contrôler le format du plan de composition renvoyé. Transmettre `true`/`false` est obsolète, `true` utilise par défaut le format de plan `music_v1`. L'activation de cette option augmente la latence.
- `with_timestamps` (boolean, optional) — Indique s'il faut transcrire le morceau importé et renvoyer les horodatages au niveau des mots. Si la valeur est True, la réponse inclut words_timestamps, mais la latence augmente.
- `with_waveform_visual` (boolean, optional) — Indique s'il faut renvoyer la forme d'onde visuelle du morceau importé.

## Response

### 200

Fichier musical importé avec succès avec un plan de composition facultatif

- `song_id` (string, required) — Identifiant unique de la chanson importée
- `composition_plan` (MusicUploadResponseCompositionPlan, optional, nullable) — Plan de composition extrait de la chanson importée. Présent uniquement si `extract_composition_plan` a été fourni dans le corps de la requête.
- `words_timestamps` (list of WordTimestamp, optional, nullable) — Horodatages au niveau des mots transcrits à partir de la chanson importée. Présents uniquement si `with_timestamps` était défini sur True dans le corps de la requête.
- `waveform_visual` (list of integer, optional, nullable) — Une forme d'onde basse résolution du morceau importé, destinée à en afficher un aperçu. Elle contient 4 valeurs par seconde d'audio, de -1000 à 1000. Le son stéréo est mixé sur un seul canal. Présente uniquement si `with_waveform_visual` était défini sur True dans le corps de la requête.

## Errors

### 422 Unprocessable Entity Error

Erreur de validation

- `detail` (list of ValidationError, optional)

## Types

### MusicUploadResponseCompositionPlan

Plan de composition extrait de la chanson importée. Présent uniquement si `extract_composition_plan` a été fourni dans le corps de la requête.

- MusicPrompt: MusicPrompt
- CompositionPlan: CompositionPlan

### WordTimestamp

- `word` (string, required)
- `start_ms` (integer, required)
- `end_ms` (integer, required)

### ValidationError

- `loc` (list of ValidationErrorLocItems, required)
- `msg` (string, required)
- `type` (string, required)

### MusicPrompt

Plan de composition pour le modèle `music_v1`. L'utilisation de ce champ avec tout autre modèle entraîne une erreur.

- `positive_global_styles` (list of string, required) — Les styles et orientations musicales à intégrer à l’ensemble du morceau. Utilisez l’anglais pour de meilleurs résultats.
- `negative_global_styles` (list of string, required) — Les styles et orientations musicales à exclure de l’ensemble du morceau. Utilisez l’anglais pour de meilleurs résultats.
- `sections` (list of SongSection, required) — Les sections de la chanson.

### CompositionPlan

Plan de composition pour les modèles `music_v2` et `music_v2_5`. L'utilisation de ce champ avec tout autre modèle entraîne une erreur.

- `chunks` (list of CompositionPlanChunksItems, required) — Segments composant la génération.

### ValidationErrorLocItems

- string
- integer

### SongSection

- `section_name` (string, required) — Le nom de la section. Doit comporter entre 1 et 100 caractères.
- `positive_local_styles` (list of string, required) — Les styles et orientations musicales à intégrer à cette section. Utilisez l’anglais pour de meilleurs résultats.
- `negative_local_styles` (list of string, required) — Les styles et orientations musicales à exclure de cette section. Utilisez l’anglais pour de meilleurs résultats.
- `duration_ms` (integer, required) — La durée de la section en millisecondes. Doit être comprise entre 3 000 ms et 120 000 ms.
- `lines` (list of string, required) — Les paroles de la section. Maximum 30 lignes par section et 200 caractères par ligne.
- `source_from` (SectionSource, optional, nullable) — Source facultative dont extraire la section. Utilisée pour l'inpainting.

### CompositionPlanChunksItems

- GenerationChunk: GenerationChunk-Input
- AudioRefChunk: AudioRefChunk

### SectionSource

- `song_id` (string, required) — L’ID de la chanson à partir de laquelle extraire la section. Vous trouverez l’ID de la chanson dans les en-têtes de réponse lorsque vous générez une chanson.
- `range` (TimeRange, required) — La plage à extraire de la chanson source.
- `negative_ranges` (list of TimeRange, optional) — Les plages à exclure de « range ».

### GenerationChunk-Input

- `text` (string, required) — La configuration de texte à générer pour ce segment. Elle peut contenir un nom de section facultatif entre crochets au début, par exemple \[Verse 1], des lignes de paroles et des indications intégrées entre accolades, par exemple \{scratching}. Les noms de section doivent comporter entre 1 et 100 caractères. Un maximum de 30 lignes est autorisé, avec au plus 200 caractères par ligne.
- `duration_ms` (integer, required) — La durée du segment en millisecondes. Doit être comprise entre 3 000 ms et 120 000 ms.
- `positive_styles` (list of string, required) — Les styles et orientations musicales à intégrer à ce segment. Utilisez l’anglais pour de meilleurs résultats. Les styles du premier segment sont les plus importants, car ils définissent le ton général et le genre. Les styles des segments suivants peuvent apporter des nuances, une progression, une emphase ou modifier l’orientation du morceau. Visez au moins 6 à 7 styles dans les premiers segments, jusqu’à ce que l’orientation soit établie. Des styles génériques comme « great production quality » constituent de bonnes valeurs par défaut à ajouter à la liste.
- `negative_styles` (list of string, optional) — Les styles et orientations musicales à exclure de ce segment. Utilisez l’anglais pour de meilleurs résultats. Laisser ce champ vide est recommandé par défaut, ne l’utilisez que si vous souhaitez explicitement éviter un style ou une orientation en particulier.
- `context_adherence` (enum, optional, default: high) — Niveau d’adhérence du modèle au contexte des segments qui l’entourent. Une faible adhérence permet au modèle de s’écarter du contexte et d’être plus créatif. Une adhérence élevée rend le modèle plus cohérent avec le contexte.
  - Allowed values: `low`, `medium`, `high`
- `conditioning_ref` (AudioRefChunk, optional, nullable) — Référence audio utilisée pour conditionner la génération. Le premier segment est le plus important, car il influence la génération de tous les segments suivants. Pour conditionner l’ensemble de la chanson, commencez dès le premier segment.
- `condition_strength` (enum, optional, nullable) — Intensité avec laquelle le modèle respecte la référence de conditionnement. Une faible intensité rend le modèle plus créatif et l’éloigne de la référence. Une intensité élevée rend le modèle plus cohérent avec la référence.
  - Allowed values: `low`, `medium`, `high`, `xhigh`

### AudioRefChunk

- `song_id` (string, required) — L’ID de la chanson à partir de laquelle extraire le segment. Vous trouverez l’ID de la chanson dans les en-têtes de réponse lorsque vous générez une chanson.
- `range` (TimeRange, required) — La plage temporelle à extraire du morceau.

### TimeRange

- `start_ms` (integer, required)
- `end_ms` (integer, required)

## Examples

**Request**

```json
{
  "file": "<file: string>"
}
```

**Response**

```json
{
  "song_id": "jR4Xz8kL2mNpQ9wVtY1b"
}
```

**SDK Code**

```python
import requests

url = "https://api.elevenlabs.io/v1/music/upload"

files = { "file": "open('string', 'rb')" }
payload = {
    "extract_composition_plan": ,
    "with_timestamps": ,
    "with_waveform_visual": 
}

response = requests.post(url, data=payload, files=files)

print(response.json())
```

```javascript
const url = 'https://api.elevenlabs.io/v1/music/upload';
const form = new FormData();
form.append('extract_composition_plan', '');
form.append('file', 'string');
form.append('with_timestamps', '');
form.append('with_waveform_visual', '');

const options = {method: 'POST'};

options.body = form;

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.elevenlabs.io/v1/music/upload"

	payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"extract_composition_plan\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"string\"\r\nContent-Type: application/octet-stream\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"with_timestamps\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"with_waveform_visual\"\r\n\r\n\r\n-----011000010111000001101001--\r\n")

	req, _ := http.NewRequest("POST", url, payload)

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://api.elevenlabs.io/v1/music/upload")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"extract_composition_plan\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"string\"\r\nContent-Type: application/octet-stream\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"with_timestamps\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"with_waveform_visual\"\r\n\r\n\r\n-----011000010111000001101001--\r\n"

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.elevenlabs.io/v1/music/upload")
  .body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"extract_composition_plan\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"string\"\r\nContent-Type: application/octet-stream\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"with_timestamps\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"with_waveform_visual\"\r\n\r\n\r\n-----011000010111000001101001--\r\n")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.elevenlabs.io/v1/music/upload', [
  'multipart' => [
    [
        'name' => 'file',
        'filename' => 'string',
        'contents' => null
    ]
  ]
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://api.elevenlabs.io/v1/music/upload");
var request = new RestRequest(Method.POST);
request.AddParameter("undefined", "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"extract_composition_plan\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"string\"\r\nContent-Type: application/octet-stream\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"with_timestamps\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"with_waveform_visual\"\r\n\r\n\r\n-----011000010111000001101001--\r\n", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift
import Foundation
let parameters = [
  [
    "name": "extract_composition_plan",
    "value": 
  ],
  [
    "name": "file",
    "fileName": "string"
  ],
  [
    "name": "with_timestamps",
    "value": 
  ],
  [
    "name": "with_waveform_visual",
    "value": 
  ]
]

let boundary = "---011000010111000001101001"

var body = ""
var error: NSError? = nil
for param in parameters {
  let paramName = param["name"]!
  body += "--\(boundary)\r\n"
  body += "Content-Disposition:form-data; name=\"\(paramName)\""
  if let filename = param["fileName"] {
    let contentType = param["content-type"]!
    let fileContent = String(contentsOfFile: filename, encoding: String.Encoding.utf8)
    if (error != nil) {
      print(error as Any)
    }
    body += "; filename=\"\(filename)\"\r\n"
    body += "Content-Type: \(contentType)\r\n\r\n"
    body += fileContent
  } else if let paramValue = param["value"] {
    body += "\r\n\r\n\(paramValue)"
  }
}

let request = NSMutableURLRequest(url: NSURL(string: "https://api.elevenlabs.io/v1/music/upload")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```