Da testo a video
Parti da un prompt testuale quando non servono media sorgente. Scegli seedance-2.0 o seedance-2.5 e verifica le impostazioni di output del modello.
API video
Confronta le API video Seedance per flussi da testo a video e con riferimenti. Esamina input, prezzi, polling delle attività e recupero del video completato.
I modelli Seedance attuali sono fatturati in token di completamento. La durata influisce sulla stima d’uso, ma non è l’unità di addebito. Conserva l’ID attività per recuperare il risultato o segnalare un errore.
Per un’attività specifica
Parti da un prompt testuale quando non servono media sorgente. Scegli seedance-2.0 o seedance-2.5 e verifica le impostazioni di output del modello.
Anima un’immagine iniziale con un prompt di movimento. Usa la guida da immagine a video del modello scelto senza mescolare campi di altre modalità.
Fornisci un primo fotogramma e, se necessario, uno finale per guidare gli estremi della ripresa. Verifica ruoli dei fotogrammi e requisiti multimediali nella guida.
Combina i riferimenti secondo i ruoli documentati di immagine, video e audio. Serve almeno un riferimento immagine o video; il solo audio non basta.
Unità di fatturazione
USD per milione di token di completamento. La tariffa dipende dal modello, dalla risoluzione e dalle condizioni dei riferimenti video.
Limiti operativi
Guide di integrazione
Copertura attuale del catalogo
Confronta ID API, operazioni, fornitori e prezzi. Controlla la data del catalogo e l’unità di fatturazione di ogni operazione prima di stimare i costi.
Genera video con Seedance 2.0.
POST /v1/video/seedance Riferimento Invio attività video GET /v1/jobs/{id} Riferimento Polling delle attività 480p · Con video di riferimento
Prezzo ufficiale
Prezzo API Hop Risparmio 5%
480p · Senza video di riferimento
Prezzo ufficiale
Prezzo API Hop Risparmio 5%
720p · Con video di riferimento
Prezzo ufficiale
Prezzo API Hop Risparmio 5%
720p · Senza video di riferimento
Prezzo ufficiale
Prezzo API Hop Risparmio 5%
1080p · Con video di riferimento
Prezzo ufficiale
Prezzo API Hop Risparmio 5%
1080p · Senza video di riferimento
Prezzo ufficiale
Prezzo API Hop Risparmio 5%
4k · Con video di riferimento
Prezzo ufficiale
Prezzo API Hop Risparmio 5%
4k · Senza video di riferimento
Prezzo ufficiale
Prezzo API Hop Risparmio 5%
Prezzo di riferimento non verificato in modo indipendente. Prima di confrontare i costi, controlla tariffe attuali, unità di fatturazione e condizioni applicabili del fornitore.
Genera video con Seedance 2.5.
POST /v1/video/seedance Riferimento Invio attività video GET /v1/jobs/{id} Riferimento Polling delle attività 480p · Con video di riferimento
Prezzo ufficiale
Prezzo API Hop Risparmio 2%
480p · Senza video di riferimento
Prezzo ufficiale
Prezzo API Hop Risparmio 2%
720p · Con video di riferimento
Prezzo ufficiale
Prezzo API Hop Risparmio 2%
720p · Senza video di riferimento
Prezzo ufficiale
Prezzo API Hop Risparmio 2%
1080p · Con video di riferimento
Prezzo ufficiale
Prezzo API Hop Risparmio 2%
1080p · Senza video di riferimento
Prezzo ufficiale
Prezzo API Hop Risparmio 2%
Prezzo di riferimento non verificato in modo indipendente. Prima di confrontare i costi, controlla tariffe attuali, unità di fatturazione e condizioni applicabili del fornitore.
Esempio di richiesta
Questi esempi inviano un’attività Seedance 2.5 da testo a video, conservano jobId e interrogano GET /v1/jobs/{jobId} con limite di tempo. Recupera outputResult solo dopo COMPLETED; gestisci FAILED e CANCELLED separatamente. Sono esempi di integrazione, non dimostrazioni video.
# Requires bash, curl and jq. A polling timeout does not cancel the job.
set -euo pipefail
BASE_URL="https://api.apihop.ai"
API_KEY='YOUR_API_KEY'
created=$(curl --fail-with-body --silent --show-error --max-time 30 \
"$BASE_URL/v1/video/seedance" \
-H "Authorization: Bearer $API_KEY" -H 'Content-Type: application/json' \
--data '{"model":"seedance-2.5","prompt":"A calm city street at dawn","duration":5,"resolution":"720p"}')
job_id=$(printf '%s' "$created" | jq -er '.data.jobId | select(. != null) | tostring')
deadline=$((SECONDS + 600))
while (( SECONDS < deadline )); do
job=$(curl --fail-with-body --silent --show-error --max-time 30 \
"$BASE_URL/v1/jobs/$job_id" -H "Authorization: Bearer $API_KEY")
status=$(printf '%s' "$job" | jq -er '.data.status')
case "$status" in
COMPLETED) printf '%s' "$job" | jq -e '.data.outputResult'; exit 0 ;;
FAILED|CANCELLED) printf 'Job %s: %s\n' "$job_id" "$status" >&2; exit 1 ;;
esac
sleep 5
done
printf 'Polling timed out; retain jobId for a later status check: %s\n' "$job_id" >&2
exit 1const baseUrl = "https://api.apihop.ai";
const headers = { Authorization: 'Bearer YOUR_API_KEY', 'Content-Type': 'application/json' };
async function request(path, options = {}) {
const response = await fetch(baseUrl + path, { ...options, headers, signal: AbortSignal.timeout(30000) });
if (!response.ok) throw new Error('HTTP ' + response.status);
const result = await response.json();
if (result.success === false) throw new Error(JSON.stringify(result.error));
return result.data;
}
const created = await request('/v1/video/seedance', { method: 'POST', body: JSON.stringify({"model":"seedance-2.5","prompt":"A calm city street at dawn","duration":5,"resolution":"720p"}) });
if (!created?.jobId) throw new Error('Missing data.jobId');
const deadline = Date.now() + 10 * 60 * 1000;
let completed = false;
while (Date.now() < deadline) {
const job = await request('/v1/jobs/' + encodeURIComponent(created.jobId));
if (job.status === 'COMPLETED') {
if (job.outputResult == null) throw new Error('Completed job has no outputResult');
console.log(job.outputResult);
completed = true;
break;
}
if (['FAILED', 'CANCELLED'].includes(job.status)) throw new Error('Job ' + job.status);
await new Promise(resolve => setTimeout(resolve, 5000));
}
if (!completed) throw new Error('Polling timed out; retain jobId for a later status check: ' + created.jobId);import json
import time
import urllib.request
base_url = "https://api.apihop.ai"
headers = {'Authorization': 'Bearer YOUR_API_KEY', 'Content-Type': 'application/json'}
def request(path, body=None):
data = json.dumps(body).encode() if body is not None else None
req = urllib.request.Request(base_url + path, data=data, headers=headers)
with urllib.request.urlopen(req, timeout=30) as response:
result = json.load(response)
if result.get('success') is False:
raise RuntimeError(result.get('error'))
return result['data']
created = request('/v1/video/seedance', json.loads("{\"model\":\"seedance-2.5\",\"prompt\":\"A calm city street at dawn\",\"duration\":5,\"resolution\":\"720p\"}"))
job_id = str(created['jobId'])
deadline = time.monotonic() + 600
while time.monotonic() < deadline:
job = request('/v1/jobs/' + job_id)
if job['status'] == 'COMPLETED':
if job.get('outputResult') is None:
raise RuntimeError('Completed job has no outputResult')
print(job['outputResult'])
break
if job['status'] in ('FAILED', 'CANCELLED'):
raise RuntimeError('Job ' + job['status'])
time.sleep(5)
else:
raise TimeoutError('Polling timed out; retain jobId for a later status check: ' + job_id) Usa l’URL base API della documentazione dell’account e sostituisci i segnaposto. Invia la chiave API nell’header Authorization, mai in un URL o file del repository.