Skip to content
Developers
API docs / Get started

MAKEUGC PLATFORM API · DOCS V2

Your first API request

Generate a video with Seedance 2.5, save the job ID and retrieve your finished video.

Before you start

You need a MakeUGC account with API access, a valid API key and enough generation credits. Create your key in Settings → API Integration. Seedance requires an eligible subscription.

Set your server environment variable
export MAKEUGC_API_KEY="YOUR_API_KEY"

Use cURL, Node.js 20+ or Python with the requests package installed. Run examples on your server or development machine.

Generate a video

This request creates a 10-second, vertical Seedance 2.5 video. The example uses 720p and an estimated 1.6 API credit units (160 displayed credits). Sending it starts a billable generation.

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.5",
  "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.5",
  "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.5",
    "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 · Generation accepted
{
  "status": true,
  "message": "Video generation started",
  "data": {
    "id": "video_123",
    "project_id": "project_123",
    "model": "seedance-2.5",
    "status": "processing",
    "estimated_credits": 1.6
  }
}

Store data.id and data.project_id. If present, data.credits_charged is the charge reported for the job.

Retrieve your result

Replace VIDEO_ID with the returned data.id. Poll every 5–10 seconds with a total timeout.

cURL
curl --fail-with-body --max-time 120 -X GET "https://app.makeugc.ai/api/platform/seedance/status?id=VIDEO_ID" \
  -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=VIDEO_ID", {
  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=VIDEO_ID",
    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": true,
  "message": "Video is completed",
  "data": {
    "id": "video_123",
    "status": "completed",
    "url": "https://your-cdn.example/result.mp4"
  }
}

Next steps

Explore Seedance 2.5 parameters, talking actors or image generation. Read jobs & webhooks and retry guidance before integrating in production.