# Seedance 2.5 API Reference

## Authentication

Send `Authorization: Bearer ${EVOLINK_API_KEY}` to every API endpoint

Validate a key without creating a task:

```http
GET https://api.evolink.ai/v1/credits
```

## Create Video Task

```http
POST https://api.evolink.ai/v1/videos/generations
Content-Type: application/json
```

## Five-Variant Matrix

| Mode | Model | Required media | Mode-specific rules |
|---|---|---|---|
| Text | `seedance-2.5-text-to-video` | None | Supports `model_params.web_search`; rejects all media arrays |
| Image | `seedance-2.5-image-to-video` | `image_urls`, one or two | First frame or first/last frame; `aspect_ratio=adaptive` only |
| Reference | `seedance-2.5-reference-to-video` | At least one media array | Generates new footage from references; do not use for editing or extension |
| Edit | `seedance-2.5-video-edit` | `video_urls`, one to ten | First video is edit target; `duration=-1`; `aspect_ratio=adaptive` only |
| Extend | `seedance-2.5-video-extend` | `video_urls`, one to ten | First video is extension target; `duration=-1` or 4–30; `aspect_ratio=adaptive` only |

## Shared Request Fields

| Field | Type | Required | Allowed / default |
|---|---|---:|---|
| `model` | string | yes | Exact model ID from the matrix |
| `prompt` | string | yes | Up to 10,000 tokens; tag ordered media as `@image1`, `@video1`, `@audio1` |
| `duration` | integer | no | `-1` or 4 to 30; default 5 except Edit defaults to `-1` and accepts no other value |
| `quality` | string | no | `480p`, `720p`; default `720p` |
| `aspect_ratio` | string | no | `16:9`, `9:16`, `1:1`, `4:3`, `3:4`, `21:9`, `adaptive`; Image/Edit/Extend accept only `adaptive` |
| `output_format` | string | no | `mp4`, `mov`; default `mp4` |
| `generate_audio` | boolean | no | Default true |
| `content_filter` | boolean | no | Default true; false has a documented 1.1x multiplier |
| `callback_url` | string | no | HTTPS, maximum 2048 characters, no private IP targets |

## Text-Only Field

```json
{
  "model_params": {
    "web_search": true
  }
}
```

## Image-to-Video Inputs

- `image_urls`: one image for first-frame generation or two images for first/last-frame generation
- Formats: JPEG, PNG, WebP
- Each image: up to 30 MB, dimensions 300 to 6000 px, width/height ratio 0.4 to 2.5
- Fixed aspect ratios are invalid; use `adaptive`

## Reference-to-Video Inputs

- `image_urls`: 1 to 30 when present
- `video_urls`: 1 to 10 when present; 2 to 30 seconds each; 30 seconds total; 24 to 60 FPS; up to 200 MB each
- `audio_urls`: 1 to 10 when present; 2 to 30 seconds each; 30 seconds total; up to 15 MB each
- At least one media array is required
- This model generates new footage. Edit or extension intent can be accepted at submission and then fail during execution; choose the dedicated model instead

## Video Edit Inputs

- `video_urls`: required, 1 to 10; the first video is the edit target and additional videos are references
- First target video duration: 4 to 30 seconds; all input video durations combined must not exceed 30 seconds
- `image_urls`: optional, up to 30 supplementary references
- `audio_urls`: optional, up to 10 supplementary references
- Prompt must state edit intent and identify the target, for example `Edit @video1: ...`
- `duration` must be `-1`; output follows the target timeline and may be up to 0.4 seconds shorter
- `aspect_ratio` must be `adaptive`

## Video Extend Inputs

- `video_urls`: required, 1 to 10; the first video is the extension target and additional videos are references
- Each video duration: 2 to 30 seconds; all input video durations combined must not exceed 30 seconds
- `image_urls`: optional, up to 30 supplementary references
- `audio_urls`: optional, up to 10 supplementary references
- Prompt must say whether to extend forward or backward and identify the target as `@video1`
- `duration` accepts `-1` or 4 to 30 seconds
- `aspect_ratio` must be `adaptive`

## Shared Media Rules

- Use directly accessible HTTP(S) URLs, not local paths or Base64 data
- Total request body size must not exceed 64 MB
- Images: JPEG, PNG, WebP; videos: MP4, MOV; audio: WAV, MP3
- URL order maps to `@image1`, `@video1`, and `@audio1`

## Query Task

```http
GET https://api.evolink.ai/v1/tasks/{task_id}
```

Statuses are `pending`, `processing`, `completed`, and `failed`. Completed tasks contain `results`; failed tasks contain a task-level `error`

## Official Sources

- [Overview](https://evolink.ai/docs/en/api-manual/video-series/seedance2.5/seedance-2.5-overview)
- [Text-to-Video](https://evolink.ai/docs/en/api-manual/video-series/seedance2.5/seedance-2.5-text-to-video)
- [Image-to-Video](https://evolink.ai/docs/en/api-manual/video-series/seedance2.5/seedance-2.5-image-to-video)
- [Reference-to-Video](https://evolink.ai/docs/en/api-manual/video-series/seedance2.5/seedance-2.5-reference-to-video)
- [Video Edit](https://evolink.ai/docs/en/api-manual/video-series/seedance2.5/seedance-2.5-video-edit)
- [Video Extend](https://evolink.ai/docs/en/api-manual/video-series/seedance2.5/seedance-2.5-video-extend)
