CheaperGen

Documentazione API di Seedance 2.5

Tutto ciò che ti serve per chiamare Seedance 2.5 dal tuo codice. URL di base: https://cheapergen.com/api/v1. Provalo prima nel playground.

Usi un agente di programmazione?

Incolla questo testo in Claude Code, Cursor, Codex o qualsiasi agente di programmazione. Aggiunge l’API al tuo progetto, conserva la chiave in CHEAPERGEN_API_KEY ed esegue una prova con un preventivo gratuito prima di spendere.

Add Seedance 2.5 (CheaperGen endpoint bytedance/seedance-2.5/text-to-video) to this project by following https://cheapergen.com/agents/integrate.md
Cosa legge il tuo agente

Autenticazione

Crea una chiave in Dashboard → Chiavi API, inviala come token bearer e conservala lato server.

export CHEAPERGEN_API_KEY="cg_live_…"

# every request
Authorization: Bearer $CHEAPERGEN_API_KEY

API Seedance 2.5 Da testo a video

POST/api/v1/run/bytedance/seedance-2.5/text-to-video

Invia un job asincrono e restituisce 202 con l’ID della generazione. Interroga GET /api/v1/generations/{id} o specifica webhook_url. Consulta il ciclo di vita dei job.

Parametri di input

NomeTipoDescrizioneEffetto sul prezzo
promptobbligatoriostringDescrivi l’inquadratura: soggetto, azione, movimento della camera, illuminazione e stile.No
aspect_ratiostring (enum)Formato del fotogramma in output.
Valori: 16:9 · 9:16 · 1:1 · 4:3 · 3:4 · 21:9
Predefinito: 16:9
Sì
resolutionstring (enum)Risoluzione dell’output. Le risoluzioni più alte costano di più al secondo.
Valori: 480p · 720p · 1080p
Predefinito: 720p
Sì
durationintegerDurata della clip generata in secondi (4–30 s). Paghi al secondo.
Intervallo: 4–30s
Predefinito: 5
Sì
generate_audiobooleanGenera suoni, atmosfera e dialoghi sincronizzati. Nessun costo aggiuntivo.
Predefinito: true
No
seedintegerUsa lo stesso seed e le stesse impostazioni per riprodurre un risultato. Lascia vuoto per un valore casuale.No
webhook_urlstringa (URL)Facoltativo. Inviamo con POST la generazione completata a questo indirizzo, firmandola con il segreto del webhook. WebhookNo

Richiesta

const API = "https://cheapergen.com/api/v1";
const headers = {
  Authorization: `Bearer ${process.env.CHEAPERGEN_API_KEY}`,
  "Content-Type": "application/json",
};

// 1. Submit the job
let job = await fetch(`${API}/run/bytedance/seedance-2.5/text-to-video`, {
  method: "POST",
  headers,
  body: JSON.stringify({
    "prompt": "Lento avvicinamento a un ceramista che modella un vaso all’ora dorata, polvere sospesa nella luce, profondità di campo ridotta",
    "aspect_ratio": "16:9",
    "resolution": "720p",
    "duration": 5
  }),
}).then((r) => r.json());

// 2. Poll until it finishes (or pass webhook_url and skip polling)
while (job.status === "queued" || job.status === "running") {
  await new Promise((r) => setTimeout(r, 3000));
  job = await fetch(`${API}/generations/${job.id}`, { headers }).then((r) => r.json());
}

console.log(job.status === "succeeded" ? job.output.video.url : job.error);

Risposta

{
  "id": "gen_8c2QmX1nq0k4",
  "object": "generation",
  "model": "bytedance/seedance-2.5",
  "endpoint": "bytedance/seedance-2.5/text-to-video",
  "mode": "text-to-video",
  "status": "queued",
  "input": {
    "prompt": "Lento avvicinamento a un ceramista che modella un vaso all’ora dorata, polvere sospesa nella luce, profondità di campo ridotta",
    "aspect_ratio": "16:9",
    "resolution": "720p",
    "duration": 5
  },
  "output": null,
  "error": null,
  "cost": {
    "amount_usd": 0.2255,
    "currency": "usd",
    "estimated": true,
    "official_usd": null,
    "list_price_source": "official",
    "list_price_label": "Official",
    "saved_usd": null
  },
  "source": "api",
  "started_at": null,
  "completed_at": null,
  "urls": {
    "get": "https://cheapergen.com/api/v1/generations/gen_8c2QmX1nq0k4",
    "cancel": "https://cheapergen.com/api/v1/generations/gen_8c2QmX1nq0k4/cancel"
  },
  "created_at": "2026-10-15T09:21:04Z"
}

API Seedance 2.5 Da immagine a video

POST/api/v1/run/bytedance/seedance-2.5/image-to-video

Invia un job asincrono e restituisce 202 con l’ID della generazione. Interroga GET /api/v1/generations/{id} o specifica webhook_url. Consulta il ciclo di vita dei job.

Parametri di input

NomeTipoDescrizioneEffetto sul prezzo
promptobbligatoriostringDescrivi l’inquadratura: soggetto, azione, movimento della camera, illuminazione e stile.No
image_urlobbligatoriostring (URL)Immagine usata come fotogramma iniziale. JPG/PNG/WebP, URL o caricamento.No
end_image_urlstring (URL)Fotogramma conclusivo facoltativo: il modello anima la transizione tra i due.No
aspect_ratiostring (enum)Formato del fotogramma in output.
Valori: 16:9 · 9:16 · 1:1 · 4:3 · 3:4 · 21:9
Predefinito: 16:9
Sì
resolutionstring (enum)Risoluzione dell’output. Le risoluzioni più alte costano di più al secondo.
Valori: 480p · 720p · 1080p
Predefinito: 720p
Sì
durationintegerDurata della clip generata in secondi (4–30 s). Paghi al secondo.
Intervallo: 4–30s
Predefinito: 5
Sì
generate_audiobooleanGenera suoni, atmosfera e dialoghi sincronizzati. Nessun costo aggiuntivo.
Predefinito: true
No
seedintegerUsa lo stesso seed e le stesse impostazioni per riprodurre un risultato. Lascia vuoto per un valore casuale.No
webhook_urlstringa (URL)Facoltativo. Inviamo con POST la generazione completata a questo indirizzo, firmandola con il segreto del webhook. WebhookNo

Richiesta

const API = "https://cheapergen.com/api/v1";
const headers = {
  Authorization: `Bearer ${process.env.CHEAPERGEN_API_KEY}`,
  "Content-Type": "application/json",
};

// 1. Submit the job
let job = await fetch(`${API}/run/bytedance/seedance-2.5/image-to-video`, {
  method: "POST",
  headers,
  body: JSON.stringify({
    "prompt": "La camera si avvicina mentre lei si volta e sorride; i capelli si muovono al vento",
    "image_url": "https://cdn.cheapergen.com/samples/portrait.jpg",
    "aspect_ratio": "16:9",
    "resolution": "720p",
    "duration": 5
  }),
}).then((r) => r.json());

// 2. Poll until it finishes (or pass webhook_url and skip polling)
while (job.status === "queued" || job.status === "running") {
  await new Promise((r) => setTimeout(r, 3000));
  job = await fetch(`${API}/generations/${job.id}`, { headers }).then((r) => r.json());
}

console.log(job.status === "succeeded" ? job.output.video.url : job.error);

Risposta

{
  "id": "gen_8c2QmX1nq0k4",
  "object": "generation",
  "model": "bytedance/seedance-2.5",
  "endpoint": "bytedance/seedance-2.5/image-to-video",
  "mode": "image-to-video",
  "status": "queued",
  "input": {
    "prompt": "La camera si avvicina mentre lei si volta e sorride; i capelli si muovono al vento",
    "image_url": "https://cdn.cheapergen.com/samples/portrait.jpg",
    "aspect_ratio": "16:9",
    "resolution": "720p",
    "duration": 5
  },
  "output": null,
  "error": null,
  "cost": {
    "amount_usd": 0.2255,
    "currency": "usd",
    "estimated": true,
    "official_usd": null,
    "list_price_source": "official",
    "list_price_label": "Official",
    "saved_usd": null
  },
  "source": "api",
  "started_at": null,
  "completed_at": null,
  "urls": {
    "get": "https://cheapergen.com/api/v1/generations/gen_8c2QmX1nq0k4",
    "cancel": "https://cheapergen.com/api/v1/generations/gen_8c2QmX1nq0k4/cancel"
  },
  "created_at": "2026-10-15T09:21:04Z"
}

API Seedance 2.5 Da riferimento a video

POST/api/v1/run/bytedance/seedance-2.5/reference-to-video

Invia un job asincrono e restituisce 202 con l’ID della generazione. Interroga GET /api/v1/generations/{id} o specifica webhook_url. Consulta il ciclo di vita dei job.

Parametri di input

NomeTipoDescrizioneEffetto sul prezzo
promptobbligatoriostringDescrivi l’inquadratura: soggetto, azione, movimento della camera, illuminazione e stile.No
reference_image_urlsstring[] (URLs)Fino a 30 immagini per definire personaggi, prodotti, stile o scena. Richiamale nel prompt con @Image1, @Image2…
Numero massimo di elementi: 30
No
reference_video_urlsstring[] (video URLs)Fino a 10 clip MP4/MOV per movimenti, movimenti di camera o effetti (2–30 s ciascuno, 30 s in totale, ≤ 200 MB ciascuno). Richiamale con @Video1, @Video2… I secondi del video di riferimento si sommano a quelli dell’output e vengono fatturati alla tariffa più bassa prevista per l’input video.
Numero massimo di elementi: 10
Sì
reference_audio_urlsstring[] (audio URLs)Fino a 10 clip MP3/WAV per voce, musica o suoni (2–30 s ciascuno, 30 s in totale, ≤ 15 MB ciascuno). Richiamale con @Audio1, @Audio2…
Numero massimo di elementi: 10
No
aspect_ratiostring (enum)Formato del fotogramma in output.
Valori: 16:9 · 9:16 · 1:1 · 4:3 · 3:4 · 21:9
Predefinito: 16:9
Sì
resolutionstring (enum)Risoluzione dell’output. Le risoluzioni più alte costano di più al secondo.
Valori: 480p · 720p · 1080p
Predefinito: 720p
Sì
durationintegerDurata della clip generata in secondi (4–30 s). Paghi al secondo.
Intervallo: 4–30s
Predefinito: 5
Sì
generate_audiobooleanGenera suoni, atmosfera e dialoghi sincronizzati. Nessun costo aggiuntivo.
Predefinito: true
No
seedintegerUsa lo stesso seed e le stesse impostazioni per riprodurre un risultato. Lascia vuoto per un valore casuale.No
webhook_urlstringa (URL)Facoltativo. Inviamo con POST la generazione completata a questo indirizzo, firmandola con il segreto del webhook. WebhookNo

Richiesta

const API = "https://cheapergen.com/api/v1";
const headers = {
  Authorization: `Bearer ${process.env.CHEAPERGEN_API_KEY}`,
  "Content-Type": "application/json",
};

// 1. Submit the job
let job = await fetch(`${API}/run/bytedance/seedance-2.5/reference-to-video`, {
  method: "POST",
  headers,
  body: JSON.stringify({
    "prompt": "@Image1 scarta il prodotto di @Image2 su una scrivania di marmo, seguendo il movimento della camera in @Video1",
    "reference_image_urls": [
      "https://cdn.cheapergen.com/samples/reference-1.jpg",
      "https://cdn.cheapergen.com/samples/reference-2.jpg"
    ],
    "reference_video_urls": [
      "https://cdn.cheapergen.com/samples/reference-1.mp4"
    ],
    "aspect_ratio": "16:9",
    "resolution": "720p",
    "duration": 5
  }),
}).then((r) => r.json());

// 2. Poll until it finishes (or pass webhook_url and skip polling)
while (job.status === "queued" || job.status === "running") {
  await new Promise((r) => setTimeout(r, 3000));
  job = await fetch(`${API}/generations/${job.id}`, { headers }).then((r) => r.json());
}

console.log(job.status === "succeeded" ? job.output.video.url : job.error);

Risposta

{
  "id": "gen_8c2QmX1nq0k4",
  "object": "generation",
  "model": "bytedance/seedance-2.5",
  "endpoint": "bytedance/seedance-2.5/reference-to-video",
  "mode": "reference-to-video",
  "status": "queued",
  "input": {
    "prompt": "@Image1 scarta il prodotto di @Image2 su una scrivania di marmo, seguendo il movimento della camera in @Video1",
    "reference_image_urls": [
      "https://cdn.cheapergen.com/samples/reference-1.jpg",
      "https://cdn.cheapergen.com/samples/reference-2.jpg"
    ],
    "reference_video_urls": [
      "https://cdn.cheapergen.com/samples/reference-1.mp4"
    ],
    "aspect_ratio": "16:9",
    "resolution": "720p",
    "duration": 5
  },
  "output": null,
  "error": null,
  "cost": {
    "amount_usd": 0.2255,
    "currency": "usd",
    "estimated": true,
    "official_usd": null,
    "list_price_source": "official",
    "list_price_label": "Official",
    "saved_usd": null
  },
  "source": "api",
  "started_at": null,
  "completed_at": null,
  "urls": {
    "get": "https://cheapergen.com/api/v1/generations/gen_8c2QmX1nq0k4",
    "cancel": "https://cheapergen.com/api/v1/generations/gen_8c2QmX1nq0k4/cancel"
  },
  "created_at": "2026-10-15T09:21:04Z"
}

Ottieni il risultato

Le generazioni sono asincrone. Continua a interrogare finché il campo status non vale succeeded, failed o canceled; oppure specifica webhook_url al momento dell’invio. Le generazioni non riuscite vengono rimborsate automaticamente.

curl https://cheapergen.com/api/v1/generations/gen_8c2QmX1nq0k4 \
  -H "Authorization: Bearer $CHEAPERGEN_API_KEY"

Altro: ciclo di vita dei job · i webhook · errori

prezzi di Seedance 2.5

Paga al secondo di video man mano che le usi, senza abbonamento (piani mensili sono facoltativi). Le generazioni non riuscite vengono rimborsate automaticamente.

FasciaPrezzo ufficialeCheaperGen
480p
16:9 · 24 fps
$0,1028/s$0,0935/s
720p
16:9 · 24 fps
$0,2311/s$0,2076/s
1080p
16:9 · 24 fps
$0,5686/s$0,5113/s
  • Prezzo ufficiale: Prezzo di listino internazionale BytePlus ModelArk per dreamina-seedance-2-5 ($10.7 / 1M di token video a 480p–720p, $11.7 a 1080p; con input video $6.4 / $7; in 480p, il formato 16:9 genera immagini 854×480). Prezzi verificati il 18 ottobre 2026.
  • Fatturazione a token video; i prezzi al secondo si basano sul formato 16:9 e non includono video di input.
  • Con i video di riferimento, (secondi del video di riferimento + secondi di output) vengono fatturati alla tariffa inferiore prevista per l’input video.