クイックスタート
1つのキー、1つのリクエスト形式で、すべての画像・動画モデルを。ジョブを送信し、ポーリングして、ファイルを取得します。
/data/models.jsonにあります。POST /v1/chat/completionsで利用でき、同じクレジットからトークン単位で課金されます。Chat Completionsをご覧ください。| ベースURL | https://api.revana.si/v1 |
| 認証 | Authorization: Bearer <key> |
| 送信 | POST /v1/generations |
| ポーリング | GET /v1/generations/{id} |
| モデル | GET /v1/models (キー不要):現在生成できるすべてのモデル |
| 残高 | GET /v1/balance:キーのアカウントで使える金額 |
| アップロード | POST /v1/uploads:コンピューター上の参照ファイル用のリンク |
| 形式 | 入力も出力もJSONです。料金は米ドルで、100クレジット = $1です。 |
| 機械可読 | /openapi.json · /llms.txt |
認証
アカウントからキーを作成し、すべてのリクエストでBearerトークンとして送信します。キーはサーバー上で管理し、ブラウザやモバイルアプリには絶対に含めないでください。
生成を送信する
モデルIDと、その input を送信します。レスポンスはすぐに、生成の id とステータス queued とともに返され、処理はバックグラウンドで行われます。
| フィールド | 型 | 説明 |
|---|---|---|
model | string、必須 | モデルページにあるモデルID(例:seedance-2.5)。 |
input | object、必須 | プロンプトと設定です。入力フィールドをご覧ください。不明なフィールドは拒否されます。 |
max_cost_usd | number、任意 | この生成に支払う上限額で、最大は 100(既定値)です。これを超える価格のルートはスキップされ、残るルートがない場合、リクエストは 422 max_cost_exceeded を返します。 |
max_wait_s | integer、任意 | この秒数より時間がかかると見込まれるルートはスキップされます。経過後は新しいルートを試しませんが、すでに実行中のルートは(最大40分まで)完了でき、結果が納品された場合は課金されます。 |
Idempotency-Key | header、任意 | 最大200文字です。同じキーとボディを(タイムアウトや 503 の後に)再送すると、2つ目ではなく、同じ生成結果が返されます。同じキーで異なるボディを送ると 409 idempotency_conflict になります。 |
結果を取得する
モデルごとのエンドポイントと完了webhookをお探しですか?リクエストID、ステータス/結果のURL、対応するfalのエイリアス、移行時の制限については、fal互換のキューAPIをご覧ください。
status が succeeded または failed になるまで数秒ごとにポーリングし、その後、output.urls のファイルをキーを使ってダウンロードします。最初のファイルは GET /v1/generations/{id}/content、画像モデルが複数を返す場合は /content/2、/content/3… です。画像は通常数秒、動画はモデルと長さによって、1分未満から数分かかります。
完了した生成:
入力フィールド
同じ名前がモデル間で共通して使われます。各モデルが受け付けるフィールドと値、およびその既定値は、モデルごとに/data/models.json(options、tasks)に掲載しています。モデルが対応していないフィールドや値がある場合、課金の前に 422 invalid_input でリクエストが拒否されます。
| フィールド | 型 | 用途 |
|---|---|---|
prompt | string | 何を生成するか。テキストから画像、テキストから動画では必須です。 |
image_url | string(URL) | 画像から動画の開始フレーム、または画像から画像で編集する画像。 |
end_image_url | string(URL) | 最初と最後のフレームに対応するモデル向けの、最後のフレーム。 |
image_urls | string[] | 参照画像。モデルの上限まで指定できます。 |
resolution | string | 720p、1080p、2K…モデルの解像度のいずれか。 |
duration | number | 動画の長さ(秒)。モデルが対応する長さのいずれか。 |
aspect_ratio | string | 16:9, 9:16, 1:1... |
audio | boolean | モデルが対応している場合に、動画と一緒に音声を生成します。料金が変わることがあります。 |
negative_prompt | string | 避けたい内容。対応しているモデルのみ。 |
video_url | string(URL) | 変換、延長、アップスケールするクリップ。長さが測定され、1秒あたりで課金されるモデルでは課金対象になります。 |
audio_url | string(URL) | トーキングアバターやリップシンクのモデルが動かす、声または音。 |
quality | string | 品質ティアで価格が決まるモデルでの品質ティア(例:low、medium、high)。 |
seed | integer | 対応しているモデルでの、シード値。 |
Seedance 2.5の既定は、720p、5秒(4〜30)、16:9、音声なしで、次も受け付けます。
| フィールド | 型 | 用途 |
|---|---|---|
video_url | string(URL) | 編集する4〜30秒のクリップ。結果は元の長さを保つため、duration は指定しないでください。 |
video_urls | string[] | 参照クリップ。最大10本、合計30秒まで。その秒数は、動画入力のレートで課金されます。 |
audio_urls | string[] | 参照用の音声。最大10本、合計30秒まで。 |
image_url は、正確な最初のフレームであるため、参照メディアとは組み合わせられません。より緩い視覚的な参照には image_urls を使います。end_image_url には image_url が必要です。メディアは、直接ダウンロードできる公開の https のURLである必要があります。
Nemesis
nemesis は、クリップを、あなた自身の人物、商品、場所で作り直します。クリップの動き、タイミング、カメラはそのままに、最大8枚の参照画像が演じます。結果は、クリップの長さと形を保ちます。料金は、Seedance 2.5の編集のレートに1秒あたり$0.02を加えたもの(480p、720p、1080pで$0.08、$0.17、$0.36)で、入力クリップの秒数と出力動画の分が対象です。
Scenario ALTERの手順に従います。クリップ自体を音声なしで編集し、そのうちの1フレームを、変更を加えた状態で描き直して最初の参照として使い、あとでクリップ自体の音声を戻します。複数の人物がいる場合、画像は、最初のフレームで人物が立っている位置に合わせて、左から右の順に対応づけられます。
| フィールド | 型 | 用途 |
|---|---|---|
video_url | string(URL)、必須 | 作り直す4〜30秒のクリップ。 |
image_urls | string[]、必須 | 1〜8枚の参照画像。 |
roles | string[] | 画像ごとに1つ:person(既定)、product、location、look。 |
target_frame | boolean | レンダリングの前に、クリップの最初のフレームを、同じポーズ、サイズ、光のまま、変更を加えた状態で描き直し、最初の参照として送るため、髪、顔、服装が画像に忠実に保たれます。nemesis では既定でオン、nemesis-lite ではオフです。無料です。 |
guide | string | nemesis-lite のみ(nemesis は常にクリップ自体を編集します)。clip(ターゲットフレームがある場合の既定):クリップ自体の映像に従います。people(ない場合の既定):人物が置き換えられ、背景は維持されます。scene:映るものすべてが、参照とプロンプトに由来します。 |
sound | string | original (nemesis では既定でオン):クリップ自体の音声が戻されます。none(nemesis-lite では既定):音声なし。 |
face_mesh | boolean | nemesis-lite のみ。クリップ内のすべての顔をトレースし、新しい顔が表情、目、唇の動きを保てるようにします。guide: "people" では既定でオン、scene と clip ではオフです。オフにするには false を送信します。結果には表示されません。 |
resolution | string | 480p、720p(既定)、または 1080p。 |
prompt | string | 任意の指示。最大5000文字。 |
nemesis-lite では、誰も映っていないクリップを guide: "people" で送信すると、invalid_input で拒否され、課金されません。scene または clip で送信してください。
所要時間。まず、クリップが準備されます。nemesis ではターゲットフレームが描かれ、15〜40秒ほどです。nemesis-lite では声が分離され、各フレームが深度ガイドになり、8秒のクリップで約25秒、30秒のクリップで約1分半です。次に動画がレンダリングされ、待ち時間の大半はここです。480pの8秒のクリップで、約4〜7分かかります。完了するまで生成をポーリングしてください。
Nemesis Lite
nemesis-lite は、nemesis と同じ入力を受け付け、Wan 3.0でレンダリングします。より安い代わりに、顔や細部の忠実度が少し下がります。クリップは2〜15秒です。料金は、Wan 3.0のレートに1秒あたり$0.02を加えたもの(480p、720p、1080pで$0.07、$0.11、$0.19)で、入力クリップの秒数と出力動画の分が対象です。
生成オブジェクト
| フィールド | 型 | 説明 |
|---|---|---|
id | string | ポーリングに使う生成ID(gen_…)。 |
object | string | 常に generation。 |
model | string | リクエストしたモデル。 |
status | string | ステータスをご覧ください。 |
message | string | プロバイダーで結果を確認している間のみ:現在の処理内容。 |
quoted_usd | number | 最も安いルート、つまり最初に試されるルートでの価格です。そのルートで作れず、より高価なバックアップのルートで作れた場合、課金額はそのルートの価格で、最大は reserved_usd です。 |
reserved_usd | number | 残高から確保される金額です。ほかのルートを試した後でより高価なバックアップのルートが作成した場合に、この生成にかかりうる最大額です。差額は、確定時に解放されます。quoted_usd を超えて支払わないようにするには、max_cost_usd にそれを設定してください。より高価なバックアップはスキップされます。 |
output | object | null | 成功時:urls。結果のファイルで(画像モデルは複数を返すことがあります)、width と height を持ちます。動画には duration_s と has_audio もあります。ファイルには有効期限があるため、早めにダウンロードしてください。 |
cost_usd | number | null | 課金された金額。生成が成功すると設定され、失敗時は 0 です。 |
attempts | number | フォールバックを含め、試されたルート。課金されるのは、成功したルートのみです。 |
error | object | null | 失敗時:code、message、retryable。コンテンツの拒否の場合は reason もあります。生成が失敗した理由をご覧ください。 |
created_at, completed_at | string | ISO 8601のタイムスタンプ。 |
ステータス
| ステータス | 意味 |
|---|---|
queued | 受付済み。ルートを待機中。 |
running | 生成中。ルートが失敗した場合、次のルートに移る間と、結果を確認している間(message を参照)は、ジョブは running のままです。 |
succeeded | 完了。output.urls にファイル、cost_usd に支払った金額が入ります。 |
failed | すべてのルートが失敗したか、入力が拒否されました。課金はありません。 |
課金
- 支払いは、1ドルあたり100のプリペイドのクレジットで行い、$10から$5,000までのパックで購入します。すべての価格は、クレジットの整数です。
- 送信すると、
reserved_usdが残高から確保されます。生成が失敗した場合は、その全額が解放されます。 - 課金されるのは、生成が成功したときのみで、それを作成したルートに提示された価格です。通常は、
quoted_usdの最初のルートです。バックアップが作成しなければならない場合は、費用が高くなることがあります。そのルートの価格、または、それより前に試したルートが供給元から課金された場合は、その試行にかかった費用に10%を加えた額のうち、どちらか高いほうです。reserved_usdを超えることはありません。 - 月間のクォータや1分あたりの上限はありません。上限は、残高と
max_cost_usdです。 - 各モデルの料金は、そのページと料金表にあります。
残高
キーが属するアカウントです。大量のバッチの前に確認してください。無料で、生成の制限にもカウントされません。
| フィールド | 意味 |
|---|---|
available_usd | 新しい生成が確保できる金額です。reserved_usd がこれを超える送信は、402 insufficient_credits になります。 |
held_usd | 実行中の生成が確保している金額です。使われなかった分は、確定時に戻ります。 |
balance_usd | 利用可能な額と確保中の額の合計です。 |
spent_usd | 完了した生成に対して課金された金額、全期間。 |
*_credits | 同じ金額をクレジット(1ドルあたり100)で表示したものです。利用可能な額が実際より高く表示されないよう、丸めています。 |
参照ファイルのアップロード
参照は、公開の https:// リンクで渡します。自分のマシンにあるファイルは、アップロード用のリンクを依頼し、そこにバイトを送って、返されたリンクを使います。無料です。
| フィールド | 意味 |
|---|---|
upload_url | 1時間以内に、PUT でここにファイルを送信します。ヘッダーは、upload_headers(その種類とサイズ)のとおりにしてください。それ以外は拒否されます。 |
url | api.revana.si 上のファイルのリンクで、expires_at(14日間)まで有効です。キーは不要で、ファイルにリダイレクトされるため、リンクを取得できるものなら誰でも読み取れます。POST /v1/generations で参照として使います。ファイルは、その後まもなく削除されます。 |
id | upl_… |
画像(image/*)は30 MBまで、クリップ(video/*)は50 MBまで、音声(audio/*)は15 MBまでです。それより大きいファイルや別のファイルは、413 too_large または 400 invalid_request になります。
生成が失敗した理由
failed の生成には、error.code、依頼者に表示するために書かれた message、そして retryable があります。true は、あとで同じリクエストを再送すれば成功する可能性がある場合、false は、リクエスト自体を変更する必要がある場合です。失敗した生成は課金されません。
| コード | 再試行可 | 条件 |
|---|---|---|
content_policy | no | モデルが、プロンプトまたはメディアを拒否したか、生成物を差し止めました。reason がどのルールかを示します。sexual(NSFWまたはアダルトコンテンツ)、minors(子どもや10代)、copyright(著作物や第三者の素材、ブランド、キャラクター)、real_person(実在または著名な人物の肖像)、またはモデルが理由を示さない場合は other です。 |
invalid_input | no | 参照を読み取れなかった、画像を1枚送ったのにプロンプトが @Image2 を指している、またはモデルが拒否する値です。メッセージにどれかが示されます。 |
model_declined | no | モデルが、画像や動画を作らずに言葉で回答しました。多くの場合、プロンプトが、送られていない必要なものを求めているためです。プロンプトでは、結果そのものを説明してください。 |
reference_changed | no | 参照ファイルが、チェック後に変更されました。もう一度送信してください。 |
max_cost_exceeded | no | 実行できる唯一のルートの料金が、max_cost_usd を超えています。 |
model_busy | yes | このモデルのすべてのルートが満杯でした。1分後に再試行してください。 |
model_unavailable | yes | 現在、このモデルのジョブを受けられるルートがありません。 |
timeout | yes | どのルートも、時間内に結果を返さなかったか、max_wait_s を過ぎました。 |
all_routes_failed | yes | すべてのルートが、ルート側の理由で失敗しました。 |
エラー
エラーはHTTPステータスコードとJSONのボディを使います:{"error": {"code": "...", "message": "..."}}。
| HTTP | コード | 条件 |
|---|---|---|
| 400 | invalid_request | ボディがJSONでない、model または input がない、またはAPIが認識しないフィールドがあります。 |
| 401 | unauthorized | APIキーがないか、無効です。 |
| 402 | insufficient_credits | 利用可能な残高が reserved_usd をまかなえません。チャージして再試行してください。 |
| 403 | account_disabled | アカウントが一時停止中です。サポートに連絡してください。 |
| 403 | generation_not_enabled | キーは料金の参照のみ可能で、まだ生成はできません。 |
| 404 | not_found | お使いのアカウントに、このIDの生成はありません。 |
| 409 | idempotency_conflict | この Idempotency-Key は、すでに別のボディで使用されています。 |
| 409 | not_ready | 生成が成功する前に、ファイルが要求されました。 |
| 413 | body_too_large | ボディが1 MBを超えています。メディアはURLで送信してください。 |
| 422 | invalid_input | モデルが対応していないフィールド、値、または組み合わせ、あるいは読み取れないメディアです。課金はありません。 |
| 422 | max_cost_exceeded | すべてのルートの料金が、max_cost_usd を超えています。 |
| 422 | model_not_available | このIDのモデルは、APIにありません。IDはモデルページにあります。 |
| 429 | rate_limited | 1つのアカウントから、同じ1秒間に多すぎるリクエストがありました(暴走ループへの対策で、クォータではありません)。Retry-After 秒待ってください。 |
| 429 | concurrency_limit | アカウントで進行中の生成が、すでに上限に達しています。1つ完了したら再試行してください。 |
| 503 | busy | 一時的な負荷です。Retry-After 後に、同じ Idempotency-Key で再試行してください。 |
| 503 | model_unavailable | 現在、このモデルで稼働しているルートがありません。しばらくしてから再試行してください。 |
| 500 | server_error | こちら側で問題が発生しました。同じ Idempotency-Key で再試行しても安全です。 |
モデル一覧
すべてのモデルとそのオプション、料金は、/data/models.json にJSONとして公開されています。このサイトが表示に使っているのと同じファイルです。