Seedance 2.0 API
Sisällytä videonluonti tuotteeseesi asynkronisella tehtävänluonnilla, tilan kyselyllä, webhookeilla ja krediittitietoisella laskutuksella.
https://api.seedance2.aiTällä sivulla
Johdanto
API mahdollistaa Seedance 2.0 -videonluontitehtävien ohjelmallisen lähettämisen. Luonti on asynkronista: luo tehtävä, vastaanota tehtävän tunnus heti, ja saat sitten valmiin videon kyselyllä tehtävän päätepisteestä tai vastaanottamalla webhookin.
Asynkroniset tehtävät
Kysely toimii hyvin kehityksessä ja yksinkertaisissa integraatioissa.
Webhook-valmis
Webhookeja suositellaan tuotantoon, koska ne välttävät aggressiivista kyselyä ja ilmoittavat palvelullesi, kun tehtävä saavuttaa päätetilan.
Krediittitietoinen
Krediitit varataan lähetettäessä. Onnistuneista tehtävistä veloitetaan varauksen mukaisesti; epäonnistuneet tai aikakatkaistut tehtävät hyvitetään automaattisesti.
Todennus
Luo API-avain hallintapaneelissa ja lähetä se Bearer-tunnuksena jokaisen pyynnön mukana. Koko avain näytetään vain kerran luontihetkellä.
Authorization: Bearer sk_live_xxxxxxxxKäytä sk_live_-avaimia tuotantoliikenteeseen.
Käytä sk_test_-avaimia sandbox-integraatiotestaukseen samalla API-sopimuksella.
Puuttuvat, virheelliset tai peruutettavat avaimet palauttavat invalid_api_key:n HTTP 401 -tilakoodilla.
Pikaopas
Lähetä ensin tehtävä. Kun tehtävä on hyväksytty, valitse yksi tulosten toimitustapa: kysy tehtävän päätepisteestä tai vastaanota lopullinen tulos webhookin kautta.
Luo asynkroninen videotehtävä ja vastaanota tehtävän tunnus heti.
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
}
}'Hae tehtävän tilan päätepisteestä, kun integraatiosi suosii eksplisiittistä kyselyä.
curl https://api.seedance2.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
-H "Authorization: Bearer sk_live_xxx"Anna callback_url tehtävää lähetettäessä, ja vastaanota sitten valmiiksi- tai epäonnistumispalautukset ja päivitä oma tehtävätietueesi.
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 });
}Luo videotehtävä
Luo videotehtävä POST /v1/videos/generations -kutsulla. Pyynnön rungossa on ylätason malli, valinnainen callback_url ja syöttöobjekti, joka sisältää kehotteen ja luontiasetukset.
/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
}
}'Luontitilat
generation_type ohjaa, mitkä median syötteet hyväksytään ja miten malli tulkitsee niitä.
| Tila | Vaadittu media | Valinnainen media | Huomioita |
|---|---|---|---|
text-to-video | prompt | duration, aspect_ratio, resolution, seed | Vain tekstikehote. image_urls, video_urls ja audio_urls eivät ole tarpeen. |
image-to-video | prompt + image_urls array (1-2 kuva-URL-osoitetta) | duration, aspect_ratio, resolution, seed | image_urls:n on oltava taulukko. Anna 1 kuva-URL ensimmäiselle kuvalle tai 2 kuva-URL ensimmäiselle ja viimeiselle kuvalle. Video ja ääni ohitetaan. |
reference-to-video | prompt + vähintään yksi kuva tai video | kuvat, videot ja ääni materiaalirajoitusten puitteissa | Ääntä ei voi käyttää yksin tekstin kanssa. Lisää vähintään yksi kuva tai video, kun ääni on mukana. |
text-to-videoKäytä teksti-videoksi-tilaa, kun kehoteteksti on ainoa luova syöte. (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-videoKäytä kuva-videoksi-tilaa, kun input.image_urls on taulukko, jossa on 1-2 kuva-URL-osoitetta: yksi URL asettaa ensimmäisen kuvan ja kaksi URL-osoitetta asettavat ensimmäisen ja viimeisen kuvan. Video- ja ääniviitteet ohitetaan tässä tilassa. (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-videoKäytä viite-videoksi-tilaa rikkaampaan ohjaukseen viitekuvilla, videoilla ja äänellä. Ääntä ei voi käyttää yksin tekstin kanssa; sisällytä vähintään yksi kuva tai video, kun ääni on mukana. (reference-to-video)
Materiaalin rajat
- Enintään 9 viitekuvaa
- Enintään 3 viitevideota, kokonaiskesto <= 15 sekuntia
- Enintään 3 viiteääntä, kokonaiskesto <= 15 sekuntia
- Enintään 12 materiaalia yhteensä kaikissa tyypeissä
Tuetut syöttöyhdistelmät
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"
}
}'Pyynnön parametrit
Parametrien nimet, enum-arvot, päätepisteiden polut ja esimerkit ovat osa API-sopimusta. Alla olevat kuvaukset selittävät, miten kukin kenttä käyttäytyy.
Otsikot
| Otsikko | Pakollinen | Kuvaus | Esimerkki |
|---|---|---|---|
Authorization | Kyllä | Bearer API-avain, jota käytetään pyynnön todentamiseen. | Bearer sk_live_xxx |
Content-Type | Kyllä | Kaikki kirjoituspyynnöt käyttävät JSON:ia. | application/json |
Ylätason kentät
| Kenttä | Tyyppi | Pakollinen | Oletus | Alue / Enum | Tilat | Esimerkki |
|---|---|---|---|---|---|---|
modelLuontissa käytetty mallivariantti. | string | Kyllä | - | seedance-2-0 | seedance-2-0-fast | kaikki | seedance-2-0 |
callback_urlHTTPS-päätepiste, joka vastaanottaa tehtävän valmistumis- ja epäonnistumispalautukset. | string | Ei | - | HTTPS URL, ei yksityisiä verkkoja | kaikki | https://your-domain.com/hook |
inputLuontiasetukset ja median viitteet. | object | Kyllä | - | - | kaikki | - |
input.* kentät
| Kenttä | Tyyppi | Pakollinen | Oletus | Alue / Enum | Tilat | Esimerkki |
|---|---|---|---|---|---|---|
input.promptTekstikehote, joka kuvaa luotavaa videota. | string | Kyllä | - | ei-tyhjä teksti | kaikki | a cat surfing |
input.generation_typeLuontitila. Oletusarvoisesti text-to-video. | string | Ei | text-to-video | text-to-video | image-to-video | reference-to-video | - | image-to-video |
input.image_urlsJulkisesti saavutettavissa olevat kuvien URL-osoitteet. Kuva-videoksi-tilassa lähetä 1 kuva ensimmäiselle kuvalle tai 2 kuvaa ensimmäiselle ja viimeiselle kuvalle. Viite-videoksi-tilassa lähetä enintään 9 kuvaa visuaalisina viitteinä. (image-to-video) (reference-to-video) | string[] | Ehdollinen | [] | Kuva-videoksi: 1 tai 2 kuvaa. Viite-videoksi: enintään 9 kuvaa. (image-to-video) (reference-to-video) | image-to-video / reference-to-video | ["https://.../a.jpg"] |
input.video_urlsJulkisesti saavutettavissa olevat viitevideot vain viite-videoksi-tilassa. Voit lähettää enintään 3 videotiedostoa, ja niiden yhteispeliajan on oltava 15 sekuntia tai vähemmän. (reference-to-video) | string[] | Ei | [] | Enintään 3 videota. Videoiden yhteispituus saa olla enintään 15 sekuntia. | reference-to-video | [] |
input.audio_urlsJulkisesti saavutettavissa olevat viiteäänitiedostot vain viite-videoksi-tilassa. Voit lähettää enintään 3 äänitiedostoa, ja niiden yhteispeliajan on oltava 15 sekuntia tai vähemmän. (reference-to-video) | string[] | Ei | [] | Enintään 3 äänitiedostoa. Äänitiedostojen yhteispituus saa olla enintään 15 sekuntia. | reference-to-video | [] |
input.durationTulostusvideon pituus sekunneissa. | int | Ei | 5 | 4-15 sekuntia | kaikki | 5 |
input.aspect_ratioTulostussuhde. 'adaptive' antaa palvelun päätellä parhaan suhteen. | string | Ei | adaptive | 16:9 | 4:3 | 1:1 | 3:4 | 9:16 | 21:9 | mukautuva | kaikki | 16:9 |
input.resolutionTulostusresoluutiotaso. | string | Ei | 720p | 480p | 720p | 1080p | kaikki | 720p |
input.generate_audioTulisiko mallin luoda ääntä, kun tuettu. | boolean | Ei | true | true | false | kaikki | true |
input.watermarkLisätäänkö vesileima. | boolean | Ei | false | true | false | kaikki | false |
input.web_searchSallitaanko verkkohaku, kun tuettu. | boolean | Ei | false | true | false | kaikki | false |
input.return_last_framePalautetaanko viimeisen kuvan URL, kun saatavilla. | boolean | Ei | false | true | false | kaikki | false |
input.seedDeterministinen siemen. Käytä -1 satunnaiselle siemenelle. | int | Ei | -1 | -1 tai 0-4294967295 | kaikki | -1 |
Krediitit vaihtelevat resoluution, keston, mallin ja sen mukaan, sisältääkö viite-videoksi-tila videoviitteitä. Luontivastauksen palauttama krediittiarvo on todellinen varattu määrä kyseiselle tehtävälle. (reference-to-video)
Katso krediittien hinnoitteluVastaus
Tämä on onnistunut vastaus POST /v1/videos/generations -kutsusta. Se tarkoittaa, että tehtävä on hyväksytty ja krediitit on varattu. Käytä palautettua taskId:tä kysyäksesi GET /v1/tasks/:id -päätepisteestä tai sovittaaksesi valmistumis- tai epäonnistumispalautuksen.
POST /v1/videos/generations onnistunut vastaus
{
"taskId": "3f2aK9mR...",
"credits": 60
}Hae tehtävän tila
Käytä GET /v1/tasks/:id -kutsua hakeaksesi nykyisen tehtävän tilan. Älä kysy useammin kuin kerran 10 sekunnissa. Tuotantojärjestelmissä suosi webhookeja.
curl https://api.seedance2.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
-H "Authorization: Bearer sk_live_xxx"Valmistunut tehtävän vastaus
{
"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
}
}Epäonnistuneen tehtävän vastaus
{
"id": "3f2aK9mR...",
"status": "failed",
"created_at": 1781234567,
"model": "seedance-2-0",
"billing_status": "refunded",
"credits": 60,
"failed_reason": "provider_failed"
}| Arvo | Merkitys |
|---|---|
status=queued | Hyväksytty ja odottaa lähetystä tai käsittelyä. |
status=generating | Palveluntarjoaja käsittelee luontia. |
status=completed | Video valmis ja data.results sisältää tulos-URL:n. |
status=failed | Luonti epäonnistui tai aikakatkaistiin. |
billing_status=reserved | Krediitit varataan tehtävän ollessa käynnissä. |
billing_status=charged | Tehtävä onnistui ja varaus on selvitetty. |
billing_status=refunded | Tehtävä epäonnistui tai aikakatkaistiin ja krediitit palautettiin. |
billing_status=refund_failed | Hyvitystransaktio epäonnistui ja vaatii manuaalisen käsittelyn. |
video_expires_at -ajan jälkeen data.results on tyhjä. Lataa ja tallenna tiedosto ennen voimassaoloajan päättymistä.
Webhookit
Kun callback_url on läsnä, Seedance kutsuu päätepistettäsi, kun tehtävä on valmis tai epäonnistunut, ja lähettää JSON-tiedot, jotka kuvaavat lopullista tulosta. Jos päätepisteesi palauttaa muun kuin 2xx-vastauksen tai ei vastaa 15 sekunnin kuluessa, toimitusta yritetään uudelleen jopa 5 kertaa. Uudelleenyritykset käyttävät samaa tehtävän tunnusta, joten poista kaksoiskappaleet tunnuksen perusteella. Palauta 200-vastaus heti, kun olet tallentanut palautusdata turvallisesti.
Tehtävän valmistumisen palautus
{
"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
}
}Tehtävän epäonnistumisen palautus
{
"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 });
}Varmista palautusdatan muoto, poista kaksoiskappaleet tunnuksen perusteella, päivitä oma tehtävätietueesi ja vastaa nopeasti.
callback_url:n on oltava HTTPS ja se ei saa osoittaa yksityisiin, loopback- tai linkkikohtaisiin verkkoalueisiin.
Virheet
POST /v1/videos/generations ja GET /v1/tasks/:id palauttavat tämän virhemuodon, jos API-pyyntö itsessään epäonnistuu, esimerkiksi virheellisten parametrien, virheellisen API-avaimen, riittämättömien krediittien, rajoitusten tai tehtävän löytymättömyyden vuoksi. Jotkin virheet sisältävät lisäkenttiä, kuten required, available tai retry_after tilanteesta riippuen.
{
"error": {
"code": "insufficient_credits",
"message": "Not enough credits for this task.",
"required": 60,
"available": 12
}
}| Koodi | HTTP | Merkitys | Uudelleenyritys? |
|---|---|---|---|
invalid_request | 400 | Puuttuvat tai virheelliset parametrit. | Ei, korjaa pyyntö. |
invalid_api_key | 401 | API-avain puuttuu, on virheellinen tai peruutettu. | Ei, käytä kelvollista avainta. |
insufficient_credits | 402 | Ei riittävästi krediittejä. Tehtävää ei hyväksytä tai veloiteta. | Latauksen jälkeen. |
forbidden | 403 | API-avaimelta puuttuu vaadittava laajuus. | Ei. |
not_found | 404 | Tehtävää ei ole olemassa tai se ei kuulu avaimen omistajalle. | Ei. |
rate_limited | 429 | Pyynnön määrä ylitetty. | Kyllä, noudata Retry-After -otsikkoa. |
internal_error | 500 | Palvelinvirhe. | Kyllä, yritä myöhemmin uudelleen. |
Rajaukset
Rajaukset asetetaan API-avainta kohti liukuvalla ikkunalla. Luonti on oletusarvoisesti 60 pyyntöä minuutissa; tilakyselyt ovat sallivampia. HTTP 429 -vastaukset sisältävät Retry-After -otsikon.
Luonti
60/min
Tilakyselyt
Sallivampi
429 otsikko
Retry-After
Laskutus & krediitit
API käyttää varausta lähetyksessä, veloitusta onnistuessa ja hyvitystä epäonnistuessa. Hallintapaneelin käyttösivut näyttävät API-krediittihistorian, tehtävälokit ja aikapohjaiset käyttötilastot.
Varattu
Krediitit tarkistetaan ja varataan tehtävän hyväksyessä.
Veloitettu
Valmistuneet tehtävät selvittävät olemassa olevan varauksen.
Hyvitetty
Epäonnistuneet tai aikakatkaistut tehtävät palauttavat varatut krediitit automaattisesti.
Tarkastele käyttöä hallintapaneelissa
Katsele API-logeja, tehtävien aikajanoja, krediittihistoriaa ja aikapohjaisia käyttötietoja.