Seedance API
Seedance 2.5 veya Seedance 2.0, eşzamansız görevler, webhook'lar ve kredi bazlı faturalandırma ile video oluşturma özelliğini ürününüze entegre edin.
https://api.seevio.aiBu sayfada
Giriş
API, Seedance 2.5 ve Seedance 2.0 video oluşturma görevlerini programatik olarak göndermenizi sağlar. Önerilen model olan Seedance 2.5; metinden videoya, ilk kare veya ilk ve son kare görselden videoya ve çoklu mod referanslı video oluşturma özelliklerini destekler. Video oluşturma işlemi eşzamansız (asynchronous) olarak yürütülür: Bir görev oluşturduğunuzda hemen bir görev kimliği (task ID) alırsınız; ardından görev uç noktasını yoklayarak (polling) veya bir webhook aracılığıyla tamamlanan videoya erişebilirsiniz.
Eşzamansız görevler
Yoklama (polling) yöntemi, geliştirme aşaması ve basit entegrasyonlar için idealdir.
Webhook desteği
Sürekli sorgu yapmaktan kaçınarak görev son duruma ulaştığında sisteminizi bilgilendirdiği için canlı ortamlar (production) için webhook kullanımı önerilir.
Kredi takibi
Krediler görev gönderildiğinde rezerve edilir. Başarıyla tamamlanan görevlerin ücreti bu rezervasyondan düşülür; başarısız olan veya zaman aşımına uğrayan görevlerin kredileri ise otomatik olarak iade edilir.
Kimlik Doğrulama
Kullanıcı panelinden bir API anahtarı oluşturun ve her istekte bunu Bearer token olarak gönderin. API anahtarının tamamı yalnızca oluşturulduğu an bir kez gösterilir.
Authorization: Bearer sk_live_xxxxxxxxCanlı ortam trafiği için sk_live_ anahtarlarını kullanın.
Aynı API protokolüyle test ortamında entegrasyon denemeleri yapmak için sk_test_ anahtarlarını kullanın.
Eksik, geçersiz veya iptal edilmiş anahtarlar, HTTP 401 koduyla birlikte invalid_api_key hatası döndürür.
Hızlı Başlangıç
Öncelikle bir görev gönderin. Görev kabul edildikten sonra sonuç teslim yöntemlerinden birini seçin: Görev uç noktasını belirli aralıklarla sorgulayabilir veya sonucu bir webhook üzerinden doğrudan alabilirsiniz.
Eşzamansız bir video görevi oluşturun ve anında bir görev kimliği (task ID) alın.
curl https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2-5",
"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
}
}'Entegrasyonunuzun durumu doğrudan sorgulamayı tercih ettiği durumlarda görev durumu uç noktasını çağırın.
curl https://api.seevio.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
-H "Authorization: Bearer sk_live_xxx"Görevi gönderirken bir callback_url parametresi geçerek işlemin başarıyla tamamlandığı veya başarısız olduğu durumlarda geri çağrı alın ve kendi görev kaydınızı güncelleyin.
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 });
}Video görevi oluşturma
POST /v1/videos/generations uç noktasıyla bir video görevi oluşturun. İstek gövdesi; üst düzey bir model parametresi, isteğe bağlı bir callback_url ve istem ile oluşturma ayarlarını barındıran bir input nesnesinden oluşur.
/v1/videos/generationscurl https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2-5",
"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
}
}'Oluşturma modları
generation_type parametresi, hangi medya girdilerinin kabul edileceğini ve modelin bunları nasıl yorumlayacağını belirler.
4 ila 30 saniye uzunluğunda, 480p veya 720p çözünürlükte çıktılar üretmek için model değerini seedance-2-5 olarak ayarlayın.
- Metinden videoya: Serbest, 16:9, 9:16, 1:1, 4:3, 3:4 veya 21:9 en boy oranı desteği
- Görselden videoya: Tek bir ilk kare görseli veya ilk ve son kareyi belirleyen iki görsel ile üretim (en boy oranı otomatik olarak ayarlanmalıdır)
- Referanslı video: En fazla 30 görsel, 10 video ve 10 ses dosyası olmak üzere toplamda maksimum 50 materyal desteği
- Her bir video veya ses referansı 2-30 saniye arasında olmalıdır; toplam video süresi ve toplam ses süresi ayrı ayrı en fazla 30 saniye olabilir
- Yalnızca ses referansıyla üretim yapma ve return_last_frame özellikleri desteklenir; seed parametresi desteklenmez
| Mod | Zorunlu medya | İsteğe bağlı medya | Notlar |
|---|---|---|---|
text-to-video | prompt | duration, aspect_ratio, resolution, seed | Yalnızca metin istemi. image_urls, video_urls ve audio_urls parametrelerine gerek yoktur. |
image-to-video | prompt + image_urls dizisi (1-2 görsel URL'si) | duration, aspect_ratio, resolution, seed | image_urls parametresi bir dizi olmalıdır. İlk kare için 1, ilk ve son kareler için 2 görsel URL'si gönderin. Video ve ses referansları göz ardı edilir. |
reference-to-video | prompt + en az bir görsel, video veya ses referansı | materyal sınırları dahilinde görseller, videolar ve sesler | Seedance 2.5 yalnızca ses içeren referansları destekler. Seedance 2.0 için ses dosyası gönderildiğinde yanına en az bir görsel veya video eklenmelidir. |
text-to-videoYaratıcı girdi olarak yalnızca metin istemi (prompt) kullanılacağı durumlarda metinden videoya modunu tercih edin.
curl https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2-5",
"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
}
}'image-to-videoGirdi olarak input.image_urls dizisinde 1 veya 2 adet görsel URL'si gönderildiğinde bu modu kullanın: Tek URL ilk kareyi, iki URL ise ilk ve son kareyi belirler. Bu modda video ve ses referansları dikkate alınmaz.
curl https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2-5",
"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-videoReferans görseller, videolar ve seslerle daha detaylı bir yönlendirme sağlamak için referanslı video modunu kullanın. Seedance 2.5 ses dosyasını tek referans türü olarak kabul edebilir; Seedance 2.0 ise ses dosyası gönderildiğinde en az bir adet görsel veya video referansı da gerektirir.
Materyal sınırları
- Seedance 2.5: En fazla 30 referans görseli
- Seedance 2.5: Her biri 2-30 saniye arasında ve toplam süresi <= 30 saniye olan en fazla 10 referans videosu
- Seedance 2.5: Her biri 2-30 saniye arasında ve toplam süresi <= 30 saniye olan en fazla 10 referans sesi
- Seedance 2.5: Tüm türler dahil olmak üzere toplamda en fazla 50 materyal
- Seedance 2.0 varyantları mevcut sınırlarını korur: 9 görsel, 3 video, 3 ses dosyası ve video/ses grubu başına en fazla 15 saniye
Desteklenen girdi kombinasyonları
curl https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2-5",
"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": "720p"
}
}'İstek parametreleri
Parametre adları, enum değerleri, uç nokta yolları ve örnekler API protokolünün bir parçasıdır. Aşağıdaki açıklamalar her bir alanın nasıl çalıştığını açıklamaktadır.
Üstbilgiler
| Üstbilgi | Zorunlu | Açıklama | Örnek |
|---|---|---|---|
Authorization | Evet | İsteğin kimliğini doğrulamak için kullanılan Bearer API anahtarı. | Bearer sk_live_xxx |
Content-Type | Evet | Tüm veri yazma isteklerinde JSON kullanılır. | application/json |
Üst düzey alanlar
| Alan | Tür | Zorunlu | Varsayılan | Aralık / Enum | Modlar | Örnek |
|---|---|---|---|---|---|---|
modelÜretim için kullanılacak model varyantı. Seedance 2.5 için seedance-2-5, Seedance 2.0 için seedance-2-0, Seedance 2.0 Fast için seedance-2-0-fast, Seedance 2.0 Mini için seedance-2-0-mini değerini kullanın. | string | Evet | - | seedance-2-5 | seedance-2-0 | seedance-2-0-fast | seedance-2-0-mini | hepsi | seedance-2-5 |
callback_urlGörev başarıyla tamamlandığında veya başarısız olduğunda bildirim alan HTTPS uç noktası. | string | Hayır | - | HTTPS URL, özel ağlara izin verilmez | hepsi | https://your-domain.com/hook |
inputÜretim ayarları ve medya referansları. | object | Evet | - | - | hepsi | - |
input.* alanlar
| Alan | Tür | Zorunlu | Varsayılan | Aralık / Enum | Modlar | Örnek |
|---|---|---|---|---|---|---|
input.promptOluşturulacak videoyu tanımlayan metin istemi. | string | Evet | - | boş olmayan metin | hepsi | a cat surfing |
input.generation_typeVideo oluşturma modu. Varsayılan değer text-to-video modudur. | string | Hayır | text-to-video | text-to-video | image-to-video | reference-to-video | - | image-to-video |
input.image_urlsHerkese açık, erişilebilir görsel URL'leri. Görselden videoya modu için ilk kare için 1, ilk ve son kareler için 2 görsel gönderin. Referanslı video modu için Seedance 2.5 en fazla 30, Seedance 2.0 ise en fazla 9 görsel kabul eder. | string[] | Koşullu | [] | Görselden videoya: 1 veya 2 görsel. Referanslı video: Seedance 2.5 için en fazla 30; Seedance 2.0 için en fazla 9. | image-to-video / reference-to-video | ["https://.../a.jpg"] |
input.video_urlsYalnızca referanslı video modunda kullanılabilen, herkese açık referans video URL'leri. Seedance 2.5, her biri 2-30 saniye olan ve toplam oynatma süresi <= 30 saniye olan en fazla 10 video kabul eder. Seedance 2.0 ise toplam oynatma süresi <= 15 saniye olan en fazla 3 video kabul eder. | string[] | Hayır | [] | Seedance 2.5: Her biri 2-30 saniye olan en fazla 10 video, toplam süre <= 30 saniye. Seedance 2.0: En fazla 3 video, toplam süre <= 15 saniye. | reference-to-video | [] |
input.audio_urlsYalnızca referanslı video modunda kullanılabilen, herkese açık referans ses dosyası URL'leri. Seedance 2.5, her biri 2-30 saniye olan, toplam oynatma süresi <= 30 saniye olan en fazla 10 ses dosyası kabul eder ve yalnızca ses içeren referanslara izin verir. Seedance 2.0 ise toplam oynatma süresi <= 15 saniye olan en fazla 3 ses dosyası kabul eder. | string[] | Hayır | [] | Seedance 2.5: Her biri 2-30 saniye olan en fazla 10 ses dosyası, toplam süre <= 30 saniye. Seedance 2.0: En fazla 3 ses dosyası, toplam süre <= 15 saniye. | reference-to-video | [] |
input.durationOluşturulacak videonun saniye cinsinden uzunluğu. | int | Hayır | 5 | Seedance 2.5: 4-30 saniye. Seedance 2.0: 4-15 saniye. | hepsi | 5 |
input.aspect_ratioÇıktı en boy oranı. adaptive seçeneği, sistemin en uygun oranı otomatik belirlemesini sağlar. Seedance 2.5 görselden videoya modu yalnızca adaptive değerini destekler. | string | Hayır | adaptive | 16:9 | 4:3 | 1:1 | 3:4 | 9:16 | 21:9 | adaptive | hepsi | 16:9 |
input.resolutionÇıktı çözünürlük seviyesi. | string | Hayır | 720p | Seedance 2.5: 480p | 720p. Seedance 2.0: 480p | 720p | 1080p | 4k (varyanta bağlı olarak). | hepsi | 720p |
input.generate_audioDesteklendiği durumlarda modelin ses üretip üretmeyeceği. | boolean | Hayır | true | true | false | hepsi | true |
input.watermarkFiligran eklenip eklenmeyeceği. | boolean | Hayır | false | true | false | hepsi | false |
input.web_searchDesteklendiği durumlarda web araması desteğinin kullanılıp kullanılmayacağı. | boolean | Hayır | false | true | false | hepsi | false |
input.return_last_frameDesteklendiği durumlarda son kare URL'sinin döndürülüp döndürülmeyeceği. | boolean | Hayır | false | true | false | hepsi | false |
input.seedSeedance 2.0 varyantları için deterministik tohum (seed) değeri. Seedance 2.5 bu alanı desteklemez; boş bırakılmalıdır. | int | Hayır | -1 | -1 veya 0-4294967295 | hepsi | -1 |
Kredi maliyetleri çözünürlüğe, süreye, modele ve referanslı video modunda video referansı bulunup bulunmadığına göre değişiklik gösterir. İstek oluşturulduğunda dönen yanıttaki credits değeri, o görev için rezerve edilen kesin miktarı gösterir.
Kredi fiyatlandırmasını görüntüleYanıt
Bu yanıt, POST /v1/videos/generations isteğinin başarıyla tamamlandığını gösterir. Görevin kabul edildiği ve kredilerin rezerve edildiği anlamına gelir. GET /v1/tasks/:id uç noktasını sorgulamak veya gelen geri çağrı bildirimini eşleştirmek için dönen taskId değerini kullanın.
POST /v1/videos/generations başarılı yanıtı
{
"taskId": "3f2aK9mR...",
"credits": 100
}Görev durumunu sorgulama
Mevcut görev durumunu sorgulamak için GET /v1/tasks/:id uç noktasını kullanın. Sorgulamayı 10 saniyede birden daha sık yapmayın. Canlı sistemler için webhook kullanımı önerilir.
curl https://api.seevio.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
-H "Authorization: Bearer sk_live_xxx"Tamamlanan görev yanıtı
{
"id": "3f2aK9mR...",
"status": "completed",
"created_at": 1781234567,
"model": "seedance-2-5",
"billing_status": "charged",
"credits": 100,
"failed_reason": null,
"data": {
"results": ["https://cdn.seevio.ai/.../x.mp4"],
"video_expires_at": "2026-06-13T10:00:00Z",
"last_frame_url": null,
"processing_time": 48
}
}Başarısız olan görev yanıtı
{
"id": "3f2aK9mR...",
"status": "failed",
"created_at": 1781234567,
"model": "seedance-2-5",
"billing_status": "refunded",
"credits": 100,
"failed_reason": "provider_failed"
}| Değer | Anlamı |
|---|---|
status=queued | Kabul edildi; gönderilmeyi veya işlenmeyi bekliyor. |
status=generating | Sağlayıcı video oluşturma işlemini yürütüyor. |
status=completed | Video başarıyla tamamlandı ve data.results alanı sonuç URL'sini içeriyor. |
status=failed | Video oluşturma başarısız oldu veya zaman aşımına uğradı. |
billing_status=reserved | Görev devam ederken krediler rezerve edilir. |
billing_status=charged | Görev başarıyla tamamlandı ve ayrılan kredi tahsil edildi. |
billing_status=refunded | Görev başarısız oldu veya zaman aşımına uğradı; rezerve edilen krediler iade edildi. |
billing_status=refund_failed | İade işlemi başarısız oldu, manuel müdahale gerekiyor. |
video_expires_at süresi dolduktan sonra data.results alanı boş döner. Dosyayı geçerlilik süresi dolmadan önce indirip depolayın.
Webhook'lar
callback_url tanımlandığında, Seedance görev başarıyla tamamlandığında veya başarısız olduğunda uç noktanızı çağırır ve nihai sonucu açıklayan bir JSON verisi gönderir. Uç noktanız 2xx dışında bir yanıt döndürürse veya 15 saniye içinde yanıt vermezse, gönderim en fazla 5 kez yeniden denenir. Yeniden denemelerde aynı görev kimliği (task id) kullanılır, bu nedenle mükerrer kayıtları engellemek için id bazlı tekilleştirme yapın. Webhook verisini güvenli bir şekilde kaydeder kaydetmez anında bir 200 yanıtı döndürün.
Görev tamamlanma geri çağrısı
{
"id": "3f2aK9mR...",
"status": "completed",
"created_at": 1781234567,
"model": "seedance-2-5",
"data": {
"results": ["https://cdn.seevio.ai/.../x.mp4"],
"video_expires_at": "2026-06-13T10:00:00Z",
"last_frame_url": null,
"processing_time": 48
}
}Görev başarısızlık geri çağrısı
{
"id": "3f2aK9mR...",
"status": "failed",
"created_at": 1781234567,
"model": "seedance-2-5",
"data": {
"failed_reason": "provider_failed",
"credits_refunded": 100
}
}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 });
}Gelen webhook veri yapısını doğrulayın, id değerine göre mükerrer kayıtları engelleyin, görev kaydınızı güncelleyin ve hızlı bir şekilde yanıt verin.
callback_url bir HTTPS bağlantısı olmalı; özel, loopback veya yerel ağ (link-local) adreslerini işaret etmemelidir.
Hatalar
Geçersiz parametreler, geçersiz API anahtarı, yetersiz bakiye, istek sınırı aşımı veya görevin bulunamaması gibi API isteğinin kendisinin başarısız olduğu durumlarda POST /v1/videos/generations ve GET /v1/tasks/:id uç noktaları bu hata formatını döndürür. Bazı hatalar duruma bağlı olarak required, available veya retry_after gibi ek alanlar içerebilir.
{
"error": {
"code": "insufficient_credits",
"message": "Not enough credits for this task.",
"required": 100,
"available": 12
}
}| Kod | HTTP | Anlamı | Yeniden denensin mi? |
|---|---|---|---|
invalid_request | 400 | Eksik veya geçersiz parametreler. | Hayır, isteği düzeltip tekrar deneyin. |
invalid_api_key | 401 | API anahtarı eksik, geçersiz veya iptal edilmiş. | Hayır, geçerli bir anahtar kullanın. |
insufficient_credits | 402 | Yetersiz bakiye. Görev kabul edilmedi ve kredi düşülmedi. | Bakiye yüklendikten sonra. |
forbidden | 403 | API anahtarı gerekli yetki kapsamına (scope) sahip değil. | Hayır. |
not_found | 404 | Görev mevcut değil veya anahtar sahibine ait değil. | Hayır. |
rate_limited | 429 | İstek sınırı aşıldı. | Evet, Retry-After değerine uyun. |
internal_error | 500 | Sunucu hatası. | Evet, daha sonra tekrar deneyin. |
İstek sınırları
İstek sınırları, hareketli zaman penceresi (sliding window) yöntemiyle API anahtarı başına uygulanır. Video oluşturma sınırı varsayılan olarak dakikada 100 istektir; durum sorgulama limitleri ise daha esnektir. HTTP 429 yanıtları Retry-After üstbilgisini içerir.
Video oluşturma
100/dk
Durum sorgulamaları
Daha esnek limitler
429 üstbilgisi
Retry-After
Faturalandırma ve krediler
API; istek gönderildiğinde rezerve etme, işlem başarılı olduğunda tahsil etme ve hata durumunda iade etme modelini kullanır. Yönetici panelindeki kullanım sayfaları; API kredi geçmişini, görev günlüklerini ve zamana dayalı kullanım istatistiklerini görüntüler.
Rezerve Edildi
Görev kabul edildiğinde krediler kontrol edilir ve rezerve edilir.
Tahsil Edildi
Tamamlanan görevler mevcut rezervasyon tutarının kesin tahsilatını gerçekleştirir.
İade Edildi
Başarısız olan veya zaman aşımına uğrayan görevlerin rezerve edilen kredileri otomatik olarak iade edilir.
Kullanımı panelden inceleyin
API günlüklerini, görev zaman tünellerini, kredi geçmişini ve zamana dayalı kullanım metriklerini görüntüleyin.