Seedance 2.0 API
สร้างการสร้างวิดีโอเข้าสู่ผลิตภัณฑ์ของคุณด้วยการสร้างงานแบบอะซิงค์, การสำรวจสถานะ, เว็บฮุค และการเรียกเก็บเงินตามเครดิต
https://api.seedance2.aiในหน้านี้
บทนำ
API ช่วยให้คุณส่งงานสร้างวิดีโอ Seedance 2.0 แบบโปรแกรม การสร้างเป็นแบบอะซิงโครนัส: สร้างงาน, รับ ID งานทันที, จากนั้นรับวิดีโอที่เสร็จสมบูรณ์โดยการสำรวจสถานะที่เอ็นด์พอยต์ของงาน หรือโดยการรับเว็บฮุค
งานแบบอะซิงค์
การสำรวจสถานะทำงานได้ดีสำหรับการพัฒนาและการรวมระบบอย่างง่าย
พร้อมสำหรับเว็บฮุค
แนะนำเว็บฮุคสำหรับการใช้งานจริง เนื่องจากช่วยหลีกเลี่ยงการสำรวจสถานะที่มากเกินไป และแจ้งบริการของคุณเมื่องานถึงสถานะสุดท้าย
รับรู้เครดิต
เครดิตจะถูกจองเมื่อส่งงาน งานที่สำเร็จจะถูกหักค่าใช้จ่ายจากการจองนั้น งานที่ล้มเหลวหรือหมดเวลาจะได้รับเงินคืนโดยอัตโนมัติ
การยืนยันตัวตน
สร้างคีย์ API ในแดชบอร์ดและส่งเป็น Bearer token ในทุกคำขอ คีย์ทั้งหมดจะแสดงเพียงครั้งเดียวเมื่อสร้าง
Authorization: Bearer sk_live_xxxxxxxxใช้คีย์ sk_live_ สำหรับการใช้งานจริง
ใช้คีย์ sk_test_ สำหรับการทดสอบการรวมระบบแบบ Sandbox ด้วยสัญญา API เดียวกัน
คีย์ที่หายไป, ไม่ถูกต้อง หรือถูกเพิกถอนจะส่งคืน invalid_api_key พร้อมด้วย HTTP 401
เริ่มต้นใช้งานอย่างรวดเร็ว
ส่งงานก่อน หลังจากงานได้รับการยอมรับแล้ว ให้เลือกวิธีการส่งผลลัพธ์หนึ่งวิธี: สำรวจสถานะที่เอ็นด์พอยต์ของงาน หรือรับผลลัพธ์สุดท้ายผ่านเว็บฮุค
สร้างงานวิดีโอแบบอะซิงโครนัสและรับ ID งานทันที
curl https://api.seedance2.ai/v1/videos/generations \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2-0",
"callback_url": "https://your-domain.com/api/seedance/webhook",
"input": {
"prompt": "a cat surfing on a neon wave, cinematic lighting",
"generation_type": "text-to-video",
"duration": 5,
"aspect_ratio": "16:9",
"resolution": "720p",
"generate_audio": true,
"watermark": false,
"web_search": false,
"return_last_frame": false,
"seed": -1
}
}'เรียกเอ็นด์พอยต์สถานะงานเมื่อการรวมระบบของคุณต้องการการสำรวจสถานะแบบชัดเจน
curl https://api.seedance2.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
-H "Authorization: Bearer sk_live_xxx"ส่ง callback_url เมื่อส่งงาน จากนั้นรับการแจ้งเตือนการเสร็จสมบูรณ์หรือความล้มเหลว และอัปเดตบันทึกงานของคุณเอง
export async function POST(request: Request) {
const callbackData = await request.json();
if (callbackData.status === "completed") {
const videoUrl = callbackData.data.results[0];
// Save the video URL or update your own task record here.
}
if (callbackData.status === "failed") {
const errorMessage = callbackData.data.failed_reason;
// Mark your own task record as failed here.
}
return new Response(null, { status: 200 });
}สร้างงานวิดีโอ
สร้างงานวิดีโอด้วย POST /v1/videos/generations เนื้อหาคำขอมีโมเดลระดับบนสุด, callback_url (ไม่บังคับ) และออบเจกต์อินพุตที่มี prompt และการตั้งค่าการสร้าง
/v1/videos/generationscurl https://api.seedance2.ai/v1/videos/generations \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2-0",
"callback_url": "https://your-domain.com/api/seedance/webhook",
"input": {
"prompt": "a cat surfing on a neon wave, cinematic lighting",
"generation_type": "text-to-video",
"duration": 5,
"aspect_ratio": "16:9",
"resolution": "720p",
"generate_audio": true,
"watermark": false,
"web_search": false,
"return_last_frame": false,
"seed": -1
}
}'โหมดการสร้าง
generation_type ควบคุมว่าสื่ออินพุตใดที่ได้รับการยอมรับ และโมเดลตีความอย่างไร
| โหมด | สื่อที่จำเป็น | สื่อเสริม | หมายเหตุ |
|---|---|---|---|
text-to-video | prompt | duration, aspect_ratio, resolution, seed | เฉพาะข้อความprompt เท่านั้น ไม่จำเป็นต้องใช้ image_urls, video_urls และ audio_urls |
image-to-video | prompt + อาร์เรย์ image_urls (URL รูปภาพ 1-2 URL) | duration, aspect_ratio, resolution, seed | image_urls ต้องเป็นอาร์เรย์ ระบุ URL รูปภาพ 1 URL สำหรับเฟรมแรก หรือ URL รูปภาพ 2 URL สำหรับเฟรมแรกและเฟรมสุดท้าย วิดีโอและเสียงจะถูกละเว้น |
reference-to-video | prompt + รูปภาพหรือวิดีโออย่างน้อยหนึ่งรายการ | รูปภาพ, วิดีโอ และเสียงภายในขีดจำกัดวัสดุ | เสียงไม่สามารถใช้คนเดียวกับข้อความได้ เพิ่มรูปภาพหรือวิดีโออย่างน้อยหนึ่งรายการเมื่อมีเสียง |
text-to-videoใช้ text-to-video เมื่อ prompt เป็นอินพุตสร้างสรรค์เพียงอย่างเดียว
curl https://api.seedance2.ai/v1/videos/generations \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2-0",
"callback_url": "https://your-domain.com/api/seedance/webhook",
"input": {
"prompt": "a cinematic drone shot over a futuristic coastal city at sunrise",
"generation_type": "text-to-video",
"duration": 5,
"aspect_ratio": "16:9",
"resolution": "720p",
"generate_audio": true,
"watermark": false,
"web_search": false,
"return_last_frame": false,
"seed": -1
}
}'image-to-videoใช้ image-to-video เมื่อ input.image_urls เป็นอาร์เรย์ที่มี URL รูปภาพ 1-2 URL: หนึ่ง URL กำหนดเฟรมแรก และสอง URL กำหนดเฟรมแรกและเฟรมสุดท้าย การอ้างอิงวิดีโอและเสียงจะถูกละเว้นในโหมดนี้
curl https://api.seedance2.ai/v1/videos/generations \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2-0",
"input": {
"prompt": "the subject turns toward camera, soft studio motion",
"generation_type": "image-to-video",
"image_urls": ["https://your.cdn.com/first-frame.jpg"],
"duration": 5,
"resolution": "720p"
}
}'reference-to-videoใช้ reference-to-video สำหรับการกำกับที่หลากหลายขึ้นด้วยรูปภาพ, วิดีโอ และเสียงอ้างอิง เสียงไม่สามารถใช้คนเดียวกับข้อความได้; ต้องมีรูปภาพหรือวิดีโออย่างน้อยหนึ่งรายการเมื่อมีเสียง
ขีดจำกัดวัสดุ
- รูปภาพอ้างอิงสูงสุด 9 รูป
- วิดีโออ้างอิงสูงสุด 3 คลิป, ระยะเวลารวม <= 15 วินาที
- เสียงอ้างอิงสูงสุด 3 ไฟล์, ระยะเวลารวม <= 15 วินาที
- รวมวัสดุทั้งหมดสูงสุด 12 รายการในทุกประเภท
การรวมกันของอินพุตที่รองรับ
curl https://api.seedance2.ai/v1/videos/generations \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2-0",
"input": {
"prompt": "use the product from image 1 and the camera motion from the reference video",
"generation_type": "reference-to-video",
"image_urls": ["https://your.cdn.com/product.jpg"],
"video_urls": ["https://your.cdn.com/camera-motion.mp4"],
"audio_urls": [],
"duration": 8,
"resolution": "1080p"
}
}'พารามิเตอร์คำขอ
ชื่อพารามิเตอร์, ค่า enum, พาธเอ็นด์พอยต์ และตัวอย่างเป็นส่วนหนึ่งของสัญญา API คำอธิบายด้านล่างอธิบายพฤติกรรมของแต่ละฟิลด์
ส่วนหัว (Headers)
| ส่วนหัว | จำเป็น | คำอธิบาย | ตัวอย่าง |
|---|---|---|---|
Authorization | ใช่ | Bearer API key ใช้ในการยืนยันตัวตนคำขอ | Bearer sk_live_xxx |
Content-Type | ใช่ | คำขอเขียนทั้งหมดใช้ JSON | application/json |
ฟิลด์ระดับบนสุด
| ฟิลด์ | ประเภท | จำเป็น | ค่าเริ่มต้น | ช่วง / Enum | โหมด | ตัวอย่าง |
|---|---|---|---|---|---|---|
modelรูปแบบโมเดลที่ใช้สำหรับการสร้าง | string | ใช่ | - | seedance-2-0 | seedance-2-0-fast | ทั้งหมด | seedance-2-0 |
callback_urlเอ็นด์พอยต์ HTTPS ที่รับการแจ้งเตือนการเสร็จสมบูรณ์และความล้มเหลวของงาน | string | ไม่ | - | URL HTTPS, ไม่มีเครือข่ายส่วนตัว | ทั้งหมด | https://your-domain.com/hook |
inputการตั้งค่าการสร้างและการอ้างอิงสื่อ | object | ใช่ | - | - | ทั้งหมด | - |
input.* ฟิลด์
| ฟิลด์ | ประเภท | จำเป็น | ค่าเริ่มต้น | ช่วง / Enum | โหมด | ตัวอย่าง |
|---|---|---|---|---|---|---|
input.promptข้อความพรอมต์ที่อธิบายวิดีโอที่จะสร้าง | string | ใช่ | - | ข้อความที่ไม่ว่างเปล่า | ทั้งหมด | a cat surfing |
input.generation_typeโหมดการสร้าง ค่าเริ่มต้นคือ text-to-video | string | ไม่ | text-to-video | text-to-video | image-to-video | reference-to-video | - | image-to-video |
input.image_urlsURL รูปภาพที่สามารถเข้าถึงได้สาธารณะ สำหรับ image-to-video ให้ส่งรูปภาพ 1 รูปสำหรับเฟรมแรก หรือ 2 รูปสำหรับเฟรมแรกและเฟรมสุดท้าย สำหรับ reference-to-video ให้ส่งรูปภาพสูงสุด 9 รูปเป็นข้อมูลอ้างอิงภาพ | string[] | มีเงื่อนไข | [] | Image-to-video: 1 หรือ 2 รูปภาพ Reference-to-video: สูงสุด 9 รูปภาพ (image-to-video) (reference-to-video) | image-to-video / reference-to-video | ["https://.../a.jpg"] |
input.video_urlsวิดีโออ้างอิงที่สามารถเข้าถึงได้สาธารณะสำหรับ reference-to-video เท่านั้น คุณสามารถส่งไฟล์วิดีโอได้สูงสุด 3 ไฟล์ และเวลาเล่นรวมกันต้องไม่เกิน 15 วินาที | string[] | ไม่ | [] | สูงสุด 3 วิดีโอ ความยาววิดีโอรวมต้องไม่เกิน 15 วินาที | reference-to-video | [] |
input.audio_urlsไฟล์เสียงอ้างอิงที่สามารถเข้าถึงได้สาธารณะสำหรับ reference-to-video เท่านั้น คุณสามารถส่งไฟล์เสียงได้สูงสุด 3 ไฟล์ และเวลาเล่นรวมกันต้องไม่เกิน 15 วินาที | string[] | ไม่ | [] | สูงสุด 3 ไฟล์เสียง ความยาวเสียงรวมต้องไม่เกิน 15 วินาที | reference-to-video | [] |
input.durationความยาววิดีโอที่ส่งออกเป็นวินาที | int | ไม่ | 5 | 4-15 วินาที | ทั้งหมด | 5 |
input.aspect_ratioอัตราส่วนภาพที่ส่งออก adaptive ช่วยให้บริการสามารถอนุมานอัตราส่วนที่ดีที่สุดได้ | string | ไม่ | adaptive | 16:9 | 4:3 | 1:1 | 3:4 | 9:16 | 21:9 | adaptive | ทั้งหมด | 16:9 |
input.resolutionระดับความละเอียดของภาพที่ส่งออก | string | ไม่ | 720p | 480p | 720p | 1080p | ทั้งหมด | 720p |
input.generate_audioโมเดลควรสร้างเสียงเมื่อรองรับหรือไม่ | boolean | ไม่ | true | true | false | ทั้งหมด | true |
input.watermarkจะเพิ่มลายน้ำหรือไม่ | boolean | ไม่ | false | true | false | ทั้งหมด | false |
input.web_searchจะอนุญาตการเสริมด้วยการค้นหาเว็บเมื่อรองรับหรือไม่ | boolean | ไม่ | false | true | false | ทั้งหมด | false |
input.return_last_frameจะส่งคืน URL เฟรมสุดท้ายเมื่อมีหรือไม่ | boolean | ไม่ | false | true | false | ทั้งหมด | false |
input.seedSeed แบบกำหนดค่าได้ ใช้ -1 สำหรับ seed แบบสุ่ม | int | ไม่ | -1 | -1 หรือ 0-4294967295 | ทั้งหมด | -1 |
เครดิตแตกต่างกันไปตามความละเอียด, ระยะเวลา, โมเดล และไม่ว่าการอ้างอิงถึงวิดีโอจะรวมการอ้างอิงวิดีโอด้วยหรือไม่ ค่าเครดิตที่ส่งคืนโดยการตอบกลับการสร้างคือจำนวนที่จองจริงสำหรับงานนั้น (reference-to-video)
ดูราคาเครดิตการตอบสนอง
นี่คือการตอบสนองที่สำเร็จจาก POST /v1/videos/generations ซึ่งหมายความว่างานได้รับการยอมรับและเครดิตได้รับการสำรองไว้ ใช้ taskId ที่ส่งคืนเพื่อสำรวจ GET /v1/tasks/:id หรือเพื่อจับคู่การแจ้งเตือนการเสร็จสมบูรณ์หรือความล้มเหลว
การตอบรับความสำเร็จของ POST /v1/videos/generations
{
"taskId": "3f2aK9mR...",
"credits": 60
}ตรวจสอบสถานะงาน
ใช้ GET /v1/tasks/:id เพื่อเรียกคืนสถานะงานปัจจุบัน สำรวจสถานะไม่เกิน 1 ครั้งทุก 10 วินาที สำหรับระบบการผลิต ควรใช้เว็บฮุค
curl https://api.seedance2.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
-H "Authorization: Bearer sk_live_xxx"การตอบสนองงานที่เสร็จสมบูรณ์
{
"id": "3f2aK9mR...",
"status": "completed",
"created_at": 1781234567,
"model": "seedance-2-0",
"billing_status": "charged",
"credits": 60,
"failed_reason": null,
"data": {
"results": ["https://cdn.seedance2.ai/.../x.mp4"],
"video_expires_at": "2026-06-13T10:00:00Z",
"last_frame_url": null,
"processing_time": 48
}
}การตอบสนองงานที่ล้มเหลว
{
"id": "3f2aK9mR...",
"status": "failed",
"created_at": 1781234567,
"model": "seedance-2-0",
"billing_status": "refunded",
"credits": 60,
"failed_reason": "provider_failed"
}| ค่า | ความหมาย |
|---|---|
status=queued | ได้รับการยอมรับและรอการส่งหรือประมวลผล |
status=generating | ผู้ให้บริการกำลังประมวลผลการสร้าง |
status=completed | วิดีโอเสร็จสมบูรณ์และ data.results มี URL ผลลัพธ์ |
status=failed | การสร้างล้มเหลวหรือหมดเวลา |
billing_status=reserved | เครดิตถูกจองในขณะที่งานกำลังดำเนินการ |
billing_status=charged | งานสำเร็จและมีการชำระเงินตามการจอง |
billing_status=refunded | งานล้มเหลวหรือหมดเวลาและเครดิตถูกส่งคืน |
billing_status=refund_failed | การทำธุรกรรมคืนเงินล้มเหลวและต้องการการจัดการด้วยตนเอง |
หลังจาก video_expires_at, data.results จะว่างเปล่า ดาวน์โหลดและจัดเก็บไฟล์ก่อนที่ช่วงเวลาที่ถูกต้องจะสิ้นสุดลง
เว็บฮุค
เมื่อมี callback_url, Seedance จะเรียกเอ็นด์พอยต์ของคุณเมื่องานเสร็จสมบูรณ์หรือล้มเหลว และส่งข้อมูล JSON ที่อธิบายผลลัพธ์สุดท้าย หากเอ็นด์พอยต์ของคุณส่งคืนการตอบสนองที่ไม่ใช่ 2xx หรือไม่ตอบสนองภายใน 15 วินาที การส่งจะถูกลองใหม่สูงสุด 5 ครั้ง การลองใหม่จะใช้ id งานเดียวกัน ดังนั้นให้ de-dupe ด้วย id ส่งคืนการตอบสนอง 200 ทันทีที่คุณบันทึกข้อมูล callback ได้อย่างปลอดภัย
การแจ้งเตือนการเสร็จสมบูรณ์ของงาน
{
"id": "3f2aK9mR...",
"status": "completed",
"created_at": 1781234567,
"model": "seedance-2-0",
"data": {
"results": ["https://cdn.seedance2.ai/.../x.mp4"],
"video_expires_at": "2026-06-13T10:00:00Z",
"last_frame_url": null,
"processing_time": 48
}
}การแจ้งเตือนความล้มเหลวของงาน
{
"id": "3f2aK9mR...",
"status": "failed",
"created_at": 1781234567,
"model": "seedance-2-0",
"data": {
"failed_reason": "provider_failed",
"credits_refunded": 60
}
}export async function POST(request: Request) {
const callbackData = await request.json();
if (callbackData.status === "completed") {
const videoUrl = callbackData.data.results[0];
// Save the video URL or update your own task record here.
}
if (callbackData.status === "failed") {
const errorMessage = callbackData.data.failed_reason;
// Mark your own task record as failed here.
}
return new Response(null, { status: 200 });
}ตรวจสอบรูปแบบข้อมูล callback, de-dupe ด้วย id, อัปเดตบันทึกงานของคุณเองและตอบสนองอย่างรวดเร็ว
callback_url ต้องเป็น HTTPS และต้องไม่ชี้ไปยังเครือข่ายส่วนตัว, loopback หรือลิงก์-ท้องถิ่น
ข้อผิดพลาด
POST /v1/videos/generations และ GET /v1/tasks/:id จะส่งคืนรูปแบบข้อผิดพลาดนี้เมื่อคำขอ API เองล้มเหลว เช่น พารามิเตอร์ไม่ถูกต้อง, API key ไม่ถูกต้อง, เครดิตไม่เพียงพอ, เกินขีดจำกัดอัตรา หรือไม่พบงาน ข้อผิดพลาดบางอย่างมีฟิลด์เพิ่มเติม เช่น required, available หรือ retry_after ขึ้นอยู่กับสถานการณ์
{
"error": {
"code": "insufficient_credits",
"message": "Not enough credits for this task.",
"required": 60,
"available": 12
}
}| รหัส | HTTP | ความหมาย | ลองใหม่หรือไม่? |
|---|---|---|---|
invalid_request | 400 | พารามิเตอร์หายไปหรือไม่ถูกต้อง | ไม่, แก้ไขคำขอ |
invalid_api_key | 401 | API key หายไป, ไม่ถูกต้อง หรือถูกเพิกถอน | ไม่, ใช้คีย์ที่ถูกต้อง |
insufficient_credits | 402 | เครดิตไม่เพียงพอ งานไม่ได้รับการยอมรับหรือเรียกเก็บเงิน | หลังจากเติมเงิน |
forbidden | 403 | API key ไม่มีขอบเขตที่จำเป็น | ไม่ |
not_found | 404 | ไม่มีงานนี้อยู่หรือไม่ใช่ของเจ้าของคีย์ | ไม่ |
rate_limited | 429 | อัตราคำขอเกินกำหนด | ใช่, ทำตาม Retry-After |
internal_error | 500 | ข้อผิดพลาดของเซิร์ฟเวอร์ | ใช่, ลองใหม่ภายหลัง |
ขีดจำกัดอัตรา (Rate limits)
มีการกำหนดขีดจำกัดอัตราต่อ API key โดยใช้หน้าต่างแบบเลื่อน การสร้างค่าเริ่มต้นคือ 60 คำขอต่อนาที; การสอบถามสถานะมีความยืดหยุ่นมากขึ้น การตอบกลับ HTTP 429 มี Retry-After
การสร้าง
60/min
การสอบถามสถานะ
ยืดหยุ่นมากขึ้น
ส่วนหัว 429
Retry-After
การเรียกเก็บเงินและเครดิต
API ใช้การจองเมื่อส่ง, การเรียกเก็บเงินเมื่อสำเร็จ และการคืนเงินเมื่อล้มเหลว หน้าการใช้งานแดชบอร์ดแสดงประวัติเครดิต API, บันทึกงาน และสถิติการใช้งานตามเวลา
จอง
มีการตรวจสอบและจองเครดิตเมื่องานได้รับการยอมรับ
เรียกเก็บเงิน
งานที่เสร็จสมบูรณ์จะชำระยอดที่จองไว้
คืนเงิน
งานที่ล้มเหลวหรือหมดเวลาจะคืนเครดิตที่จองไว้โดยอัตโนมัติ
ตรวจสอบการใช้งานในแดชบอร์ด
ดูบันทึก API, ไทม์ไลน์งาน, ประวัติเครดิต และเมตริกการใช้งานตามเวลา