Seedance API
Integroi videon luonti osaksi tuotettasi Seedance 2.5- tai Seedance 2.0 -malleilla. Tukee asynkronisia tehtäviä, webhookeja ja saldopohjaista laskutusta.
https://api.seevio.aiTällä sivulla
Johdanto
Rajapinnan avulla voit lähettää Seedance 2.5- ja Seedance 2.0 -videonluontitehtäviä ohjelmallisesti. Suositeltu malli on Seedance 2.5, joka tukee tekstistä videoksi -luontia, kuvasta videoksi -luontia (ensimmäisen ruudun tai ensimmäisen ja viimeisen ruudun perusteella) sekä monimuotoista viitteistä videoksi -luontia. Luonti tapahtuu asynkronisesti: luot tehtävän, saat heti tehtävätunnuksen (task ID) ja noudat valmiin videon joko kyselemällä tehtävän tilaa päätepisteestä tai vastaanottamalla webhook-ilmoituksen.
Asynkroniset tehtävät
Tilan kysely (polling) sopii hyvin kehitystyöhön ja yksinkertaisiin integraatioihin.
Webhook-valmis
Webhookien käyttö on suositeltavaa tuotantoympäristössä, sillä se välttää toistuvan kyselyn kuormituksen ja ilmoittaa palvelullesi heti, kun tehtävä saavuttaa päätetilan.
Saldotietoinen
Saldot varataan tehtävän lähetyksen yhteydessä. Onnistuneet tehtävät veloitetaan varauksesta; epäonnistuneet tai aikakatkaistut tehtävät palautetaan automaattisesti.
Autentikointi
Luo API-avain hallintapaneelissa ja lähetä se jokaisen pyynnön mukana Bearer-tunnisteena (token). Koko avain näytetään vain kerran sen luonnin yhteydessä.
Authorization: Bearer sk_live_xxxxxxxxKäytä sk_live_ -alkuisia avaimia tuotantoliikenteessä.
Käytä sk_test_ -alkuisia avaimia integraatiotestaamiseen hiekkalaatikossa saman API-sopimuksen mukaisesti.
Puuttuvat, virheelliset tai mitätöidyt avaimet palauttavat virheen invalid_api_key ja HTTP-tilakoodin 401.
Pikaopas
Lähetä ensin tehtävä. Kun tehtävä on vastaanotettu, valitse toinen tuloksen toimitustavoista: kysy tehtävän tilaa päätepisteestä tai vastaanota lopullinen tulos webhookin kautta.
Luo asynkroninen videotehtävä ja vastaanota tehtävätunnus (task ID) välittömästi.
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": "1080p",
"generate_audio": true,
"watermark": false,
"web_search": false,
"return_last_frame": false
}
}'Hae tietoa tehtävän tilan päätepisteestä, jos integraatiosi suosii suoraa kyselyä.
curl https://api.seevio.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
-H "Authorization: Bearer sk_live_xxx"Määritä callback_url tehtävää lähetettäessä, jolloin saat kutsun tehtävän valmistuessa tai epäonnistuessa ja voit päivittää oman järjestelmäsi tiedot.
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ä tekemällä POST-pyyntö osoitteeseen /v1/videos/generations. Pyynnön runko (body) sisältää päätason model-kentän, valinnaisen callback_url-osoitteen sekä input-objektin, joka sisältää prompt-syötteen ja luontiasetukset.
/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": "1080p",
"generate_audio": true,
"watermark": false,
"web_search": false,
"return_last_frame": false
}
}'Luontitilat
generation_type määrittää, mitä mediatyyppejä pyynnössä hyväksytään ja miten malli tulkitsee niitä.
Aseta malliksi seedance-2-5 luodaksesi 480p-, 720p- tai 1080p-laatuista videota, jonka pituus on 4–30 sekuntia.
- Tekstistä videoksi mukautuvalla (adaptive) tai kiinteällä kuvasuhteella (16:9, 9:16, 1:1, 4:3, 3:4 tai 21:9)
- Kuvasta videoksi yhdellä aloitusruudun kuvalla tai kahdella aloitus- ja lopetusruudun kuvalla; kuvasuhteen on oltava adaptive
- Viitteistä videoksi enintään 30 kuvalla, 10 videolla ja 10 äänitiedostolla (enintään 50 materiaalia yhteensä)
- Jokaisen video- tai ääniviitteen pituuden on oltava 2–30 sekuntia; videoiden yhteiskeston ja äänitiedostojen yhteiskeston on oltava enintään 30 sekuntia
- Pelkän ääniviitteen käyttö sekä return_last_frame ovat tuettuja; seed-parametria ei tueta
| Tila | Pakollinen media | Valinnainen media | Huomautukset |
|---|---|---|---|
text-to-video | prompt | duration, aspect_ratio, resolution, seed | Vain tekstikuvaus. image_urls, video_urls ja audio_urls -kenttiä ei tarvita. |
image-to-video | prompt + image_urls-taulukko (1–2 kuva-URL:ää) | duration, aspect_ratio, resolution, seed | image_urls-kentän on oltava taulukko. Anna 1 kuva-URL ensimmäistä ruutua varten tai 2 kuva-URL-osoitetta ensimmäistä ja viimeistä ruutua varten. Videot ja äänet jätetään huomiotta. |
reference-to-video | prompt + vähintään yksi kuva-, video- tai ääniviite | kuvat, videot ja äänet materiaalirajoitusten puitteissa | Seedance 2.5 tukee pelkkiä ääniviitteitä. Jos käytät Seedance 2.0 -mallia, lisää vähintään yksi kuva tai video, kun käytät ääntä. |
text-to-videoKäytä tekstistä videoksi -tilaa, kun sanallinen kuvaus (prompt) on ainoa luova syöte.
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": "1080p",
"generate_audio": true,
"watermark": false,
"web_search": false,
"return_last_frame": false
}
}'image-to-videoKäytä kuvasta videoksi -tilaa, kun input.image_urls on taulukko, jossa on 1–2 kuva-URL-osoitetta: yksi URL määrittää ensimmäisen ruudun ja kaksi URL-osoitetta määrittävät ensimmäisen ja viimeisen ruudun. Tässä tilassa video- ja ääniviitteet jätetään huomiotta.
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-videoKäytä viitteistä videoksi -tilaa tarkempaan ohjaukseen viitekuvien, -videoiden ja -äänien avulla. Seedance 2.5 hyväksyy pelkän äänen viitteeksi; Seedance 2.0 vaatii vähintään yhden kuvan tai videon, jos ääntä käytetään.
Materiaalien rajoitukset
- Seedance 2.5: enintään 30 viitekuvaa
- Seedance 2.5: enintään 10 viitevideota, kukin 2–30 sekuntia ja yhteiskesto <= 30 sekuntia
- Seedance 2.5: enintään 10 viiteääntä, kukin 2–30 sekuntia ja yhteiskesto <= 30 sekuntia
- Seedance 2.5: enintään 50 materiaalia yhteensä kaikissa tyypeissä
- Seedance 2.0 -versioissa säilyvät entiset rajoitukset: 9 kuvaa, 3 videota, 3 ääntä ja 15 sekuntia per video-/ääniryhmä
Tuetut syöyteyhdistelmät
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"
}
}'Kyselyn parametrit
Parametrien nimet, enum-arvot, päätepisteiden polut ja esimerkit ovat osa API-sopimusta. Alla olevat kuvaukset selittävät kunkin kentän toiminnan.
Otsakkeet
| Otsake | Pakollinen | Kuvaus | Esimerkki |
|---|---|---|---|
Authorization | Kyllä | Bearer API-avain, jota käytetään pyynnön todennukseen. | Bearer sk_live_xxx |
Content-Type | Kyllä | Kaikki kirjoituspyynnöt käyttävät JSON-muotoa. | application/json |
Päätason kentät
| Kenttä | Tyyppi | Pakollinen | Oletus | Alue / Enum | Tilat | Esimerkki |
|---|---|---|---|---|---|---|
modelLuontiin käytettävä malliversio. Käytä arvoa seedance-2-5 (Seedance 2.5), seedance-2-0 (Seedance 2.0), seedance-2-0-fast (Seedance 2.0 Fast) tai seedance-2-0-mini (Seedance 2.0 Mini). | string | Kyllä | - | seedance-2-5 | seedance-2-0 | seedance-2-0-fast | seedance-2-0-mini | kaikki | seedance-2-5 |
callback_urlHTTPS-päätepiste, johon lähetetään takaisinkutsut tehtävän valmistumisesta tai epäonnistumisesta. | string | Ei | - | HTTPS-osoite, ei yksityisiä verkkoja | kaikki | https://your-domain.com/hook |
inputLuontiasetukset ja mediatiedostojen viitteet. | object | Kyllä | - | - | kaikki | - |
input.* kentät
| Kenttä | Tyyppi | Pakollinen | Oletus | Alue / Enum | Tilat | Esimerkki |
|---|---|---|---|---|---|---|
input.promptTekstikuvaus luotavasta videosta. | string | Kyllä | - | ei-tyhjä teksti | kaikki | a cat surfing |
input.generation_typeLuontitila. Oletusarvo on text-to-video. | string | Ei | text-to-video | text-to-video | image-to-video | reference-to-video | - | image-to-video |
input.image_urlsJulkisesti saatavilla olevat kuvien URL-osoitteet. Kuvasta videoksi -tilassa lähetä 1 kuva ensimmäistä ruutua varten tai 2 kuvaa ensimmäistä ja viimeistä ruutua varten. Viitteestä videoksi -tilassa Seedance 2.5 hyväksyy enintään 30 kuvaa ja Seedance 2.0 enintään 9 kuvaa. | string[] | Ehdollinen | [] | Kuvasta videoksi: 1 tai 2 kuvaa. Viitteestä videoksi: enintään 30 (Seedance 2.5) tai enintään 9 (Seedance 2.0). | image-to-video / reference-to-video | ["https://.../a.jpg"] |
input.video_urlsJulkisesti saatavilla olevat viitevideot, vain viitteestä videoksi -tilassa. Seedance 2.5 hyväksyy enintään 10 videota, kukin 2–30 sekuntia ja yhteiskesto <= 30 sekuntia. Seedance 2.0 hyväksyy enintään 3 videota, joiden yhteiskesto on <= 15 sekuntia. | string[] | Ei | [] | Seedance 2.5: enintään 10 videota, kukin 2–30 sekuntia, yhteiskesto <= 30 sekuntia. Seedance 2.0: enintään 3 videota, yhteiskesto <= 15 sekuntia. | reference-to-video | [] |
input.audio_urlsJulkisesti saatavilla olevat viiteäänitiedostot, vain viitteestä videoksi -tilassa. Seedance 2.5 hyväksyy enintään 10 äänitiedostoa, kukin 2–30 sekuntia ja yhteiskesto <= 30 sekuntia (sallii myös pelkät ääniviitteet). Seedance 2.0 hyväksyy enintään 3 tiedostoa, joiden yhteiskesto on <= 15 sekuntia. | string[] | Ei | [] | Seedance 2.5: enintään 10 äänitiedostoa, kukin 2–30 sekuntia, yhteiskesto <= 30 sekuntia. Seedance 2.0: enintään 3 äänitiedostoa, yhteiskesto <= 15 sekuntia. | reference-to-video | [] |
input.durationLuotavan videon pituus sekunteina. | int | Ei | 5 | Seedance 2.5: 4–30 sekuntia. Seedance 2.0: 4–15 sekuntia. | kaikki | 5 |
input.aspect_ratioLuotavan videon kuvasuhde. adaptive antaa palvelun päätellä parhaan kuvasuhteen. Seedance 2.5 -mallin kuvasta videoksi -tila tukee vain adaptive-arvoa. | string | Ei | adaptive | 16:9 | 4:3 | 1:1 | 3:4 | 9:16 | 21:9 | adaptive | kaikki | 16:9 |
input.resolutionLuotavan videon resoluutio. | string | Ei | 720p | Seedance 2.5: 480p | 720p | 1080p. Seedance 2.0: 480p | 720p | 1080p | 4k (riippuen malliversiosta). | kaikki | 720p |
input.generate_audioMäärittää, luoko malli äänen, jos se on tuettu. | boolean | Ei | true | true | false | kaikki | true |
input.watermarkMäärittää, lisätäänkö videoon vesileima. | boolean | Ei | false | true | false | kaikki | false |
input.web_searchMäärittää, sallitaanko verkkohakujen hyödyntäminen tiedonhaussa, jos se on tuettu. | boolean | Ei | false | true | false | kaikki | false |
input.return_last_frameMäärittää, palautetaanko viimeisen ruudun kuvan URL-osoite, jos se on saatavilla. | boolean | Ei | false | true | false | kaikki | false |
input.seedDeterministinen siemenluku Seedance 2.0 -versioille. Seedance 2.5 ei tue tätä kenttää; jätä se pois. | int | Ei | -1 | -1 tai 0–4294967295 | kaikki | -1 |
Kuluvat saldot vaihtelevat resoluution, keston, mallin sekä sen mukaan, sisältääkö viitevideon luonti videoviitteitä. Luontipyynnön vastauksessa palautettava credits-arvo on tälle tehtävälle todellisuudessa varattu saldomäärä.
Katso hinnoitteluVastaus
Tämä on onnistunut vastaus POST /v1/videos/generations -pyyntöön. Se tarkoittaa, että tehtävä on vastaanotettu ja saldot on varattu. Käytä palautettua taskId-tunnusta kyselyyn GET /v1/tasks/:id tai yhdistääksesi sen valmistumis- tai virheilmoituksen callback-kutsuun.
POST /v1/videos/generations -pyynnön onnistunut vastaus
{
"taskId": "3f2aK9mR...",
"credits": 100
}Hae tehtävän tila
Hae tehtävän nykyinen tila osoitteesta GET /v1/tasks/:id. Tee kyselyjä enintään kerran 10 sekunnissa. Tuotantojärjestelmissä suositellaan webhookien käyttöä.
curl https://api.seevio.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
-H "Authorization: Bearer sk_live_xxx"Valmiin tehtävän vastaus
{
"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
}
}Epäonnistuneen tehtävän vastaus
{
"id": "3f2aK9mR...",
"status": "failed",
"created_at": 1781234567,
"model": "seedance-2-5",
"billing_status": "refunded",
"credits": 100,
"failed_reason": "provider_failed"
}| Arvo | Merkitys |
|---|---|
status=queued | Hyväksytty ja odottaa lähetystä tai käsittelyä. |
status=generating | Palveluntarjoaja käsittelee videon luontia. |
status=completed | Video on valmis ja data.results sisältää tuloksen URL-osoitteen. |
status=failed | Luonti epäonnistui tai aikakatkaistiin. |
billing_status=reserved | Saldot on varattu tehtävän ollessa käynnissä. |
billing_status=charged | Tehtävä onnistui ja varattu saldo veloitettiin. |
billing_status=refunded | Tehtävä epäonnistui tai aikakatkaistiin, ja varattu saldo palautettiin. |
billing_status=refund_failed | Saldon palautustapahtuma epäonnistui ja vaatii manuaalista käsittelyä. |
Ajankohdan video_expires_at jälkeen data.results on tyhjä. Lataa ja tallenna tiedosto ennen voimassaoloajan päättymistä.
Webhookit
Kun callback_url on määritetty, Seedance kutsuu päätepistettäsi tehtävän valmistuessa tai epäonnistuessa ja lähettää lopullisen tuloksen JSON-muodossa. Jos päätepisteesi palauttaa muun kuin 2xx-vastauksen tai ei vastaa 15 sekunnin kuluessa, lähetystä yritetään uudelleen enintään 5 kertaa. Uudelleenyritykset käyttävät samaa task id -tunnusta, joten poista kaksoiskappaleet tunnuksen perusteella. Palauta 200-vastaus heti, kun olet tallentanut callback-tiedot onnistuneesti.
Tehtävän valmistumisen takaisinkutsu (callback)
{
"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
}
}Tehtävän epäonnistumisen takaisinkutsu (callback)
{
"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 });
}Vahvista callback-tietojen rakenne, poista kaksoiskappaleet tunnuksen (id) perusteella, päivitä oma tehtäväluettelosi ja vastaa nopeasti.
callback_url-osoitteen on käytettävä HTTPS-yhteyttä, eikä se saa osoittaa yksityisiin, loopback- tai link-local-verkko-osoitteisiin.
Virheet
POST /v1/videos/generations ja GET /v1/tasks/:id palauttavat tämän virherakenteen, kun itse API-pyyntö epäonnistuu esimerkiksi virheellisten parametrien, virheellisen API-avaimen, riittämättömän saldon, käyttörajojen ylittymisen tai puuttuvan tehtävän 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": 100,
"available": 12
}
}| Koodi | HTTP | Merkitys | Yritetäänkö uudelleen? |
|---|---|---|---|
invalid_request | 400 | Puuttuvia tai virheellisiä parametreja. | Ei, korjaa pyyntö. |
invalid_api_key | 401 | API-avain puuttuu, on virheellinen tai mitätöity. | Ei, käytä toimivaa avainta. |
insufficient_credits | 402 | Saldosi ei riitä. Tehtävää ei vastaanoteta eikä saldoa varata. | Saldon lataamisen jälkeen. |
forbidden | 403 | API-avaimelta puuttuvat tarvittavat oikeudet. | Ei. |
not_found | 404 | Tehtävää ei löydy tai se ei kuulu avaimen omistajalle. | Ei. |
rate_limited | 429 | Pyyntöjen määräraja ylittyi. | Kyllä, noudata Retry-After-otsaketta. |
internal_error | 500 | Palvelinvirhe. | Kyllä, yritä myöhemmin uudelleen. |
Käyttörajat
Käyttörajat sovelletaan API-avainkohtaisesti liukuvalla aikaikkunalla. Videon luontipyynnöissä oletusraja on 100 pyyntöä minuutissa; tilakyselyissä rajat ovat joustavammat. HTTP 429 -vastaukset sisältävät Retry-After-otsakkeen.
Videon luonti
100/min
Tilakyselyt
Sallivampi
429-otsake
Retry-After
Laskutus & saldot
API käyttää mallia, jossa saldo varataan lähetettäessä, veloitetaan onnistuessa ja palautetaan virhetilanteessa. Hallintapaneelin käyttösivuilta näet API-saldohistorian, tehtävälokit sekä ajanjaksoittaiset käyttötilastot.
Varattu
Saldot tarkistetaan ja varataan, kun tehtävä otetaan vastaan.
Veloitettu
Onnistuneet tehtävät vahvistavat olemassa olevan varauksen.
Palautettu
Epäonnistuneet tai aikakatkaistut tehtävät palauttavat varatut saldot automaattisesti.
Tarkastele käyttöä hallintapaneelissa
Katso API-lokeja, tehtävien aikajanoja, saldohistoriaa sekä ajanjaksoittaisia käyttömittareita.