The fixed-shape tier of Seedance 2.5: every request produces one 30-second clip at 720p for a flat $2.00, whatever you send. The same 30-second 720p clip on seedance-2.5 bills at $0.270 per second — about $8.10 — so this is roughly a quarter of the price. Input is a prompt, or a prompt plus up to 9 reference images. Price is the whole of the argument for it; read the next section before you pick it.
| Item | Price |
|---|---|
| 30 seconds · 720p (the only shape) | $2.00 per video |
| Reference images (up to 9) | Free |
| For comparison: seedance-2.5 at 720p · 30s | about $8.10 ($0.270/s) |
One price per request — it does not move with the aspect ratio, the number of reference images or the length of the prompt. Charged only on success, refunded on failure.
All requests carry the API key in the header:
Authorization: Bearer YOUR_API_KEY/api/v1/video/generations·GET/api/v1/video/generations?task_id=# Text-to-video. A prompt is all it takes — length and resolution are NOT
# parameters on this tier: every clip comes back 30 seconds long at 720p.
curl -X POST https://api.apimodels.app/v1/video/generations \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2.5-global",
"prompt": "A lone cyclist on a coastal road at sunrise, long lens, slow tracking shot",
"aspect_ratio": "16:9"
}'
# With reference images — up to 9, as public HTTPS URLs.
# images / image_urls / reference_image_urls / image are aliases for the same list,
# so a request migrated from seedance-2.5 keeps its reference images.
curl -X POST https://api.apimodels.app/v1/video/generations \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2.5-global",
"prompt": "The sneaker from the reference photos spins on a matte studio turntable, soft key light",
"images": [
"https://example.com/sneaker-front.jpg",
"https://example.com/sneaker-side.jpg"
],
"aspect_ratio": "9:16"
}'
# Poll every 10-15 seconds until state == "completed";
# data.resultUrls[0] is the video. Result files are kept 7 days.
curl "https://api.apimodels.app/v1/video/generations?task_id=TASK_ID" \
-H "Authorization: Bearer YOUR_API_KEY"
# Each of these is rejected with a 400 at create time. Nothing is quietly
# rewritten to 30s / 720p and then billed the full $2.00:
# "duration": 10 → 30 seconds is the only length
# "resolution": "1080p" → 720p is the only output
# "reference_video_urls": [...] → no video editing, no extension
# "task_type": "edit" → same, use seedance-2.5 instead| Field | Required | Type | Description |
|---|---|---|---|
| model | Yes | string | seedance-2.5-global (alias seedance-2-5-global) |
| prompt | Yes | string | Describe subject, action, camera motion and lighting; up to 3,000 characters. Anything longer returns a 400 at create time. |
| aspect_ratio | No | string | 16:9 (default) / 9:16 / 1:1 / 3:4 / 4:3 / 21:9. Anything outside the enum returns a 400. |
| images | No | string[] | Reference images, up to 9, as public HTTPS URLs; base64 / data URIs are staged to public storage for you. Free. image_urls / reference_image_urls / image are aliases for the same list, so a request migrated from seedance-2.5 needs no field renaming. |
| callback_url | No | string | We POST the result to this URL on completion; omit it and poll the GET endpoint instead. |
These are the fields a request migrated from seedance-2.5 most often still carries. This tier has no matching capability, so each one is either refused at create time or explicitly inert — none of them is accepted, quietly reshaped and billed the full $2.00 anyway.
| Field | What happens if you send it |
|---|---|
| duration | 400. 30 seconds is the only length, not a default. |
| resolution / size | 400. 720p is the only output. |
| reference_video_urls | 400. No video editing and no video extension. Use seedance-2.5 for those. |
| task_type: "edit" / "extend" | 400. Same reason — neither pipeline exists on this tier. |
| generate_audio | Inert. This tier has no audio switch: false is neither an error nor a way to get a silent clip. |
Try it in the Playground
A flat $2.00 per video on apimodels.app. The price does not move with the aspect ratio, the prompt length or the number of reference images, and reference images are free. The same 30-second 720p clip on seedance-2.5 bills at $0.270 per second, about $8.10, so this tier is roughly a quarter of the price. Only successful generations are charged; failures are refunded.
No — duration and resolution are not parameters on this tier. Every clip is 30 seconds at 720p, and that is the only output rather than a default you can override. Send any other duration, resolution or size and the request is rejected with a 400 at create time: no task is created, nothing is charged, and it is never quietly rewritten to 30s / 720p and billed the full $2.00. For a specific length or 480p, call seedance-2.5 instead.
No to all three. The only inputs are a prompt, or a prompt plus up to 9 reference images given as public HTTPS URLs (base64 and data URIs are staged for you). There is no edit pipeline and no extend pipeline, so reference_video_urls or task_type set to edit / extend returns a clear 400 rather than being silently ignored. Real people are not supported. For any of those, use seedance-2.5 on the same key and the same endpoint.
Not in bulk. Send jobs one at a time or in small batches and let each one finish before queuing the next — firing a burst of requests is the fastest way to collect a string of transient upstream failures. This tier carries no capacity guarantee, and its price reflects that. Plan on about 6 minutes per clip, and note that this is single-clip latency you cannot amortise with concurrency. For parallel or bursty workloads use seedance-2.5.
No. Audio is always generated on this tier and there is no generate_audio switch — seedance-2.5 accepts generate_audio: false, this one does not, and sending it is simply inert rather than an error. Every clip comes back with a stereo AAC track. The side effect worth planning for: if the generated soundtrack trips the model’s own audio copyright check, the job fails and is refunded rather than returning a silent clip, and the only way around it is to move the prompt away from music-heavy scenes.