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

# Musik hochladen

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

Laden Sie eine Musikdatei hoch, die später für Inpainting verwendet wird. Der Preis für das Hochladen entspricht dem für die Songgenerierung. Alle hochgeladenen Inhalte werden auf Urheberrechtsverletzungen geprüft. Wird urheberrechtlich geschützter Inhalt erkannt, werden weiterhin die Hälfte der Anfragekosten berechnet.

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) — Die hochzuladende Audiodatei.
- `extract_composition_plan` (V1MusicUploadPostRequestBodyContentMultipartFormDataSchemaExtractCompositionPlan, optional) — Ob der Kompositionsplan für den hochgeladenen Song generiert und zurückgegeben werden soll. Übergeben Sie eine Modell-ID (`music_v1`, `music_v2` oder `music_v2_5`), um zu steuern, welches Kompositionsplanformat zurückgegeben wird. Die Übergabe von `true`/`false` ist veraltet; `true` verwendet standardmäßig das Planformat `music_v1`. Die Aktivierung erhöht die Latenz.
- `with_timestamps` (boolean, optional) — Ob der hochgeladene Song transkribiert und Zeitstempel auf Wortebene zurückgegeben werden sollen. Bei True enthält die Antwort words_timestamps, die Latenz erhöht sich jedoch.
- `with_waveform_visual` (boolean, optional) — Ob die visuelle Wellenform des hochgeladenen Songs zurückgegeben werden soll.

## Response

### 200

Musikdatei mit optionalem Kompositionsplan erfolgreich hochgeladen

- `song_id` (string, required) — Eindeutige Kennung des hochgeladenen Songs
- `composition_plan` (MusicUploadResponseCompositionPlan, optional, nullable) — Der aus dem hochgeladenen Song extrahierte Kompositionsplan. Nur vorhanden, wenn `extract_composition_plan` im Anfrage-Body angegeben wurde.
- `words_timestamps` (list of WordTimestamp, optional, nullable) — Aus dem hochgeladenen Song transkribierte Zeitstempel auf Wortebene. Nur vorhanden, wenn `with_timestamps` im Request-Body auf True gesetzt war.
- `waveform_visual` (list of integer, optional, nullable) — Eine niedrig aufgelöste Wellenform des hochgeladenen Songs zur Anzeige einer Vorschau. Enthält 4 Werte pro Audiosekunde von -1000 bis 1000. Stereo wird auf einen einzelnen Kanal heruntergemischt. Nur vorhanden, wenn `with_waveform_visual` im Request-Body True war.

## Errors

### 422 Unprocessable Entity Error

Validierungsfehler

- `detail` (list of ValidationError, optional)

## Types

### MusicUploadResponseCompositionPlan

Der aus dem hochgeladenen Song extrahierte Kompositionsplan. Nur vorhanden, wenn `extract_composition_plan` im Anfrage-Body angegeben wurde.

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

Kompositionsplan für das Modell `music_v1`. Die Verwendung dieses Felds mit einem anderen Modell führt zu einem Fehler.

- `positive_global_styles` (list of string, required) — Die Stile und musikalischen Vorgaben, die im gesamten Song vorkommen sollen. Verwenden Sie für beste Ergebnisse Englisch.
- `negative_global_styles` (list of string, required) — Die Stile und musikalischen Vorgaben, die im gesamten Song nicht vorkommen sollen. Verwenden Sie für beste Ergebnisse Englisch.
- `sections` (list of SongSection, required) — Die Abschnitte des Songs.

### CompositionPlan

Kompositionsplan für die Modelle `music_v2` und `music_v2_5`. Die Verwendung dieses Felds mit einem anderen Modell führt zu einem Fehler.

- `chunks` (list of CompositionPlanChunksItems, required) — Die Chunks, aus denen die Generierung besteht.

### ValidationErrorLocItems

### SongSection

- `section_name` (string, required) — Der Name des Abschnitts. Muss zwischen 1 und 100 Zeichen lang sein.
- `positive_local_styles` (list of string, required) — Die Stile und musikalischen Vorgaben, die in diesem Abschnitt vorkommen sollen. Verwenden Sie für beste Ergebnisse Englisch.
- `negative_local_styles` (list of string, required) — Die Stile und musikalischen Vorgaben, die in diesem Abschnitt nicht vorkommen sollen. Verwenden Sie für beste Ergebnisse Englisch.
- `duration_ms` (integer, required) — Die Dauer des Abschnitts in Millisekunden. Muss zwischen 3000 ms und 120000 ms liegen.
- `lines` (list of string, required) — Der Liedtext des Abschnitts. Maximal 30 Zeilen pro Abschnitt und 200 Zeichen pro Zeile.
- `source_from` (SectionSource, optional, nullable) — Optionale Quelle, aus der der Abschnitt extrahiert wird. Wird für Inpainting verwendet.

### CompositionPlanChunksItems

### SectionSource

- `song_id` (string, required) — Die ID des Songs, aus dem der Teil stammen soll. Sie finden die Song-ID in den Antwort-Headern, wenn Sie einen Song generieren.
- `range` (TimeRange, required) — Der aus dem Quellsong zu extrahierende Bereich.
- `negative_ranges` (list of TimeRange, optional) — Die Bereiche, die aus 'range' ausgeschlossen werden sollen.

### GenerationChunk-Input

- `text` (string, required) — Die für diesen Abschnitt zu generierende Textkonfiguration. Sie kann am Anfang einen optionalen Abschnittsnamen in eckigen Klammern enthalten, z. B. \[Verse 1], Liedtextzeilen und Inline-Anweisungen in geschweiften Klammern, z. B. \{scratching}. Abschnittsnamen müssen zwischen 1 und 100 Zeichen lang sein. Es sind maximal 30 Zeilen mit jeweils höchstens 200 Zeichen erlaubt.
- `duration_ms` (integer, required) — Die Dauer des Chunks in Millisekunden. Muss zwischen 3000 ms und 120000 ms liegen.
- `positive_styles` (list of string, required) — Die Stile und musikalischen Vorgaben, die in diesem Abschnitt vorkommen sollen. Verwenden Sie für beste Ergebnisse Englisch. Die Stile des ersten Abschnitts sind am wichtigsten, da sie den allgemeinen Ton und das Genre festlegen. Stile für nachfolgende Abschnitte können Nuancen, Entwicklungen oder Akzente hinzufügen oder die Richtung des Songs ändern. Verwenden Sie in frühen Abschnitten mindestens 6–7 Stile, bis die Richtung festgelegt ist. Allgemeine Stile wie „great production quality“ eignen sich gut als Standard, um sie der Liste hinzuzufügen.
- `negative_styles` (list of string, optional) — Die Stile und musikalischen Vorgaben, die in diesem Abschnitt nicht vorkommen sollen. Verwenden Sie für beste Ergebnisse Englisch. Standardmäßig sollten Sie das Feld leer lassen. Verwenden Sie es nur, wenn Sie einen bestimmten Stil oder eine Richtung ausdrücklich vermeiden möchten.
- `context_adherence` (enum, optional, default: high) — Wie stark das Modell dem Kontext der umgebenden Chunks folgt. Geringe Bindung bedeutet, dass das Modell vom Kontext abweichen und kreativer sein kann. Hohe Bindung bedeutet, dass das Modell konsistenter mit dem Kontext ist.
  - Allowed values: `low`, `medium`, `high`
- `conditioning_ref` (AudioRefChunk, optional, nullable) — Die Audioreferenz, auf der die Generierung basiert. Der erste Chunk ist am wichtigsten, da er die Generierung aller nachfolgenden Chunks beeinflusst. Wenn die Konditionierung auf den gesamten Song angewendet werden soll, beginnen Sie mit dem ersten Chunk.
- `condition_strength` (enum, optional, nullable) — Wie stark das Modell der konditionierenden Referenz folgt. Geringe Stärke bedeutet, dass das Modell kreativer ist und von der Referenz abweicht. Hohe Stärke bedeutet, dass das Modell konsistenter mit der Referenz ist.
  - Allowed values: `low`, `medium`, `high`, `xhigh`

### AudioRefChunk

- `song_id` (string, required) — Die ID des Songs, aus dem der Abschnitt stammen soll. Sie finden die Song-ID in den Antwort-Headern, wenn Sie einen Song generieren.
- `range` (TimeRange, required) — Der aus dem Song zu extrahierende Zeitbereich.

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