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

# Carica musica

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

Carica un file musicale da usare successivamente per l'inpainting. Il prezzo del caricamento è lo stesso della generazione di brani. Tutti i contenuti caricati vengono controllati per verificare eventuali violazioni del copyright. Se vengono rilevati contenuti protetti da copyright, verrà comunque addebitata metà del costo della richiesta.

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) — Il file audio da caricare.
- `extract_composition_plan` (V1MusicUploadPostRequestBodyContentMultipartFormDataSchemaExtractCompositionPlan, optional) — Indica se generare e restituire il piano di composizione per la canzone caricata. Passa un ID modello (`music_v1`, `music_v2` o `music_v2_5`) per controllare il formato del piano di composizione restituito. Il passaggio di `true`/`false` è deprecato; `true` utilizza per impostazione predefinita il formato di piano `music_v1`. L'abilitazione di questa opzione aumenterà la latenza.
- `with_timestamps` (boolean, optional) — Indica se trascrivere la canzone caricata e restituire i timestamp a livello di parola. Se True, la risposta includerà words_timestamps, ma aumenterà la latenza.
- `with_waveform_visual` (boolean, optional) — Indica se restituire la forma d'onda visiva della canzone caricata.

## Response

### 200

File musicale caricato correttamente con piano di composizione facoltativo

- `song_id` (string, required) — Identificatore univoco della canzone caricata
- `composition_plan` (MusicUploadResponseCompositionPlan, optional, nullable) — Il piano di composizione estratto dal brano caricato. Presente solo se `extract_composition_plan` è stato fornito nel body della richiesta.
- `words_timestamps` (list of WordTimestamp, optional, nullable) — Timestamp a livello di parola trascritti dalla canzone caricata. Presenti solo se `with_timestamps` era True nel body della richiesta
- `waveform_visual` (list of integer, optional, nullable) — Una forma d'onda a bassa risoluzione della canzone caricata, per mostrarne un'anteprima. Contiene 4 valori per secondo di audio, da -1000 a 1000. L'audio stereo viene mixato in un singolo canale. Presente solo se `with_waveform_visual` era True nel body della richiesta.

## Errors

### 422 Unprocessable Entity Error

Errore di convalida

- `detail` (list of ValidationError, optional)

## Types

### MusicUploadResponseCompositionPlan

Il piano di composizione estratto dal brano caricato. Presente solo se `extract_composition_plan` è stato fornito nel body della richiesta.

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

Piano di composizione per il modello `music_v1`. L'uso di questo campo con qualsiasi altro modello genererà un errore.

- `positive_global_styles` (list of string, required) — Gli stili e le indicazioni musicali che devono essere presenti nell'intero brano. Per risultati migliori, usa l'inglese.
- `negative_global_styles` (list of string, required) — Gli stili e le indicazioni musicali che non devono essere presenti nell'intero brano. Per risultati migliori, usa l'inglese.
- `sections` (list of SongSection, required) — Le sezioni del brano.

### CompositionPlan

Piano di composizione per i modelli `music_v2` e `music_v2_5`. L'uso di questo campo con qualsiasi altro modello genererà un errore.

- `chunks` (list of CompositionPlanChunksItems, required) — I blocchi che compongono la generazione.

### ValidationErrorLocItems

### SongSection

- `section_name` (string, required) — Il nome della sezione. Deve contenere da 1 a 100 caratteri.
- `positive_local_styles` (list of string, required) — Gli stili e le indicazioni musicali che devono essere presenti in questa sezione. Per risultati migliori, usa l'inglese.
- `negative_local_styles` (list of string, required) — Gli stili e le indicazioni musicali che non devono essere presenti in questa sezione. Per risultati migliori, usa l'inglese.
- `duration_ms` (integer, required) — La durata della sezione in millisecondi. Deve essere compresa tra 3000 ms e 120000 ms.
- `lines` (list of string, required) — Il testo della sezione. Massimo 30 righe per sezione e 200 caratteri per riga.
- `source_from` (SectionSource, optional, nullable) — Origine facoltativa da cui estrarre la sezione. Usata per l'inpainting.

### CompositionPlanChunksItems

### SectionSource

- `song_id` (string, required) — L'ID del brano da cui estrarre la sezione. Puoi trovare l'ID del brano negli header della risposta quando generi un brano.
- `range` (TimeRange, required) — L'intervallo da estrarre dal brano sorgente.
- `negative_ranges` (list of TimeRange, optional) — Gli intervalli da escludere da 'range'.

### GenerationChunk-Input

- `text` (string, required) — La configurazione del testo da generare per questo segmento. Può contenere un nome di sezione facoltativo tra parentesi quadre all'inizio, ad esempio \[Verse 1], righe di testo e indicazioni inline tra parentesi graffe, ad esempio \{scratching}. I nomi delle sezioni devono contenere da 1 a 100 caratteri. Sono consentite al massimo 30 righe, ciascuna di massimo 200 caratteri.
- `duration_ms` (integer, required) — La durata del chunk in millisecondi. Deve essere compresa tra 3000 ms e 120000 ms.
- `positive_styles` (list of string, required) — Gli stili e le indicazioni musicali che devono essere presenti in questo segmento. Per risultati migliori, usa l'inglese. Gli stili del primo segmento sono i più importanti perché definiscono il tono e il genere generali. Gli stili dei segmenti successivi possono aggiungere sfumature, progressione, enfasi o modificare la direzione del brano. Cerca di inserire almeno 6-7 stili nei primi segmenti, finché non è definita una direzione. Stili generici come 'great production quality' sono buone opzioni predefinite da aggiungere all'elenco.
- `negative_styles` (list of string, optional) — Gli stili e le indicazioni musicali che non devono essere presenti in questo segmento. Per risultati migliori, usa l'inglese. Lasciare il campo vuoto è una buona impostazione predefinita; usalo se vuoi evitare esplicitamente uno stile o una direzione specifici.
- `context_adherence` (enum, optional, default: high) — Quanto il modello aderisce al contesto dei chunk circostanti. Un'aderenza bassa significa che il modello può discostarsi dal contesto ed essere più creativo. Un'aderenza alta significa che il modello sarà più coerente con il contesto.
  - Allowed values: `low`, `medium`, `high`
- `conditioning_ref` (AudioRefChunk, optional, nullable) — Il riferimento audio su cui condizionare la generazione. Il primo blocco è il più importante, poiché influenzerà la generazione di tutti i blocchi successivi. Pertanto, se vuoi applicare il condizionamento all'intera canzone, avvialo dal primo blocco.
- `condition_strength` (enum, optional, nullable) — Quanto il modello aderisce al riferimento di condizionamento. Un'intensità bassa rende il modello più creativo e meno aderente al riferimento. Un'intensità alta rende il modello più coerente con il riferimento.
  - Allowed values: `low`, `medium`, `high`, `xhigh`

### AudioRefChunk

- `song_id` (string, required) — L'ID del brano da cui estrarre il chunk. Puoi trovare l'ID del brano negli header della risposta quando generi un brano.
- `range` (TimeRange, required) — L'intervallo di tempo da estrarre dal brano.

### 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()
```