SeeGen AI API
Welcome to the SeeGen AI API — one API for cinematic video and high-fidelity image generation across multiple leading models.
Overview
SeeGen AI is a unified generation API: one consistent set of endpoints to run multiple leading AI video and image models. Choose a model with the model parameter — authentication, task submission, status polling, and webhooks work the same way across all of them.
Currently available models:
- Video — Seedance 2.5 (
sd2.5), Seedance 2.0 Pro (sd2), Fast (sd2-fast), Mini (sd2-mini), Grok Imagine Video 1.5 (grok-imagine-video-1.5) and Lite (grok-imagine-video-1.5-lite), Wan 3.0 Video Prime (wan3.0-video-prime), Wan 3.0 Video (wan3.0-video). Grok supports 1–15 seconds with audio. Standard 1.5 supports native 1080p for text or single-image input and up to 14 reference images; Lite supports text or one image, with 1080p upscaled from 720p. - Image — GPT Image 2 (
gpt-image-2), Nano Banana 2.1 / 2 (nano-banana-2.1,nano-banana-2), Nano Banana Pro (nano-banana-pro), Seedream 5.0 Lite (seedream-v5.0-lite), Seedream 5.0 Pro (seedream-v5.0-pro) Qwen Image 2.1 Pro and Turbo support 1K/2K generation and editing with up to 10 reference images.
Base URL: https://seegen.ai/api/v1
Model: pass any alias above as the model field (e.g. sd2, gpt-image-2).
Why SeeGen AI?
More Reasons to Choose SeeGen AI:
- More than Seedance 2.0: Wan 3.0, Nano Banana, ChatGPT Image, and more.
- No subscription is required — pay as you go
- Fast access to the latest models
- 24/7 customer support
- Support for official model-related inquiries
- Console access for developers
- Open to both businesses and individual users
Pricing
API Pack
125,000 credits ($0.004/credit)
~1,136 5s videos
API-XL Pack
500,000 credits ($0.004/credit)
~4,545 5s videos
Seedance 2.0 / Fast / Mini / 2.5 — cost calculation
Let out = output_seconds and in = the sum of ⌈duration⌉ of each input video (each rounded up, minimum out × 2/3). Seedance 2.5 follows the same calculation as Seedance 2.0. Each corresponding model base rate is multiplied by 1.5 and rounded before the task formula is applied (1080P is native on sd2.5, 2.5× its 720P rate); model-independent upscale add-ons remain +30 / +40 credits per output second for 2K / 4K (+20 for 1080P on sd2-fast / sd2-mini only).
| No video input | Include video input | |
|---|---|---|
| sd2.5: 480P | 30 × out | 23 × (out + in) |
| sd2.5: 720P | 60 × out | 45 × (out + in) |
| sd2.5: 1080P (native) | 150 × out | 113 × (out + in) |
| sd2.5: 2K | (60 + 30) × out | 45 × (out + in) + 30 × out |
| sd2.5: 4K | (60 + 40) × out | 45 × (out + in) + 40 × out |
| sd2-pro: 480P | 20 × out | 15 × (out + in) |
| sd2-pro: 720P | 40 × out | 30 × (out + in) |
| sd2-pro: 1080P (native) | 100 × out | 75 × (out + in) |
| sd2-pro: 2K | (40 + 30) × out | 30 × (out + in) + 30 × out |
| sd2-pro: 4K (native) | 200 × out | 150 × (out + in) |
| sd2-fast: 480P | 11 × out | 8.5 × (out + in) |
| sd2-fast: 720P | 22 × out | 17 × (out + in) |
| sd2-fast: 1080P | (22 + 20) × out | 17 × (out + in) + 20 × out |
| sd2-fast: 2K | (22 + 30) × out | 17 × (out + in) + 30 × out |
| sd2-fast: 4K | (22 + 40) × out | 17 × (out + in) + 40 × out |
| sd2-mini: 480P | 4.5 × out | 3.5 × (out + in) |
| sd2-mini: 720P | 9 × out | 7 × (out + in) |
| sd2-mini: 1080P | (9 + 20) × out | 7 × (out + in) + 20 × out |
| sd2-mini: 2K | (9 + 30) × out | 7 × (out + in) + 30 × out |
| sd2-mini: 4K | (9 + 40) × out | 7 × (out + in) + 40 × out |
Note: sd2-pro 1080P and 4K are native official output (4K = 5× the 720P rate). sd2-pro 2K and all sd2-fast / sd2-mini 1080P/2K/4K outputs are upscaled by SeeGen AI. sd2.5 generates natively at 480P/720P/1080P (1080P = 2.5× the 720P rate, with no upscale add-on) and uses automatic upscaling for 2K/4K. Set outputResolution to the desired tier, such as "1080p", "2k", or "4k". The gateway automatically selects native generation or upscaling.
Limited-time offer: sd2-fast and sd2-mini base rates are temporarily reduced. Without video input, Fast costs 11 / 22 credits per output second at 480P / 720P, and Mini costs 4.5 / 9 credits per output second. With video input, Fast costs 8.5 / 17 credits per billed second, and Mini costs 3.5 / 7 credits per billed second, applied to the combined output and billable input-video duration. For Fast and Mini, 1080P/2K/4K use the discounted 720P base rate plus an unchanged upscale add-on of 20 / 30 / 40 credits per output second.
Seedance 2.5 uses Seedance 2.0's per-video duration rounding, minimum input-duration floor, and upscale calculation. Its base rates are calculated from the corresponding sd2-pro base rates, multiplied by 1.5 and rounded before task calculation (e.g. 1080P with video input: 75 × 1.5 → 113). The model-independent 2K / 4K upscale add-ons remain +30 / +40 credits per output second.
If upscaling fails, the completed task returns the 720P fallback without a partial credit refund.
- sd2.5 480P, 4-second output without video input: 120 credits
- sd2.5 720P, 5-second output without video input: 300 credits
- sd2.5 720P, 5-second output + 3-second input video (4-second minimum input): 405 credits
- sd2.5 1080P native, 5-second output without video input: 750 credits
- sd2.5 1080P native, 5-second output + 5-second input video: 1,130 credits
Grok Imagine Video 1.5
| Resolution | Credits / sec |
|---|---|
| 480P | 30 |
| 720P | 50 |
| 1080P | 90 |
Output costs 30 / 50 / 90 credits per second at 480p / 720p / 1080p, plus 5 credits per input image. Audio does not change the price. A 5-second 480p video with one input image costs 155 credits.
urls: public HTTP(S) image URLs. One image selects single-image-to-video; two images select first/last-frame. Set videoInputMode: "reference" for 1–14 reference images. First/last-frame and multi-reference output support 480p and 720p.
Grok Imagine Video 1.5 Lite
| Resolution | Credits / sec |
|---|---|
| 480P | 8 |
| 720P | 12 |
| 1080P | 50 |
Output costs 8 / 12 / 50 credits per second at 480p / 720p / 1080p, plus 5 credits per input image. Audio does not change the price. A 5-second 480p video with one input image costs 45 credits.
urls: zero or one public HTTP(S) image URL. One image selects image-to-video and follows its aspect ratio. Multiple images, reference mode, video and audio inputs are not supported.
Wan 3.0 Video / Prime — cost calculation
Let out = output seconds and in = the total reference-video seconds, with each clip rounded up to a whole second. Without reference video: credits = out × rate. With reference video: credits = (out + in) × rate. Use the rate for your model and resolution below.
| Model | Native output | Credits / sec | 2s example |
|---|---|---|---|
| wan3.0-video-prime | 480P | 22 | 44 |
| 720P | 45 | 90 | |
| 1080P | 90 | 180 | |
| wan3.0-video | 480P | 16 | 32 |
| 720P | 32 | 64 | |
| 1080P | 64 | 128 |
Note: 480P, 720P, and 1080P are native output; 2K/4K upscale is not supported. Reference images and audio do not add to the billed duration. Turning generated audio off does not change the price. Reference-video duration plus output duration must not exceed 30 seconds.
- wan3.0-video 480P, 2-second output without video input: 2 × 16 = 32 credits
- wan3.0-video-prime 480P, 2-second output without video input: 2 × 22 = 44 credits
- wan3.0-video 720P, 5-second output + 3-second reference video: (5 + 3) × 32 = 256 credits
- wan3.0-video-prime 720P, 5-second output + 2.2-second reference video (rounded up to 3 seconds): (5 + 3) × 45 = 360 credits
🎉 Limited-time offer: 33% off all image generation — all image prices below are already discounted.
GPT Image 2.5 Flare / Sunburst
| Resolution | Medium quality | High quality | XHigh quality | Max quality |
|---|---|---|---|---|
| 1k | 35 | 1320 | 2335 | 5075 |
| 2k (default) | 710 | 2335 | 3755 | 84125 |
| 4k | 1015 | 4060 | 67100 | 154230 |
Each task produces 1 image. Submit N tasks for N variants. Failed tasks refund credits automatically.
gpt-image-2 — credits per image
| Resolution | Medium quality | High quality |
|---|---|---|
| 1k | 1015 | 4770 |
| 2k (default) | 2335 | 84125 |
| 4k | 4060 | 154230 |
Each task produces 1 image. Submit N tasks for N variants. Failed tasks refund credits automatically.
Nano Banana — credits per image
| Resolution | nano-banana-2.1nano-banana-2 | nano-banana-pro |
|---|---|---|
| 1k | 2030 | 4060 |
| 2k (default) | 3045 | 4060 |
| 4k | 4770 | 74110 |
Each task produces 1 image. Submit N tasks for N variants. Failed tasks refund credits automatically.
Seedream 5.0 — credits per image
| Model / tier | Credits |
|---|---|
| Lite 2k / 4k (flat rate) | 710 |
| Pro 1k (default) | 1015 |
| Pro 2k | 2030 |
Each task produces 1 image. Submit N tasks for N variants. Failed tasks refund credits automatically. Reference images are not billed separately.
Qwen Image 2.1 Pro / Turbo
| Resolution | qwen-image-2.1-pro | qwen-image-2.1-turbo |
|---|---|---|
| 1k | 1320 | 58 |
| 2k | 1320 | 58 |
Pro: 13 credits per image. Turbo: 5 credits per image. 1K and 2K cost the same. Prices include any active image promotion.
Each task produces 1 image. Submit N tasks for N variants. Failed tasks refund credits automatically. Reference images are not billed separately.
Check your balance: GET /api/v1/account/credits
Automatic Recharge for API Accounts
Your API key and SeeGen AI dashboard use the same account-level credit balance. Auto Recharge can keep that balance funded for API workloads, but it must be configured from the Credits page; there is currently no separate configuration API.
Set up Auto Recharge from Credits:
- Open Credits, choose the minimum balance you want to maintain, and select a recharge package.
- Authorize your payment method once. This setup step saves authorization and does not charge the card.
- After the flexible authorization is active, you can change the minimum balance or package from Credits without authorizing again. An account using the previous fixed-price authorization may need a one-time upgrade.
How it behaves with API requests
- When a successful API task submission deducts credits and moves the balance from at or above your threshold to below it, SeeGen AI queues an automatic recharge asynchronously. The task submission does not wait for the recharge.
- If the account does not have enough credits before submission, the API returns HTTP 402 and creates no task. Auto Recharge is not triggered by that rejected request, and the request is not automatically retried; retry it after credits are available.
- Check the current balance with
GET /api/v1/account/credits. Automatic recharge progress and failures appear on Credits and Payment History, and important outcomes are emailed to the account billing address. There is currently no customer-facing automatic recharge webhook or status API.
Automatic recharge bonuses for API packages
- $500.00 API Pack: 127,500 credits (125,000 + 2% bonus).
- $2,000.00 API-XL Pack: 525,000 credits (500,000 + 5% bonus).
- Manual purchases of these packages still add 125,000 and 500,000 credits respectively.
Authentication
All API requests require a Bearer token in the Authorization header. You can create and manage API keys from your Account Settings.
curl -H "Authorization: Bearer YOUR_API_KEY" \
https://seegen.ai/api/v1/account/creditsImportant: Your API key is shown only once at creation. Store it securely. You can create up to 10 API keys per account.
Quick Start
Generate a video in two steps: create a task, then poll for the result.
set -eu
# 1. Create once. Save the returned IDs; never blindly retry a timed-out create.
CREATED=$(curl --fail-with-body --silent --show-error --max-time 120 -X POST \
-H "Authorization: Bearer $SEEGEN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "sd2",
"inputs": {
"prompt": "A golden retriever running on the beach at sunset",
"duration": "5s",
"resolution": "1280x720"
}
}' \
https://seegen.ai/api/v1/jobs/createTask)
printf '%s\n' "$CREATED" | jq .
TASK_ID=$(printf '%s' "$CREATED" | jq -er '.taskId')
# 2. Poll for up to 15 minutes. A polling timeout does not cancel the task.
DEADLINE=$(( $(date +%s) + 900 ))
while true; do
RESULT=$(curl --fail-with-body --silent --show-error --max-time 30 \
-H "Authorization: Bearer $SEEGEN_API_KEY" \
"https://seegen.ai/api/v1/jobs/queryTask?taskId=$TASK_ID")
STATUS=$(printf '%s' "$RESULT" | jq -er '.status')
if [ "$STATUS" = "COMPLETED" ]; then
printf '%s\n' "$RESULT" | jq .
break
fi
if [ "$STATUS" = "FAILED" ]; then
printf '%s\n' "$RESULT" | jq .
exit 1
fi
if [ "$(date +%s)" -ge "$DEADLINE" ]; then
echo "Still processing: query taskId=$TASK_ID later" >&2
exit 1
fi
sleep 5
doneEndpoints
/api/v1/jobs/createTaskCreate a new image or video generation task
/api/v1/jobs/queryTaskQuery task status and result
/api/v1/jobs/relationsQuery draft and final task relations
/api/v1/account/creditsCheck your credits balance
/api/v1/assets/uploadUpload an asset (image/video/audio) for review
/api/v1/assets/statusQuery asset review status
/api/v1/assets/reviewStart or retry platform material review
/api/v1/assets/listList your uploaded assets
/api/v1/upscale/createSubmit a standalone video upscale task (720p / 1080p / 2K / 4K)
/api/v1/upscale/queryPoll a standalone upscale task's status and result
Choose a Model (Video)
Choose a video model by workflow, native resolution, speed, and price; combine this table with the Pricing section to estimate cost.
| Model | T2V | I2V | First–Last | Multi-Ref | R2V | Native 1080p | Native 4K | Audio | 720p / 5s |
|---|---|---|---|---|---|---|---|---|---|
| sd2.5 | ✓ | ✓ | ✓ | ✓ | — | ✓ | upscale | ✓ | 300 credits |
| sd2 | ✓ | ✓ | ✓ | ✓ | — | ✓ | ✓ | ✓ | 200 credits |
| sd2-fast | ✓ | ✓ | ✓ | ✓ | — | upscale | upscale | ✓ | 110 credits |
| sd2-mini | ✓ | ✓ | ✓ | ✓ | — | upscale | upscale | ✓ | 45 credits |
| grok-imagine-video-1.5 | ✓ | ✓ | ✓ | ✓ | — | ✓ | — | ✓ | 250 credits |
| grok-imagine-video-1.5-lite | ✓ | ✓ | — | — | — | upscale | — | ✓ | 60 credits |
| wan3.0-video-prime | ✓ | ✓ | ✓ | ✓ | — | ✓ | — | ✓ | 225 credits |
| wan3.0-video | ✓ | ✓ | ✓ | ✓ | — | ✓ | — | ✓ | 160 credits |
T2V = Text to Video · I2V = Image to Video (first frame) · First–Last = first + last keyframe · Multi-Ref = reference images (Seedance and Wan also support video / audio) · R2V = 1–9 reference images with character markers
Seedance 2.0 / 2.0 Fast / 2.0 Mini / Seedance 2.5
Text to Video
Generate a video from a text prompt. No images required.
curl -X POST \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "sd2",
"inputs": {
"prompt": "A futuristic city with flying cars at night, neon lights reflecting on wet streets",
"duration": "5s",
"resolution": "1280x720"
}
}' \
https://seegen.ai/api/v1/jobs/createTask| Parameter | Type | Required | Description |
|---|---|---|---|
| prompt | string | Yes | Text description of the video to generate. Max 20000 chars. |
| duration | string | No | Video length: "4s" to "15s"; sd2.5 supports up to "30s" (default: "5s") |
| resolution | string | No | Aspect ratio via resolution. Options: auto (default), 720x720, 720x960, 960x720, 1280x720, 720x1280, 1280x540 |
| outputResolution | string | No | Output resolution tier for ordinary generation: "480p", "720p" (default), "1080p", "2k", or "4k". Native resolutions differ by model: Seedance 2.0 Pro: 480p/720p/1080p/4k; Seedance 2.0 Fast & Mini: 480p/720p; Seedance 2.5: 480p/720p/1080p. Higher tiers are automatically upscaled. For a draft, omit this field; output is fixed at 480p. |
| seed | int | No | Reproducibility seed: -1 or omit for random; 0–2147483647 for fixed. |
| generateAudio | boolean | No | Whether to synthesize a synced audio track. Default true; pass false for silent video. |
Image to Video
Animate a static image into a video. Provide one image URL as the starting frame.
curl -X POST \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "sd2",
"inputs": {
"urls": ["https://example.com/photo.jpg"],
"prompt": "The woman slowly turns her head and smiles",
"duration": "5s"
}
}' \
https://seegen.ai/api/v1/jobs/createTask| Parameter | Type | Required | Description |
|---|---|---|---|
| urls | string[] | Yes | Array with one image URL (the source frame). Supports both HTTP URLs and asset references (e.g. "asset://asset-20260326-abc123") |
| prompt | string | No | Text description of the desired motion |
| duration | string | No | Video length: "4s" to "15s"; sd2.5 supports up to "30s" (default: "5s") |
| outputResolution | string | No | Output resolution tier for ordinary generation: "480p", "720p" (default), "1080p", "2k", or "4k". Native resolutions differ by model: Seedance 2.0 Pro: 480p/720p/1080p/4k; Seedance 2.0 Fast & Mini: 480p/720p; Seedance 2.5: 480p/720p/1080p. Higher tiers are automatically upscaled. For a draft, omit this field; output is fixed at 480p. |
| seed | int | No | Reproducibility seed: -1 or omit for random; 0–2147483647 for fixed. |
| generateAudio | boolean | No | Whether to synthesize a synced audio track. Default true; pass false for silent video. |
First & Last Frame
Define the starting and ending frames, and the model generates the transition between them. Uses videoInputMode: "keyframe".
curl -X POST \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "sd2",
"inputs": {
"urls": [
"https://example.com/first-frame.jpg",
"https://example.com/last-frame.jpg"
],
"prompt": "Smooth camera transition from day to night",
"duration": "5s",
"videoInputMode": "keyframe"
}
}' \
https://seegen.ai/api/v1/jobs/createTask| Parameter | Type | Required | Description |
|---|---|---|---|
| urls | string[] | Yes | Array with exactly 2 image URLs: [first_frame, last_frame]. Supports both HTTP URLs and asset references (e.g. "asset://asset-20260326-abc123") |
| videoInputMode | string | Yes | Must be "keyframe" |
| prompt | string | No | Text description guiding the transition |
| duration | string | No | Video length: "4s" to "15s"; sd2.5 supports up to "30s" (default: "5s") |
| outputResolution | string | No | Output resolution tier for ordinary generation: "480p", "720p" (default), "1080p", "2k", or "4k". Native resolutions differ by model: Seedance 2.0 Pro: 480p/720p/1080p/4k; Seedance 2.0 Fast & Mini: 480p/720p; Seedance 2.5: 480p/720p/1080p. Higher tiers are automatically upscaled. For a draft, omit this field; output is fixed at 480p. |
| seed | int | No | Reproducibility seed: -1 or omit for random; 0–2147483647 for fixed. |
| generateAudio | boolean | No | Whether to synthesize a synced audio track. Default true; pass false for silent video. |
Multi-Reference
Use multiple reference images, videos, and audio files to guide generation. Uses videoInputMode: "reference". For sd2.5 this is the default reference sub-task; see Video Edit & Extend below to edit or continue an existing video instead.
curl -X POST \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "sd2",
"inputs": {
"urls": [
"https://example.com/ref1.jpg",
"https://example.com/ref2.jpg"
],
"videoUrls": ["asset://asset-motion-video"],
"audioUrls": ["https://example.com/audio.mp3"],
"prompt": "Character walks through a garden",
"duration": "5s",
"videoInputMode": "reference",
"resolution": "1280x720"
}
}' \
https://seegen.ai/api/v1/jobs/createTask| Parameter | Type | Required | Description |
|---|---|---|---|
| urls | string[] | No | Reference image URLs (max 9). Supports both HTTP URLs and asset references (e.g. "asset://asset-20260326-abc123") |
| videoUrls | string[] | No | Reference video asset:// URIs — upload via /api/v1/assets/upload first; external URLs are rejected. sd2: max 3 videos, each ≤15s. sd2.5: up to 10 videos, each 2–30s and ≤200MB, total reference duration ≤30s, 480p–4K inputs supported. |
| audioUrls | string[] | No | Reference audio inputs. sd2 / sd2-fast / sd2-mini: up to 3 audio files, each 2–15s, total ≤15s — audio cannot be the only reference on these models (add at least one image or video). sd2.5: up to 10 files, ≤15MB and 2–30s each, total ≤30s, and audio-only input is supported. |
| videoInputMode | string | Yes | Must be "reference" |
| prompt | string | No | Text description |
| duration | string | No | Video length: "4s" to "15s"; sd2.5 supports up to "30s" (default: "5s") |
| resolution | string | Yes | Required for reference mode. Options: 720x720, 720x960, 960x720, 1280x720, 720x1280, 1280x540 |
| outputResolution | string | No | Output resolution tier for ordinary generation: "480p", "720p" (default), "1080p", "2k", or "4k". Native resolutions differ by model: Seedance 2.0 Pro: 480p/720p/1080p/4k; Seedance 2.0 Fast & Mini: 480p/720p; Seedance 2.5: 480p/720p/1080p. Higher tiers are automatically upscaled. For a draft, omit this field; output is fixed at 480p. |
| seed | int | No | Reproducibility seed: -1 or omit for random; 0–2147483647 for fixed. |
| generateAudio | boolean | No | Whether to synthesize a synced audio track. Default true; pass false for silent video. |
Reference Constraints
- Max 9 images, 3 videos, 3 audio files
- Max 12 total files across all types
- Each video/audio must be ≤ 15 seconds
- Images must be at least 400px on the shortest side
- sd2.5: max 30 images, 10 videos, 10 audio files, and 50 total; video and audio totals are each ≤ 30 seconds
Video Edit & Extend
sd2.5 splits reference-based generation into three sub-tasks. Omit mode for ordinary reference generation, set mode: "edit" to edit an existing video, or mode: "extend" to continue one. Both require at least one video in videoUrls and always output the source video's aspect ratio.
Put the video you want to operate on first in videoUrls and refer to it as "Video 1" in your prompt. edit forces the output length to match that first (source) video, which must be 4–30s, so any duration you send is ignored; billing uses the source-video duration as the output duration, plus all reference videos as input. extend accepts 1–3 clips stitched in order, and the duration you request is the output length of this generation (unrelated to the source length) — billed like ordinary reference generation.
The 2.0-family models (sd2 / sd2-fast / sd2-mini) also accept mode: "edit" and mode: "extend": they infer the operation from your prompt (describe the edit or continuation explicitly), the aspect ratio follows the source video, and duration stays under your control with ordinary billing.
curl -X POST \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "sd2.5",
"inputs": {
"mode": "edit",
"videoInputMode": "reference",
"videoUrls": ["asset://asset-source-video"],
"urls": ["https://example.com/annotation-at-1.2s.png"],
"source_frame_timestamps_ms": [1200],
"prompt": "Replace the marked object with a red umbrella",
"outputResolution": "720p"
}
}' \
https://seegen.ai/api/v1/jobs/createTask| Parameter | Type | Required | Description |
|---|---|---|---|
| mode | string | No | "edit" or "extend". Omit for ordinary reference generation. |
| videoUrls | string[] | Yes | At least one video; the first is the source ("Video 1") — edit output length and billing follow it. Later videos are extra references (edit) or additional clips stitched in order (extend, max 3). |
| urls | string[] | No | Optional annotation/reference images. |
| source_frame_timestamps_ms | number[] | No | mode "edit" only. One non-negative source-video timestamp in milliseconds per image in urls. |
| outputResolution | string | No | Output resolution tier for ordinary generation: "480p", "720p" (default), "1080p", "2k", or "4k". Native resolutions differ by model: Seedance 2.0 Pro: 480p/720p/1080p/4k; Seedance 2.0 Fast & Mini: 480p/720p; Seedance 2.5: 480p/720p/1080p. Higher tiers are automatically upscaled. For a draft, omit this field; output is fixed at 480p. |
Seedance 2.5 Draft to Final
Submit an sd2.5 task with inputs.draft: true to generate a native 480P draft. Do not send outputResolution or upscaleResolution: the API fixes draft output at 480P and rejects either field if supplied, including outputResolution: "480p". This works for text, keyframe, and reference generation, but not edit or extend. Each draft and final task is billed separately.
# 1. Create a 480P draft. Save both taskId and orderId from the response.
curl -X POST https://seegen.ai/api/v1/jobs/createTask \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"sd2.5","inputs":{"prompt":"A blue cube slowly rotates on a white background","duration":"4s","draft":true}}'
# 2. Poll by taskId until status is COMPLETED, then review the draft output.
curl -H "Authorization: Bearer $API_KEY" \
"https://seegen.ai/api/v1/jobs/queryTask?taskId=YOUR_DRAFT_TASK_ID"
# 3. Within 7 days of draft creation, generate the 1080P final from its SeeGen orderId.
curl -X POST https://seegen.ai/api/v1/jobs/createTask \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"sd2.5","inputs":{"draftSourceOrderId":"YOUR_DRAFT_ORDER_ID"}}'Save the orderId returned by createTask (or retrieve it through queryTask), and wait until the draft task is COMPLETED. Submit a second sd2.5 task with inputs.draftSourceOrderId set to that orderId. The server verifies that the completed draft belongs to your account, reuses its original inputs and seed, and renders a native 1080P final. Other final inputs are ignored. A matching composition is expected, but pixel-identical output is not guaranteed.
Important rules
- Which ID? Use the SeeGen orderId returned by createTask or queryTask, not the taskId. SeeGen looks up the draft's gateway task ID internally; do not send a draft_task.id field to this API.
- Why are the fields different from ARK? In the provider API, resolution selects output quality and content[].draft_task.id identifies the draft. In SeeGen, resolution is an aspect-ratio preset and outputResolution selects quality for ordinary tasks. For a draft, omit outputResolution; for the final, send draftSourceOrderId. Do not copy a provider request into this API unchanged.
- When? The draft must be COMPLETED and belong to your account. A draft can be used for final rendering for 7 days from its creation. After that, create a new draft.
- What is reused? The final automatically uses the draft's prompt, reference media, duration, aspect ratio, seed, audio setting, and task type. Send only draftSourceOrderId in final inputs; other generation inputs are ignored. You may set a new top-level callBackUrl for the final task.
- How is it billed? Draft and final are separate paid tasks: the draft uses the 480P rate, and the final uses the native 1080P rate. If the draft used input videos, final pricing uses those original input-video durations; the draft video itself is not counted as an additional input video.
| Parameter | Type | Required | Description |
|---|---|---|---|
| draft | boolean | No | sd2.5 only. Set true for a native 480P draft. Do not send outputResolution or upscaleResolution; the API chooses 480P. Edit, extend, and upscale are unavailable. |
| draftSourceOrderId | string | No | The orderId of your own completed sd2.5 draft, returned by createTask or queryTask. Generates a native 1080P final from that draft. |
Query draft and final relations
GET /api/v1/jobs/relations with an orderId. For a draft, the response lists all finals created from it. For a final, it returns the sourceDraft. Only orders belonging to the API key owner are visible.
# A draft orderId returns its finals, oldest first (including queued and failed tasks).
curl -H "Authorization: Bearer $API_KEY" \
"https://seegen.ai/api/v1/jobs/relations?orderId=YOUR_DRAFT_ORDER_ID&limit=20"
# A final orderId returns its source draft.
curl -H "Authorization: Bearer $API_KEY" \
"https://seegen.ai/api/v1/jobs/relations?orderId=YOUR_FINAL_ORDER_ID"The response contains kind (draft or final), sourceDraft, finals, totalCount, and nextCursor. Each related task includes orderId, taskId, status, createTime, and a URL when completed. For drafts, pass nextCursor as cursor to load more finals (limit: 1–50). Deleted or archived orders are hidden.
{
"orderId": "YOUR_DRAFT_ORDER_ID",
"kind": "draft",
"sourceDraft": null,
"finals": [
{
"orderId": "FINAL_ORDER_ID",
"taskId": "FINAL_TASK_ID",
"status": "COMPLETED",
"createTime": 1790192800000,
"url": "https://example.com/final.mp4"
}
],
"totalCount": 1,
"nextCursor": null
}Seedance Parameters Reference
Complete reference of all inputs parameters for the sd2 / sd2-fast / sd2-mini / sd2.5 models.
| Parameter | Type | Required | Description |
|---|---|---|---|
| prompt | string | No | Text description (required for text-to-video, optional for other modes). Max 20000 chars. |
| urls | string[] | No | Image URLs. Supports both HTTP URLs and asset references (e.g. "asset://asset-20260326-abc123"). Maps to uploadedUrls internally. |
| videoUrls | string[] | No | Video reference asset:// URIs (reference mode only). Must be uploaded via /api/v1/assets/upload first — external URLs are rejected. |
| audioUrls | string[] | No | Audio reference URLs (reference mode only). Audio-only input is supported on sd2.5; sd2 / sd2-fast / sd2-mini require at least one image or video alongside audio. |
| duration | string | No | "4s" to "15s" normally; sd2.5 supports up to "30s". Default: "5s" |
| resolution | string | No | Aspect ratio: auto (default) | 720x720 | 720x960 | 960x720 | 1280x720 | 720x1280 | 1280x540 |
| outputResolution | string | No | Output resolution tier for ordinary generation: "480p", "720p" (default), "1080p", "2k", or "4k". Native resolutions differ by model: Seedance 2.0 Pro: 480p/720p/1080p/4k; Seedance 2.0 Fast & Mini: 480p/720p; Seedance 2.5: 480p/720p/1080p. Higher tiers are automatically upscaled. For a draft, omit this field; output is fixed at 480p. |
| videoInputMode | string | No | "keyframe" (default) or "reference" |
| mode | string | No | Reference-mode sub-task (all Seedance models): omit for ordinary reference generation, "edit" to edit the first video in videoUrls, "extend" to continue 1-3 clips. See Video Edit & Extend. |
| source_frame_timestamps_ms | number[] | No | sd2.5 Video Edit only: one non-negative millisecond timestamp per annotation image. |
| seed | int | No | Random seed for reproducibility. -1 or omit for server-random. Same seed + same inputs yields a closely-matched output (not bit-identical due to GPU non-determinism). Range: -1 to 2147483647. |
| draft | boolean | No | sd2.5 only. Set true to generate a 480P draft; see Draft to Final. |
| draftSourceOrderId | string | No | sd2.5 only. The orderId of a completed draft owned by this API account; generates a native 1080P final. |
| generateAudio | boolean | No | Whether to synthesize an audio track (speech, SFX, background music) synced to the video. Default true. Set false to produce a silent video — slightly faster, useful if you plan to dub separately. |
| bitrateMode | string | No | Output bitrate tier at the same resolution: "standard" (default) or "high". "high" preserves more detail and reduces banding / blocking at ~3-5× the file size — it does not change resolution or price. |
| upscaleResolution | string | No | (Deprecated) Legacy split field, still accepted for backward compatibility. New integrations should use outputResolution, which now takes "2k" / "4k" directly. If both are sent, upscaleResolution takes precedence — except on models with native 1080p (Seedance2 Pro / Seedance 2.5), where upscaleResolution:"1080p" resolves to native 1080p (billed at the native rate). |
Top-level request fields: model (required), inputs (required), callBackUrl (optional webhook URL).
Seedance Assets
Seedance assets are images, videos, and audio files that go through the ByteDance Volcano review process before they can be used in Seedance video generation tasks. Upload an asset, wait for it to become ACTIVE, then use its asset:// URL in your Seedance task.
Note: Real human image and video assets require official review, usually completed within seconds. Once approved, they can be used directly as references. Without review, generation may fail.
Platform Content Precheck
When material review is enabled for your account, uploads are also reviewed by SeeGen across all generation models. Upload, status and list responses include a separate contentReview object. It does not replace the original supplier status.
Only ALLOW or DISABLED permits use under the platform policy; the original model and supplier requirements still apply. PROCESSING means wait and poll asset status. PENDING means request a review. BLOCK or NEEDS_REPHRASE means replace the material. SERVICE_UNAVAILABLE means the review could not finish and can be retried. Generation rejected by this precheck does not charge credits.
To review an older upload or retry a temporary review failure, send its numeric assetId to POST /api/v1/assets/review. The endpoint returns assetId and contentReview; it does not retry or change supplier review.
{ "assetId": 123, "contentReview": { "status": "PROCESSING", "reviewId": "review-id" } }Upload Asset
Two ways to upload: send a local file directly (multipart/form-data), or submit a publicly accessible HTTPS URL. Either way the asset is processed and reviewed automatically.
Method A — direct file upload (multipart/form-data)
Send a local file with no image host required. The media type is detected from the file's bytes (the filename extension is not trusted). Allowed: images (jpg/png/webp/gif/bmp/tiff/heic), videos (mp4/mov), audio (wav/mp3). Max 50MB per file (image ≤30MB, video ≤50MB, audio ≤15MB).
curl -X POST \
-H "Authorization: Bearer $API_KEY" \
-F "file=@/path/to/photo.jpg" \
-F "name=my-photo" \
https://seegen.ai/api/v1/assets/upload| Parameter | Type | Required | Description |
|---|---|---|---|
| file | file | Yes | The local file (multipart form field). Media type is detected from content. |
| name | string | No | Asset name (max 64 characters) |
Method B — by URL (application/json)
If the file is already hosted at a public HTTPS URL.
curl -X POST \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/photo.jpg",
"type": "IMAGE",
"name": "my-photo"
}' \
https://seegen.ai/api/v1/assets/upload| Parameter | Type | Required | Description |
|---|---|---|---|
| url | string | Yes | Publicly accessible HTTPS URL of the file to upload |
| type | string | Yes | "IMAGE", "AUDIO", or "VIDEO" |
| name | string | No | Asset name (max 64 characters) |
Upload Response
{
"assetId": 123,
"volcAssetId": "asset-20260326-abc123",
"type": "IMAGE",
"status": "PROCESSING",
"failReason": null,
"url": "https://example.com/photo.jpg",
"name": "my-photo",
"createdAt": 1711234567890
}Query Asset Status
Poll an asset's review status. When status is PROCESSING, the endpoint automatically checks for updates from the review system.
# Query by asset ID (numeric)
curl -H "Authorization: Bearer $API_KEY" \
"https://seegen.ai/api/v1/assets/status?assetId=123"
# Query by volcAssetId (string)
curl -H "Authorization: Bearer $API_KEY" \
"https://seegen.ai/api/v1/assets/status?assetId=asset-20260326-abc123"Asset Status Values
PROCESSING— under review, not yet usableACTIVE— supplier review passed; also check platform contentReview before useFAILED— review failed, check failReason
List Assets
List your uploaded assets with optional filtering by type and status. Supports cursor-based pagination.
# List all assets
curl -H "Authorization: Bearer $API_KEY" \
"https://seegen.ai/api/v1/assets/list"
# Filter by type and status
curl -H "Authorization: Bearer $API_KEY" \
"https://seegen.ai/api/v1/assets/list?type=IMAGE&status=ACTIVE&limit=10"
# Paginate with cursor
curl -H "Authorization: Bearer $API_KEY" \
"https://seegen.ai/api/v1/assets/list?cursor=100&limit=20"| Parameter | Type | Required | Description |
|---|---|---|---|
| type | string | No | Filter by type: "IMAGE", "AUDIO", or "VIDEO" |
| status | string | No | Filter by status: "NONE", "PROCESSING", "ACTIVE", or "FAILED" |
| cursor | number | No | Cursor for pagination (use nextCursor from previous response) |
| limit | number | No | Items per page, 1-50 (default: 20) |
List Response
{
"items": [
{
"assetId": 123,
"volcAssetId": "asset-20260326-abc123",
"type": "IMAGE",
"status": "ACTIVE",
"failReason": null,
"url": "https://example.com/photo.jpg",
"name": "my-photo",
"width": 1920,
"height": 1080,
"size": 245000,
"duration": null,
"createdAt": 1711234567890
}
],
"nextCursor": 122
}Using Assets in Tasks
Once an asset is ACTIVE, use its volcAssetId with the asset:// protocol in your task's URLs:
{
"model": "sd2",
"inputs": {
"urls": ["asset://asset-20260326-abc123"],
"prompt": "The person slowly looks up and smiles",
"duration": "5s"
}
}Grok Imagine Video 1.5 / Lite
Use grok-imagine-video-1.5 or grok-imagine-video-1.5-lite with createTask and queryTask. Both support text-to-video and single-image-to-video with synced audio. First/last-frame and multi-reference generation are available only with 1.5.
Grok Imagine Video 1.5: Output costs 30 / 50 / 90 credits per second at 480p / 720p / 1080p, plus 5 credits per input image. Audio does not change the price. A 5-second 480p video with one input image costs 155 credits.
Grok Imagine Video 1.5 Lite: Output costs 8 / 12 / 50 credits per second at 480p / 720p / 1080p, plus 5 credits per input image. Audio does not change the price. A 5-second 480p video with one input image costs 45 credits.
Set SEEGEN_API_KEY to your API key. Replace example.com image URLs with your own publicly accessible HTTP(S) images. After creation, save taskId and use queryTask or Webhook Callback to receive the final result. Creation returns an asynchronous task, not a completed result.
Text to Video
curl -X POST https://seegen.ai/api/v1/jobs/createTask \
-H "Authorization: Bearer $SEEGEN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "grok-imagine-video-1.5",
"inputs": {
"prompt": "A blue toy cube slowly rotates on a white table",
"duration": "5s",
"outputResolution": "480p",
"ratio": "16:9",
"generateAudio": true
}
}'Image to Video
curl -X POST https://seegen.ai/api/v1/jobs/createTask \
-H "Authorization: Bearer $SEEGEN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "grok-imagine-video-1.5",
"inputs": {
"prompt": "A blue toy cube slowly rotates on a white table",
"duration": "5s",
"outputResolution": "480p",
"generateAudio": true,
"urls": [
"https://example.com/first.png"
]
}
}'First & Last Frame1.5 only
curl -X POST https://seegen.ai/api/v1/jobs/createTask \
-H "Authorization: Bearer $SEEGEN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "grok-imagine-video-1.5",
"inputs": {
"prompt": "A blue toy cube slowly rotates on a white table",
"duration": "5s",
"outputResolution": "480p",
"ratio": "16:9",
"generateAudio": true,
"urls": [
"https://example.com/first.png",
"https://example.com/last.png"
]
}
}'Multi-Reference1.5 only
curl -X POST https://seegen.ai/api/v1/jobs/createTask \
-H "Authorization: Bearer $SEEGEN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "grok-imagine-video-1.5",
"inputs": {
"prompt": "A blue toy cube slowly rotates on a white table",
"duration": "5s",
"outputResolution": "480p",
"ratio": "16:9",
"generateAudio": true,
"urls": [
"https://example.com/reference.png"
],
"videoInputMode": "reference"
}
}'Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| prompt | string | Conditional | prompt: required for text-to-video; optional when supplying images. |
| duration | string | integer | No | duration: an integer from 1 to 15 seconds, for example "5s" (default). outputResolution: 480p (default), 720p, or 1080p. |
| outputResolution | string | No | 480p (default), 720p, or 1080p. 1.5 supports native 1080p for text or single-image input; first/last-frame and multi-reference support 480p and 720p. Lite 1080p is upscaled from 720p. |
| ratio | string | No | ratio: 16:9 (default), 9:16, 1:1, 4:3, 3:4, 3:2, 2:3, 21:9, or 5:2. Single-image-to-video follows the input image ratio. |
| urls | string[] | No | Public HTTP(S) image URLs. Omit for text-to-video; one image selects single-image-to-video. Lite accepts at most one image. With 1.5, two images select first/last-frame; set videoInputMode: "reference" for 1–14 reference images. |
| videoInputMode | "keyframe" | "reference" | No | 1.5 only: keyframe (default) or reference. Omit for Lite. |
| generateAudio | boolean | No | generateAudio: boolean, defaults to true. Set to false for silent output. |
Wan 3.0 Video & Wan 3.0 Video Prime
Wan 3.0 supports text-to-video, first-frame image-to-video, first-and-last-frame interpolation, mixed image/video/audio references, video editing, and video extension. wan3.0-video-prime accepts the same inputs as wan3.0-video and is optimized for faster generation.
Both aliases use SeeGen's asynchronous API: POST /api/v1/jobs/createTask returns a taskId; poll GET /api/v1/jobs/queryTask?taskId=... or provide callBackUrl for the terminal result.
Supported output: fixed durations of 2–30 seconds at native 480p, 720p, or 1080p, without a watermark. Automatic duration (duration: -1), 2K/4K output, and a custom watermark setting are not supported. Upload reference media first, then use the returned HTTPS URL.
Text-to-Video
curl -X POST \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "wan3.0-video-prime",
"inputs": {
"prompt": "A red paper boat glides across a calm pond at sunrise, locked camera, no text.",
"duration": "5s",
"outputResolution": "720p",
"ratio": "16:9",
"generateAudio": true,
"promptExtend": true,
"seed": 12345
}
}' \
https://seegen.ai/api/v1/jobs/createTaskImage-to-Video (First Frame)
Upload Wan media with multipart POST /api/v1/assets/upload?model=wan3.0-video (or the Prime alias), then use the returned owned HTTPS url in generation inputs. The returned assetId is only the SeeGen material record ID; do not send it in generation inputs.
curl -X POST \
-H "Authorization: Bearer $API_KEY" \
-F "file=@/path/to/first-frame.webp" \
"https://seegen.ai/api/v1/assets/upload?model=wan3.0-video"{
"assetId": 123,
"type": "IMAGE",
"status": "ACTIVE",
"url": "https://static.seegen.ai/materials/api/.../first-frame.webp"
}curl -X POST \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "wan3.0-video",
"inputs": {
"urls": ["https://static.seegen.ai/materials/api/.../first-frame.webp"],
"videoInputMode": "keyframe",
"prompt": "The subject looks toward the camera as morning mist drifts past.",
"duration": "5s",
"outputResolution": "1080p",
"generateAudio": true
}
}' \
https://seegen.ai/api/v1/jobs/createTaskFirst & Last Frame
curl -X POST \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "wan3.0-video",
"inputs": {
"urls": [
"https://static.seegen.ai/materials/api/.../first-frame.webp",
"https://static.seegen.ai/materials/api/.../last-frame.webp"
],
"videoInputMode": "keyframe",
"prompt": "A smooth continuous transition from sunrise to night.",
"duration": "8s",
"outputResolution": "720p"
}
}' \
https://seegen.ai/api/v1/jobs/createTaskMulti-Reference (Images, Videos & Audio)
Set videoInputMode: "reference", then send at least one supported media input through urls, videoUrls, or audioUrls; the prompt is optional. Refer to media by order as Image1, Image2, Video1, or Audio1. Upload each reference with the Wan multipart endpoint first, then use its returned owned HTTPS URL.
curl -X POST \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "wan3.0-video-prime",
"inputs": {
"videoInputMode": "reference",
"urls": ["https://static.seegen.ai/materials/api/.../reference-image.webp"],
"videoUrls": ["https://static.seegen.ai/materials/api/.../source-video.mp4"],
"audioUrls": ["https://static.seegen.ai/materials/api/.../reference-audio.mp3"],
"prompt": "Use Image1 for identity, Video1 for motion, and Audio1 for timing.",
"duration": "10s",
"outputResolution": "720p",
"ratio": "16:9",
"generateAudio": true,
"promptExtend": true
}
}' \
https://seegen.ai/api/v1/jobs/createTaskVideo Edit
Upload the source video first, then use mode: "edit" with videoInputMode: "reference". In the required prompt, describe how to edit Video1, the first video in videoUrls. The aspect ratio is Auto; choose the output duration. The reference-media limits and pricing below apply to both editing and extension.
curl -X POST \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "wan3.0-video",
"inputs": {
"mode": "edit",
"videoInputMode": "reference",
"videoUrls": ["https://static.seegen.ai/materials/api/.../source-video.mp4"],
"prompt": "Transform Video1 into clay animation, keeping the characters and camera movement.",
"duration": "5s",
"outputResolution": "720p",
"ratio": "adaptive"
}
}' \
https://seegen.ai/api/v1/jobs/createTaskVideo Extend
Use mode: "extend" with a source video and an instruction prompt, such as "Extend Video1 forward", followed by what happens next. Set ratio: "adaptive". The selected duration is the generated output length, not the source length plus the extension. File-to-video and webpage-to-video are not supported.
curl -X POST \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "wan3.0-video-prime",
"inputs": {
"mode": "extend",
"videoInputMode": "reference",
"videoUrls": ["https://static.seegen.ai/materials/api/.../source-video.mp4"],
"prompt": "Extend Video1 forward, continuing the motion of the character and keeping the scene consistent.",
"duration": "5s",
"outputResolution": "720p",
"ratio": "adaptive"
}
}' \
https://seegen.ai/api/v1/jobs/createTaskWan 3.0 Parameters Reference
Both Wan 3.0 models accept the same inputs fields. Choose an output duration from 2 to 30 seconds in whole-second increments.
| Parameter | Type | Required | Description |
|---|---|---|---|
| prompt | string | No | Video description or instruction. Max 20,000 characters. Required for text-to-video, video editing, and video extension; optional for image-to-video, first/last-frame, and multi-reference. Editing and extension also require a video. Use Image1 / Video1 / Audio1 markers for ordered references. |
| mode | string | No | Omit or use "normal" for standard generation. Use "edit" or "extend" with a video and an instruction prompt. Both use reference mode, Auto aspect ratio, and a fixed output duration of 2–30 seconds. |
| urls | string[] | No | Owned HTTPS image URLs returned by the Wan upload endpoint. Omit for text-to-video; pass exactly 1 first frame, exactly 2 first/last frames, or up to 10 reference images in reference mode. Direct unowned external URLs and Seedance asset-protocol references are rejected. |
| videoUrls | string[] | No | Up to 5 owned HTTPS reference-video URLs returned by the Wan upload endpoint. Each clip must be 1–15s, all reference videos together must be at most 15s, and reference-video duration plus output duration must be at most 30s. Direct unowned external URLs and Seedance asset-protocol references are rejected. |
| audioUrls | string[] | No | Up to 5 owned HTTPS reference-audio URLs returned by the Wan upload endpoint. WAV or MP3; each clip must be 1–15s and all reference audio together must be at most 15s. Direct unowned external URLs and Seedance asset-protocol references are rejected. |
| videoInputMode | string | No | Omit for text-to-video; use "keyframe" for one first frame or two first/last frames; use "reference" for mixed image/video/audio references. |
| duration | string | No | Integer-second string from "2s" to "30s". Default: "5s". |
| outputResolution | string | No | Native "480p", "720p" (default), or "1080p". 2K/4K output is not supported. |
| ratio | string | No | "auto" or "adaptive" (both select adaptive framing), "16:9", "9:16", "1:1", "4:3", or "3:4". Used for text-to-video and multi-reference. Editing and extension always use Auto; image-to-video and first/last-frame output follows the keyframe images. |
| generateAudio | boolean | No | Generate synchronized speech, sound effects, and music. Default true. Set false for silent output; pricing is unchanged. |
| promptExtend | boolean | No | Let the model enrich the prompt before generation. Default true. |
| seed | int | No | 0–2147483647. Use the same seed and inputs for a closely matched retry. |
Reference Media Requirements
- Images: up to 10; JPEG/JPG/PNG (no transparency)/BMP/WebP; ≤20MB each; each side 240–8000px; aspect ratio up to 8:1
- Videos: up to 5 MP4/MOV clips; ≤100MB each; 1–15s each, ≤15s total input, and input + requested output ≤30s; each side 240–4096px; aspect ratio up to 8:1
- Audio: up to 5 uploaded WAV/MP3 HTTPS URLs returned by the Wan upload endpoint; ≤15MB each; 1–15s each and ≤15s total
- First/last-frame mode cannot be mixed with reference image, video, or audio arrays
Choose a Model (Image)
Image models take a prompt (and optionally reference images) and return one image per task. Each request is billed per image using the selected model's tier (or a flat rate for Seedream Lite). Failed tasks are refunded automatically. There is no batch parameter — to generate multiple variations, call createTask once per image.
| Model | T2I | I2I (Edit) | Multi-Ref | Max Resolution | 2k / medium |
|---|---|---|---|---|---|
| gpt-image-2.5-flare | ✓ | ✓ | up to 10 | 4k | see Pricing |
| gpt-image-2.5-sunburst | ✓ | ✓ | up to 10 | 4k | see Pricing |
| gpt-image-2 | ✓ | ✓ | up to 10 | 4k | see Pricing |
| nano-banana-2.1 | ✓ | ✓ | up to 14 | 4k | see Pricing |
| nano-banana-2 | ✓ | ✓ | up to 10 | 4k | see Pricing |
| nano-banana-pro | ✓ | ✓ | up to 10 | 4k | see Pricing |
| seedream-v5.0-lite | ✓ | ✓ | up to 10 | 4k | flat rate |
| seedream-v5.0-pro | ✓ | ✓ | up to 10 | 2k | see Pricing |
| qwen-image-2.1-pro | ✓ | ✓ | up to 10 | 2k | flat rate |
| qwen-image-2.1-turbo | ✓ | ✓ | up to 10 | 2k | flat rate |
GPT Image 2.5 Flare / Sunburst
GPT Image 2.5 Flare focuses on fast image generation and editing. Sunburst focuses on detailed image generation and precise edits. Both work with text prompts and reference images.
Available in the workspace, Playground, and API. Both models accept the parameters below: medium/high/xhigh/max quality, 1K/2K/4K presets, and PNG/JPEG/WebP output. Actual dimensions may differ from the preset. JPEG and WebP are converted from the generated PNG without resizing. Each API task generates one image.
Text-to-Image
curl -X POST \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2.5-flare",
"inputs": {
"prompt": "A neon-lit cyberpunk alley at midnight, photoreal",
"quality": "medium",
"resolution": "2k",
"aspectRatio": "16:9"
}
}' \
https://seegen.ai/api/v1/jobs/createTaskImage-to-Image (Editing)
Pass 1–10 reference images via urls. The model will use them as visual context for the edit described in prompt.
curl -X POST \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2.5-sunburst",
"inputs": {
"urls": ["https://example.com/portrait.jpg"],
"prompt": "Restyle as oil painting",
"quality": "medium",
"resolution": "1k",
"aspectRatio": "1:1"
}
}' \
https://seegen.ai/api/v1/jobs/createTaskGPT Image 2.5 Parameters Reference
Complete reference of all inputs parameters for the gpt-image-2.5-flare model.
| Parameter | Type | Required | Description |
|---|---|---|---|
| prompt | string | Yes | Text description of the image to generate, or the edit to apply when urls is provided. |
| urls | string[] | No | Reference image URLs for image-to-image (edit) mode (1–10 images). Omit for text-to-image. Public HTTPS URLs accepted. |
| quality | string | No | "medium" / "high" / "xhigh" / "max". Default: "medium". Credits scale by tier (see Pricing). |
| resolution | string | No | "1k" / "2k" / "4k". Default: "2k". Credits scale by tier (see Pricing). |
| aspectRatio | string | No | "1:1" / "16:9" / "9:16" / "4:3" / "3:4". Default: "1:1". |
| outputFormat | string | No | "png" / "jpeg" / "webp". Default: "png". |
Input Image Requirements (image-to-image mode)
- Up to 10 reference images per task
- Max file size 50 MB per image
- Shortest side ≥ 256px
- Aspect ratio between 1:3 and 3:1
- Formats: JPEG, JPG, PNG, WEBP
Credits per image scale by resolution and quality — see the Pricing section for the full table.
GPT Image 2
OpenAI's GPT Image 2 model for high-quality text-to-image and image-to-image editing. One workflow handles both modes — pass urls to switch into edit mode automatically. Output is delivered via R2 in the format you request (PNG / JPEG / WEBP). Model name: gpt-image-2.
Text-to-Image
curl -X POST \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"inputs": {
"prompt": "A neon-lit cyberpunk alley at midnight, photoreal",
"quality": "medium",
"resolution": "2k",
"aspectRatio": "16:9"
}
}' \
https://seegen.ai/api/v1/jobs/createTaskImage-to-Image (Editing)
Pass 1–10 reference images via urls. The model will use them as visual context for the edit described in prompt.
curl -X POST \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"inputs": {
"urls": ["https://example.com/portrait.jpg"],
"prompt": "Restyle as oil painting",
"quality": "medium",
"resolution": "1k",
"aspectRatio": "1:1"
}
}' \
https://seegen.ai/api/v1/jobs/createTaskGPT Image 2 Parameters Reference
Complete reference of all inputs parameters for the gpt-image-2 model.
| Parameter | Type | Required | Description |
|---|---|---|---|
| prompt | string | Yes | Text description of the image to generate, or the edit to apply when urls is provided. |
| urls | string[] | No | Reference image URLs for image-to-image (edit) mode (1–10 images). Omit for text-to-image. Public HTTPS URLs accepted. |
| quality | string | No | "medium" / "high". Default: "medium". Credits scale by tier (see Pricing). |
| resolution | string | No | "1k" / "2k" / "4k". Default: "2k". Credits scale by tier (see Pricing). |
| aspectRatio | string | No | "1:1" / "16:9" / "9:16" / "4:3" / "3:4". Default: "1:1". |
| outputFormat | string | No | "png" / "jpeg" / "webp". Default: "png". |
Input Image Requirements (image-to-image mode)
- Up to 10 reference images per task
- Max file size 50 MB per image
- Shortest side ≥ 256px
- Aspect ratio between 1:3 and 3:1
- Formats: JPEG, JPG, PNG, WEBP
Credits per image scale by resolution and quality — see the Pricing section for the full table.
Nano Banana 2.1 / 2
Nano Banana 2.1 and 2 share text-to-image and image editing, 1K / 2K / 4K output, and 10 aspect ratios. Default output: 2K, square (1:1). Select a version to update the model ID, examples, and reference image limits below. Existing nano-banana-2 requests remain supported.
Version 2.1: use model nano-banana-2.1 with up to 14 reference images. Version 2.1 supports 14 references; version 2 supports 10.
Each API task returns one image and is billed by resolution.
Try Nano Banana 2.1 in the API PlaygroundText-to-Image
curl -X POST \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "nano-banana-2.1",
"inputs": {
"prompt": "A neon-lit cyberpunk alley at midnight, photoreal",
"resolution": "2k",
"aspectRatio": "16:9"
}
}' \
https://seegen.ai/api/v1/jobs/createTaskImage-to-Image (Editing)
Pass 1–14 reference images via urls. Describe the changes and the details to preserve in prompt.
curl -X POST \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "nano-banana-2.1",
"inputs": {
"urls": ["https://example.com/portrait.jpg"],
"prompt": "Restyle as oil painting",
"resolution": "2k",
"aspectRatio": "1:1"
}
}' \
https://seegen.ai/api/v1/jobs/createTaskNano Banana 2.1 Parameters Reference
Complete reference of all inputs parameters for the nano-banana-2.1 model.
| Parameter | Type | Required | Description |
|---|---|---|---|
| prompt | string | Yes | Text description of the image to generate, or the edit to apply when urls is provided. |
| urls | string[] | No | 1–14 public HTTP(S) reference image URLs for editing. Omit for text-to-image. |
| resolution | string | No | "1k" / "2k" / "4k". Default: "2k". Credits scale by tier (see Pricing). |
| aspectRatio | string | No | "1:1" / "16:9" / "9:16" / "4:3" / "3:4" / "3:2" / "2:3" / "4:5" / "5:4" / "21:9". Default: "1:1". |
Input Image Requirements (image-to-image mode)
- Up to 14 reference images per task
- Max file size 50 MB per image
- Shortest side ≥ 256px
- Aspect ratio between 1:3 and 3:1
- Formats: JPEG, JPG, PNG, WEBP
Credits per image scale by resolution — see the Pricing section for the full table.
Nano Banana Pro
Nano Banana Pro is a high-fidelity image model with broader aspect-ratio coverage than gpt-image-2 — adds portrait/landscape presets (3:2, 2:3, 4:5, 5:4) and cinematic 21:9. One workflow handles both modes — pass urls to switch into edit mode automatically. Model name: nano-banana-pro.
Text-to-Image
curl -X POST \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "nano-banana-pro",
"inputs": {
"prompt": "A neon-lit cyberpunk alley at midnight, photoreal",
"resolution": "2k",
"aspectRatio": "16:9"
}
}' \
https://seegen.ai/api/v1/jobs/createTaskImage-to-Image (Editing)
Pass 1–10 reference images via urls. The model will use them as visual context for the edit described in prompt.
curl -X POST \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "nano-banana-pro",
"inputs": {
"urls": ["https://example.com/portrait.jpg"],
"prompt": "Restyle as oil painting",
"resolution": "2k",
"aspectRatio": "1:1"
}
}' \
https://seegen.ai/api/v1/jobs/createTaskNano Banana Pro Parameters Reference
Complete reference of all inputs parameters for the nano-banana-pro model.
| Parameter | Type | Required | Description |
|---|---|---|---|
| prompt | string | Yes | Text description of the image to generate, or the edit to apply when urls is provided. |
| urls | string[] | No | Reference image URLs for image-to-image (edit) mode (1–10 images). Omit for text-to-image. Public HTTPS URLs accepted. |
| resolution | string | No | "1k" / "2k" / "4k". Default: "2k". Credits scale by tier (see Pricing). |
| aspectRatio | string | No | "1:1" / "16:9" / "9:16" / "4:3" / "3:4" / "3:2" / "2:3" / "4:5" / "5:4" / "21:9". Default: "1:1". |
Input Image Requirements (image-to-image mode)
- Up to 10 reference images per task
- Max file size 50 MB per image
- Shortest side ≥ 256px
- Aspect ratio between 1:3 and 3:1
- Formats: JPEG, JPG, PNG, WEBP
Credits per image scale by resolution — see the Pricing section for the full table.
Seedream 5.0 Lite
Fast text-to-image and image-to-image generation at 2K or 4K with 15 aspect ratios. Model name: seedream-v5.0-lite.
Text-to-Image
curl -X POST \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "seedream-v5.0-lite",
"inputs": {
"prompt": "A cinematic product photograph, soft studio light",
"resolution": "2k",
"aspectRatio": "1:1"
}
}' \
https://seegen.ai/api/v1/jobs/createTaskImage-to-Image (Editing)
curl -X POST \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "seedream-v5.0-lite",
"inputs": {
"prompt": "Restyle the references as a premium fashion campaign",
"urls": ["https://example.com/reference.png"],
"resolution": "4k",
"aspectRatio": "3:4"
}
}' \
https://seegen.ai/api/v1/jobs/createTaskSeedream 5.0 Lite Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| prompt | string | Yes | Image description or edit instruction. |
| urls | string[] | No | 1–10 public HTTPS reference image URLs. Omit for text-to-image. |
| resolution | string | No | "2k" or "4k". Default: "2k". |
| aspectRatio | string | No | "1:1", "1:2", "2:1", "1:3", "3:1", "2:3", "3:2", "3:4", "4:3", "4:5", "5:4", "9:16", "16:9", "9:21", or "21:9". |
Seedream 5.0 Pro
High-fidelity generation and editing at 1K or 2K. Model name: seedream-v5.0-pro.
Text-to-Image
curl -X POST \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "seedream-v5.0-pro",
"inputs": {
"prompt": "Editorial portrait with dramatic rim lighting",
"resolution": "2k",
"aspectRatio": "3:4"
}
}' \
https://seegen.ai/api/v1/jobs/createTaskImage-to-Image (Editing)
curl -X POST \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "seedream-v5.0-pro",
"inputs": {
"prompt": "Turn the reference into a cinematic poster",
"urls": ["https://example.com/reference.png"],
"resolution": "2k",
"aspectRatio": "1:2"
}
}' \
https://seegen.ai/api/v1/jobs/createTaskSeedream 5.0 Pro Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| prompt | string | Yes | Image description or edit instruction. |
| urls | string[] | No | 1–10 public HTTPS reference image URLs. Omit for text-to-image. |
| resolution | string | No | "1k" or "2k". Default: "1k". 4k is not supported. |
| aspectRatio | string | No | "1:1", "1:2", "2:1", "1:3", "3:1", "2:3", "3:2", "3:4", "4:3", "4:5", "5:4", "9:16", "16:9", "9:21", or "21:9". |
Qwen Image 2.1 Pro / Turbo
Use qwen-image-2.1-pro or qwen-image-2.1-turbo. Both support text-to-image and image editing through the same endpoint, with one output image per task.
Pro: 13 credits per image. Turbo: 5 credits per image. 1K and 2K cost the same. Prices include any active image promotion.
Set SEEGEN_API_KEY to your API key. Replace example.com image URLs with your own publicly accessible HTTP(S) images. After creation, save taskId and use queryTask or Webhook Callback to receive the final result. Creation returns an asynchronous task, not a completed result.
Text to Image
curl -X POST https://seegen.ai/api/v1/jobs/createTask \
-H "Authorization: Bearer $SEEGEN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen-image-2.1-pro",
"inputs": {
"prompt": "A blue glass cube on a white table",
"resolution": "1k",
"aspectRatio": "1:1"
}
}'Image to Image
curl -X POST https://seegen.ai/api/v1/jobs/createTask \
-H "Authorization: Bearer $SEEGEN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen-image-2.1-pro",
"inputs": {
"prompt": "Restyle the reference image as a watercolor painting",
"resolution": "1k",
"aspectRatio": "1:1",
"urls": [
"https://example.com/reference.png"
]
}
}'Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| prompt | string | Yes | prompt: required. Describe the image or the changes to your reference images. |
| resolution | "1k" | "2k" | No | resolution: 1k (default) or 2k. aspectRatio: 1:1 (default), 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 4:5, 5:4, or 21:9. Resolution represents a pixel-area tier, so rectangular output sides vary. |
| aspectRatio | string | No | resolution: 1k (default) or 2k. aspectRatio: 1:1 (default), 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 4:5, 5:4, or 21:9. Resolution represents a pixel-area tier, so rectangular output sides vary. |
| urls | string[] | No | urls: optional array of up to 10 public HTTP(S) image URLs. Each image must be at most 10 MB, with each side between 1 and 8000 pixels and an aspect ratio between 1:10 and 10:1. Supported formats: JPEG, PNG, BMP, TIFF, WebP and GIF. Browser file uploads support JPEG, PNG, BMP, WebP and GIF; use a public URL for TIFF, which may not display a browser preview. |
Request a transparent background in the prompt when needed. PNG transparency is preserved. To create multiple outputs, submit separate tasks; Playground can submit a batch of 1–4 tasks.
Try Qwen Image 2.1Qwen Image 2.1 TurboVideo Upscaler
Create Task
POST /api/v1/upscale/create
# source.url accepts ANY https video URL — your own CDN, OR a file you first
# uploaded to us via /api/v1/assets/upload (pass the r2Url it returns). No need
# to declare which: we detect it. External URLs are validated; our own are trusted.
curl -X POST \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"source": { "type": "url", "url": "https://your-cdn.com/video.mp4" },
"targetResolution": "2k",
"callBackUrl": "https://your-server.com/webhook"
}' \
https://seegen.ai/api/v1/upscale/create| Parameter | Type | Required | Description |
|---|---|---|---|
| source.type | string | Yes | Use "url" for any source. ("uploadId" is a legacy alias kept for backward compatibility.) |
| source.url | string | No | With type="url". Any https video URL — your own CDN, or the r2Url returned by /api/v1/assets/upload. For external URLs, http and private/internal IPs are rejected (SSRF guard); URLs on our own asset host skip that check. |
| source.r2Url | string | No | Legacy — only with type="uploadId" (backward compat). New integrations should use type="url". |
| targetResolution | string | Yes | "720p", "1080p", "2k", or "4k". Must be higher than the source resolution. |
| callBackUrl | string | No | Webhook URL invoked once on terminal state (completed or failed). |
Create Response
{
"taskId": "n770mo4sh6rpi690ff3gwymx",
"orderId": "ord_2026...",
"status": "validating"
}Query Status
GET /api/v1/upscale/query?taskId=...
Status progresses validating → processing → completed / failed.
curl -H "Authorization: Bearer $API_KEY" \
"https://seegen.ai/api/v1/upscale/query?taskId=n770mo4sh6rpi690ff3gwymx"Completed Response
{
"taskId": "n770mo4sh6rpi690ff3gwymx",
"status": "completed",
"targetResolution": "2k",
"creditsConsumed": 900,
"result": {
"url": "https://static.seegen.ai/standalone-upscale/results/...mp4",
"probedDurationSeconds": 30,
"probedSourceResolution": "1280x720"
},
"error": null,
"createdAt": "2026-04-29T01:23:45.000Z",
"finishedAt": "2026-04-29T01:35:01.000Z"
}Failed Response
{
"taskId": "n770mo4sh6rpi690ff3gwymx",
"status": "failed",
"creditsConsumed": null,
"result": null,
"error": {
"code": "SOURCE_RESOLUTION_TOO_HIGH",
"message": "Source 3840x2160 is not below target 4k"
}
}Limits
- Source: https URL or your previously uploaded R2 URL
- Duration up to 600 s (clips under 5 s are billed as 5 s)
- File size ≤ 200 MB
- Format: MP4 / MOV / WebM
- Source resolution must be lower than target
Pricing
- 720P: 17 credits/sec (5s = 85, 30s = 510)
- 1080P: 25 credits/sec (5s = 125, 30s = 750)
- 2K: 38 credits/sec (5s = 190, 30s = 1140)
- 4K: 50 credits/sec (5s = 250, 30s = 1500)
- 5-second minimum; failures refund credits automatically
Error Codes
Common errors you can act on. Other failures return a self-explanatory message field — read that before assuming the code is one of these.
| Code | Meaning |
|---|---|
| INVALID_URL | URL is malformed or not https |
| URL_NOT_REACHABLE | Couldn't fetch the URL — check it's public and reachable |
| UNSUPPORTED_MEDIA_TYPE | File is not a video, or not in MP4 / MOV / WebM |
| FILE_TOO_LARGE | Source exceeds 200 MB |
| DURATION_EXCEEDS_LIMIT | Source longer than 600 s |
| SOURCE_RESOLUTION_TOO_HIGH | Source already at or above target — pick a higher target |
| INSUFFICIENT_CREDITS | Not enough credits — top up and retry |
| ACCOUNT_FROZEN | Account may not spend credits — contact support |
Webhook Callback
Instead of polling, you can provide a callBackUrl to receive results automatically when a task completes or fails.
curl -X POST \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "sd2",
"callBackUrl": "https://your-server.com/webhook/callback",
"inputs": {
"prompt": "A cat playing piano",
"duration": "5s"
}
}' \
https://seegen.ai/api/v1/jobs/createTaskCallback Payload
When the task finishes, we send a POST request to your URL with the same format as the queryTask response:
{
"taskId": "task_abc123",
"orderId": "order_abc123",
"model": "sd2",
"status": "COMPLETED",
"creditsUsed": 200,
"output": [
{
"url": "https://static.seegen.ai/videos/result.mp4",
"width": 1280,
"height": 720
}
],
"error": null,
"createTime": 1711234567890,
"completeTime": 1711234612345
}Retry Policy: After the initial attempt, a non-2xx response or network error triggers up to 3 retries after 1s, 5s, and 30s. Handle repeated callbacks idempotently by taskId. Use queryTask as a fallback if no callback arrives; delivery is not guaranteed after retries are exhausted.
Response Format
createTask Response
{ "taskId": "task_abc123", "orderId": "order_abc123" }queryTask Response
{
"taskId": "task_abc123",
"orderId": "order_abc123",
"model": "sd2",
"status": "COMPLETED",
"creditsUsed": 200,
"output": [
{
"url": "https://static.seegen.ai/videos/result.mp4",
"width": 1280,
"height": 720
}
],
"error": null,
"createTime": 1711234567890,
"completeTime": 1711234612345
}credits Response
{
"credits": 5000,
"availableCredits": 4800
}Error Handling
| Status Code | Meaning | Action |
|---|---|---|
| 400 | Invalid parameters | Check the error message and fix your request |
| 401 | Invalid or missing API key | Check your Authorization header format |
| 402 | Insufficient credits | Open Credits to purchase credits or enable Auto Recharge, then retry the request |
| 403 | Access denied | You can only query your own tasks |
| 404 | Task not found | Verify the taskId is correct |
| 500 | Internal server error | Check the error and task history before retrying a create request; a lost response may still have created a task. |
Pre-submit validation (400 with a code)
Seedance and Wan 3.0 requests are checked against SeeGen's product rules before any credits are charged. When a check fails, createTask returns { "message": "...", "code": "..." } with HTTP 400; Wan errors may also include a path. No task is created or charged.
| Parameter | Type | Required | Description |
|---|---|---|---|
| EMPTY_CONTENT | code | No | No prompt and no reference image / video / audio. |
| AUDIO_ONLY_NOT_SUPPORTED | code | No | Audio is the only reference on sd2 / sd2-fast / sd2-mini. Add an image or video, or use sd2.5 (audio-only supported). |
| UNSUPPORTED_MODEL | code | No | The model alias is not supported. For Wan 3.0, use exactly "wan3.0-video-prime" or "wan3.0-video". |
| UNSUPPORTED_RESOLUTION | code | No | The selected output tier is unavailable. Wan 3.0 launch supports native 480p / 720p / 1080p only; 2K/4K and upscaleResolution are rejected. |
| DURATION_OUT_OF_RANGE | code | No | duration is not an integer within the model range (Wan 3.0 "2s"–"30s", sd2 family "4s"–"15s", sd2.5 "4s"–"30s"). Wan smart duration (-1) is not exposed. |
| INVALID_MEDIA_COMBINATION | code | No | The media does not match the selected mode (for example, the wrong keyframe count, media in text-to-video, no media in multi-reference, or mixed keyframe and reference inputs). |
| EDIT_SOURCE_VIDEO_REQUIRED / EXTEND_SOURCE_VIDEO_REQUIRED | code | No | mode "edit" / "extend" was requested without a video in videoUrls. |
| EDIT_SOURCE_DURATION_INVALID | code | No | sd2.5 Video Edit: a video in the request is shorter than 4s or longer than 30s (ARK applies 4–30s to every video of an edit task). |
| TOO_MANY_REFERENCES | code | No | More reference images / videos / audio clips than the model accepts (Wan 3.0 10 / 5 / 5, sd2 family 9 / 3 / 3, sd2.5 30 / 10 / 10; extend ≤3 videos). |
| REFERENCE_VIDEO_DURATION_INVALID | code | No | A reference video exceeds the per-clip cap, the combined reference-video input exceeds its model cap, or the input-plus-output combination is invalid. For Wan 3.0: each clip 1–15s, total input ≤15s, and input + requested output ≤30s (15+15 is valid; 15+16 is rejected). |
| REFERENCE_AUDIO_DURATION_INVALID | code | No | A known Wan 3.0 reference-audio duration exceeds the 1–15s per-clip range or makes the combined reference-audio input exceed 15s. |
| REFERENCE_IMAGE_INVALID | code | No | A Wan 3.0 image is missing, belongs to another user, has the wrong media type, or violates a known size, format, dimensions, aspect-ratio, or no-transparency requirement. |
| REFERENCE_VIDEO_INVALID | code | No | An uploaded Wan 3.0 video violates the size, MP4/MOV format, dimensions, or aspect-ratio requirement. |
| REFERENCE_AUDIO_INVALID | code | No | An uploaded Wan 3.0 audio file violates the size or WAV/MP3 format requirement. |
| ASSET_NOT_FOUND / EXTERNAL_URL / READ_TIMEOUT / READ_FAILED | code | No | A videoUrls entry could not be resolved to one of your uploaded assets, or its duration could not be read. |
Full Examples
Complete workflow: upload an asset, wait for review, create a task with the approved asset, and poll for the result.
const API_KEY = process.env.API_KEY;
const BASE = "https://seegen.ai/api/v1";
const headers = {
"Authorization": `Bearer ${API_KEY}`,
"Content-Type": "application/json",
};
// 1. Upload asset and wait for review
// (To upload a LOCAL file instead of a URL, POST multipart/form-data with a "file"
// field — no Content-Type header, no "type" — see the Upload Asset section above.)
async function uploadAndWaitForAsset(url, type = "IMAGE") {
const res = await fetch(`${BASE}/assets/upload`, {
method: "POST",
headers,
body: JSON.stringify({ url, type }),
signal: AbortSignal.timeout(120_000),
});
if (!res.ok) throw new Error(`Upload failed: ${(await res.json()).message}`);
const asset = await res.json();
console.log(`Asset uploaded: ${asset.assetId}, status: ${asset.status}`);
// Poll until review completes
const deadline = Date.now() + 15 * 60_000;
while (true) {
const statusRes = await fetch(
`${BASE}/assets/status?assetId=${asset.assetId}`,
{ headers, signal: AbortSignal.timeout(30_000) }
);
if (!statusRes.ok) throw new Error(`Asset query failed (${statusRes.status}): ${await statusRes.text()}`);
const status = await statusRes.json();
if (status.status === "ACTIVE") {
console.log(`Asset approved: asset://${status.volcAssetId}`);
return status.volcAssetId;
}
if (status.status === "FAILED") {
throw new Error(`Asset review failed: ${status.failReason}`);
}
if (Date.now() >= deadline) throw new Error(`Review pending: query assetId=${asset.assetId} later`);
await new Promise((r) => setTimeout(r, 3000));
}
}
// 2. Create a task
async function createTask(inputs, callBackUrl) {
const res = await fetch(`${BASE}/jobs/createTask`, {
method: "POST",
headers,
body: JSON.stringify({
model: "sd2",
inputs,
...(callBackUrl && { callBackUrl }),
}),
signal: AbortSignal.timeout(120_000),
});
if (!res.ok) throw new Error(`[${res.status}] ${(await res.json()).message}`);
return res.json();
}
// 3. Poll until done
async function waitForResult(taskId, timeoutMs = 900000) {
const start = Date.now();
while (Date.now() - start < timeoutMs) {
const res = await fetch(
`${BASE}/jobs/queryTask?taskId=${taskId}`,
{ headers, signal: AbortSignal.timeout(30_000) }
);
if (!res.ok) throw new Error(`Query failed for ${taskId} (${res.status}): ${await res.text()}`);
const result = await res.json();
if (result.status === "COMPLETED") return result;
if (result.status === "FAILED") throw new Error(result.error);
await new Promise((r) => setTimeout(r, 5000));
}
throw new Error(`Still processing: query taskId=${taskId} later`);
}
// Full workflow: upload → review → generate → result
async function main() {
// Upload image and wait for review
const volcAssetId = await uploadAndWaitForAsset(
"https://example.com/photo.jpg", "IMAGE"
);
// Create task with approved asset
const { taskId } = await createTask({
urls: [`asset://${volcAssetId}`],
prompt: "The person slowly looks up and smiles",
duration: "5s",
});
console.log(`Task: ${taskId}`);
// Wait for video
const result = await waitForResult(taskId);
console.log(`Video: ${result.output[0].url}`);
}
main().catch(console.error);Need help? Join our Discord or contact us