Vai al contenuto

Seedance 2.0 MiniRiferimento API

Tutto quello che ti serve per chiamare Seedance 2.0 Mini dal codice: una guida rapida in tre passaggi, ogni campo con i suoi limiti, la formula dei prezzi, webhook e idempotenza. Gli strumenti MCP usano la stessa API /v1: con l'accesso via MCP spendi il saldo creativo, con una chiave API il saldo dell'account API sviluppatori.

EndpointPOST /v1/videos/generationsVersione del modellodreamina-seedance-2-0-mini-260615OpenAPIllms.txtPer gli agenti IA
Richiedi l'accesso all'API

L'accesso all'API per sviluppatori è su richiesta.

Guida rapidain tre chiamate

Imposta una chiave, invia il lavoro con un tetto di prezzo, poi leggi il risultato.

  1. 01

    Imposta la chiave

    L'accesso all'API per sviluppatori è su richiesta: chiedilo nello studio, in Chiavi API. La chiave viene mostrata una sola volta, quindi salvala in una variabile d'ambiente.

    Shell
    export API_KEY="sk_test_…"
  2. 02

    Invia il lavoro

    Invia la clip con POST, un Idempotency-Key e un tetto max_credits (o un quote_id). Ricevi subito un 202 e un lavoro in coda, e i crediti vengono riservati.

    POST /videos/generations
    curl https://api.pershot.app/v1/videos/generations \
      -H "Authorization: Bearer $API_KEY" \
      -H "Idempotency-Key: $(uuidgen)" \
      -H "Content-Type: application/json" \
      -d '{
        "model": "seedance-2.0-mini",
        "prompt": "Creator holds the bottle to camera and explains one benefit, handheld, natural room light.",
        "duration": 10,
        "resolution": "720p",
        "aspect_ratio": "16:9",
        "generate_audio": true,
        "max_credits": 42
      }'
    Dovresti vedere
    {
      "id": "job_01J9ZK4T8W",
      "object": "job",
      "kind": "video",
      "status": "queued",
      "money_status": "reserved",
      "queue_position": 2,
      "requested_model": "seedance-2.0-mini",
      "credits_quoted": 42,
      "credits_charged": null
    }
  3. 03

    Leggi il risultato

    Fai GET del lavoro finché lo stato non è succeeded. outputs[].url è firmato e scade dopo 24 ore, quindi scarica ciò che vuoi tenere.

    GET /jobs/{id}
    curl https://api.pershot.app/v1/jobs/job_01J9ZK4T8W \
      -H "Authorization: Bearer $API_KEY"

Parametrie limiti

Letti dal documento OpenAPI, generato dagli stessi schemi con cui l'API convalida le richieste. I campi sconosciuti vengono rifiutati.

Campi della richiesta di Seedance 2.0 Mini
CampoTipoValori ammessiNote
modelObbligatoriostringseedance-2.0-fast · seedance-2.0-mini · autoL'id del modello.
promptObbligatoriostring2–2000 caratteriCosa generare: il soggetto, la camera e la luce.
durationPredefinito: 5integer4–15Durata del risultato in secondi interi, fino a 15.
resolutionPredefinito: "720p"string480p · 720pRisoluzione del risultato. 480p per le bozze, 720p per la consegna; ognuna è una generazione a sé.
aspect_ratioPredefinito: "16:9"string16:9 · 9:16 · 1:1Forma del fotogramma.
generate_audioPredefinito: trueboolean–Audio nativo. Il prezzo è lo stesso, attivo o disattivato.
image_urlFacoltativostringURL httpsPrimo fotogramma per il video; l'immagine di partenza per i modelli di modifica. Un URL https pubblico o un URL di caricamento.
reference_image_urlsFacoltativostring[]Fino a 9 · URL httpsImmagini di riferimento per soggetto e stile. Richiamale nel prompt come @image1, @image2.
seedFacoltativointeger0–2.147.483.647Accettato e ignorato: Seedance 2.0 non accetta un seed.
quote_idFacoltativostringqt_…Esegue al prezzo di un preventivo di POST /v1/quotes, valido per 10 minuti.
max_creditsFacoltativonumber> 0Il massimo che questo lavoro può costare. Oltre questa cifra il lavoro viene rifiutato, mai addebitato.
webhook_urlFacoltativostringURL httpsUn URL https che riceve gli eventi del lavoro.
end_user_idFacoltativostring1–128 caratteriPer gli account sviluppatore approvati (accesso su richiesta): il tuo ID utente per questa richiesta, mostrato nell'utilizzo.
project_idFacoltativostringprj_…
shot_idFacoltativostringsht_…
routing_preferenceFacoltativostringstability · speed
enhanceFacoltativoobject–

Invia esattamente uno tra quote_id e max_credits. Questo endpoint rifiuta model "auto": per i video, chiama prima POST /v1/auto/plan, poi invia il modello scelto con max_credits.

Frequenza e lavori simultanei
Per impostazione predefinita, 60 richieste al minuto per chiave e 3 lavori alla volta per account. Più chiavi non aumentano i lavori simultanei.

Limiti

Letti dalla stessa tabella su cui si basano i controlli dell'API. Ogni riga indica chi controlla il limite e cosa succede se lo superi.

  • ApplicatoLo controlliamo noi e rispondiamo 400 prima di qualsiasi preventivo o riserva.
  • FornitoreLo controlla il fornitore. Un lavoro che rifiuta non riesce, e non viene addebitato nulla.
  • ConsigliatoNessuno lo controlla. Restarci dentro dà risultati migliori.
Limiti per seedance-2.0-mini
LimiteValoreUnitàChi controllaOltre il limite
Richiesta
Lunghezza del promptpromptda 2 a 2000caratteriApplicato400 invalid_request su prompt, prima di qualsiasi preventivo o riserva.
Prompt in inglesepromptfino a 1000paroleConsigliatoAccettato. Con un prompt più lungo il modello potrebbe seguirlo meno fedelmente.
Prompt in cinesepromptfino a 500caratteri cinesiConsigliatoAccettato. Con un prompt più lungo il modello potrebbe seguirlo meno fedelmente.
Duratadurationda 4 a 15Predefinito 5secondiApplicato400 invalid_request su duration. Solo secondi interi.
Risoluzioneresolution480p, 720pPredefinito 720p–Applicato400 invalid_request su resolution.
Proporzioniaspect_ratio16:9, 9:16, 1:1Predefinito 16:9–Applicato400 invalid_request su aspect_ratio.
SeedseedIgnorato–FornitoreAccettato e non inviato: Seedance 2.0 non accetta un seed, quindi un seed non ripete un risultato.
Durata del video in ingressoinput_video_secondsda 2 a 15secondiApplicato400 invalid_request su POST /v1/quotes. Le generazioni tramite API non accettano un video in ingresso.
Immagini che invii
Immagini di riferimentoreference_image_urlsfino a 9immaginiApplicato400 invalid_request su reference_image_urls.
Primo fotogramma o riferimentireference_image_urlsimage_url o reference_image_urls, non entrambi–Applicato400 invalid_request su reference_image_urls. Seedance 2.0 usa una sola delle due modalità per lavoro.
Lato dell'immagineimage_urlreference_image_urlsda 300 a 6000px per latoApplicato ai caricamentiCaricamenti: 400 invalid_request su image_url o reference_image_urls.N, prima di qualsiasi preventivo o riserva. Altri link: il fornitore rifiuta il lavoro, e non viene addebitato nulla.
Forma dell'immagineimage_urlreference_image_urlsda 0,4 a 2,5larghezza ÷ altezzaApplicato ai caricamentiCaricamenti: 400 invalid_request su image_url o reference_image_urls.N, prima di qualsiasi preventivo o riserva. Altri link: il fornitore rifiuta il lavoro, e non viene addebitato nulla.
Dimensione del caricamentofilefino a 10MBApplicatoPOST /v1/uploads risponde 400 invalid_request su file.
Formati di caricamentofileJPEG, PNG, WebP–ApplicatoLetto dal file stesso, non dal suo nome. Qualsiasi altro formato: 400 invalid_request su file.
Dimensione dell'immagine collegataimage_urlreference_image_urlsfino a 30MBFornitorePer le immagini collegate da altri host. Il fornitore rifiuta il lavoro, e non viene addebitato nulla.
Formati dell'immagine collegataimage_urlreference_image_urlsJPEG, PNG, WebP, BMP, TIFF, GIF, HEIC, HEIF–FornitorePer le immagini collegate da altri host. Il fornitore rifiuta il lavoro, e non viene addebitato nulla.
Risultato
Pixel in uscita480p16:9864×4969:16496×8641:1640×640720p16:91280×7209:16720×12801:1960×960pxFornitoreStabiliti dal modello per ogni risoluzione e proporzione.
Frequenza dei fotogrammi24fpsFornitoreUguale per ogni video.
Formato di uscitaMP4–FornitoreOgni video è un MP4, con audio quando generate_audio è attivo.
Link
Link di caricamento7giorniApplicatoDopo, il link risponde 403. Carica di nuovo il file.
Link del risultato24oreApplicatoDopo, il link risponde 403. Richiedi di nuovo il lavoro con GET per avere un link nuovo. Il file resta conservato per 12 mesi (outputs_expire_at del lavoro indica la data), più a lungo se il risultato è salvato in Risorse o usato in un progetto.

Non scarichiamo mai immagini da altri host, quindi per quei link la dimensione la controlla il fornitore, e un lavoro che rifiuta non viene addebitato. Gli stessi limiti sono disponibili in JSON: GET /v1/models restituisce un oggetto limits per ogni modello.

Prezzicalcolati in modo trasparente

Ogni lavoro ha un preventivo in crediti prima dell'esecuzione (1 US$ = 100 crediti). La tariffa al secondo serve per il budget; POST /v1/quotes restituisce la cifra esatta.

crediti = ceil(prezzo di listino BytePlus × 0,55 × 100), dove prezzo di listino = (s in ingresso + s in uscita) × larghezza × altezza × 24 ÷ 1024 × tariffa di listino
Prezzi di Seedance 2.0 Mini
SpecificheAl secondo (API)5 s10 s15 s
480pSenza video in ingresso0,020 $Con un video in ingresso: 0,012 $/s≈ 500 s ogni 10 $10 cr≈ 0,10 $20 cr≈ 0,20 $30 cr≈ 0,30 $
720pSenza video in ingresso0,042 $Con un video in ingresso: 0,025 $/s≈ 238 s ogni 10 $21 cr≈ 0,21 $42 cr≈ 0,42 $63 cr≈ 0,63 $

I lavori rifiutati o non riusciti non vengono addebitati.

Webhooke idempotenza

I nuovi tentativi non addebitano mai due volte e non devi interrogare lo stato di continuo.

Idempotenza
Ogni POST di generazione richiede un Idempotency-Key (da 1 a 255 caratteri ASCII visibili). La stessa chiave entro 24 ore restituisce lo stesso lavoro con HTTP 200, quindi un nuovo tentativo dopo un timeout non crea né addebita mai un secondo lavoro.
Prompt rifiutati
Un prompt rifiutato dal controllo preliminare (422 content_rejected) non crea nulla, quindi puoi riusare la stessa chiave con un nuovo prompt.
Eventi
job.queuedjob.processingjob.succeededjob.failedjob.cancelled
Firma
X-Signature contiene t, l'ora unix, e v1, un HMAC-SHA256 di t, un punto e il corpo grezzo, con il tuo segreto whsec_ come chiave. Rifiuta i timestamp più vecchi di cinque minuti ed elimina i duplicati con X-Event-Id.
Consegna
Una risposta 2xx entro 10 secondi vale come consegnata. Le consegne non riuscite vengono ritentate dopo 1 min, 5 min, 30 min, 2 h e 6 h. I reindirizzamenti non vengono seguiti.
Corpo del webhook
{
  "id": "evt_01J9ZKB1QX",
  "type": "job.succeeded",
  "created_at": "2026-09-29T14:02:31Z",
  "data": {
    "job": {
      "id": "job_01J9ZK4T8W",
      "object": "job",
      "kind": "video",
      "status": "succeeded",
      "money_status": "settled",
      "requested_model": "seedance-2.0-mini",
      "credits_charged": 42,
      "outputs": [
        {
          "kind": "video",
          "url": "https://…/job_01J9ZK4T8W.mp4?sig=…"
        }
      ]
    }
  }
}
Verifica X-Signature
import { createHmac, timingSafeEqual } from "node:crypto";

// rawBody: the request body exactly as received, before any JSON parsing.
export function verifyWebhook(header, rawBody, secret, toleranceSec = 300) {
  let t = null;
  const signatures = [];
  for (const item of (header ?? "").split(",")) {
    const [key, value] = item.split("=", 2);
    if (key === "t") t = Number(value);
    if (key === "v1") signatures.push(Buffer.from(value, "hex"));
  }
  if (!t || Math.abs(Date.now() / 1000 - t) > toleranceSec) return false;
  const expected = createHmac("sha256", secret).update(`${t}.${rawBody}`).digest();
  return signatures.some((s) => s.length === expected.length && timingSafeEqual(s, expected));
}

// verifyWebhook(req.headers["x-signature"], rawBody, process.env.WEBHOOK_SECRET)
// Answer 2xx quickly, and skip an X-Event-Id you have already handled.

Errorie cosa fare

Ogni errore ha la stessa forma: un oggetto error con code, message, param e request_id. Quelli che incontrerai più spesso:

CodiceHTTPCosa fare
invalid_request400Correggi il campo indicato in param.
unauthorized401Controlla la chiave e l'header Bearer.
insufficient_credits402Fai una ricarica, poi riprova con lo stesso Idempotency-Key.
forbidden_model403Aggiungi il modello o lo strumento all'elenco consentito della chiave nello studio, oppure usa un'altra chiave. Strumenti come Migliora hanno bisogno di una voce propria.
quote_expired409Chiedi un nuovo preventivo; i preventivi durano 10 minuti.
price_changed409Il prezzo ha superato il tuo tetto. Chiedi un nuovo preventivo o alza max_credits.
content_rejected422Non è stato addebitato nulla. Cambia il prompt o le immagini.
rate_limited429Aspetta il tempo indicato da Retry-After, poi riprova.
upstream_unavailable503Il modello non è disponibile. Riprova più tardi; un lavoro che non parte mai non viene addebitato.