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

# OmniHuman 2.0 Audio to Video

> The OmniHuman 2.0 Audio to Video API animates one character image with a 4–300 second WAV or MP3 file into a 720p lip-synced video, with optional prompts.

> [!TIP]
>
> 1. After submission, a `task_id` will be returned. If you provided a `callback_url`, when the task status becomes `finished` or `failed`, a POST request will be sent to the `callback_url`.
> 2. Regardless of whether `callback_url` is provided, you can retrieve the result through the unified [Query Task Status](https://docs.vidgo.ai/api-manual/task-management/status.md) endpoint.

OmniHuman 2.0 Audio to Video takes one character image and one audio file and generates a 720p video of that character speaking, singing or performing, with lip movement, expression and gestures following the audio. It accepts 4–300 seconds of audio, so it works for short social clips as well as full explainer narrations. OmniHuman 2.0 is ByteDance's audio-driven video model, offered upstream through BytePlus.

## Models

* **bytedance/omnihuman-2.0/audio-to-video** — Audio-to-video with OmniHuman 2.0: one image plus one WAV or MP3 file, 720p output, length follows the audio.

## Features

* Audio-driven talking and singing videos from a single image.
* Lip sync, expression and gestures driven by the audio.
* Audio from 4 seconds up to 5 minutes; the video is as long as the audio.
* Works with people, animals, cartoon, 3D and stylized characters, and multi-person images.
* Optional prompt for camera movement, actions and added scene elements.

## Required parameters

* `image_urls` (string\[]): Exactly one public HTTP(S) image URL of the character. The framing of the video follows this image.
* `audio_url` (string): Public HTTP(S) URL of a WAV or MP3 file, at most 15 MB and 4–300 seconds long.

## Optional parameters

* `prompt` (string): Camera movement, actions or extra scene elements. Lip movement and expression still come from the audio.

## Duration

There is no `duration` field. The output length follows the audio, so a 30-second voice-over gives a video of about 30 seconds. Trim the audio to change the length.

## Output

The finished task returns one MP4 video in the `files` array of [Query Task Status](https://docs.vidgo.ai/api-manual/task-management/status.md) and the callback payload. The video is 720p.

## Examples

* **Talking presenter from a headshot**: one headshot and an MP3 voice-over, no prompt.
* **Singing character with a camera prompt and callback**: a cartoon cat, a WAV song, a prompt for movement and camera, and a `callback_url`.

## Notes

* Use one clear image with a visible face and clean audio without long silences or heavy background noise for the most accurate lip sync.
* Audio that is not WAV or MP3, larger than 15 MB, shorter than 4 seconds or longer than 300 seconds returns 400. `duration`, `resolution`, `aspect_ratio`, `seed` and any other field not listed above also return 400.
* `model` and `callback_url` belong at the request root, not inside `input`.
* Credits are billed per second of generated video. At submission, credits for the full audio length are reserved. When the task succeeds, the charge is settled on the actual output length and any difference is refunded; the final charge never exceeds the reserved amount. A failed task is refunded in full. See the [pricing page](https://vidgo.ai/apis/api-pricing) for current rates.


## OpenAPI

````yaml api-manual/video-series/bytedance-omnihuman-2-0-audio-to-video.json POST /api/generate/submit
openapi: 3.0.0
info:
  title: Vidgo API - OmniHuman 2.0 Audio to Video
  description: >-
    The OmniHuman 2.0 Audio to Video API animates one character image with a
    4–300 second WAV or MP3 file into a 720p lip-synced video, with optional
    prompts.
  version: 1.0.0
servers:
  - url: https://api.vidgo.ai
    description: Production server
security:
  - BearerAuth: []
paths:
  /api/generate/submit:
    post:
      tags:
        - Video Series
      summary: OmniHuman 2.0 Audio to Video
      description: >-
        Send only `image_urls`, `audio_url` and an optional `prompt` inside
        `input`. Any other field, including `duration`, `resolution` or
        `aspect_ratio`, returns 400. The audio is downloaded and probed at
        submission: it must be WAV or MP3, at most 15 MB and 4–300 seconds long.
      operationId: submit_bytedance_omnihuman_2_0_audio_to_video
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - model
                - input
              properties:
                model:
                  type: string
                  description: Model ID. Use `bytedance/omnihuman-2.0/audio-to-video`.
                  example: bytedance/omnihuman-2.0/audio-to-video
                callback_url:
                  type: string
                  format: uri
                  nullable: true
                  description: >-
                    Optional public HTTP(S) endpoint that receives a POST when
                    the task becomes `finished` or `failed`. HTTPS is
                    recommended. Omit it, or send `null` or an empty string, to
                    disable callbacks.
                  example: https://your-domain.com/callback
                input:
                  type: object
                  required:
                    - image_urls
                    - audio_url
                  properties:
                    image_urls:
                      type: array
                      items:
                        type: string
                        format: uri
                      minItems: 1
                      maxItems: 1
                      example:
                        - https://example.com/presenter.png
                      description: >-
                        Exactly one public HTTP(S) image URL of the character: a
                        person, an animal, or a cartoon, 3D or stylized
                        character. Multi-person images work too. The framing
                        follows this image.
                    audio_url:
                      type: string
                      format: uri
                      example: https://example.com/voiceover.mp3
                      description: >-
                        Public HTTP(S) URL of the driving audio: a WAV or MP3
                        file, at most 15 MB and 4–300 seconds long. The video
                        length follows the audio.
                    prompt:
                      type: string
                      example: >-
                        Medium shot, the presenter gestures toward the camera,
                        slow push-in
                      description: >-
                        Optional guidance for camera movement, actions and extra
                        scene elements. Lip movement and expression still follow
                        the audio.
                  additionalProperties: false
                  description: Generation parameters.
            examples:
              talking_head:
                summary: Talking presenter from a headshot
                value:
                  model: bytedance/omnihuman-2.0/audio-to-video
                  input:
                    image_urls:
                      - https://example.com/presenter.png
                    audio_url: https://example.com/voiceover.mp3
              singing_prompt:
                summary: Singing character with a camera prompt and callback
                value:
                  model: bytedance/omnihuman-2.0/audio-to-video
                  callback_url: https://your-domain.com/callback
                  input:
                    image_urls:
                      - https://example.com/cartoon-cat.png
                    audio_url: https://example.com/song.wav
                    prompt: >-
                      The cat sways to the beat and raises a paw on the chorus,
                      slow orbit shot, stage lights
      responses:
        '200':
          description: Task submitted
          content:
            application/json:
              schema:
                type: object
                required:
                  - code
                  - data
                properties:
                  code:
                    type: integer
                    enum:
                      - 200
                    description: HTTP status code.
                  data:
                    type: object
                    required:
                      - task_id
                      - status
                      - created_time
                    properties:
                      task_id:
                        type: string
                        description: >-
                          Task ID. Use it with [Query Task
                          Status](/api-manual/task-management/status).
                      status:
                        type: string
                        enum:
                          - not_started
                        description: Initial task status.
                      created_time:
                        type: string
                        format: date-time
                        description: Time the task was created (ISO 8601).
              example:
                code: 200
                data:
                  task_id: task-unified-1762160000-abc123
                  status: not_started
                  created_time: '2026-11-03T10:30:00'
        '400':
          description: >-
            Invalid input, unsupported field, inaccessible media, or
            insufficient credits
          content:
            application/json:
              schema:
                type: object
                required:
                  - detail
                properties:
                  detail:
                    oneOf:
                      - type: string
                      - type: object
                        additionalProperties: true
                      - type: array
                        items: {}
                    description: Error message.
        '401':
          description: Invalid credentials
          content:
            application/json:
              schema:
                type: object
                required:
                  - detail
                properties:
                  detail:
                    oneOf:
                      - type: string
                      - type: object
                        additionalProperties: true
                      - type: array
                        items: {}
                    description: Error message.
        '403':
          description: Access denied
          content:
            application/json:
              schema:
                type: object
                required:
                  - detail
                properties:
                  detail:
                    oneOf:
                      - type: string
                      - type: object
                        additionalProperties: true
                      - type: array
                        items: {}
                    description: Error message.
        '404':
          description: Unknown or disabled model
          content:
            application/json:
              schema:
                type: object
                required:
                  - detail
                properties:
                  detail:
                    oneOf:
                      - type: string
                      - type: object
                        additionalProperties: true
                      - type: array
                        items: {}
                    description: Error message.
        '408':
          description: Request timed out
          content:
            text/plain:
              schema:
                type: string
              example: Request timeout
        '422':
          description: Invalid JSON or non-object request body
          content:
            application/json:
              schema:
                type: object
                required:
                  - detail
                properties:
                  detail:
                    oneOf:
                      - type: string
                      - type: object
                        additionalProperties: true
                      - type: array
                        items: {}
                    description: Error message.
        '429':
          description: Rate or API key credit limit exceeded
          content:
            application/json:
              schema:
                type: object
                required:
                  - detail
                properties:
                  detail:
                    oneOf:
                      - type: string
                      - type: object
                        additionalProperties: true
                      - type: array
                        items: {}
                    description: Error message.
        '500':
          description: Internal error
          content:
            application/json:
              schema:
                type: object
                required:
                  - detail
                properties:
                  detail:
                    oneOf:
                      - type: string
                      - type: object
                        additionalProperties: true
                      - type: array
                        items: {}
                    description: Error message.
        '502':
          description: Unable to create the upstream generation task
          content:
            application/json:
              schema:
                type: object
                required:
                  - detail
                properties:
                  detail:
                    oneOf:
                      - type: string
                      - type: object
                        additionalProperties: true
                      - type: array
                        items: {}
                    description: Error message.
        '503':
          description: The requested model is temporarily unavailable
          content:
            application/json:
              schema:
                type: object
                required:
                  - detail
                properties:
                  detail:
                    oneOf:
                      - type: string
                      - type: object
                        additionalProperties: true
                      - type: array
                        items: {}
                    description: Error message.
components:
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: API Key
      description: >-
        All API endpoints require Bearer Token authentication


        Get your API Key:


        Go to **Dashboard → API Key** ([API Key Management
        Page](https://vidgo.ai/apis/dashboard/api-key)) to get your API Key


        Add it to the request header:


        ```

        Authorization: Bearer VIDGO_API_KEY

        ```

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.