Seedance 2.0 API

Sisällytä videonluonti tuotteeseesi asynkronisella tehtävänluonnilla, tilan kyselyllä, webhookeilla ja krediittitietoisella laskutuksella.

Perus URL
https://api.seedance2.ai
Tä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_xxxxxxxx
sk_live_

Käytä sk_live_-avaimia tuotantoliikenteeseen.

sk_test_

Käytä sk_test_-avaimia sandbox-integraatiotestaukseen samalla API-sopimuksella.

401

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.

Lähetä tehtävä

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
    }
  }'
Tuloksen vaihtoehto: Kysely

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"
Tuloksen vaihtoehto: Webhook

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.

POST
/v1/videos/generations
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
    }
  }'

Luontitilat

generation_type ohjaa, mitkä median syötteet hyväksytään ja miten malli tulkitsee niitä.

TilaVaadittu mediaValinnainen mediaHuomioita
text-to-videopromptduration, aspect_ratio, resolution, seedVain tekstikehote. image_urls, video_urls ja audio_urls eivät ole tarpeen.
image-to-videoprompt + image_urls array (1-2 kuva-URL-osoitetta)duration, aspect_ratio, resolution, seedimage_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-videoprompt + vähintään yksi kuva tai videokuvat, 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-video

Kä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-video

Kä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-video

Kä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

Teksti + Kuva
Teksti + Video
Teksti + Kuva + Video
Teksti + Kuva + Ääni
Teksti + Video + Ääni
Teksti + Kuva + Video + Ääni
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

OtsikkoPakollinenKuvausEsimerkki
AuthorizationKylläBearer API-avain, jota käytetään pyynnön todentamiseen.Bearer sk_live_xxx
Content-TypeKylläKaikki kirjoituspyynnöt käyttävät JSON:ia.application/json

Ylätason kentät

KenttäTyyppiPakollinenOletusAlue / EnumTilatEsimerkki
model

Luontissa käytetty mallivariantti.

stringKyllä-seedance-2-0 | seedance-2-0-fastkaikkiseedance-2-0
callback_url

HTTPS-päätepiste, joka vastaanottaa tehtävän valmistumis- ja epäonnistumispalautukset.

stringEi-HTTPS URL, ei yksityisiä verkkojakaikkihttps://your-domain.com/hook
input

Luontiasetukset ja median viitteet.

objectKyllä--kaikki-

input.* kentät

KenttäTyyppiPakollinenOletusAlue / EnumTilatEsimerkki
input.prompt

Tekstikehote, joka kuvaa luotavaa videota.

stringKyllä-ei-tyhjä tekstikaikkia cat surfing
input.generation_type

Luontitila. Oletusarvoisesti text-to-video.

stringEitext-to-videotext-to-video | image-to-video | reference-to-video-image-to-video
input.image_urls

Julkisesti 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_urls

Julkisesti 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_urls

Julkisesti 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.duration

Tulostusvideon pituus sekunneissa.

intEi54-15 sekuntiakaikki5
input.aspect_ratio

Tulostussuhde. 'adaptive' antaa palvelun päätellä parhaan suhteen.

stringEiadaptive16:9 | 4:3 | 1:1 | 3:4 | 9:16 | 21:9 | mukautuvakaikki16:9
input.resolution

Tulostusresoluutiotaso.

stringEi720p480p | 720p | 1080pkaikki720p
input.generate_audio

Tulisiko mallin luoda ääntä, kun tuettu.

booleanEitruetrue | falsekaikkitrue
input.watermark

Lisätäänkö vesileima.

booleanEifalsetrue | falsekaikkifalse
input.web_search

Sallitaanko verkkohaku, kun tuettu.

booleanEifalsetrue | falsekaikkifalse
input.return_last_frame

Palautetaanko viimeisen kuvan URL, kun saatavilla.

booleanEifalsetrue | falsekaikkifalse
input.seed

Deterministinen siemen. Käytä -1 satunnaiselle siemenelle.

intEi-1-1 tai 0-4294967295kaikki-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 hinnoittelu

Vastaus

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"
}
ArvoMerkitys
status=queuedHyväksytty ja odottaa lähetystä tai käsittelyä.
status=generatingPalveluntarjoaja käsittelee luontia.
status=completedVideo valmis ja data.results sisältää tulos-URL:n.
status=failedLuonti epäonnistui tai aikakatkaistiin.
billing_status=reservedKrediitit varataan tehtävän ollessa käynnissä.
billing_status=chargedTehtävä onnistui ja varaus on selvitetty.
billing_status=refundedTehtävä epäonnistui tai aikakatkaistiin ja krediitit palautettiin.
billing_status=refund_failedHyvitystransaktio 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
  }
}
KoodiHTTPMerkitysUudelleenyritys?
invalid_request400Puuttuvat tai virheelliset parametrit.Ei, korjaa pyyntö.
invalid_api_key401API-avain puuttuu, on virheellinen tai peruutettu.Ei, käytä kelvollista avainta.
insufficient_credits402Ei riittävästi krediittejä. Tehtävää ei hyväksytä tai veloiteta.Latauksen jälkeen.
forbidden403API-avaimelta puuttuu vaadittava laajuus.Ei.
not_found404Tehtävää ei ole olemassa tai se ei kuulu avaimen omistajalle.Ei.
rate_limited429Pyynnön määrä ylitetty.Kyllä, noudata Retry-After -otsikkoa.
internal_error500Palvelinvirhe.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.

API-lokit