# Seedance 2.0 V2 video API

# Seedance 2.0 V2 video API

This is U9AI's current public contract for Seedance 2.0 Mini and Fast V2 video tasks. It uses a U9AI API key, never a provider key, browser cookie, or signed-in website session. V2 is asynchronous: a successful creation response means that a task was accepted, not that a video is ready.

## Endpoints and authentication

Use HTTPS and `Authorization: Bearer $U9AI_API_KEY` for every request. Start with model discovery to confirm that the key authenticates for this request. Actual model access still depends on the returned result.

| Operation | Method and URL |
| --- | --- |
| List available models | `GET https://u9ai.ai/v1/models` |
| Create a Mini task | `POST https://u9ai.ai/api/v2/open/aigc/seedance2-0-mini-oversea` |
| Create a Fast task | `POST https://u9ai.ai/api/v2/open/aigc/seedance2-0-fast-oversea` |
| Read one task | `GET https://u9ai.ai/api/v2/open/aigc/{taskId}` |
| Read tasks in batch | `POST https://u9ai.ai/api/v2/open/aigc/batch` |
| Read balance / request records | `GET https://u9ai.ai/api/v2/open/balance` / `GET https://u9ai.ai/api/v2/open/records` |

Do not mix an upstream V3 `/api/v3/...` path or its `generate_audio` field into this V2 request. The U9AI Seedance V2 audio field is camelCase: `generateAudio`.

## Create a task

`content` is an array and must include at least one `type: "text"` prompt. Mini and Fast support `480p` and `720p`; duration is 4–15 seconds. Common ratios are `16:9`, `9:16`, `1:1`, `4:3`, `3:4`, `21:9`, and `adaptive`.

Use a complete server-readable HTTPS URL or a complete `data:image/...;base64,...` URI for reference material. Do not send a local path, private-network URL, or a URL that requires browser login. Image roles include `first_frame`, `last_frame`, and `reference_image`. Do not use one image as both first and last frame; for multiple reference images, explain their order in the prompt.

```bash
curl --fail-with-body -sS "https://u9ai.ai/api/v2/open/aigc/seedance2-0-mini-oversea" \
  -H "Authorization: Bearer $U9AI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "content": [
      {"type":"text","text":"Use image 1 as reference and create a short video with natural camera movement."},
      {"type":"image_url","image_url":{"url":"https://example.com/your-authorized-image.jpg"},"role":"reference_image"}
    ],
    "ratio":"9:16",
    "duration":5,
    "resolution":"720p",
    "generateAudio":true
  }'
```

Replace `mini` in the path with `fast` to create a Fast task. Set `generateAudio: false` only for a silent result. Generated audio is not a guarantee of word-perfect narration, captions, or a particular soundtrack; review the final media.

Creation is accepted only when the HTTP response succeeds, no business error is present, and `data.taskId` is non-empty. Persist `data.taskId`, the U9AI `X-Request-ID`, and the time, without logging the API key. On timeout, 5xx, or no task ID, mark the submission as unknown and do not automatically create it again; use request records or support to determine whether a billable task exists.

## Track, download, and handle errors

```bash
curl --fail-with-body -sS \
  -H "Authorization: Bearer $U9AI_API_KEY" \
  "https://u9ai.ai/api/v2/open/aigc/YOUR_TASK_ID"
```

Typical V2 states are `processing`, `success`, and `failed`. On `success`, read the result URLs from `data.result`; on `failed`, read `data.errorMsg`. Respect 429 and `Retry-After`, use one concurrent creation at first, and back off polling. Do not send the API key to a result-file domain. Verify HTTP status, a non-empty file, a playable video stream, and audio before exposing a download.

Creation consumes credit. Set per-task and total budgets first, then use U9AI request records and wallet entries as the final cost source. A successful `GET /v1/models` confirms only authentication and model discovery, not video completion.

## Safe support handoff

For troubleshooting, provide timestamp with timezone, model, HTTP status, `X-Request-ID`, `CF-Ray` when present, business error code, taskId, final status, and `data.errorMsg`. Never send an API key, Authorization header, cookie, private asset URL, source media, or payment data.
