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

# Create Kling video-to-audio

> Convert Kling videos into high-quality audio via CometAPI’s Video to Audio endpoint, with configurable output format, duration, and prompt control.

Use this endpoint to generate an audio result from a source video.

## Before you call it

* Send either `video_id` or `video_url`, but not both
* Use `video_url` when the source clip did not come from Kling originally
* Keep `callback_url` and `external_task_id` optional unless your integration needs them

## Task flow

<Steps>
  <Step title="Submit the source video">
    Send either the Kling `video_id` or an accessible `video_url`, then save the returned task id.
  </Step>

  <Step title="Poll the task">
    Continue with [Get a Kling task](./individual-queries) using the Kling audio query path until the task reaches a terminal state.
  </Step>

  <Step title="Persist the output">
    Store the final audio asset if you need stable retention or downstream processing.
  </Step>
</Steps>

<Tip>
  For the complete parameter reference, see the [official Kling documentation](https://app.klingai.com/global/dev/document-api/apiReference/model/videoToAudio).
</Tip>


## OpenAPI

````yaml api/openapi/video/kling/post-video-to-audio.openapi.json POST /kling/v1/audio/video-to-audio
openapi: 3.1.0
info:
  title: Video to Audio API
  version: 1.0.0
  description: Create a Kling audio-generation task from a source video.
servers:
  - url: https://api.cometapi.com
security:
  - bearerAuth: []
paths:
  /kling/v1/audio/video-to-audio:
    post:
      summary: Create a Kling video-to-audio task
      description: >-
        Submit either a Kling `video_id` or an accessible `video_url`, then poll
        the returned task id through the generic Kling query route.
      operationId: video_to_audio
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              oneOf:
                - required:
                    - video_id
                - required:
                    - video_url
              properties:
                external_task_id:
                  type: string
                  description: >-
                    Optional user-defined task ID for your own tracking. Does
                    not replace the system-generated task ID. Must be unique per
                    account.
                callback_url:
                  type: string
                  description: >-
                    Webhook URL for task status notifications. The server sends
                    a callback when the task status changes.
                video_id:
                  type: string
                  description: >-
                    ID of a Kling-generated video. Only videos created within
                    the last 30 days with a duration of 3–20 seconds are
                    supported. Mutually exclusive with `video_url` — exactly one
                    must be provided.
                video_url:
                  type: string
                  description: >-
                    Accessible URL of the source video. Accepted formats: MP4,
                    MOV. Max 100 MB, 720p or 1080p resolution, duration 3–20
                    seconds. Mutually exclusive with `video_id` — exactly one
                    must be provided.
              default:
                video_url: https://your-video-host/source.mp4
            examples:
              Default:
                summary: Default
                value:
                  video_url: https://xxxxx.mp4
      responses:
        '200':
          description: Task accepted.
          content:
            application/json:
              schema:
                type: object
                required:
                  - code
                  - message
                  - data
                properties:
                  code:
                    type: integer
                    description: |
                      Error code; specific error code definition
                  message:
                    type: string
                    description: |
                      Error message
                  data:
                    type: object
                    required:
                      - task_id
                      - task_status
                      - created_at
                      - updated_at
                    properties:
                      task_id:
                        type: string
                        description: |
                          Task ID, system-generated
                      task_status:
                        type: string
                        description: >
                          Task status, enum values: submitted, processing,
                          succeed, failed
                      created_at:
                        type: integer
                        description: |+
                          Task creation time, Unix timestamp, in ms

                      updated_at:
                        type: integer
                        description: |
                          Task update time, Unix timestamp, in ms
      x-codeSamples:
        - lang: Shell
          label: Default
          source: |
            curl https://api.cometapi.com/kling/v1/audio/video-to-audio \
              -H "Authorization: Bearer $COMETAPI_KEY" \
              -H "Content-Type: application/json" \
              -d '{
                  "video_url": "https://xxxxx.mp4"
                }'
        - lang: Python
          label: Default
          source: >
            import os

            import requests


            response = requests.post(
                "https://api.cometapi.com/kling/v1/audio/video-to-audio",
                headers={"Authorization": "Bearer " + os.environ["COMETAPI_KEY"]},
                json={
                        "video_url": "https://xxxxx.mp4"
                },
            )


            result = response.json()

            print(result["code"], result.get("data", {}).get("task_id"))  # code
            0 means submitted; poll the matching query endpoint until
            task_status is succeed
        - lang: JavaScript
          label: Default
          source: >
            const response = await
            fetch("https://api.cometapi.com/kling/v1/audio/video-to-audio", {
                method: "POST",
                headers: {
                    Authorization: `Bearer ${process.env.COMETAPI_KEY}`,
                    "Content-Type": "application/json",
                },
                body: JSON.stringify({
                        "video_url": "https://xxxxx.mp4"
                    }),
            });


            const result = await response.json();

            console.log(result.code, result.data?.task_id); // code 0 means
            submitted; poll the matching query endpoint until task_status is
            succeed
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: Bearer token authentication. Use your CometAPI key.

````