すべてのAI動画モデルに対応する1つのAPI
言語モデルでOpenRouterをご存知なら、Revanaは動画・画像生成における同じ発想です。Seedance、Veo、Kling、Wan、Nano Banana Pro、GPT Image 2、そのほかのカタログのモデルを、1つのAPIキー、1つのリクエスト形式、1つの前払い残高で利用でき、上流のルートが失敗した場合は自動的にフォールバックします。
各モデルを直接呼び出す場合の問題
モデルの開発元はそれぞれ独自のAPIを運営しており、アカウント、キー、リクエスト形式、ジョブのステータスの流れ、課金がすべて異なります。そのうち3つに対して開発すると、保守する連携が3つ、チャージする残高が3つ、処理するエラーコードが3種類になります。複数のプラットフォームが、異なる価格、異なる制限で同じモデルを提供していたり、処理能力が増減したりすることもあります。
そのコストは、新しいモデルを試したいときに現れ、2026年にはそれが数か月ごとに起こります。新しいモデルごとに、自社のプロダクトに合うかどうかを確認する前に、別の連携を作る必要があります。
Revanaの仕組み
- 1つのキー。サインアップして、ダッシュボードでAPIキーを作成します。カタログのすべてのモデルで使えます。
- 1つのリクエスト。
modelのIDとinputオブジェクトを付けてPOST /v1/generationsを送信します。フィールド名はすべてのモデルで共通です:prompt、image_url、end_image_url、image_urls、resolution、duration、aspect_ratio、audio。 - 実行前に価格がわかる。ジョブの料金はカタログに基づいて決まり、前払い残高から確保されます。モデルが対応していないフィールドや値は、課金される前に
422で拒否されます。上限としてmax_cost_usdを設定することもできます。 - ルーティング。ルーターは、そのモデルで最も安いルートにジョブを送ります。ルートが失敗またはタイムアウトした場合は、ジョブが次のルートに移ります。
- 1つの結果形式。
GET /v1/generations/{id}をポーリングします。ステータスがsucceededになると、ファイルはoutput.urlsに、課金額はcost_usdに入ります。ジョブが失敗した場合は、確保が解除されます。
ジョブは非同期です。画像は通常数秒、動画は1分未満から数分かかります。完全なフィールドのリファレンスとエラーコードはドキュメントにあります。
同じリクエストを3つのモデルで
リクエスト形式が共通なので、モデルの比較はループで行えます。このスクリプトは、1つのプロンプトをSeedance 2.0、Veo 3.1 Fast、Wan 3.0に送信し、各結果と費用を出力します。各モデルのオプションは異なるため、3つとも受け付ける値を選んでください。ここでは、720p、8秒、16:9です。
import os
import time
import requests
API = "https://api.revana.si/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['REVANA_API_KEY']}"}
PROMPT = (
"A paper boat sails down a rain-soaked street gutter at dusk, "
"neon signs reflected in the water. Rain, distant traffic."
)
MODELS = ["seedance-2.0", "veo-3.1-fast", "wan-3.0"]
# Submit the same job to every model; each call returns 202 with an id.
jobs = {}
for model in MODELS:
resp = requests.post(f"{API}/generations", headers=HEADERS, json={
"model": model,
"input": {
"prompt": PROMPT,
"resolution": "720p",
"duration": 8,
"aspect_ratio": "16:9",
"audio": True,
},
"max_cost_usd": 1.5,
})
resp.raise_for_status()
jobs[model] = resp.json()["id"]
# Poll each job until it finishes.
for model, job_id in jobs.items():
while True:
job = requests.get(f"{API}/generations/{job_id}", headers=HEADERS).json()
if job["status"] in ("succeeded", "failed"):
break
time.sleep(5)
if job["status"] == "succeeded":
print(model, job["output"]["urls"][0], job["cost_usd"])
else:
print(model, "failed:", job["error"])2026年10月時点のカタログ価格で、3つのジョブの費用は次のとおりです:
| モデル | リクエスト | 料金 |
|---|---|---|
| Seedance 2.0 | 720p、8秒、音声は料金に含まれる | $1.20 |
| Veo 3.1 Fast | 720p、8秒、音声付き(別料金) | $0.80 |
| Wan 3.0 | 720p、8秒、音声は料金に含まれる | $0.72 |
1.5 の max_cost_usd は、3つすべてをカバーします。上限を超える費用になるジョブは、実行されません。
ルート間のフォールバック
ルートとは、モデルの上流の処理能力の供給元の1つです。Revanaの多くのモデルには複数のルートがあり、ルーターは順番にそれらを使います:
- 最安のルートから。各ジョブは、そのオプションを受け付ける最も安いルートに送られます。
- 失敗したら次へ。そのルートが失敗またはタイムアウトした場合、ジョブは自動的に次のルートに移ります。
attemptsフィールドに、試行された数が入ります。 - 同じモデル、同じ価格。どのルートも、リクエストしたモデルを掲載価格で提供します。ルーターが別のモデルに差し替えることはありません。
- 課金は1回だけ。成功したルートにのみ課金されます。すべてのルートが失敗した場合、ジョブは
failedで終了し、課金はありません。
| モデル | 種類 | ルート |
|---|---|---|
| Seedance 2.5 | video | 5ルート |
| Seedance 2.0 | video | 3ルート |
| Kling 3.0 | video | 2ルート |
| Veo 3.1 Fast | video | 2ルート |
| Veo 3.1 | video | 2ルート |
| Wan 3.0 | video | 3ルート |
| Nano Banana Pro | image | 1ルート |
| GPT Image 2 | image | 2ルート |
ルートが1つのモデルは、フォールバックできません。フォールバックはジョブが完了する可能性を高めますが、稼働を保証するものではありません。コード側で failed のジョブを処理してください。たとえば、後で再試行するか、自分で別のモデルに切り替えます。
料金とクレジット
Revanaは従量課金制です。サブスクリプション、シート、月額の最低料金はありません。$10、$50、$100、$500、$1,000、$5,000のパックで前払いクレジットを購入し、どのモデルでも掲載価格で使えます。
- ほとんどの動画モデルは、解像度や、モデルによっては音声のオン・オフに応じて、出力1秒あたりで料金が決まります。
- 画像モデルは、サイズに応じて、1枚あたりで料金が決まります。
- 料金は送信時に確保され、ジョブが成功すると課金され、失敗すると解放されます。
すべてのモデルの料金は料金ページに掲載されています。一般的な用途の費用は、Seedance 2.0、Veo 3.1、Kling 3.0のガイドで紹介しています。
カタログをコードで読み取る
カタログ全体は、https://revana.si/data/models.json で公開されているJSONファイルです。各モデルの主なフィールドは次のとおりです:
| フィールド | 内容 |
|---|---|
id | 次のフィールドとして送信する文字列 model |
name, maker | 表示名と、モデルを作った会社 |
kind | video or image |
tasks | モデルが受け付けるもの。たとえば text_to_video など image_to_video |
options | 解像度、アスペクト比、長さ、音声、入力画像の上限 |
price | 単位(1秒あたり、1枚あたり、1ジョブあたり)と、各オプションの料金 |
routes | そのモデルを提供するルートの数 |
たとえば、テキストから動画を作れるすべてのモデルを一覧にするには:
# Every model that can make a video from a text prompt
curl -s https://revana.si/data/models.json \
| jq -r '.models[] | select(any(.tasks[]; . == "text_to_video")) | .id'モデルの選択UIを作る、送信前にオプションを確認する、自分のインターフェースでジョブの料金を見積もる、といった用途に使えます。同じデータがモデルページにも使われています。
切り替える前に知っておくこと
- オプションはモデルによって異なります。フィールド名は共通ですが、各モデルが受け付ける値は異なります。たとえばKling 3.0には、アスペクト比のオプションがありません。
modelの文字列を変更する前に、モデルページを確認してください。 - 出力リンクには有効期限があります。完成したファイルはダウンロードして、自分のストレージに保管してください。
- モデルは自分で選ぶ。ルーティングが変えるのはジョブが実行される場所であり、実行されるモデルではありません。別のモデルへのフォールバックは、コード側で決めることです。
- 料金は変わることがあります。カタログには常に現在の料金が表示され、各ジョブの料金は送信時に確定します。
試してみませんか?APIキーを取得して、モデルを見るか、クイックスタートから始めましょう。
よくある質問
すべてのAI動画モデルに対応する1つのAPIはありますか?
Revanaは、Seedance、Veo、Kling、Wan、Hailuo、Grok Imagine、Nano Banana、GPT Imageなどの主要な動画・画像モデルを、1つのAPIキー、1つのリクエスト形式、1つの前払い残高で利用できるようにします。各モデルのオプションと料金は、それぞれ異なります。
RevanaはOpenRouterとどう似ていますか?
OpenRouterは、開発者に多数の言語モデルを1つのAPIで提供します。Revanaは、動画・画像生成モデルで同じことを行います。1つのキー、1つの残高、同じモデルに対する複数の供給元にまたがるルーティングです。
上流のルートが失敗した場合は、どうなりますか?
モデルに複数のルートがある場合、ルーターは同じ掲載価格で、ジョブを次のルートに移します。すべてのルートが失敗した場合、ジョブは失敗として終了し、確保された金額は解放されます。
使っているモデルが利用できない場合、Revanaは別のモデルに切り替えますか?
いいえ。ルーターが変更するのはルートであり、モデルは変更しません。別のモデルにフォールバックしたい場合は、コード側で、別のモデルIDを指定した新しいリクエストを送信してください。
課金はどのように行われますか?
$10から$5,000までのパックで前払いクレジットを購入します。サブスクリプションはありません。各ジョブはカタログに基づいて料金が決まり、送信時に確保され、成功した場合にのみ課金されます。
コードでモデルと料金の一覧を取得するには?
https://revana.si/data/models.json を取得します。すべてのモデルについて、ID、開発元、タスク、オプション、料金、ルート数が記載されています。