Текст в видео
Начните с текстового промпта, если исходные медиа не нужны. Выберите seedance-2.0 или seedance-2.5 и проверьте настройки вывода модели.
API видео
Сравните API Seedance для видео по тексту и по образцам. Изучите ввод, цены, опрос задач и получение готового видео.
Текущие модели Seedance оплачиваются по токенам завершения. Длительность влияет на оценку расхода, но не является единицей расчёта. Сохраните ID задачи для получения результата или сообщения об ошибке.
Для конкретной задачи
Начните с текстового промпта, если исходные медиа не нужны. Выберите seedance-2.0 или seedance-2.5 и проверьте настройки вывода модели.
Оживите начальное изображение промптом движения. Используйте руководство «изображение в видео» выбранной модели, не смешивая поля других режимов ввода.
Задайте первый и при необходимости последний кадр для начала и конца сцены. Проверьте роли кадров и требования к медиа в руководстве модели.
Комбинируйте образцы по документированным ролям изображений, видео и аудио. Нужен хотя бы один образец изображения или видео; одного аудио недостаточно.
Единица тарификации
USD за миллион токенов завершения. Тариф зависит от модели, разрешения вывода и условий использования видеообразцов.
Рабочие ограничения
Руководства по интеграции
Текущий охват каталога
Сравните ID API, операции, поставщиков и цены. Перед оценкой расходов проверьте дату каталога и единицу тарификации каждой операции.
Создавайте видео с помощью Seedance 2.0.
POST /v1/video/seedance Справочник Отправка видеозадачи GET /v1/jobs/{id} Справочник Опрос состояния задач 480p · С референсным видео
Официальная цена
Цена API Hop Экономия 5%
480p · Без референсного видео
Официальная цена
Цена API Hop Экономия 5%
720p · С референсным видео
Официальная цена
Цена API Hop Экономия 5%
720p · Без референсного видео
Официальная цена
Цена API Hop Экономия 5%
1080p · С референсным видео
Официальная цена
Цена API Hop Экономия 5%
1080p · Без референсного видео
Официальная цена
Цена API Hop Экономия 5%
4k · С референсным видео
Официальная цена
Цена API Hop Экономия 5%
4k · Без референсного видео
Официальная цена
Цена API Hop Экономия 5%
Справочная цена не проверена независимо. Перед сравнением затрат проверьте актуальные тарифы поставщика, единицы тарификации и применимые условия.
Создавайте видео с помощью Seedance 2.5.
POST /v1/video/seedance Справочник Отправка видеозадачи GET /v1/jobs/{id} Справочник Опрос состояния задач 480p · С референсным видео
Официальная цена
Цена API Hop Экономия 2%
480p · Без референсного видео
Официальная цена
Цена API Hop Экономия 2%
720p · С референсным видео
Официальная цена
Цена API Hop Экономия 2%
720p · Без референсного видео
Официальная цена
Цена API Hop Экономия 2%
1080p · С референсным видео
Официальная цена
Цена API Hop Экономия 2%
1080p · Без референсного видео
Официальная цена
Цена API Hop Экономия 2%
Справочная цена не проверена независимо. Перед сравнением затрат проверьте актуальные тарифы поставщика, единицы тарификации и применимые условия.
Пример запроса
Примеры отправляют одну задачу Seedance 2.5 «текст в видео», сохраняют jobId и опрашивают GET /v1/jobs/{jobId} с ограничением времени. Получайте outputResult только после COMPLETED; обрабатывайте FAILED и CANCELLED отдельно. Это примеры интеграции, не демонстрации видео.
# 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) Используйте базовый URL API из документации аккаунта и замените заглушки. Передавайте API-ключ в заголовке Authorization, а не в URL или коммитируемом файле.