Texte vers vidéo
Commencez par un prompt textuel si aucun média source n’est nécessaire. Choisissez seedance-2.0 ou seedance-2.5 et vérifiez les réglages de sortie du modèle.
API vidéo
Comparez les API vidéo Seedance pour le texte vers vidéo et les flux avec références. Examinez les entrées, tarifs, interrogations de tâches et récupération des vidéos terminées.
Les modèles Seedance actuels sont facturés en tokens de complétion. La durée influence l’usage estimé, mais n’est pas l’unité de règlement. Conservez l’ID de tâche pour récupérer le résultat ou signaler un échec.
Pour une tâche précise
Commencez par un prompt textuel si aucun média source n’est nécessaire. Choisissez seedance-2.0 ou seedance-2.5 et vérifiez les réglages de sortie du modèle.
Animez une image initiale avec un prompt de mouvement. Utilisez le guide image vers vidéo du modèle choisi sans mélanger les champs d’autres modes.
Fournissez une première image et, si besoin, une dernière pour guider les extrémités du plan. Vérifiez les rôles des images et les exigences média dans le guide du modèle.
Combinez les références selon leurs rôles documentés d’image, vidéo et audio. Au moins une image ou vidéo est requise ; une référence audio seule ne suffit pas.
Unité de facturation
USD par million de tokens de complétion. Le tarif dépend du modèle, de la résolution de sortie et des conditions de référence vidéo.
Limites opérationnelles
Guides d’intégration
Couverture actuelle du catalogue
Comparez les ID API, opérations, fournisseurs et tarifs. Vérifiez la date du catalogue et l’unité de facturation de chaque opération avant d’estimer les coûts.
Générez des vidéos avec Seedance 2.0.
POST /v1/video/seedance Référence Envoi de tâche vidéo GET /v1/jobs/{id} Référence Interrogation des tâches 480p · Avec vidéo de référence
Prix officiel
Tarif API Hop Économie 5%
480p · Sans vidéo de référence
Prix officiel
Tarif API Hop Économie 5%
720p · Avec vidéo de référence
Prix officiel
Tarif API Hop Économie 5%
720p · Sans vidéo de référence
Prix officiel
Tarif API Hop Économie 5%
1080p · Avec vidéo de référence
Prix officiel
Tarif API Hop Économie 5%
1080p · Sans vidéo de référence
Prix officiel
Tarif API Hop Économie 5%
4k · Avec vidéo de référence
Prix officiel
Tarif API Hop Économie 5%
4k · Sans vidéo de référence
Prix officiel
Tarif API Hop Économie 5%
Prix de référence non vérifié indépendamment. Consultez les tarifs actuels, unités de facturation et conditions applicables de l’éditeur avant de comparer les coûts.
Générez des vidéos avec Seedance 2.5.
POST /v1/video/seedance Référence Envoi de tâche vidéo GET /v1/jobs/{id} Référence Interrogation des tâches 480p · Avec vidéo de référence
Prix officiel
Tarif API Hop Économie 2%
480p · Sans vidéo de référence
Prix officiel
Tarif API Hop Économie 2%
720p · Avec vidéo de référence
Prix officiel
Tarif API Hop Économie 2%
720p · Sans vidéo de référence
Prix officiel
Tarif API Hop Économie 2%
1080p · Avec vidéo de référence
Prix officiel
Tarif API Hop Économie 2%
1080p · Sans vidéo de référence
Prix officiel
Tarif API Hop Économie 2%
Prix de référence non vérifié indépendamment. Consultez les tarifs actuels, unités de facturation et conditions applicables de l’éditeur avant de comparer les coûts.
Exemple de requête
Ces exemples envoient une tâche Seedance 2.5 texte vers vidéo, conservent jobId et interrogent GET /v1/jobs/{jobId} avec une limite de temps. Récupérez outputResult uniquement après COMPLETED ; gérez FAILED et CANCELLED séparément. Ce sont des exemples d’intégration, pas des démonstrations vidéo.
# 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) Utilisez l’URL de base API de la documentation du compte et remplacez les espaces réservés. Envoyez la clé dans l’en-tête Authorization, jamais dans une URL ou un fichier versionné.