API

Wan 3.0 API

Video

Wan 3.0 API generates 2–30 second videos at 480p / 720p / 1080p, using text, first/last frames, or multimodal references. Reference mode accepts up to 10 images, 5 videos and 5 audio files. Each image must be no larger than 30 MB.

Authorizations

Bearerstringheaderrequired

API key to authorize requests

Body

application/json
modelstringrequired
wan-3-0
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.

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: 10.

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: 5.

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: 5.

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

input.reference_video_durationnumberoptional

Total duration of all supplied reference videos in seconds. Required when reference_videos is provided. Billing rounds this total up to whole seconds and caps the additional billed duration at 15 seconds. Omit when no reference videos are supplied.

input.durationintegeroptional

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

Default: 5

2–30
input.resolutionstringoptional

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

Default: 720p

480p720p1080p
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:3
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": "wan-3-0",
  "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": "wan-3-0",
    "status": "processing",
    "credits": 600
  }
}

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": "wan-3-0",
    "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": "wan-3-0",
    "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.
Generation480P720P1080P
Without reference videos60120240
With reference videos60120240

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.

Without reference videos: generated seconds × rate. With reference videos: (generated seconds + min(15, ceil(reference_video_duration))) × rate. The per-second rate is unchanged; the reference-video duration adds billable seconds.

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