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

# Muziek uploaden

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

Upload een muziekbestand om later voor inpainting te gebruiken. De prijs voor uploaden is gelijk aan die voor het genereren van een nummer. Alle geüploade content wordt gecontroleerd op auteursrechtschendingen. Als auteursrechtelijk beschermde content wordt gedetecteerd, wordt nog steeds de helft van de requestkosten in rekening gebracht.

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) — Het audiobestand dat je wilt uploaden.
- `extract_composition_plan` (V1MusicUploadPostRequestBodyContentMultipartFormDataSchemaExtractCompositionPlan, optional) — Of het compositieplan voor het geüploade nummer moet worden gegenereerd en teruggestuurd. Geef een model-id (`music_v1`, `music_v2` of `music_v2_5`) door om te bepalen welk formaat voor het compositieplan wordt teruggestuurd. Het doorgeven van `true`/`false` is verouderd; `true` gebruikt standaard het planformaat `music_v1`. Het inschakelen hiervan verhoogt de latency.
- `with_timestamps` (boolean, optional) — Of het geüploade nummer moet worden getranscribeerd en tijdstempels op woordniveau moeten worden teruggestuurd. Als dit True is, bevat de response words_timestamps, maar neemt de latency toe.
- `with_waveform_visual` (boolean, optional) — Of de visuele golfvorm van het geüploade nummer moet worden teruggestuurd.

## Response

### 200

Muziekbestand met optioneel compositieplan geüpload

- `song_id` (string, required) — Unieke identificatiecode voor het geüploade nummer
- `composition_plan` (MusicUploadResponseCompositionPlan, optional, nullable) — Het compositieplan dat uit de geüploade song is geëxtraheerd. Alleen aanwezig als `extract_composition_plan` is opgegeven in de request body.
- `words_timestamps` (list of WordTimestamp, optional, nullable) — Tijdstempels op woordniveau die uit het geüploade nummer zijn getranscribeerd. Alleen aanwezig als `with_timestamps` True was in de request body
- `waveform_visual` (list of integer, optional, nullable) — Een golfvorm met lage resolutie van het geüploade nummer, om een preview weer te geven. Bevat 4 waarden per seconde audio, van -1000 tot 1000. Stereo wordt gemixt naar één kanaal. Alleen aanwezig als `with_waveform_visual` in de requestbody True was.

## Errors

### 422 Unprocessable Entity Error

Validatiefout

- `detail` (list of ValidationError, optional)

## Types

### MusicUploadResponseCompositionPlan

Het compositieplan dat uit de geüploade song is geëxtraheerd. Alleen aanwezig als `extract_composition_plan` is opgegeven in de request body.

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

Compositieplan voor het model `music_v1`. Als je dit veld met een ander model gebruikt, resulteert dat in een fout.

- `positive_global_styles` (list of string, required) — De stijlen en muzikale aanwijzingen die in het hele nummer aanwezig moeten zijn. Gebruik Engels voor het beste resultaat.
- `negative_global_styles` (list of string, required) — De stijlen en muzikale aanwijzingen die niet in het hele nummer aanwezig mogen zijn. Gebruik Engels voor het beste resultaat.
- `sections` (list of SongSection, required) — De secties van het nummer.

### CompositionPlan

Compositieplan voor de modellen `music_v2` en `music_v2_5`. Als je dit veld met een ander model gebruikt, resulteert dat in een fout.

- `chunks` (list of CompositionPlanChunksItems, required) — De chunks waaruit de generatie bestaat.

### ValidationErrorLocItems

### SongSection

- `section_name` (string, required) — De naam van de sectie. Moet uit 1 tot 100 tekens bestaan.
- `positive_local_styles` (list of string, required) — De stijlen en muzikale aanwijzingen die in deze sectie aanwezig moeten zijn. Gebruik Engels voor het beste resultaat.
- `negative_local_styles` (list of string, required) — De stijlen en muzikale aanwijzingen die niet in deze sectie aanwezig mogen zijn. Gebruik Engels voor het beste resultaat.
- `duration_ms` (integer, required) — De duur van de sectie in milliseconden. Moet tussen 3000 ms en 120000 ms liggen.
- `lines` (list of string, required) — De songtekst van de sectie. Maximaal 30 regels per sectie en maximaal 200 tekens per regel.
- `source_from` (SectionSource, optional, nullable) — Optionele bron waaruit de sectie wordt geëxtraheerd. Gebruikt voor inpainting.

### CompositionPlanChunksItems

### SectionSource

- `song_id` (string, required) — De ID van het nummer waaruit de sectie afkomstig is. Je vindt de nummer-ID in de responseheaders wanneer je een nummer genereert.
- `range` (TimeRange, required) — Het bereik dat uit het bronnummers moet worden geëxtraheerd.
- `negative_ranges` (list of TimeRange, optional) — De bereiken die van het 'range' moeten worden uitgesloten.

### GenerationChunk-Input

- `text` (string, required) — De tekstconfiguratie die voor dit fragment moet worden gegenereerd. Kan aan het begin een optionele sectienaam tussen vierkante haken bevatten, bijvoorbeeld \[Verse 1], songtekstregels en inline-instructies tussen accolades, bijvoorbeeld \{scratching}. Sectienamen moeten tussen 1 en 100 tekens lang zijn. Er zijn maximaal 30 regels toegestaan, elk met maximaal 200 tekens.
- `duration_ms` (integer, required) — De duur van het chunk in milliseconden. Moet tussen 3000 ms en 120000 ms liggen.
- `positive_styles` (list of string, required) — De stijlen en muzikale aanwijzingen die in dit segment aanwezig moeten zijn. Gebruik Engels voor de beste resultaten. De stijlen voor het eerste segment zijn het belangrijkst, omdat ze de algemene toon en het genre bepalen. Stijlen voor volgende segmenten kunnen nuance, ontwikkeling of nadruk toevoegen, of de richting van het nummer veranderen. Streef naar ten minste 6-7 stijlen in de eerste segmenten, totdat de richting is bepaald. Algemene stijlen zoals 'great production quality' zijn goede standaardstijlen om aan de lijst toe te voegen.
- `negative_styles` (list of string, optional) — De stijlen en muzikale aanwijzingen die niet in dit segment aanwezig mogen zijn. Gebruik Engels voor de beste resultaten. Leeg laten is een goede standaardinstelling; gebruik dit veld alleen als je een bepaalde stijl of richting expliciet wilt vermijden.
- `context_adherence` (enum, optional, default: high) — In hoeverre het model zich aan de context van de omliggende chunks houdt. Bij lage naleving kan het model van de context afwijken en creatiever zijn. Bij hoge naleving is het model consistenter met de context.
  - Allowed values: `low`, `medium`, `high`
- `conditioning_ref` (AudioRefChunk, optional, nullable) — De audioverwijzing waarop de generatie wordt gebaseerd. Het eerste chunk is het belangrijkst, omdat dit de generatie van alle volgende chunks beïnvloedt. Als je de hele song hierop wilt baseren, begin dan bij het eerste chunk.
- `condition_strength` (enum, optional, nullable) — Hoe sterk het model zich aan de conditioneringsreferentie houdt. Een lage sterkte betekent dat het model creatiever is en van de referentie afwijkt. Een hoge sterkte betekent dat het model consistenter met de referentie is.
  - Allowed values: `low`, `medium`, `high`, `xhigh`

### AudioRefChunk

- `song_id` (string, required) — De ID van het nummer waaruit het fragment afkomstig is. Je vindt de nummer-ID in de responseheaders wanneer je een nummer genereert.
- `range` (TimeRange, required) — Het tijdbereik dat uit het nummer moet worden geëxtraheerd.

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