Skip to content
Developers
API docs / Models

MAKEUGC PLATFORM API · DOCS V2

Seedance 2.0 · Fast · Image to video

Seedance fast image-to-video generation.

VIDEO OUTPUT

Request

POST /enterprise/generate

Model ID: seedance-2-0-fast-i2v. Put model inputs inside params; keep model and project_id at the top level. Send webhook_url at the top level when using notifications.

For new integrations, use the dedicated Seedance API for references, current credit estimates and webhook notifications. These compatibility model IDs remain available on /enterprise/generate.
The enterprise Seedance route does not forward webhook_url. Poll /enterprise/status/{requestId}?media=video for the result.
Image-to-video inputs guide the generation as references; end_image_url is an additional reference, not a guaranteed last frame.

Request envelope

Parameter Description
model
string
Required
Exact public model ID from the model catalog.
params
object
Required
Model-specific input fields. See the individual model page for required fields, types, defaults and limits.
project_id
string
Optional
Existing project belonging to your account. Omit to create a project automatically.
webhook_url
string
Optional
Optional callback URL for supported models. Models marked polling-only reject this field. Enterprise Seedance does not forward it. Always keep polling available.

Model parameters

Parameter Description
prompt
string
Required
Video prompt.

Allowed: Up to 15,000 Unicode characters

image_url
string
Required
Source image URL.

Allowed: Valid URL

duration
string | number
Optional
Video duration.

Allowed: Integer 4–15, or -1 for Auto

Default: 10

resolution
string
Optional
Output resolution.

Allowed: 480p | 720p

Default: 720p

aspect_ratio
string
Optional
Target video aspect ratio.

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

Default: 9:16

generate_audio
boolean
Optional
Generate audio track.

Default: true

end_image_url
string
Optional
Additional reference image for image-to-video. This route does not guarantee last-frame control.

Allowed: Valid URL

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/enterprise/generate" \
  -H "X-Api-Key: $MAKEUGC_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedance-2-0-fast-i2v",
  "params": {
    "prompt": "A slow camera move around a ceramic coffee cup in warm morning light.",
    "image_url": "https://your-cdn.example/product.jpg",
    "duration": "10",
    "resolution": "720p"
  }
}'
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/enterprise/generate", {
  method: "POST",
  headers: {
    "X-Api-Key": apiKey,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
  "model": "seedance-2-0-fast-i2v",
  "params": {
    "prompt": "A slow camera move around a ceramic coffee cup in warm morning light.",
    "image_url": "https://your-cdn.example/product.jpg",
    "duration": "10",
    "resolution": "720p"
  }
}),
  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-i2v",
    "params": {
        "prompt": "A slow camera move around a ceramic coffee cup in warm morning light.",
        "image_url": "https://your-cdn.example/product.jpg",
        "duration": "10",
        "resolution": "720p"
    }
}

response = requests.post(
    "https://app.makeugc.ai/api/platform/enterprise/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
{
  "request_id": "request_123",
  "project_id": "project_123",
  "media": "video",
  "model": "seedance-2-0-fast-i2v",
  "status": "queued",
  "message": "Enterprise API job queued"
}

Retrieve the result

Save request_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/enterprise/status/request_123?media=video" \
  -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/enterprise/status/request_123?media=video", {
  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/enterprise/status/request_123?media=video",
    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
{
  "request_id": "request_123",
  "media": "video",
  "status": 1,
  "video_url": "https://your-cdn.example/result.mp4",
  "created_at": "2026-10-13T00:00:00.000Z",
  "updated_at": "2026-10-13T00:00:30.000Z"
}

Read status: 0 is processing, 1 is completed and 2 is failed. Video status can also be a string. Output is in video_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 →