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

# Kompositionsplan erstellen

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

Erstellen Sie einen Kompositionsplan für die Musikgenerierung. Die Nutzung dieses Endpunkts kostet keine Credits, unterliegt jedoch je nach Tarif einer Ratenbegrenzung.

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

### Query parameters

- `enable_logging` (boolean, optional, default: true) — Wenn enable_logging auf false gesetzt ist, wird für die Anfrage der Modus ohne Datenspeicherung verwendet. Dieser Modus steht nur Enterprise-Kunden zur Verfügung.

### Body (application/json)

This endpoint expects a Body_Generate_composition_plan_v1_music_plan_post.

- `prompt` (string, required) — Ein einfacher Text-Prompt, aus dem ein Plan erstellt wird.
- `music_length_ms` (integer, optional, nullable) — Die Länge des zu generierenden Kompositionsplans in Millisekunden. Muss zwischen 3000 ms und 600000 ms liegen. Optional – wenn nicht angegeben, wählt das Modell anhand des Prompts eine Länge.
- `source_composition_plan` (BodyGenerateCompositionPlanV1MusicPlanPostSourceCompositionPlan, optional, nullable) — Ein optionaler Kompositionsplan als Quelle für den neuen Kompositionsplan.
- `model_id` (enum, optional, default: music_v1) — Das für die Generierung zu verwendende Modell.
  - Allowed values: `music_v1`, `music_v2`, `music_v2_5`

## Response

### 200

Erfolgreiche Antwort

- `music_composition_plan_create_Response_200`

## Errors

### 422 Unprocessable Entity Error

Validierungsfehler

- `detail` (list of ValidationError, optional)

## Types

### BodyGenerateCompositionPlanV1MusicPlanPostSourceCompositionPlan

Ein optionaler Kompositionsplan als Quelle für den neuen Kompositionsplan.

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

### ValidationError

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

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

### ValidationErrorLocItems

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