NezhaGateNezhaGate
seedance-2.5-30s

Seedance 2.5 · 30s · API

POST https://nezhagate.com/v1/videos/generations

Seedance 2.5 · 30s (async): duration must be one of 30 seconds (720P allows 30s), resolution 720P, size 16:9 / 9:16 / 1:1 / 4:3 / 3:4; include image for image-to-video (up to 9 references). Returns a job id (HTTP 202); poll GET /v1/videos/jobs/{id} until status=succeeded, result in data[0].url. Billed PER CLIP: $1.50 (default 720P); within a tier the shortest and the longest clip cost the same. Fully refunded on failure.

Try in Playground →

Authentication

Header
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json

Create an API Key in the console to start.

Request body

ParameterTypeRequiredDescription
model string Yes Model ID, here seedance-2.5-30s.
prompt string Yes Text prompt describing the video, camera and motion. Max 5000 bytes (UTF-8; a Chinese character counts as 3).
duration integer No Length must be one of 30 seconds (default 30); alias seconds. 720P allows 30s. Billed PER CLIP, so length does not change the price.
resolution string No Resolution: $1.50 (default 720P). Price follows the resolution, not the length.
size string No Aspect ratio: 16:9 / 9:16 / 1:1 / 4:3 / 3:4 (default 16:9); alias aspect_ratio. 21:9 is not available on this model.
image string No Image-to-video: include a reference image (public URL, data: URI or base64); omit for text-to-video.
images array No Multiple reference images, up to 9. Exceeding the cap is rejected, never truncated. Alias: reference_images.

Request example

cURL
# 1) submit -> 202 {"id":"img_...","status":"queued"}
curl https://nezhagate.com/v1/videos/generations -H 'Authorization: Bearer YOUR_API_KEY' -H 'Content-Type: application/json' -d '{"model": "seedance-2.5-30s", "prompt": "a paper crane unfolding over a misty lake", "duration": 30, "resolution": "720P", "size": "16:9"}'
# image-to-video: also pass  "image": "https://example.com/ref.png"
# 2) poll every ~5s until status=succeeded, then read data[0].url
curl https://nezhagate.com/v1/videos/jobs/img_3f9a...c2 -H 'Authorization: Bearer YOUR_API_KEY'

Response

200 · JSON
{
  "id": "img_3f9a...c2",
  "object": "video.generation.job",
  "status": "queued",
  "model": "seedance-2.5-30s"
}

Async video job (submit → poll)

Submitting returns HTTP 202 and a job id right away; poll until status=succeeded and read data[0].url (an mp4 link). The allowed duration, resolution and size values are in the parameter table above; add an image param for image-to-video.

curl · submit (text-to-video)
curl https://nezhagate.com/v1/videos/generations -H 'Authorization: Bearer YOUR_API_KEY' -H 'Content-Type: application/json' -d '{"model": "seedance-2.5-30s", "prompt": "a cat surfing at sunset", "size": "16:9"}'
Image-to-video: also pass an image param (first-frame reference: a public URL, a data: URI, or base64).
Real human faces work as reference images, no masking needed. Please make sure you have the right to use the likeness of anyone pictured.
Response Example
{ "id": "img_3f9a...c2", "object": "video.generation.job", "status": "queued", "model": "seedance-2.5-30s" }
curl · poll
curl https://nezhagate.com/v1/videos/jobs/img_3f9a...c2 -H 'Authorization: Bearer YOUR_API_KEY'
Response Example
{
  "id": "img_3f9a...c2",
  "object": "video.generation.job",
  "status": "succeeded",
  "model": "seedance-2.5-30s",
  "data": [{ "url": "https://img.nezhagate.com/i/9f86d081a8....mp4" }]
}

🕑 data[0].url is a link on our image host that is kept for 60 days and then deleted automatically; to keep using it, download it and store it on your own storage or CDN.

Billed per clip and fully refunded on failure; a failed or timed-out render returns the reserved credits automatically.

Error codes

Every error body carries error.message / error.type / error.code / error.param - branch on code; the full list is in the integration guide.

HTTPcodeDescription
401invalid_api_keyAPI Key missing or invalid
402insufficient_quotaInsufficient balance or Key over quota
400invalid_requestUnsupported model or parameter
429rate_limit_exceededUpstream rate limit
502upstream_errorAll upstream routes failed