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

# Generera kompositionsplan

POST https://api.elevenlabs.io/v1/music/plan
Content-Type: application/json

Skapa en kompositionsplan för musikgenerering. Användning av denna endpoint kostar inga krediter, men omfattas av hastighetsbegränsningar beroende på din nivå.

Reference: https://elevenlabs.io/docs/api-reference/music/create-composition-plan

## 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 (application/json)

This endpoint expects a Body_Generate_composition_plan_v1_music_plan_post.

- `prompt` (string, required) — En enkel textprompt att skapa en plan från.
- `music_length_ms` (integer, optional, nullable) — Längden på kompositionsplanen som ska genereras, i millisekunder. Måste vara mellan 3000 ms och 600000 ms. Valfritt – om inget anges väljer modellen en längd utifrån prompten.
- `source_composition_plan` (BodyGenerateCompositionPlanV1MusicPlanPostSourceCompositionPlan, optional, nullable) — En valfri kompositionsplan att använda som källa för den nya kompositionsplanen.
- `model_id` (enum, optional, default: music_v1) — Modellen som ska användas för genereringen.
  - Allowed values: `music_v1`, `music_v2`, `music_v2_5`

## Response

### 200

Lyckat svar

- `music_composition_plan_create_Response_200`

## Errors

### 422 Unprocessable Entity Error

Valideringsfel

- `detail` (list of ValidationError, optional)

## Types

### BodyGenerateCompositionPlanV1MusicPlanPostSourceCompositionPlan

En valfri kompositionsplan att använda som källa för den nya kompositionsplanen.

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

### ValidationError

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

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

### ValidationErrorLocItems

### 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
{
  "prompt": "string"
}
```

**Response**

```json
{
  "negative_global_styles": [
    "metal",
    "hip-hop",
    "country"
  ],
  "positive_global_styles": [
    "pop",
    "rock",
    "jazz"
  ],
  "sections": [
    {
      "duration_ms": 10000,
      "lines": [
        "Verse 1 lyrics"
      ],
      "negative_local_styles": [
        "metal",
        "hip-hop",
        "country"
      ],
      "positive_local_styles": [
        "pop",
        "rock",
        "jazz"
      ],
      "section_name": "Verse 1"
    }
  ]
}
```

**SDK Code**

```python
import requests

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

payload = { "prompt": "string" }
headers = {"Content-Type": "application/json"}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript
const url = 'https://api.elevenlabs.io/v1/music/plan';
const options = {
  method: 'POST',
  headers: {'Content-Type': 'application/json'},
  body: '{"prompt":"string"}'
};

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/plan"

	payload := strings.NewReader("{\n  \"prompt\": \"string\"\n}")

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

	req.Header.Add("Content-Type", "application/json")

	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/plan")

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

request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n  \"prompt\": \"string\"\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/plan")
  .header("Content-Type", "application/json")
  .body("{\n  \"prompt\": \"string\"\n}")
  .asString();
```

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

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.elevenlabs.io/v1/music/plan', [
  'body' => '{
  "prompt": "string"
}',
  'headers' => [
    'Content-Type' => 'application/json',
  ],
]);

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

```csharp
using RestSharp;

var client = new RestClient("https://api.elevenlabs.io/v1/music/plan");
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"prompt\": \"string\"\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = ["Content-Type": "application/json"]
let parameters = ["prompt": "string"] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.elevenlabs.io/v1/music/plan")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
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()
```