---
title: "Generate a video from an image with Seedance 2.0"
method: POST
path: "/v2/async/image-to-video/seed-dance-2.0"
tags: ["generate"]
---

# Generate a video from an image with Seedance 2.0

`POST /v2/async/image-to-video/seed-dance-2.0`

Generates a video from a first-frame image and a text prompt using the
Seedance 2.0 model. The request is always processed asynchronously: this
endpoint returns immediately with a `generation_id` and an empty `data`
array. Poll `/v1/generations/{generation_id}` with the returned
`generation_id` to retrieve the video once it is ready, or supply
`webhook_url` to have the result delivered to your server.

Supply the first frame in exactly one of two ways: upload the image bytes
directly in the `image` part, or reference an existing Ideogram asset you
own with `image_asset_id`. Provide exactly one of `image` or
`image_asset_id`; supplying neither or both is rejected.

Video links are available for a limited period of time; if you would like
to keep the video, you must download it.

## Query parameters

- `webhook_url` string, uri — HTTPS URL that Ideogram delivers the generated result to. Ideogram sends a JSON POST to this URL once all images for the request have finished generating. The body mirrors the synchronous generate response: `request_id`, `created`, and a `data` array containing every generated image (`url`, `prompt`, `resolution`, `seed`, `is_image_safe`). Each delivery is signed with Ed25519 and verifiable against the public keys at `https://api.ideogram.ai/v1/.well-known/jwks.json`. Must be HTTPS; private and loopback hosts and the cloud metadata service are rejected.

## Response `200`

Request accepted; poll or await the webhook for the result.

- VideoGenerationResponse — Acknowledgement returned by the Seedance 2.0 video endpoints. The request is accepted for asynchronous processing, so `data` is always empty in this response; the generated video is retrieved by polling `/v1/generations/{generation_id}` or delivered to `webhook_url`.
  - `generation_id` string, required — URL-safe base64 ID of the accepted generation. Poll `/v1/generations/{generation_id}` with this id to retrieve the result.
  - `created` string, date-time, required — The time the request was created.
  - `data` VideoObject[], required — Always empty for this asynchronous acknowledgement.
    - `object_type` 'video.generation' — Discriminator marking this entry as a generated video in the polling endpoint's mixed data array.
    - `url` string, uri, nullable — The direct link to the generated video.
    - `prompt` string, required — The prompt used for the generation.
    - `resolution` string, required — The resolution tier of the generated video.
    - `aspect_ratio` string, required — The actual aspect ratio of the produced video, formatted as "{width}:{height}".
    - `duration` integer, required — The actual measured length of the produced video in seconds.

## Other responses

- `400` — Invalid input provided.
- `401` — Not authorized.
- `422` — Prompt failed the safety check.
- `429` — Too many requests.

---

[API](https://skmtc.net/ideogram/apis/ideogram-openapi-3-0.md) · [All operations](https://skmtc.net/ideogram/apis/ideogram-openapi-3-0/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/ideogram/ideogram-openapi-3-0/revisions/73707bc35f34/schema)
