# Seedance 2.0 Mini — /videos/generations

Seedance 2.0 Mini video generation (async): entry tier, the cheapest per second on the station; duration is any integer 5-15 seconds, resolution 480P / 720P (default 720P), five aspect ratios, audio toggles the soundtrack (default true); include image for image-to-video. Returns a job id (HTTP 202); poll GET /v1/videos/jobs/{id}. Billed per second (reference-video seconds count too), fully refunded on failure.

**Endpoint:** `POST https://kovapi.com/v1/videos/generations`

## Authentication
```
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
```

## Request body
| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `model` | string | Yes | Model ID, here seedance-2.0-mini. |
| `prompt` | string | Yes | Text prompt describing the video, camera and motion. Max 5000 bytes (UTF-8; a Chinese character counts as 3). With multiple reference images you can address them as @Image1 / @Image2 in the prompt, e.g. "the character from @Image1 in the scene from @Image2"; without tokens the model decides on its own. |
| `duration` | integer | No | Length in seconds, any integer 5-15 (default 5); alias seconds. Billed per second. |
| `resolution` | string | No | Resolution: 480P / 720P (default 720P; each tier has its own rate, see the model page). |
| `size` | string | No | Aspect ratio: 16:9 / 9:16 / 1:1 / 4:3 / 3:4 (16:9 default); alias aspect_ratio. |
| `audio` | boolean | No | Every clip comes with sound (dialogue, effects and music generated from the prompt); it cannot be switched off, and false has no effect. |
| `image` | string | No | One reference image (public URL, data: URI or base64), handed to the model as a reference for the characters, objects, scene or style; use images for several. This line has no first-frame control, so the image is not guaranteed to open the clip. With no references at all it is text-to-video. |
| `images` | array | No | Multiple reference images, up to 9 for this model. Each item may be a public URL, a data: URI, or base64. Exceeding the cap is rejected, never truncated. Alias: reference_images. Each image up to 16 MB, jpg / png / webp / gif; address them in order as @Image1, @Image2, ... in the prompt. |
| `image_role` | string | No | Optional. Reference images are always used as references (characters, scene, style), addressed as @Image1... in the prompt; the model has no first/last-frame control. |
| `audio_reference` | string / array | No | Public http(s) URL(s) for reference audio, up to 3. Must accompany a reference image or video; alias audio_references (do not send both). Base64 works too (data:audio/mpeg;base64,...), mp3 / wav / m4a; address it as @Audio1 in the prompt. |
| `video_references` | array | No | Reference videos, up to 3. Each may be a public http(s) URL or a local file sent inline as base64 (data:video/mp4;base64,..., mp4 / mov, up to 50 MB each); we host it and hand the link to the upstream. May be combined with reference images in the same request (e.g. photos for the characters' looks, a video for motion and camera) - address them in the prompt as @Image1 / @Video1. Each video at most 30 s, 15 s in total; references we host are kept for 7 days. |

## Request example
```bash
# 1) submit -> 202 {"id":"img_...","status":"queued"}
curl https://kovapi.com/v1/videos/generations -H 'Authorization: Bearer YOUR_API_KEY' -H 'Content-Type: application/json' -d '{"model": "seedance-2.0-mini", "prompt": "a cat surfing a wave at sunset", "duration": 5, "resolution": "720P", "size": "16:9"}'
# with references: add "images": ["https://example.com/a.png"], "video_references": ["https://example.com/move.mp4"], "audio_reference": ["https://example.com/bgm.mp3"] and name them @Image1 / @Video1 / @Audio1 in the prompt
# 2) poll every ~5s until status=succeeded, then read data[0].url
curl https://kovapi.com/v1/videos/jobs/img_3f9a...c2 -H 'Authorization: Bearer YOUR_API_KEY'
```

## Response
```json
{
  "id": "img_3f9a...c2",
  "object": "video.generation.job",
  "status": "queued",
  "model": "seedance-2.0-mini"
}
```

## Content requirements

Every Seedance job goes through content review: the prompt, the reference files and the finished clip, picture and sound alike. A job that fails review ends with `content_policy` and is not charged.

### When review happens

The prompt and references are reviewed at submit; the finished clip is reviewed again, picture and sound, once it is generated. A rejection can therefore arrive seconds after submitting or only when rendering ends, which can take over half an hour. A job that ends with `status` `failed` and `error.code` `content_policy` failed review; with a webhook you receive a `video.failed` event.

### Not charged

A rejected job costs nothing: the amount held at submit is refunded in full when the job ends, and the call log shows it as not billed.

### Sound

The soundtrack (dialogue, narration, singing and effects) is generated by the model from your prompt and reviewed with the picture: spoken lines, narration and lyrics in the prompt are voiced or sung. For a clip without voices, leave lines and lyrics out of the prompt. This model always adds a soundtrack; it cannot be turned off, and `audio: false` has no effect. Uploaded reference audio is reviewed too, and copyrighted music used as reference audio may be rejected. When the sound fails review, `error.param` is `audio` and the message says whether it was the generated sound or your reference audio.

### Commonly rejected content

- Sexual content, nudity or sexual suggestion, including AI-generated or composited images
- Gore, cruelty, self-harm, and violent injury such as gunshot wounds and bleeding
- Firearms, explosives and drugs
- Any sexualised content involving minors; minors shown with alcohol, tobacco, drugs or in dangerous situations are rejected too
- Politicians, celebrities, athletes, business figures and other public figures, in looks or voice, including look-alikes
- Copyrighted characters and IP, such as Disney or Marvel characters
- Hateful or discriminatory content, and fake news

### Long storyboard scripts

One shot that breaks the rules fails the whole clip, and long storyboard scripts are where it happens most: a gunfight or a close-up of bleeding in an action scene, or minors in a drinking or smoking scene, sink the whole clip. Read the script through before submitting and remove or rewrite such shots.

### Real people

To use a photo of a real person as a reference you need the right to use their likeness.

### After a rejection

Resubmitting the same input is rejected again. Find the part that is likely at fault, reword the prompt or replace the reference, then submit again.

Error code: `content_policy` · `status: failed`