Teks ke video
Mulai dengan perintah teks jika media sumber tidak diperlukan. Pilih seedance-2.0 atau seedance-2.5 dan periksa pengaturan keluaran khusus model.
API Video
Bandingkan API video Seedance untuk alur teks-ke-video dan berbasis referensi. Tinjau masukan yang didukung, harga, polling tugas, dan pengambilan video yang selesai.
Model Seedance saat ini ditagih berdasarkan token penyelesaian. Durasi memengaruhi perkiraan penggunaan; durasi bukan satuan penyelesaian biaya. Simpan ID tugas untuk mengambil hasil atau melaporkan kegagalan.
Dirancang untuk tugas tertentu
Mulai dengan perintah teks jika media sumber tidak diperlukan. Pilih seedance-2.0 atau seedance-2.5 dan periksa pengaturan keluaran khusus model.
Gerakkan gambar awal dengan perintah gerakan. Gunakan panduan gambar-ke-video untuk model yang dipilih, bukan mencampur bidang dari mode masukan lain.
Berikan bingkai pertama dan, jika diperlukan, bingkai terakhir untuk memandu titik awal dan akhir pengambilan gambar. Periksa peran bingkai serta persyaratan media dalam panduan model.
Gabungkan referensi menggunakan peran gambar, video, dan audio yang didokumentasikan. Setidaknya satu referensi gambar atau video diperlukan; referensi audio saja tidak cukup.
Satuan penagihan
USD per juta token penyelesaian. Tarif yang berlaku bergantung pada model, resolusi keluaran, dan kondisi referensi video.
Batas operasional
Panduan integrasi
Cakupan katalog saat ini
Bandingkan ID API, operasi, penyedia, dan harga. Periksa tanggal katalog serta satuan penagihan setiap operasi sebelum memperkirakan biaya penggunaan.
Buat video dengan Seedance 2.0.
POST /v1/video/seedance Referensi Pengiriman tugas video GET /v1/jobs/{id} Referensi Polling tugas 480p · Dengan referensi video
Harga resmi
Harga API Hop Hemat 5%
480p · Tanpa referensi video
Harga resmi
Harga API Hop Hemat 5%
720p · Dengan referensi video
Harga resmi
Harga API Hop Hemat 5%
720p · Tanpa referensi video
Harga resmi
Harga API Hop Hemat 5%
1080p · Dengan referensi video
Harga resmi
Harga API Hop Hemat 5%
1080p · Tanpa referensi video
Harga resmi
Harga API Hop Hemat 5%
4k · Dengan referensi video
Harga resmi
Harga API Hop Hemat 5%
4k · Tanpa referensi video
Harga resmi
Harga API Hop Hemat 5%
Harga referensi belum diverifikasi secara independen. Periksa tarif terkini, satuan penagihan, dan ketentuan penerbit yang berlaku sebelum membandingkan biaya.
Buat video dengan Seedance 2.5.
POST /v1/video/seedance Referensi Pengiriman tugas video GET /v1/jobs/{id} Referensi Polling tugas 480p · Dengan referensi video
Harga resmi
Harga API Hop Hemat 2%
480p · Tanpa referensi video
Harga resmi
Harga API Hop Hemat 2%
720p · Dengan referensi video
Harga resmi
Harga API Hop Hemat 2%
720p · Tanpa referensi video
Harga resmi
Harga API Hop Hemat 2%
1080p · Dengan referensi video
Harga resmi
Harga API Hop Hemat 2%
1080p · Tanpa referensi video
Harga resmi
Harga API Hop Hemat 2%
Harga referensi belum diverifikasi secara independen. Periksa tarif terkini, satuan penagihan, dan ketentuan penerbit yang berlaku sebelum membandingkan biaya.
Contoh permintaan
Contoh permintaan pembuatan video ini mengirim satu tugas teks-ke-video Seedance 2.5, menyimpan jobId, dan melakukan polling GET /v1/jobs/{jobId} dengan batas waktu. Ambil outputResult hanya setelah COMPLETED; tangani FAILED dan CANCELLED secara terpisah. Ini adalah contoh integrasi, bukan demonstrasi video hasil generasi.
# 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) Gunakan URL dasar API dari dokumentasi akun Anda dan ganti penanda pengganti contoh. Kirim kunci API melalui header Authorization; jangan pernah menyertakannya dalam URL atau berkas yang dimasukkan ke repositori.