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

# Générer un plan de composition

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

Crée un plan de composition pour la génération musicale. L'utilisation de ce point de terminaison ne consomme aucun crédit, mais est soumise à des limites de débit selon votre niveau.

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) — Lorsque enable_logging est défini sur false, le mode zéro rétention est utilisé pour la requête. Le mode zéro rétention est réservé aux clients Enterprise.

### Body (application/json)

This endpoint expects a Body_Generate_composition_plan_v1_music_plan_post.

- `prompt` (string, required) — Un prompt textuel simple à partir duquel élaborer un plan.
- `music_length_ms` (integer, optional, nullable) — La durée du plan de composition à générer, en millisecondes. Elle doit être comprise entre 3 000 ms et 600 000 ms. Facultatif : si elle n’est pas fournie, le modèle choisira une durée en fonction du prompt.
- `source_composition_plan` (BodyGenerateCompositionPlanV1MusicPlanPostSourceCompositionPlan, optional, nullable) — Un plan de composition facultatif à utiliser comme source pour le nouveau plan de composition.
- `model_id` (enum, optional, default: music_v1) — Le modèle à utiliser pour la génération.
  - Allowed values: `music_v1`, `music_v2`, `music_v2_5`

## Response

### 200

Réponse réussie

- `music_composition_plan_create_Response_200`
  - MusicPrompt: MusicPrompt
  - CompositionPlan: CompositionPlan

## Errors

### 422 Unprocessable Entity Error

Erreur de validation

- `detail` (list of ValidationError, optional)

## Types

### BodyGenerateCompositionPlanV1MusicPlanPostSourceCompositionPlan

Un plan de composition facultatif à utiliser comme source pour le nouveau plan de composition.

- MusicPrompt: MusicPrompt
- CompositionPlan: CompositionPlan

### MusicPrompt

Plan de composition pour le modèle `music_v1`. L'utilisation de ce champ avec tout autre modèle entraîne une erreur.

- `positive_global_styles` (list of string, required) — Les styles et orientations musicales à intégrer à l’ensemble du morceau. Utilisez l’anglais pour de meilleurs résultats.
- `negative_global_styles` (list of string, required) — Les styles et orientations musicales à exclure de l’ensemble du morceau. Utilisez l’anglais pour de meilleurs résultats.
- `sections` (list of SongSection, required) — Les sections de la chanson.

### CompositionPlan

Plan de composition pour les modèles `music_v2` et `music_v2_5`. L'utilisation de ce champ avec tout autre modèle entraîne une erreur.

- `chunks` (list of CompositionPlanChunksItems, required) — Segments composant la génération.

### ValidationError

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

### SongSection

- `section_name` (string, required) — Le nom de la section. Doit comporter entre 1 et 100 caractères.
- `positive_local_styles` (list of string, required) — Les styles et orientations musicales à intégrer à cette section. Utilisez l’anglais pour de meilleurs résultats.
- `negative_local_styles` (list of string, required) — Les styles et orientations musicales à exclure de cette section. Utilisez l’anglais pour de meilleurs résultats.
- `duration_ms` (integer, required) — La durée de la section en millisecondes. Doit être comprise entre 3 000 ms et 120 000 ms.
- `lines` (list of string, required) — Les paroles de la section. Maximum 30 lignes par section et 200 caractères par ligne.
- `source_from` (SectionSource, optional, nullable) — Source facultative dont extraire la section. Utilisée pour l'inpainting.

### CompositionPlanChunksItems

- GenerationChunk: GenerationChunk-Input
- AudioRefChunk: AudioRefChunk

### ValidationErrorLocItems

- string
- integer

### SectionSource

- `song_id` (string, required) — L’ID de la chanson à partir de laquelle extraire la section. Vous trouverez l’ID de la chanson dans les en-têtes de réponse lorsque vous générez une chanson.
- `range` (TimeRange, required) — La plage à extraire de la chanson source.
- `negative_ranges` (list of TimeRange, optional) — Les plages à exclure de « range ».

### GenerationChunk-Input

- `text` (string, required) — La configuration de texte à générer pour ce segment. Elle peut contenir un nom de section facultatif entre crochets au début, par exemple \[Verse 1], des lignes de paroles et des indications intégrées entre accolades, par exemple \{scratching}. Les noms de section doivent comporter entre 1 et 100 caractères. Un maximum de 30 lignes est autorisé, avec au plus 200 caractères par ligne.
- `duration_ms` (integer, required) — La durée du segment en millisecondes. Doit être comprise entre 3 000 ms et 120 000 ms.
- `positive_styles` (list of string, required) — Les styles et orientations musicales à intégrer à ce segment. Utilisez l’anglais pour de meilleurs résultats. Les styles du premier segment sont les plus importants, car ils définissent le ton général et le genre. Les styles des segments suivants peuvent apporter des nuances, une progression, une emphase ou modifier l’orientation du morceau. Visez au moins 6 à 7 styles dans les premiers segments, jusqu’à ce que l’orientation soit établie. Des styles génériques comme « great production quality » constituent de bonnes valeurs par défaut à ajouter à la liste.
- `negative_styles` (list of string, optional) — Les styles et orientations musicales à exclure de ce segment. Utilisez l’anglais pour de meilleurs résultats. Laisser ce champ vide est recommandé par défaut, ne l’utilisez que si vous souhaitez explicitement éviter un style ou une orientation en particulier.
- `context_adherence` (enum, optional, default: high) — Niveau d’adhérence du modèle au contexte des segments qui l’entourent. Une faible adhérence permet au modèle de s’écarter du contexte et d’être plus créatif. Une adhérence élevée rend le modèle plus cohérent avec le contexte.
  - Allowed values: `low`, `medium`, `high`
- `conditioning_ref` (AudioRefChunk, optional, nullable) — Référence audio utilisée pour conditionner la génération. Le premier segment est le plus important, car il influence la génération de tous les segments suivants. Pour conditionner l’ensemble de la chanson, commencez dès le premier segment.
- `condition_strength` (enum, optional, nullable) — Intensité avec laquelle le modèle respecte la référence de conditionnement. Une faible intensité rend le modèle plus créatif et l’éloigne de la référence. Une intensité élevée rend le modèle plus cohérent avec la référence.
  - Allowed values: `low`, `medium`, `high`, `xhigh`

### AudioRefChunk

- `song_id` (string, required) — L’ID de la chanson à partir de laquelle extraire le segment. Vous trouverez l’ID de la chanson dans les en-têtes de réponse lorsque vous générez une chanson.
- `range` (TimeRange, required) — La plage temporelle à extraire du morceau.

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