Асинхронная генерация видео с оплатой по фактическим видеотокенам. Черновик и улучшение — отдельные платные задания. Учитываются токены референсных видео. Проверяйте возвращённый ID задания шлюза; не отправляйте запрос повторно после тайм-аута клиента. Контент проходит проверку. Режим без модерации не предлагается. Примерно 95% публичных международных тарифов BytePlus в USD, с округлением до одного десятичного знака. MP4 для обычного использования; MOV может требовать скачивания и совместимого плеера.
Попробовать в песочнице →Создайте готовое видео или проверьте черновик перед финальным1080p. Выберите процесс, чтобы увидеть нужные параметры и пример.
Что вы хотите сделать?
Создать готовое видео
Параметры этого шагаТекст, материалы и длительность наследуются из черновика. Не отправляйте их повторно.
| Параметр | Тип | Описание |
|---|---|---|
| modelОбязательно | string | |
| promptНеобязательно | string | Текстовый промпт. Используйте либо prompt, либо content. Обязателен, кроме улучшения черновика. |
| contentНеобязательно | array | Блоки text/image_url/video_url/audio_url. HTTPS-ссылки: до 30 изображений, 10 видео и 10 аудио. ID материалов поставщика не принимаются. |
| durationНеобязательно | integer | 4–30 секунд; по умолчанию 5. Не передавайте при улучшении. |
| resolutionНеобязательно | string | |
| ratioНеобязательно | string | adaptive / 21:9 / 16:9 / 4:3 / 1:1 / 3:4 / 9:16 |
| output_formatНеобязательно | string | mp4 / mov. MP4 для обычного использования; MOV может требовать скачивания и совместимого плеера. |
| draft_task_idОбязательно | string | ID задачи шлюза успешного Token-черновика. Посекундные задачи, обычные видео480p и внешние ID не поддерживаются. |
Дополнительно: черновик через стандартную модель
Для seedance-2.5-token укажите draft: true и resolution: 480p. Обычное480p без draft: true не подходит для улучшения.
Пример запроса
Аутентификация
Authorization: Bearer YOUR_API_KEY Content-Type: application/json
Чтобы начать, создайте API-ключ в консоли.
Ответ
Полный пример вызова · Python 3 · 480p → 1080p
Черновик → 1080p
Улучшить можно только завершённый Token-черновик своего аккаунта. Посекундные модели , обычные видео 480p и внешние ID не подходят.
Создайте черновик 480p и дождитесь succeeded. Передайте его ID NezhaGate как draft_task_id стандартной Token-модели: она создаст итоговое видео 1080p по исходному заданию. Это не увеличение произвольного MP4. Не передавайте повторно prompt, content, duration, ratio, seed или generate_audio. Черновик и итог оплачиваются отдельно.
Python 3, без дополнительных библиотек. Задайте NEZHAGATE_API_KEY и запустите скрипт один раз: создание черновика, опрос и улучшение выполняются автоматически. Черновик и итог оплачиваются отдельно. Не запускайте весь скрипт повторно для проверки уже созданной задачи.
import json
import os
import time
from urllib.error import HTTPError, URLError
from urllib.request import Request, urlopen
BASE_URL = "https://nezhagate.com"
API_KEY = os.environ["NEZHAGATE_API_KEY"]
def request(path, payload=None):
data = json.dumps(payload).encode() if payload is not None else None
req = Request(BASE_URL + path, data=data, headers={
"Authorization": "Bearer " + API_KEY,
"Content-Type": "application/json",
})
with urlopen(req, timeout=60) as response:
return json.load(response)
def submit(payload):
# Do not automatically retry a POST: its outcome may be unknown.
job = request("/v1/videos/generations", payload)
job_id = job["id"]
print("Submitted:", job_id, flush=True)
return job_id
def wait_for(job_id):
deadline = time.monotonic() + 1800
while time.monotonic() < deadline:
try:
job = request("/v1/videos/jobs/" + job_id)
except HTTPError as exc:
if exc.code != 429 and exc.code < 500:
raise
time.sleep(10)
continue
except (URLError, TimeoutError):
time.sleep(10)
continue
progress = job.get("progress", {})
print(job_id, job["status"], progress.get("phase", ""), flush=True)
if job["status"] == "succeeded":
return job
if job["status"] == "failed":
raise RuntimeError(json.dumps(job.get("error"), ensure_ascii=False))
time.sleep(5)
raise TimeoutError("Keep polling this job; do not resubmit: " + job_id)
if __name__ == "__main__":
# Two separately billed tasks. Save the printed IDs to resume polling.
draft_id = submit({
"model": "seedance-2.5-token-draft",
"prompt": "A sunrise over the sea",
"duration": 5,
"resolution": "480p",
})
draft = wait_for(draft_id)
print("Draft video:", draft["data"][0]["url"])
final_id = submit({
"model": "seedance-2.5-token",
"draft_task_id": draft_id,
"resolution": "1080p",
})
final = wait_for(final_id)
print("Final video:", final["data"][0]["url"])
Люди и референсы
API: загрузите файлы в публичное HTTPS-хранилище и передайте image_url, video_url или audio_url в content. Ссылки должны оставаться доступными во время задачи. NezhaGate импортирует материалы в библиотеку и ждёт статуса Active для всех, включая референсы реальных людей. Загрузка файла ещё не означает готовность. Отдельный вызов API библиотеки не нужен.
Загруженные файлы можно выбирать и удалять. Регистрация и проверка начнутся после Run, подтверждения и резервирования средств.
| Шаг | Описание |
|---|---|
| 1. Загрузить файл | Загрузите изображение персонажа в публичное HTTPS-хранилище. JSON не принимает локальные пути или двоичные файлы. |
| 2. Передать референс | Передайте image_url в content и укажите персонажа как @Image1 в промпте. |
| 3. Импорт и проверка | NezhaGate автоматически импортирует материал и ждёт проверки. Создавать группы или передавать ID asset:// не нужно. |
| 4. Проверить результат | Опрашивайте progress той же задачи. Отклонённый референс возвращает failed и error без отправки генерации. |
- До 30 изображений, 10 видео и 10 аудио, всего 50. Суммарно до 30с видео и до 30с аудио. Веб-загрузка: 16 МБ/изображение, 50 МБ/видео, 15 МБ/аудио. JSON API принимает HTTPS URL, не локальные пути и не байты файлов. Оригиналы менее 30 МБ; стороны 301–5999 пикселей, соотношение 0.4–2.5. Материалы с лицами требуют подготовки. MP4 для обычного использования; MOV может требовать скачивания и совместимого плеера.
data[0].source_url— Исходная ссылка возвращается видеосервисом и может истечь. Сохраните видео заранее или скачайте размещённый у нас оригинал.
curl https://nezhagate.com/v1/videos/generations \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"model": "seedance-2.5-token",
"content": [
{
"type": "text",
"text": "The character from @Image1 walks by the sea."
},
{
"type": "image_url",
"image_url": {
"url": "https://example.com/reference.jpg"
}
}
],
"duration": 5,
"resolution": "720p"
}'Опрос статуса задачи
Опрашивайте GET /v1/videos/jobs/{id} каждые 3–5 секунд с тем же Bearer API-ключом. Доступ есть только у владельца. Логика status прежняя: queued / processing — продолжать; succeeded — читать data[0].url; failed — читать error. progress добавлен для Token. Обрабатывайте отсутствие полей и будущие неизвестные этапы.
curl https://nezhagate.com/v1/videos/jobs/img_example -H 'Authorization: Bearer YOUR_API_KEY'
| progress.phase | Описание |
|---|---|
| queued | Ожидание обработки |
| preparing | Подготовка референсов |
| reviewing | Проверка референсов |
| submitting | Отправка запроса |
| provider_queued | Ожидание генерации |
| generating | Генерация видео |
| delivering | Сохранение видео |
| succeeded | Готово |
| material_failed | Референс отклонён или не импортирован |
| submission_failed | Ошибка отправки или исход не подтверждён |
| generation_failed | Ошибка генерации |
| delivery_failed | Ошибка сохранения |
| failed | Ошибка задачи |
- phase — этап, не процент и не оценка времени. ready / total — число уникальных готовых / необходимых референсов; для текста и улучшения допустим ноль. label и detail — английские подписи, не условия программы. terminal отражает конечный статус; failed_stage равен null до ошибки. При восстановлении этапы могут пропускаться или повторяться.
- submitted=true подтверждает ID генерации, false означает, что отправка не началась, null — отправка началась, исход неизвестен. Не повторяйте запрос автоматически при null или таймауте. reservation_released=true подтверждает освобождение резерва с нулевой стоимостью; false не доказывает списание. updated_at — время обновления записи задачи, не отдельного этапа; job_id — ID NezhaGate.
- Отказ по параметрам, балансу или первичной проверке промпта возвращает HTTP-ошибку до создания задачи, без ID для опроса. Первичная проверка не гарантирует окончательного одобрения. Ошибка импорта/проверки референсов останавливает генерацию и возвращает failed и error. При временных сетевых ошибках увеличьте интервал и опрашивайте тот же ID. Промежуточные webhook-события не добавлены.
{
"id": "img_example",
"object": "video.generation.job",
"status": "processing",
"created": 1792800000,
"model": "seedance-2.5-token",
"progress": {
"phase": "reviewing",
"label": "Reviewing references",
"detail": "References ready: 3 / 5",
"ready": 3,
"total": 5,
"terminal": false,
"failed_stage": null,
"submitted": false,
"reservation_released": false,
"updated_at": "2026-10-24T05:00:00+00:00",
"job_id": "img_example"
}
}Требования к контенту
Каждая задача Seedance проходит проверку контента: промпт, файлы-референсы и готовый ролик — и изображение, и звук. Задача, не прошедшая проверку, завершается с content_policy, деньги не списываются.
Когда идёт проверка
При отправке проверяются промпт и референсы; после генерации ролика ещё раз проверяются изображение и звук. Поэтому отказ может прийти через несколько секунд после отправки или только после окончания рендера (это может занять больше получаса). Задача, завершившаяся со status failed и error.code content_policy, не прошла проверку; с вебхуком придёт событие video.failed.
Без оплаты
Отклонённая задача ничего не стоит: сумма, зарезервированная при отправке, полностью возвращается по завершении задачи, а в журнале вызовов она отмечена как неоплаченная.
Звук
Звук (реплики, закадровый текст, пение и эффекты) модель генерирует по промпту, и он проверяется вместе с изображением: реплики, закадровый текст и тексты песен из промпта озвучиваются или поются. Если в ролике не нужны голоса, не пишите в промпте реплики и тексты песен. Если не прошёл звук, error.param равен audio, а в message сказано, был ли это сгенерированный звук или ваше аудио-референс.
Что чаще всего отклоняется
- Сексуальный контент, обнажённость или сексуальные намёки, в том числе изображения, созданные или смонтированные с помощью ИИ
- Кровь, жестокость, самоповреждение и насильственные травмы, например огнестрельные ранения и кровотечение
- Огнестрельное оружие, взрывчатка и наркотики
- Любой сексуализированный контент с несовершеннолетними; несовершеннолетние рядом с алкоголем, табаком, наркотиками или в опасных ситуациях тоже отклоняются
- Политики, знаменитости, спортсмены, бизнесмены и другие публичные лица — внешность или голос, включая двойников
- Персонажи и объекты, защищённые авторским правом, например персонажи Disney или Marvel
- Контент с ненавистью или дискриминацией, фейковые новости
Длинные сценарии
Одна сцена с нарушением отклоняет весь ролик, и чаще всего это случается в длинных раскадровочных сценариях: перестрелка или крупный план крови в экшен-сцене, несовершеннолетние, которые пьют или курят, — и весь ролик не пройдёт. Перед отправкой прочитайте сценарий целиком и удалите или перепишите такие сцены.
Реальные люди
Чтобы использовать фото реального человека как референс, нужно право на использование его изображения; принимает ли модель такие референсы, указано выше на этой странице.
После отказа
Повторная отправка того же самого снова будет отклонена. Найдите часть, которая скорее всего нарушает правила, перепишите промпт или замените референс и отправьте заново.
Код ошибки: content_policy · status: failed
Коды ошибок
У всех ошибок одна структура: error.message / error.type / error.code / error.param; ориентируйтесь на code. Ниже — самые частые ошибки; полный список — в разделе Коды ошибок.
| HTTP | code | Описание |
|---|---|---|
| 401 | invalid_api_key | Нет ключа, или он недействителен либо отключён (missing_api_key, invalid_api_key). |
| 402 | insufficient_quota | Недостаточно средств или ключ исчерпал свой бюджет (insufficient_quota). |
| 400 | invalid_request | Неверный параметр или неизвестная модель (например, model_not_found); error.param указывает на поле. |
| — | content_policy | Не прошло проверку контента: промпт, референс или сгенерированные изображение или звук признаны нарушением. Деньги не списаны; то же самое будет отклонено снова, поэтому перепишите промпт или замените референс. Для видеозадач возвращается в error, когда status равен failed. |
| 429 | rate_limit_exceeded | Превышен лимит запросов в минуту для этого ключа или дневная квота бесплатной модели, либо заняты все линии модели (rate_limit_exceeded). Подождите столько секунд, сколько указано в Retry-After, а если его нет — несколько секунд, и повторите. |
| 502 | upstream_* | Ошибка или таймаут на стороне поставщика, и переключение линий не помогло; причина в code, например upstream_timeout или upstream_unavailable. Запрос не оплачивается, его можно повторить. |