API

Seedance 2.0 Fast API

Video

Seedance 2.0 Fast API generates 4–15 second videos at 480p / 720p, using text, first/last frames, or multimodal references. Reference mode accepts up to 9 images, 3 videos and 3 audio files. Each image must be no larger than 30 MB.

Authorizations

Bearerstringheaderrequired

API key to authorize requests

Body

application/json
modelstringrequired
seedance-2-0-fast
input.promptstringrequired

Describe the subject, action, scene, lighting, camera movement, and timing. Leading and trailing whitespace is trimmed.

input.frames_imagesstring[]optional

A list of one or two publicly accessible HTTPS image URLs: first frame, then optional last frame. This is a separate generation mode and cannot be combined with reference_images, reference_videos or reference_audios.

With input.frames_images, Seedance 2.0 Fast automatically uses adaptive aspect ratio based on the supplied frames.

Maximum URLs: 2.

Maximum size per image: 30 MB.

Example: ["https://example.com/first-frame.png","https://example.com/last-frame.png"]

input.reference_imagesstring[]optional

A list of publicly accessible HTTPS reference image URLs. May be combined with reference_videos and reference_audios, but never with frames_images. Send URL strings, not uploaded file objects or base64.

Maximum URLs: 9.

Maximum size per image: 30 MB.

Example: ["https://example.com/your-image.png"]

input.reference_videosstring[]optional

A list of publicly accessible HTTPS reference video URLs. Cannot be combined with frames_images. Providing videos changes credit consumption; see the reference-video pricing row and billing formula below.

Maximum URLs: 3.

Example: ["https://example.com/your-video.mp4"]

input.reference_audiosstring[]optional

A list of publicly accessible HTTPS reference audio URLs. May be combined with other reference_* lists, but never with frames_images.

Maximum URLs: 3.

Example: ["https://example.com/your-audio.mp3"]

input.durationintegeroptional

Video duration in whole seconds, from 4 to 15. Defaults to 5. Credit usage scales with this duration.

Default: 5

4–15
input.resolutionstringoptional

Output video resolution. Use a lowercase value from the list below. Resolution changes the credit rate.

Default: 720p

480p720p
input.aspect_ratiostringoptional

Output width-to-height ratio. Defaults to 16:9. Frame inputs can guide the final composition.

Default: 16:9

16:99:161:13:44:321:9
input.soundbooleanoptional

Whether to generate audio alongside the video. Defaults to false. Send a JSON boolean, not a string.

Default: false

Request examples

Choose one generation mode: omit all media for text-to-video; use frames_images for first/last-frame generation; or combine reference_images, reference_videos and reference_audios for reference-guided generation. frames_images cannot be combined with any reference_* media list. All resources are lists of publicly accessible HTTPS URLs, not file objects or base64. Replace example.com URLs before use. Save data.task_id and poll POST /api/v1/check until completed or failed.

POST /api/v1/create
curl -X POST https://nanobanana.io/api/v1/create \
  -H "Authorization: Bearer sk_live_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
  "model": "seedance-2-0-fast",
  "input": {
    "prompt": "A red vintage car drives along a coastal road at sunset. The camera tracks smoothly beside the car as warm light reflects on the ocean.",
    "duration": 5,
    "aspect_ratio": "16:9",
    "resolution": "720p",
    "sound": false
  }
}'
POST /api/v1/create · HTTP 201
{
  "data": {
    "task_id": "task_example",
    "model": "seedance-2-0-fast",
    "status": "processing",
    "credits": 500
  }
}

Poll this endpoint using the returned task ID until the task is completed or failed. We recommend polling every 5 seconds to check the latest task status.

POST /api/v1/check
{
  "task_id": "task_example"
}

Response

Task status returned by POST /api/v1/check. The IDs, URLs, and timestamps below are illustrative.

idstringrequired

Task identifier in data.id, matching the task_id used in the check request.

statusstringrequired
completed means generation succeeded and data.data contains the results. For other statuses, data.data is null.
failed_reasonstringoptional

Only returned when status is failed, to explain the failure. This field is omitted for completed and processing.

Completed · completed

The download URLs are in data.data.results.

POST /api/v1/check · HTTP 200
{
  "data": {
    "id": "task_example",
    "created_at": 1791244800,
    "model": "seedance-2-0-fast",
    "status": "completed",
    "data": {
      "results": [
        "https://example.com/generated.mp4"
      ],
      "processing_time": 120
    }
  }
}

Other statuses

For processing or failed, data.data is null. This example shows failed: only failed includes failed_reason. Continue polling for processing; stop polling for failed.

POST /api/v1/check · HTTP 200
{
  "data": {
    "id": "task_example",
    "created_at": 1791244800,
    "model": "seedance-2-0-fast",
    "status": "failed",
    "data": null,
    "failed_reason": "Generation failed."
  }
}

Credit usage

Credits per billable second, by resolution and reference-video mode.

Credits per billable second, by resolution and reference-video mode.
Generation480P720P
Without reference videos50100
With reference videos3060

Each request generates one video. Omitted duration and resolution use the defaults above. Reference-video requests may consume more credits; use the matching row and formula.

Choose the row matching whether reference_videos is present. Total credits = generated video seconds × the selected per-second rate. Images or audio alone use the row without reference videos.

The credits field returned by POST /api/v1/create shows the amount charged for the task.