NezhaGateNezhaGate
POST https://nezhagate.com/v1/videos/generations

Wan 3.0 Prime の動画生成 API です。機能は Wan 3.0 と同じで、より速く生成でき、秒単位の課金です。テキストから動画、最初のフレーム指定、最初と最後のフレーム指定、複数画像の参照、参照動画の作り変えを 1 つのエンドポイントで使えます。2〜30 秒、480P / 720P / 1080P に対応しています。非同期タスクとして動き、失敗した場合は課金されません。

Playground で試す →

クイックスタート

3 ステップで動きます:タスクを送信 → 結果を照会 → 動画のリンクを受け取る。YOUR_API_KEY をご自身のキーに置き換えれば、下のコマンドはそのまま実行できます。

ステップ 1 · タスクを送信(すぐにタスク ID が返ります。HTTP 202)

curl
curl https://nezhagate.com/v1/videos/generations \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "wan3.0-video-prime", "prompt": "桜の木の下で舞い落ちる花びらを追いかける柴犬、明るい日差し、スローモーション", "duration": 5, "resolution": "720P", "size": "16:9"}'

レスポンス(HTTP 202)

JSON
{
  "id": "img_5c2e8f1a9b3d7e6f0a4c8b2d",
  "object": "video.generation.job",
  "status": "queued",
  "created": 1791281400,
  "model": "wan3.0-video-prime"
}

ステップ 2 · status が succeeded か failed になるまで、5〜10 秒ごとに照会

curl
curl https://nezhagate.com/v1/videos/jobs/img_5c2e8f1a9b3d7e6f0a4c8b2d \
  -H "Authorization: Bearer YOUR_API_KEY"

成功時のレスポンス

JSON
{
  "id": "img_5c2e8f1a9b3d7e6f0a4c8b2d",
  "object": "video.generation.job",
  "status": "succeeded",
  "created": 1791281400,
  "model": "wan3.0-video-prime",
  "data": [
    {"url": "https://img.nezhagate.com/i/8c1f0e5d2b7a49e3a6d0c4f1b9e2a7d5.mp4"}
  ],
  "usage": {"clips": 1, "model": "wan3.0-video-prime"}
}

ステップ 3 · data[0].url が動画(MP4)のリンクです。保存期間は 15 日間なので、長く使う場合はご自身のストレージにダウンロードしてください。

完全なサンプル(Python:送信 → 待機 → ローカルに保存)

Python
import time
import requests

BASE = "https://nezhagate.com/v1"
HEADERS = {"Authorization": "Bearer YOUR_API_KEY"}

# 1. タスクを送信
job = requests.post(f"{BASE}/videos/generations", headers=HEADERS, json={
    "model": "wan3.0-video-prime",
    "prompt": "桜の木の下で舞い落ちる花びらを追いかける柴犬、明るい日差し、スローモーション",
    "duration": 5,
    "resolution": "720P",
    "size": "16:9",
}).json()
if "error" in job:
    raise SystemExit(job["error"]["message"])

# 2. 10 秒ごとに照会(最長 1 時間)
deadline = time.time() + 3600
while job["status"] not in ("succeeded", "failed") and time.time() < deadline:
    time.sleep(10)
    job = requests.get(f"{BASE}/videos/jobs/{job['id']}", headers=HEADERS).json()

# 3. 動画をダウンロード
if job["status"] == "succeeded":
    url = job["data"][0]["url"]
    with open("wan3.0-video-prime.mp4", "wb") as f:
        f.write(requests.get(url).content)
    print("saved", url)
elif job["status"] == "failed":
    print("failed:", job["error"]["code"], job["error"]["message"])
else:
    print("still", job["status"], job["id"])

順番待ちの間は、照会結果に queue_position(前に並んでいるタスクの数)と eta_seconds(予想待ち時間)も含まれます。設定した待ち時間の上限を過ぎても、再送信はしないでください。タスクは残っているので、しばらくしてから同じタスク ID で照会を続けてください。

認証

Header
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json

コンソールで API Key を作成すると利用を開始できます。

仕様早見表

長さ2–30 秒
解像度480P / 720P / 1080P
比率16:9 / 9:16 / 1:1 / 4:3 / 3:4 / adaptive
参照画像最大 10 枚 · 1 枚は最初のフレーム、2 枚は最初と最後のフレームにもでき、それ以上は参照
参照動画最大 5 本、合計 15 秒まで
参照音声最大 5 本
音声モデルが決め、オン・オフの切り替えはありません(audio: false は拒否されます)
プロンプトの長さ最大 5,000 バイト(UTF-8、漢字で約 1,666 文字)
課金方法秒単位:単価 ×(出力の秒数 + 参照動画の秒数)

リクエストパラメータ

POST /v1/videos/generations のリクエスト本文(JSON):

パラメータ種別必須説明
modelstringはいモデル ID:wan3.0-video-prime。
promptstringはい動画の内容(画面、カメラワーク、動き)の説明。最大 5,000 バイト(UTF-8、漢字は 1 文字 3 バイトなので約 1,666 文字)。
durationintegerいいえ出力動画の長さ(秒)。2〜30 の整数で、省略時は 2。seconds とも書けます。参照動画がある場合は、出力の秒数と参照動画の秒数の合計を 30 秒以内にする必要があります。
resolutionstringいいえ解像度:480P / 720P / 1080P。省略時は 720P。P まで付けてください(P のない 720 のような書き方は拒否されます)。
sizestringいいえ比率:16:9 / 9:16 / 1:1 / 4:3 / 3:4。省略時は 16:9。最初のフレームを指定する場合は adaptive を指定すると、動画がその画像の比率に合わせて生成されます。aspect_ratio とも書けます。
imagesarrayいいえ参照画像(最大 10 枚):1 枚なら最初のフレームになります。2 枚は既定では参照になり、image_role: first_frame を付けると最初と最後のフレームになります。3 枚以上は参照です。プロンプトでは @Image1 のように指定します。1 枚だけなら image で渡すこともできます。 人物の顔に関する審査制限:実在の人物の顔を含む参照素材は避けてください。写実的な顔も検出される場合があります。FaceDetectionSuspect は実在の人物の顔が含まれる可能性、DataInspectionFailed は入力素材が審査を通過しなかったことを示し、サービス停止を意味しません。同じ入力を繰り返さず、参照素材を変更して再送してください。誤判定が疑われる場合はサポートにご連絡ください。失敗したタスクは課金されません。
image_rolestringいいえ画像の使い方:first_frame(最初のフレーム、または最初と最後のフレーム。最大 2 枚)または reference(参照)。省略時は、1 枚なら最初のフレーム、2 枚以上なら参照になります。参照動画がある場合は reference しか使えません。
video_referencesarrayいいえ参照動画(最大 5 本)。それぞれ {"url": "...", "duration": 5} の形で書きます。duration はその動画の長さ(秒、1〜15)で、必須です。合計 15 秒までで、参照の秒数と出力の秒数の合計は 30 秒以内にする必要があります。参照動画の秒数も課金されます。リンクはファイルそのものを直接ダウンロードできるものにしてください。YouTube、Bilibili、TikTok、クラウドストレージの共有ページなどウェブページのリンクは、送信時に 400 で拒否されます。
audio_referencearrayいいえ参照音声(最大 5 本)。公開された http(s) の URL のみ受け付け、参照画像か参照動画と一緒に渡す必要があります。課金されません。リンクはファイルそのものを直接ダウンロードできるものにしてください。YouTube、Bilibili、TikTok、クラウドストレージの共有ページなどウェブページのリンクは、送信時に 400 で拒否されます。
audiobooleanいいえ音声トラックはモデルが決め、オン・オフの切り替えはありません。false は拒否される(400)ので、指定しないでください。
prompt_extendbooleanいいえモデルがプロンプトを自動で拡張してよいかどうか。省略時はモデルが判断します。
callback_urlstringいいえタスク終了時に結果を送る先。下の Webhook の項目をご覧ください。
nintegerいいえ1 つのタスクで生成される動画は 1 本なので、指定する必要はありません。1 より大きい値を指定しても生成されるのは 1 本ですが、送信時に n 本分の料金が確保され、余分な分はタスク終了時に戻ります。

そのほかのフィールド(seed、negative_prompt、fps、watermark など)はモデルに渡されず、料金にも影響しません。結果は常に MP4 で、url として返ります。

料金

秒単位の課金です:料金 = 選んだ解像度の 1 秒あたりの単価 ×(出力の秒数 + 各参照動画の秒数)。参照画像と参照音声は無料です。送信時に確保し、失敗時は全額返金します。1 クレジット = $0.005 です。

解像度クレジット / 秒USD / 秒5 秒の動画 1 本
480P 未公開10.8$0.054$0.27
720P 未公開22.4$0.112$0.56
1080P 未公開40$0.20$1.00

480P / 720P / 1080P のグレードはまだ公開されておらず、送信すると 400 で拒否されます。公開されると、この表は自動で更新されます。

参照素材

  • 1 つのエンドポイントで、パラメータによってモードが切り替わります。画像なしならテキストから動画、画像 1 枚なら最初のフレーム、画像 2 枚に image_role: first_frame を付けると最初と最後のフレーム(1 枚目が最初、2 枚目が最後)になります。付けない場合、2 枚以上はすべて参照になり、最大 10 枚です。
  • 参照動画は最大 5 本(合計 15 秒まで。それぞれに duration が必要)で、その映像を作り変えたり、続きを生成したりするのに使います。参照動画があるときは、画像は参照としてのみ使え、フレームにはできません。参照音声は最大 5 本で、公開された URL のみ受け付けます。
  • 最初のフレームを指定する場合、size: adaptive にすると、動画がその画像の比率に合わせて生成されます。 人物の顔に関する審査制限:実在の人物の顔を含む参照素材は避けてください。写実的な顔も検出される場合があります。FaceDetectionSuspect は実在の人物の顔が含まれる可能性、DataInspectionFailed は入力素材が審査を通過しなかったことを示し、サービス停止を意味しません。同じ入力を繰り返さず、参照素材を変更して再送してください。誤判定が疑われる場合はサポートにご連絡ください。失敗したタスクは課金されません。
  • 画像はそれぞれ、公開されている画像の URL、data: URI、base64 のいずれかで、1 枚 16MB までです。複数枚は配列にして images で渡します。当サイトで画像を保存してから、タスクを順番待ちに入れます。読み込めない画像があると 400 で拒否され、どの画像かが message に示されます。この場合は課金されません。
  • 当サイトで保存した参照素材は 7 日間、生成結果は 15 日間保存されます。

最初と最後のフレーム:2 枚の画像をつなぐトランジション

curl
curl https://nezhagate.com/v1/videos/generations \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "wan3.0-video-prime", "prompt": "夜明けから夕暮れへと移り変わり、雲が流れ、光がしだいに暖かくなっていく", "images": ["https://example.com/first.png", "https://example.com/last.png"], "image_role": "first_frame", "duration": 5, "resolution": "720P", "size": "adaptive"}'

image_role: first_frame で 2 枚の画像を最初と最後のフレームにし、size: adaptive で動画を最初の画像の比率に合わせます。image_role を付けない場合、2 枚の画像は参照になります。

タスクの状態と返却フィールド

GET /v1/videos/jobs/{id} は次のステータスを返します。各フィールドの説明は 非同期タスク をご覧ください。5〜10 秒ごとに照会するか、下の Webhook で結果を受け取ってください。ポーリングは無料で、同じアカウントのキーならどれでもこのタスクを照会できます。

ステータス意味
queued順番待ち。queue_position(前にあるタスク数)と eta_seconds(予想待ち時間)が付きます。
processing生成中。
succeeded完了。結果は data[0].url、課金の内訳は usage にあります。
failed失敗。理由は error にあり、予約したクレジットは全額返金されます。
  • processing が queued に戻ることがあります。たとえば、すべての回線が混み合っているとき、完成した動画を取得し直しているとき、サービスの再起動後などです。ある回線でタスクを完了できなかった場合、ゲートウェイが次の回線に回して生成し直すことがあります。いくつの回線を経由しても、課金は 1 タスクにつき 1 回だけです。
  • 1 つのアカウントで同時に生成できるタスクは 50 件までで、それ以上は送信順に順番待ちになります。15 分たっても始まらないタスクは失敗となり、全額返金されます。タスクの記録は 3 日間、動画のリンクは 15 日間保存されます。

生成にかかる時間

ふつう 1〜3 分で、標準の Wan 3.0 より速く仕上がります。

エラーと返金

送信時のエラーはすぐに HTTP 4xx / 5xx で返り、タスクは作成されず、課金もされません。受け付け後の失敗は照会エンドポイントで報告され、確保額は全額返金されます。すべてのコードは エラーコード に載っています。

送信時に返るエラー

HTTPcode原因対処
400invalid_requestパラメータが不正です。たとえば、長さ・解像度・比率・参照素材の数がこのモデルの範囲外、プロンプトが長すぎる、参照画像や参照動画を読み込めない、常に音声が付くモデルに audio: false を指定した、などです。どれに当たるかは message に書かれています。message の内容に沿って直してから、もう一度送信してください。
400invalid_callback_urlcallback_url が公開された http(s) のアドレスではないか、2000 文字を超えています。インターネットからアクセスできるアドレスを使ってください。
400model_not_foundモデル ID のつづりが違う・model がない・そのモデルをこのエンドポイントでは使えない(たとえば対話モデルで画像のエンドポイントを呼び出した)のいずれかです。GET /v1/models または API リファレンス にあるモデル ID を使ってください。
401invalid_api_keyキーが存在しない・削除された・無効化されているか、アカウントが停止されています。コンソールの「API Keys」ページでキーを確認してください。
402insufficient_quotaこのリクエストの分を確保するだけの残高がありません。ゲートウェイはまずリクエストにかかりうる最大の費用を確保するため、同時に多くの呼び出しを送ったときにも起こることがあります。一度に多くの呼び出しを送った直後なら、数秒待って再試行してください。そうでなければチャージしてください。
429rate_limit_exceededこのキーに設定した 1 分あたりのリクエスト数の上限を超えました(直近 60 秒で数えます)。Retry-After ヘッダーは付きません。数秒待ってから再試行するか、コンソールでこのキーの上限を引き上げてください。
503model_maintenanceモデルのメンテナンス中で、リクエストを受け付けていません。その間、別のモデルが代わりに回答することもありません。メンテナンスが終わってから再試行してください。状況は サービス状態 で確認できます。
503service_unavailable当サイト側の一時的なエラーです(参照素材の保存に失敗した場合など)。タスクは作成されておらず、課金もされていません。しばらくしてから再試行してください。

失敗したタスク(status が failed)

code発生する場面対処
content_policyWan Standard / Prime:入力素材が審査を通過しませんでした。error.reason は FaceDetectionSuspect(実在の人物の顔の可能性)または DataInspectionFailed(入力コンテンツ審査不通過)です。error.message に理由と変更方法が示されます。失敗したタスクは課金されません。プロンプトを書き直すか参照素材を差し替えてから、もう一度送信してください。同じ内容のままでは再び拒否されます。
invalid_requestモデル提供元がリクエストを拒否しました。パラメータや参照素材が使えないか、内容が審査を通りませんでした。理由は message に書かれています。message の内容に沿ってパラメータを調整し、もう一度送信してください。
upstream_errorその他の失敗:すべての回線を試しても失敗した、順番待ちが 15 分を過ぎても始まらなかった、上流が理由を示さずに拒否した、などです。具体的な状況は message に書かれています。たいていは再送信すれば成功します。

判定は message の文面ではなく code で行ってください。知らない code の場合(または code がない場合)は upstream_error として扱ってください。たいていは再送信すれば成功します。失敗したタスクはすべて全額返金されます。

ポーリングの代わりに Webhook を使う

送信時に callback_url を付けると、タスクが終わった時点で(成功・失敗とも)、照会エンドポイントが返すものとまったく同じ内容をゲートウェイがその URL へ送ります。署名付きで、届かなかった場合は自動で再試行します。コンソールの「設定 → Webhook」で、アカウント全体の送信先を設定することもできます。 Webhook のドキュメント →

curl · callback_url
curl https://nezhagate.com/v1/videos/generations \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "wan3.0-video-prime", "prompt": "桜の木の下で舞い落ちる花びらを追いかける柴犬、明るい日差し、スローモーション", "duration": 5, "resolution": "720P", "size": "16:9", "callback_url": "https://your-domain.com/webhook"}'