NezhaGateNezhaGate
seedance-2.0-clip

Seedance 2.0 · Clip · API

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

Seedance 2.0 · Clip video generation (async, special per-clip price): duration must be 5, 10 or 15 seconds (default 15; portrait 9:16 is 15 only), 720P, size=16:9 / 9:16; up to 9 reference images (images -- they set the people, scene and style; name them @Image1... in the prompt), and photos of real people work as references; no reference video or audio. Returns a job id (HTTP 202); poll GET /v1/videos/jobs/{id} until status=succeeded, result in data[0].url. $1.00 a clip, the three lengths at one price; 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.0-clip.
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 5, 10 or 15 seconds (default 15, the longest); portrait 9:16 takes 15 only for now; any other value is refused. Alias: seconds. Special per-clip price: all three lengths cost the same.
resolution string No Resolution is 720P only (also the default); $1.00 a clip whatever the length.
size string No Aspect ratio: 16:9 (landscape, the default; 5 / 10 / 15 s) or 9:16 (portrait; 15 s). Alias: aspect_ratio.
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.0-clip", "prompt": "a paper crane unfolding over a misty lake", "duration": 15, "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.0-clip"
}

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.0-clip", "prompt": "a cat surfing at sunset", "size": "16:9"}'
Reference images: also pass images (up to 9; public URLs, data: URIs or base64) and name them @Image1... in the prompt; they set the subject, scene and style and are not used as the first frame. This tier takes no reference video or audio.
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.0-clip" }
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.0-clip",
  "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