Skip to content
Developers
API docs / Models

MAKEUGC PLATFORM API · DOCS V2

Seedance 2.0 Fast

Generate video from a prompt, with optional image and audio references.

VIDEO OUTPUT

Request

POST /seedance/generate

Model ID: seedance-2.0-fast. Send all input fields at the top level of the JSON body.

Send parameters at the top level, without a params object. Unknown fields are rejected.
Use image_url or image_urls, not both. Reference URLs must be public HTTP(S) URLs. Base64, video references, editing and extension are not accepted by this public endpoint.
Audio references require at least one image. Reference audio is trimmed to 15 seconds.
Auto duration (-1) is estimated at 15 seconds. Read data.estimated_credits and, when present, data.credits_charged from the response.
Generation requires credits and an eligible subscription. Unlimited generation is not supported by this endpoint.

Body parameters

Parameter Description
model
string
Required
Use this exact model ID.

Allowed: seedance-2.0-fast

prompt
string
Required
Describe the video.

Allowed: 1–15,000 Unicode characters

duration
integer
Optional
Output seconds. Use -1 for Auto; numeric strings are rejected.

Allowed: 4–15 or -1

Default: 10

aspect_ratio
string
Optional
Output aspect ratio.

Allowed: 9:16 | 16:9 | 4:3 | 3:4 | 1:1 | 21:9 | adaptive

Default: 9:16

resolution
string
Optional
Output resolution.

Allowed: 480p | 720p

Default: 720p

generate_audio
boolean
Optional
Generate an audio track.

Default: true

image_url
string
Optional
One public reference image URL. Mutually exclusive with image_urls.
image_urls
string[]
Optional
Public reference image URLs. Mutually exclusive with image_url.

Allowed: 1–9 images

audio_url
string
Optional
Public reference audio URL; also provide at least one image.
project_id
string
Optional
An existing project belonging to your account. Omit to create a project automatically.
webhook_url
string
Optional
HTTP(S) notification URL. Keep status polling as a fallback.

Code examples

Set MAKEUGC_API_KEY on your server. Replace example media URLs with files you host and keep accessible during processing.

cURL
curl --fail-with-body --max-time 120 -X POST "https://app.makeugc.ai/api/platform/seedance/generate" \
  -H "X-Api-Key: $MAKEUGC_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance-2.0-fast",
  "prompt": "A slow camera move around a ceramic coffee cup in warm morning light.",
  "duration": 10,
  "aspect_ratio": "9:16",
  "resolution": "720p",
  "generate_audio": true
}'
JavaScript
// Run on your server with Node.js 20+.
const apiKey = process.env.MAKEUGC_API_KEY;
if (!apiKey) throw new Error("Set MAKEUGC_API_KEY first");

const response = await fetch("https://app.makeugc.ai/api/platform/seedance/generate", {
  method: "POST",
  headers: {
    "X-Api-Key": apiKey,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
  "model": "seedance-2.0-fast",
  "prompt": "A slow camera move around a ceramic coffee cup in warm morning light.",
  "duration": 10,
  "aspect_ratio": "9:16",
  "resolution": "720p",
  "generate_audio": true
}),
  signal: AbortSignal.timeout(120000),
});
const text = await response.text();
if (!response.ok) {
  throw new Error(`HTTP ${response.status}: ${text} (request ${response.headers.get("x-request-id")})`);
}
const result = JSON.parse(text);
console.log(result);
Python
# Install the requests package before running.
import os
import requests

payload = {
    "model": "seedance-2.0-fast",
    "prompt": "A slow camera move around a ceramic coffee cup in warm morning light.",
    "duration": 10,
    "aspect_ratio": "9:16",
    "resolution": "720p",
    "generate_audio": True
}

response = requests.post(
    "https://app.makeugc.ai/api/platform/seedance/generate",
    headers={"X-Api-Key": os.environ["MAKEUGC_API_KEY"]},
    json=payload,
    timeout=120,
)
if not response.ok:
    raise RuntimeError(f"HTTP {response.status_code}: {response.text} "
                       f"(request {response.headers.get('x-request-id')})")
print(response.json())

200 · Job accepted

Generation response
{
  "status": true,
  "message": "Video generation started",
  "data": {
    "id": "request_123",
    "project_id": "project_123",
    "model": "seedance-2.0-fast",
    "status": "processing",
    "estimated_credits": 0.9
  }
}

Retrieve the result

Save data.id, then poll every 5–10 seconds. A successful generation request does not mean the output is ready.

cURL
curl --fail-with-body --max-time 120 -X GET "https://app.makeugc.ai/api/platform/seedance/status?id=request_123" \
  -H "X-Api-Key: $MAKEUGC_API_KEY"
JavaScript
// Run on your server with Node.js 20+.
const apiKey = process.env.MAKEUGC_API_KEY;
if (!apiKey) throw new Error("Set MAKEUGC_API_KEY first");

const response = await fetch("https://app.makeugc.ai/api/platform/seedance/status?id=request_123", {
  method: "GET",
  headers: {
    "X-Api-Key": apiKey,
  },
  signal: AbortSignal.timeout(120000),
});
const text = await response.text();
if (!response.ok) {
  throw new Error(`HTTP ${response.status}: ${text} (request ${response.headers.get("x-request-id")})`);
}
const result = JSON.parse(text);
console.log(result);
Python
# Install the requests package before running.
import os
import requests

response = requests.get(
    "https://app.makeugc.ai/api/platform/seedance/status?id=request_123",
    headers={"X-Api-Key": os.environ["MAKEUGC_API_KEY"]},
    timeout=120,
)
if not response.ok:
    raise RuntimeError(f"HTTP {response.status_code}: {response.text} "
                       f"(request {response.headers.get('x-request-id')})")
print(response.json())

200 · Completed

Status response
{
  "status": true,
  "message": "Video is completed",
  "data": {
    "id": "request_123",
    "status": "completed",
    "url": "https://your-cdn.example/result.mp4"
  }
}

Read data.status: processing, completed or failed. Output is in data.url. If completed has no output URL yet, continue polling within your timeout. See jobs & webhooks.

Credits & errors

Cost: based on duration and resolution. Read returned credit fields when available. See credit units and limits.

Invalid inputs return 400; insufficient credits can return 400 or 402 depending on the generation path. Access restrictions return 403 and temporary model unavailability can return 503. See error handling. Each POST can start a billable job; do not automatically resubmit after a timeout.

Related models

Browse all models →