実際の動画トークン数で課金する非同期動画生成です。ドラフトと高画質化は別々の有料ジョブです。参照動画のトークンも含みます。返されたゲートウェイのジョブIDを照会してください。クライアントのタイムアウト後に再送しないでください。 コンテンツ審査があります。無審査モードは提供していません。 BytePlusの公開国際USD料金の約95%を、小数点以下1桁に四捨五入した料金です。 通常はMP4。MOVはダウンロードと対応プレーヤーが必要な場合があります。
Playground で試す →完成動画を直接生成するか、ドラフトを確認して1080pに高画質化します。用途を選ぶと対応するパラメータと例が表示されます。
何を作成しますか?
完成動画を直接生成
このステップのパラメータプロンプト・参考素材・長さはドラフトから引き継ぎます。再送しないでください。
| パラメータ | 種別 | 説明 |
|---|---|---|
| model必須 | string | |
| prompt任意 | string | テキストプロンプト。promptかcontentのいずれかを使用します。ドラフトの高画質化以外では必須です。 |
| content任意 | array | text/image_url/video_url/audio_urlブロック。HTTPS参照URLで最大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 | 成功したTokenドラフトのゲートウェイタスクID。秒課金・通常480p・外部IDは非対応。 |
詳細:標準モデルでドラフトを生成
seedance-2.5-tokenにdraft: trueとresolution: 480pを明示します。draftを指定しない480p動画は高画質化できません。
リクエスト例
認証
Authorization: Bearer YOUR_API_KEY Content-Type: application/json
コンソールで API Key を作成すると利用を開始できます。
レスポンス
一連の呼び出し例 · Python 3 · 480p → 1080p
ドラフト → 1080p
自分のアカウントで完了したTokenドラフトのみ高画質化できます。秒単位課金、通常の480p動画、外部タスクIDは対象外です。
480pドラフトを作成し、succeededまで確認します。NezhaGateのジョブIDを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ストレージにアップロードし、contentにimage_url、video_url、audio_urlを指定します。処理中はリンクを有効に保ってください。NezhaGateが素材ライブラリに取り込み、全素材がActiveになってから生成します。実在人物の参照も同様です。アップロード完了は準備完了ではありません。別の素材API呼び出しは不要です。
アップロード後も素材を選択・削除できます。Runで確定し残高の仮押さえに成功した後、素材登録と審査を開始します。
| 手順 | 説明 |
|---|---|
| 1. ファイルをアップロード | 人物画像を公開HTTPSストレージにアップロードします。JSONはローカルパスやバイナリを受け付けません。 |
| 2. 参照を送信 | contentにimage_urlを指定し、プロンプトで@Image1として人物を参照します。 |
| 3. 取り込みと審査 | NezhaGateが自動で取り込み、審査を待ちます。素材グループの作成やasset:// IDの指定は不要です。 |
| 4. 結果を確認 | 同じタスクのprogressを確認します。素材が拒否されるとfailedとerrorを返し、動画生成は送信しません。 |
- 画像30枚、動画10本、音声10件、合計50件まで。参照動画の合計30秒、音声の合計30秒まで。Webアップロードは画像<30MB、動画50MB、音声15MB。API JSONにはHTTPS URLを指定し、ローカルパスやバイナリは使えません。 元画像を保持。1枚30MB未満、各辺301–5999px、比率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"
}'タスク状態のポーリング
同じBearer APIキーでGET /v1/videos/jobs/{id}を3~5秒ごとに確認します。所有アカウントのみ参照可能です。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は重複を除く準備済み/必要な参照素材数です。テキストのみや高画質化では0も正常です。labelとdetailは英語の表示文で、条件判定には使いません。terminalは最終状態に対応し、failed_stageは失敗以外nullです。復旧時に段階が省略・反復する場合があります。
- submitted=trueは生成ID確認済み、falseは送信開始前、nullは送信開始後の結果未確定です。nullやタイムアウトで自動再送しないでください。reservation_released=trueは費用0の解放記録を確認済み、falseは課金済みを意味しません。updated_atはタスク記録の更新時刻、job_idはNezhaGateのIDです。
- パラメータ、残高、プロンプトの事前拒否はタスク作成前の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 で失敗し、課金されません。
審査のタイミング
送信時にプロンプトと参照素材が審査され、動画の生成後に映像と音声がもう一度審査されます。そのため不合格の結果は、送信から数秒で返ることもあれば、レンダリングの終了後に返ることもあります(30分以上かかることもあります)。status が failed、error.code が content_policy で終わったタスクは審査で不合格です。Webhook では video.failed イベントが届きます。
課金なし
不合格のタスクは課金されません。送信時に仮押さえした金額はタスク終了時に全額返金され、呼び出しログでも課金なしと表示されます。
音声
音声(セリフ、ナレーション、歌、効果音)はプロンプトに沿ってモデルが生成し、映像と一緒に審査されます。プロンプトに書いたセリフ、ナレーション、歌詞は読み上げられたり歌われたりします。人の声が要らない動画なら、プロンプトにセリフや歌詞を書かないでください。音声が不合格の場合、error.param は audio になり、message に生成された音声か参照音声かが書かれます。
よく弾かれる内容
- 性的な内容、裸、性的なほのめかし(AI で生成・合成した画像を含む)
- 流血、残虐な描写、自傷、銃撃や出血などの暴力による負傷
- 銃器、爆発物、薬物
- 未成年者を性的に扱う内容は一切不可。未成年者と酒・たばこ・薬物・危険な行為の組み合わせも弾かれます
- 政治家、芸能人、スポーツ選手、経済人など公人の容姿や声(よく似た人物を含む)
- 著作権で保護されたキャラクターや IP(ディズニーやマーベルのキャラクターなど)
- 憎悪や差別的な内容、フェイクニュース
長い絵コンテ台本
違反するカットが1つでもあれば動画全体が弾かれます。長い絵コンテ台本で特に起きやすく、アクションシーンの銃撃戦や出血のアップ、未成年者が飲酒や喫煙をする場面があると全体が失敗します。送信前に台本を通して読み、こうしたカットを削除するか書き直してください。
実在の人物
実在の人物の写真を参照に使うには、その人物の肖像を使う権利が必要です。各モデルが実在の人物の参照画像に対応しているかは、このページの上部に記載しています。
弾かれたあと
同じ内容で再送信しても再び弾かれます。問題になりそうな部分を見つけ、プロンプトを書き直すか参照素材を差し替えてから送信し直してください。
エラーコード: 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 | コンテンツ審査で不合格:プロンプト、参照素材、または生成された映像・音声が違反と判定されました。課金されません。同じ内容では再び弾かれるため、プロンプトを書き直すか素材を差し替えてください。動画タスクでは status が failed のときの error で返されます。 |
| 429 | rate_limit_exceeded | このキーに設定した 1 分あたりの上限か無料モデルの 1 日の枠を超えたか、このモデルのすべての回線が混み合っています(rate_limit_exceeded)。Retry-After があればその秒数、なければ数秒待ってから再試行してください。 |
| 502 | upstream_* | 上流のエラーまたはタイムアウトで、回線を切り替えても失敗しました。理由は code(upstream_timeout、upstream_unavailable など)に入ります。課金されないので、そのまま再試行できます。 |