> ## Documentation Index
> Fetch the complete documentation index at: https://docs.apisale.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# ElevenLabs Music — Music Generate

> ElevenLabs text-to-music generation. Optimized for text to music via apisale.

## Overview

ElevenLabs text-to-music generation. Optimized for text to music via apisale.

<Info>
  **Docs** = API contract + Try it (snapshot). **[Explore](https://apisale.ai/explore)** = browser playground. **[Model page](https://apisale.ai/models/elevenlabs/elevenlabs-music/music-generate)** = product examples.
</Info>

## Endpoint

```http theme={null}
POST https://api.apisale.ai/v1/run/elevenlabs/elevenlabs-music/music-generate
```

|                |                                              |
| -------------- | -------------------------------------------- |
| **Model slug** | `elevenlabs/elevenlabs-music/music-generate` |
| **Category**   | Text to Music (`music-generate`)             |
| **Lab**        | Elevenlabs                                   |
| **Mode**       | async                                        |

## Pricing

**From \$0.105/min**

apisale price is **30%** below the vendor's official list price.

| Tier                    | Unit   | Official price | apisale price |
| ----------------------- | ------ | -------------- | ------------- |
| per minute (rounded up) | minute | \$0.150        | \$0.105       |

<Info>
  **Official price** = vendor list price. **apisale price** = what you pay through apisale.
</Info>

## Request

```json theme={null}
{‌
  "input": {‌
    "output_format": "mp3_44100_128",
    "respect_sections_durations": true,
    "prompt": "Upbeat cinematic electronic track with warm analog synth pads, driving percussion, hopeful melody, modern trailer energy, 30 seconds",
    "music_length_ms": 30000
  }
}
```

### Parameters

Fields marked \* are required. Use `Authorization: Key YOUR_API_KEY` for REST.

<ParamField body="input.prompt" type="string">
  Music description (mutually exclusive with composition\_plan). Maximum 2000 characters.
</ParamField>

<ParamField body="input.output_format" type="string">
  Default: `mp3_44100_128` Values: `mp3_22050_32`, `mp3_44100_32`, `mp3_44100_64`, `mp3_44100_96`, `mp3_44100_128`, `mp3_44100_192`, `pcm_8000`, `pcm_16000`, `pcm_22050`, `pcm_24000`, `pcm_44100`, `pcm_48000`, `ulaw_8000`, `alaw_8000`, `opus_48000_32`, `opus_48000_64`, `opus_48000_96`, `opus_48000_128`, `opus_48000_192`
</ParamField>

<ParamField body="input.music_length_ms" type="number" required>
  Duration in milliseconds (3000-600000). Required for billing. Range: 3000 – 600000
</ParamField>

<ParamField body="input.composition_plan" type="string">
  Structured composition plan (sections/styles/lyrics).
</ParamField>

<ParamField body="input.force_instrumental" type="boolean">
  —
</ParamField>

<ParamField body="input.respect_sections_durations" type="boolean">
  Default: `true`
</ParamField>

<ParamField body="webhook_url" type="string">
  Optional HTTPS webhook when the run reaches a terminal state.
</ParamField>

<ParamField body="sync" type="boolean">
  Block until completion (same Run response shape).
</ParamField>

<AccordionGroup>
  <Accordion title="Input schema">
    ```json expandable theme={null}
    {‌
      "params": {‌
        "prompt": {‌
          "type": "string",
          "max_length": 2000,
          "description": "Music description (mutually exclusive with composition_plan). Maximum 2000 characters."
        },
        "output_format": {‌
          "type": "enum",
          "values": [
            "mp3_22050_32",
            "mp3_44100_32",
            "mp3_44100_64",
            "mp3_44100_96",
            "mp3_44100_128",
            "mp3_44100_192",
            "pcm_8000",
            "pcm_16000",
            "pcm_22050",
            "pcm_24000",
            "pcm_44100",
            "pcm_48000",
            "ulaw_8000",
            "alaw_8000",
            "opus_48000_32",
            "opus_48000_64",
            "opus_48000_96",
            "opus_48000_128",
            "opus_48000_192"
          ],
          "default": "mp3_44100_128"
        },
        "music_length_ms": {‌
          "max": 600000,
          "min": 3000,
          "type": "int",
          "required": true,
          "description": "Duration in milliseconds (3000-600000). Required for billing."
        },
        "composition_plan": {‌
          "type": "object",
          "description": "Structured composition plan (sections/styles/lyrics)."
        },
        "force_instrumental": {‌
          "type": "bool"
        },
        "respect_sections_durations": {‌
          "type": "bool",
          "default": true
        }
      }
    }
    ```
  </Accordion>
</AccordionGroup>

## Submit response

Returns a **Run** with `run_id`. Poll with [GET /v1/runs/\{run\_id}](/model-apis/poll-runs) or use **Try it** above.

<ResponseField name="run_id" type="string" required>
  Unique run ID — save for polling and webhooks.
</ResponseField>

<ResponseField name="status" type="string" required>
  `queued` (async) or terminal state for sync runs.
</ResponseField>

<ResponseField name="output" type="object">
  Result when `status` is `succeeded` — see **Output schema** below.
</ResponseField>

### Example (async submit)

```json theme={null}
{
  "run_id": "run_550e8400-e29b-41d4-a716-446655440000",
  "endpoint": "elevenlabs/elevenlabs-music/music-generate",
  "model": "music-generate",
  "capability": "audio",
  "mode": "music-generate",
  "status": "queued",
  "output": null,
  "error": null,
  "billing": null,
  "created_at": "2026-06-27T12:00:00.000Z",
  "started_at": null,
  "completed_at": null,
  "elapsed_ms": null
}
```

Full lifecycle: [Runs lifecycle](/model-apis/runs-lifecycle).

## Output

When `status` is `succeeded`, `output` follows this schema:

<AccordionGroup>
  <Accordion title="Output schema">
    ```json expandable theme={null}
    {‌
      "type": "object",
      "example": {‌
        "audio": {‌
          "url": "https://cdn.mountsea.ai/tasks/ms-example/0.mp3",
          "content_type": "audio/mpeg"
        }
      },
      "required": [
        "audio"
      ],
      "properties": {‌
        "audio": {‌
          "type": "object",
          "required": [
            "url"
          ],
          "properties": {‌
            "url": {‌
              "type": "string",
              "format": "uri"
            },
            "file_name": {‌
              "type": "string"
            },
            "content_type": {‌
              "type": "string"
            }
          }
        }
      },
      "description": "Succeeded task output: generated audio (CDN URL in audio.url)."
    }
    ```
  </Accordion>
</AccordionGroup>

## Example

```bash theme={null}
curl -X POST "https://api.apisale.ai/v1/run/elevenlabs/elevenlabs-music/music-generate" \
  -H "Authorization: Key YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "input": {
    "output_format": "mp3_44100_128",
    "respect_sections_durations": true,
    "prompt": "Upbeat cinematic electronic track with warm analog synth pads, driving percussion, hopeful melody, modern trailer energy, 30 seconds",
    "music_length_ms": 30000
  }
}'
```

## Related

* [Runs lifecycle](/model-apis/runs-lifecycle)
* [Audio API overview](/api/audio)
* [Account API](/get-started/account-and-monitoring)


## OpenAPI

````yaml openapi-catalog.json POST /v1/run/elevenlabs/elevenlabs-music/music-generate
openapi: 3.0.3
info:
  title: apisale Model Catalog
  version: '2026-09-01T09:47:50.773Z'
  description: Per-model OpenAPI operations for Mintlify Try playground.
servers:
  - url: https://api.apisale.ai
security: []
paths:
  /v1/run/elevenlabs/elevenlabs-music/music-generate:
    post:
      tags:
        - Model catalog
        - audio
        - Elevenlabs
      summary: Create ElevenLabs Music — Music Generate
      description: >-
        ElevenLabs text-to-music generation. Optimized for text to music via
        apisale.
      operationId: submit-elevenlabs-elevenlabs-music-music-generate
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - input
              properties:
                input:
                  type: object
                  properties:
                    prompt:
                      description: >-
                        Music description (mutually exclusive with
                        composition_plan). Maximum 2000 characters.
                      type: string
                    output_format:
                      type: string
                      enum:
                        - mp3_22050_32
                        - mp3_44100_32
                        - mp3_44100_64
                        - mp3_44100_96
                        - mp3_44100_128
                        - mp3_44100_192
                        - pcm_8000
                        - pcm_16000
                        - pcm_22050
                        - pcm_24000
                        - pcm_44100
                        - pcm_48000
                        - ulaw_8000
                        - alaw_8000
                        - opus_48000_32
                        - opus_48000_64
                        - opus_48000_96
                        - opus_48000_128
                        - opus_48000_192
                      default: mp3_44100_128
                    music_length_ms:
                      description: >-
                        Duration in milliseconds (3000-600000). Required for
                        billing.
                      type: number
                      minimum: 3000
                      maximum: 600000
                    composition_plan:
                      description: Structured composition plan (sections/styles/lyrics).
                      type: string
                    force_instrumental:
                      type: boolean
                    respect_sections_durations:
                      type: boolean
                      default: true
                  required:
                    - music_length_ms
                  example:
                    output_format: mp3_44100_128
                    respect_sections_durations: true
                    prompt: >-
                      Upbeat cinematic electronic track with warm analog synth
                      pads, driving percussion, hopeful melody, modern trailer
                      energy, 30 seconds
                    music_length_ms: 30000
                webhook_url:
                  type: string
                  format: uri
                sync:
                  type: boolean
                  default: false
            example:
              input:
                output_format: mp3_44100_128
                respect_sections_durations: true
                prompt: >-
                  Upbeat cinematic electronic track with warm analog synth pads,
                  driving percussion, hopeful melody, modern trailer energy, 30
                  seconds
                music_length_ms: 30000
      responses:
        '201':
          description: Run accepted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RunObject'
      security:
        - ApiKeyAuth: []
components:
  schemas:
    RunObject:
      type: object
      required:
        - run_id
        - endpoint
        - model
        - capability
        - mode
        - status
        - created_at
      properties:
        run_id:
          type: string
          description: Unique run identifier
        endpoint:
          type: string
          description: Model slug
        model:
          type: string
        capability:
          type: string
        mode:
          type: string
        status:
          type: string
          enum:
            - queued
            - processing
            - succeeded
            - failed
            - timeout
            - cancelled
        output:
          type: object
          nullable: true
        error:
          type: object
          nullable: true
          properties:
            type:
              type: string
              description: Machine-readable error code
            code:
              type: number
              description: HTTP status
            message:
              type: string
        billing:
          type: object
          nullable: true
          properties:
            amount:
              type: string
            currency:
              type: string
              enum:
                - usd
        created_at:
          type: string
          format: date-time
        started_at:
          type: string
          format: date-time
          nullable: true
        completed_at:
          type: string
          format: date-time
          nullable: true
        elapsed_ms:
          type: number
          nullable: true
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: Authorization
      description: Key sk-... (native REST) or Bearer sk-... (vendor SDKs)

````