واجهة برمجة تطبيقات Seedance 2.0
قم بدمج إنشاء الفيديو في منتجك من خلال إنشاء المهام غير المتزامنة، واستقصاء الحالة، وخطافات الويب (webhooks)، والفوترة المدركة للرصيد.
https://api.seedance2.aiفي هذه الصفحة
مقدمة
تتيح لك واجهة برمجة التطبيقات إرسال مهام إنشاء الفيديو Seedance 2.0 برمجيًا. عملية الإنشاء غير متزامنة: قم بإنشاء مهمة، واستلم معرّف المهمة على الفور، ثم احصل على الفيديو النهائي عن طريق استقصاء نقطة نهاية المهمة أو عن طريق استلام webhook.
مهام غير متزامنة
يعمل الاستقصاء بشكل جيد للتطوير وعمليات التكامل البسيطة.
جاهز لخطافات الويب (Webhook ready)
يوصى باستخدام خطافات الويب (webhooks) للإنتاج لأنها تتجنب الاستقصاء المفرط وتُعلم خدمتك عندما تصل المهمة إلى حالة نهائية.
مدرك للائتمان
يتم حجز الأرصدة عند الإرسال. يتم خصم المهام الناجحة من هذا الحجز؛ ويتم رد الأموال للمهام الفاشلة أو التي انتهت مهلتها تلقائيًا.
المصادقة
أنشئ مفتاح API في لوحة التحكم وأرسله كرمز مميز من نوع Bearer في كل طلب. يظهر المفتاح بالكامل مرة واحدة فقط وقت الإنشاء.
Authorization: Bearer sk_live_xxxxxxxxاستخدم مفاتيح sk_live_ لحركة المرور الإنتاجية.
استخدم مفاتيح sk_test_ لاختبار التكامل في بيئة الاختبار المعزولة بنفس عقد API.
المفاتيح المفقودة أو غير الصالحة أو الملغاة تُرجع invalid_api_key مع رمز HTTP 401.
البدء السريع
أرسل مهمة أولاً. بعد قبول المهمة، اختر طريقة واحدة لتوصيل النتيجة: استقصاء نقطة نهاية المهمة، أو استلام النتيجة النهائية عبر webhook.
أنشئ مهمة فيديو غير متزامنة واستلم معرّف المهمة على الفور.
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 اختياري، وكائن إدخال يحتوي على إعدادات الموجه والإنشاء.
/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) | المدة، نسبة العرض إلى الارتفاع، الدقة، البذور | مطالبة نصية فقط. image_urls، video_urls، و audio_urls غير مطلوبة. |
image-to-video | مطالبة (prompt) + مصفوفة image_urls (1-2 عنوان URL للصورة) | المدة، نسبة العرض إلى الارتفاع، الدقة، البذور | يجب أن تكون image_urls مصفوفة. قم بتوفير عنوان URL واحد للصورة للإطار الأول، أو عنواني URL للصورة للإطارين الأول والأخير. يتم تجاهل الفيديو والصوت. |
reference-to-video | مطالبة (prompt) + صورة واحدة على الأقل أو فيديو | صور، مقاطع فيديو، وصوت ضمن حدود المواد | لا يمكن استخدام الصوت بمفرده مع النص. أضف صورة واحدة على الأقل أو مقطع فيديو عند توفير الصوت. |
text-to-videoاستخدم تحويل النص إلى فيديو عندما يكون الموجه هو المدخل الإبداعي الوحيد. (text-to-video)
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استخدم تحويل الصورة إلى فيديو عندما تكون input.image_urls مصفوفة تحتوي على عنواني URL للصورة 1-2: عنوان URL واحد يحدد الإطار الأول، وعنوانا URL يحددان الإطارين الأول والأخير. يتم تجاهل مراجع الفيديو والصوت في هذا الوضع. (image-to-video)
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"
}
}'معلمات الطلب
أسماء المعلمات، وقيم التعداد، ومسارات نقطة النهاية، والأمثلة هي جزء من عقد واجهة برمجة التطبيقات. تشرح الأوصاف أدناه كيفية تصرف كل حقل.
الرؤوس
| الرأس | مطلوب | الوصف | مثال |
|---|---|---|---|
Authorization | نعم | مفتاح API من نوع Bearer المستخدم لمصادقة الطلب. | Bearer sk_live_xxx |
Content-Type | نعم | جميع طلبات الكتابة تستخدم JSON. | application/json |
الحقول على المستوى العلوي
| الحقل | النوع | مطلوب | الافتراضي | النطاق / التعداد | الأوضاع | مثال |
|---|---|---|---|---|---|---|
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.* الحقول
| الحقل | النوع | مطلوب | الافتراضي | النطاق / التعداد | الأوضاع | مثال |
|---|---|---|---|---|---|---|
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_urlsعناوين URL للصور التي يمكن الوصول إليها بشكل عام. لتحويل الصورة إلى فيديو، أرسل صورة واحدة للإطار الأول أو صورتين للإطارين الأول والأخير. لتحويل المرجع إلى فيديو، أرسل ما يصل إلى 9 صور كمراجع بصرية. (image-to-video) (reference-to-video) | string[] | شرطي | [] | صورة إلى فيديو: 1 أو 2 صورة. مرجع إلى فيديو: حتى 9 صور. (image-to-video) (reference-to-video) | image-to-video / reference-to-video | ["https://.../a.jpg"] |
input.video_urlsمقاطع فيديو مرجعية يمكن الوصول إليها بشكل عام لتحويل المرجع إلى فيديو فقط. يمكنك إرسال ما يصل إلى 3 ملفات فيديو، ويجب أن يكون وقت التشغيل المدمج لها 15 ثانية أو أقل. (reference-to-video) | string[] | لا | [] | حتى 3 مقاطع فيديو. يجب أن يكون طول الفيديو المجمع 15 ثانية أو أقل. | reference-to-video | [] |
input.audio_urlsملفات صوتية مرجعية يمكن الوصول إليها بشكل عام لتحويل المرجع إلى فيديو فقط. يمكنك إرسال ما يصل إلى 3 ملفات صوتية، ويجب أن يكون وقت التشغيل المدمج لها 15 ثانية أو أقل. (reference-to-video) | 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 | تكيفي | الكل | 16:9 |
input.resolutionمستوى دقة الإخراج. | string | لا | 720p | 480p | 720p | 1080p | الكل | 720p |
input.generate_audioما إذا كان يجب على النموذج إنشاء صوت عند دعمه. | boolean | لا | true | صحيح | خطأ | الكل | true |
input.watermarkما إذا كان سيتم إضافة علامة مائية. | boolean | لا | false | صحيح | خطأ | الكل | false |
input.web_searchما إذا كان سيسمح بتعزيز البحث عبر الويب عند دعمه. | boolean | لا | false | صحيح | خطأ | الكل | false |
input.return_last_frameما إذا كان سيتم إرجاع عنوان URL للإطار الأخير عند توفره. | boolean | لا | false | صحيح | خطأ | الكل | false |
input.seedبذرة حتمية. استخدم -1 لبذرة عشوائية. | 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 لاسترداد حالة المهمة الحالية. لا تستقصِ أكثر من مرة كل 10 ثوانٍ. بالنسبة لأنظمة الإنتاج، يفضل استخدام خطافات الويب (webhooks).
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 فارغة. قم بتنزيل وتخزين الملف قبل انتهاء فترة الصلاحية.
خطافات الويب (Webhooks)
عندما يكون callback_url موجودًا، يقوم Seedance باستدعاء نقطة النهاية الخاصة بك عند اكتمال المهمة أو فشلها، ويرسل بيانات JSON تصف النتيجة النهائية. إذا أعادت نقطة النهاية الخاصة بك استجابة غير 2xx أو لم تستجب في غضون 15 ثانية، تتم إعادة محاولة التسليم حتى 5 مرات. تستخدم عمليات إعادة المحاولة نفس معرف المهمة، لذا قم بإزالة التكرارات حسب المعرف. قم بإرجاع استجابة 200 بمجرد تسجيل بيانات رد الاتصال بأمان.
رد اتصال إتمام المهمة
{
"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_url HTTPS ويجب ألا يشير إلى نطاقات شبكة خاصة أو حلقة تكرار أو شبكة محلية.
الأخطاء
تُرجع POST /v1/videos/generations و GET /v1/tasks/:id هذا الشكل من الأخطاء عندما يفشل طلب API نفسه، مثل المعلمات غير الصالحة، أو مفتاح API غير الصالح، أو الأرصدة غير الكافية، أو تحديد المعدل، أو عدم العثور على المهمة. تتضمن بعض الأخطاء حقولًا إضافية مثل 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 مفقود أو غير صالح أو مُلغى. | لا، استخدم مفتاحًا صالحًا. |
insufficient_credits | 402 | أرصدة غير كافية. لم يتم قبول المهمة أو شحنها. | بعد إعادة الشحن. |
forbidden | 403 | مفتاح API يفتقر إلى النطاق المطلوب. | لا. |
not_found | 404 | المهمة غير موجودة أو لا تنتمي إلى مالك المفتاح. | لا. |
rate_limited | 429 | تجاوز معدل الطلب. | نعم، اتبع Retry-After. |
internal_error | 500 | خطأ في الخادم. | نعم، أعد المحاولة لاحقًا. |
حدود المعدل
يتم تطبيق حدود المعدل لكل مفتاح API مع نافذة منزلقة. الإنشاء الافتراضي هو 60 طلبًا في الدقيقة؛ تكون استعلامات الحالة أكثر تساهلاً. تتضمن استجابات HTTP 429 Retry-After.
الإنشاء
60/min
استعلامات الحالة
أكثر تساهلاً
رأس 429
Retry-After
الفواتير والأرصدة
تستخدم واجهة برمجة التطبيقات الاحتياطي عند التقديم، والشحن عند النجاح، واسترداد الأموال عند الفشل. تعرض صفحات الاستخدام في لوحة التحكم سجل أرصدة واجهة برمجة التطبيقات، وسجلات المهام، وإحصائيات الاستخدام المستندة إلى الوقت.
محجوز
يتم التحقق من الأرصدة وحجزها عند قبول المهمة.
تم الشحن
المهام المكتملة تسوي الحجز الحالي.
تم استرداد الأموال
المهام الفاشلة أو التي انتهت مهلتها تعيد الأرصدة المحجوزة تلقائيًا.
افحص الاستخدام في لوحة التحكم
عرض سجلات API، والجداول الزمنية للمهام، وسجل الائتمان، ومقاييس الاستخدام المستندة إلى الوقت.