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

# Ladda upp musik

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

Ladda upp en musikfil som senare ska användas för inpainting. Priset för uppladdning är detsamma som för låtgenerering. Allt uppladdat innehåll granskas för upphovsrättsintrång. Om upphovsrättsskyddat innehåll upptäcks debiteras fortfarande hälften av kostnaden för begäran.

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) — Ljudfilen som ska laddas upp.
- `extract_composition_plan` (V1MusicUploadPostRequestBodyContentMultipartFormDataSchemaExtractCompositionPlan, optional) — Om kompositionsplanen för den uppladdade låten ska genereras och returneras. Ange ett modell-ID (`music_v1`, `music_v2` eller `music_v2_5`) för att styra vilket format för kompositionsplan som returneras. Att ange `true`/`false` är utfasat; `true` använder som standard planformatet `music_v1`. Att aktivera detta ökar latensen.
- `with_timestamps` (boolean, optional) — Om den uppladdade låten ska transkriberas och tidsstämplar på ordnivå returneras. Om True anges innehåller svaret words_timestamps, men latensen ökar.
- `with_waveform_visual` (boolean, optional) — Om den visuella vågformen för den uppladdade låten ska returneras.

## Response

### 200

Musikfilen har laddats upp med valfri kompositionsplan

- `song_id` (string, required) — Unik identifierare för den uppladdade låten
- `composition_plan` (MusicUploadResponseCompositionPlan, optional, nullable) — Kompositionsplanen som extraherats från den uppladdade låten. Finns endast om `extract_composition_plan` angavs i begärandetexten.
- `words_timestamps` (list of WordTimestamp, optional, nullable) — Tidsstämplar på ordnivå från den uppladdade låten. Finns endast om `with_timestamps` var True i begärandetexten
- `waveform_visual` (list of integer, optional, nullable) — En lågupplöst vågform för den uppladdade låten som används för att visa en förhandsvisning. Innehåller 4 värden per sekund ljud, från -1000 till 1000. Stereo mixas ner till en enda kanal. Finns bara om `with_waveform_visual` var True i begärandetexten.

## Errors

### 422 Unprocessable Entity Error

Valideringsfel

- `detail` (list of ValidationError, optional)

## Types

### MusicUploadResponseCompositionPlan

Kompositionsplanen som extraherats från den uppladdade låten. Finns endast om `extract_composition_plan` angavs i begärandetexten.

### 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 modellen `music_v1`. Om detta fält används med någon annan modell uppstår ett fel.

- `positive_global_styles` (list of string, required) — Stilarna och musikaliska riktningarna som ska finnas i hela låten. Använd engelska för bäst resultat.
- `negative_global_styles` (list of string, required) — Stilarna och musikaliska riktningarna som inte ska finnas i hela låten. Använd engelska för bäst resultat.
- `sections` (list of SongSection, required) — Låtens avsnitt.

### CompositionPlan

Kompositionsplan för modellerna `music_v2` och `music_v2_5`. Om detta fält används med någon annan modell uppstår ett fel.

- `chunks` (list of CompositionPlanChunksItems, required) — Segmenten som utgör genereringen.

### ValidationErrorLocItems

### SongSection

- `section_name` (string, required) — Namnet på avsnittet. Måste vara mellan 1 och 100 tecken.
- `positive_local_styles` (list of string, required) — Stilarna och musikaliska riktningarna som ska finnas i det här avsnittet. Använd engelska för bäst resultat.
- `negative_local_styles` (list of string, required) — Stilarna och musikaliska riktningarna som inte ska finnas i det här avsnittet. Använd engelska för bäst resultat.
- `duration_ms` (integer, required) — Avsnittets längd i millisekunder. Måste vara mellan 3000 ms och 120000 ms.
- `lines` (list of string, required) — Sångtexten i avsnittet. Högst 30 rader per avsnitt och högst 200 tecken per rad.
- `source_from` (SectionSource, optional, nullable) — Valfri källa att extrahera avsnittet från. Används för inpainting.

### CompositionPlanChunksItems

### SectionSource

- `song_id` (string, required) — ID:t för låten som avsnittet ska hämtas från. Du hittar låt-ID:t i svarens headers när du genererar en låt.
- `range` (TimeRange, required) — Intervallet som ska extraheras från källåten.
- `negative_ranges` (list of TimeRange, optional) — Intervallen som ska uteslutas från 'range'.

### GenerationChunk-Input

- `text` (string, required) — Textkonfigurationen som ska genereras för detta segment. Kan innehålla ett valfritt avsnittsnamn inom hakparenteser i början, t.ex. \[Verse 1], textrader och instruktioner i klammerparenteser, t.ex. \{scratching}. Avsnittsnamn måste vara mellan 1 och 100 tecken. Högst 30 rader tillåts, med högst 200 tecken per rad.
- `duration_ms` (integer, required) — Segmentets längd i millisekunder. Måste vara mellan 3000 ms och 120000 ms.
- `positive_styles` (list of string, required) — Stilarna och musikaliska riktningarna som ska finnas i detta segment. Använd engelska för bäst resultat. Stilarna för det första segmentet är viktigast eftersom de anger låtens övergripande ton och genre. Stilar för efterföljande segment kan användas för att lägga till nyanser, utveckling eller betoning, eller för att ändra låtens riktning. Sikta på minst 6–7 stilar i de tidiga segmenten tills riktningen har etablerats. Generella stilar som 'great production quality' är bra standardstilar att lägga till i listan.
- `negative_styles` (list of string, optional) — Stilarna och musikaliska riktningarna som inte ska finnas i detta segment. Använd engelska för bäst resultat. Att lämna fältet tomt är ett bra standardval; använd det bara om du uttryckligen vill undvika en viss stil eller riktning.
- `context_adherence` (enum, optional, default: high) — Hur mycket modellen följer kontexten i de omgivande delarna. Låg följsamhet innebär att modellen kan avvika från kontexten och vara mer kreativ. Hög följsamhet innebär att modellen blir mer konsekvent med kontexten.
  - Allowed values: `low`, `medium`, `high`
- `conditioning_ref` (AudioRefChunk, optional, nullable) — Ljudreferensen som genereringen ska baseras på. Det första segmentet är viktigast eftersom det påverkar genereringen av alla efterföljande segment. Om du vill tillämpa styrningen på hela låten ska du därför börja med det första segmentet.
- `condition_strength` (enum, optional, nullable) — Hur nära modellen följer den styrande referensen. Låg styrka innebär att modellen blir mer kreativ och avviker mer från referensen. Hög styrka innebär att modellen följer referensen mer konsekvent.
  - Allowed values: `low`, `medium`, `high`, `xhigh`

### AudioRefChunk

- `song_id` (string, required) — ID:t för låten som segmentet ska hämtas från. Du hittar låt-ID:t i svarens headers när du genererar en låt.
- `range` (TimeRange, required) — Tidsintervallet som ska extraheras från låten.

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