本文へスキップ

移行ガイド

カタログごとではなく、ワークフローをひとつずつ移す。

二つのプラットフォームが同じタスクを提供していても、フィールド名、既定値、終端状態、エラーの意味、課金単位の定義は食い違います。Base URL から始める移行は、それらを本番で全部見つけることになります。

解決する課題

同じタスク、違う契約

きれいに移るのはモデルの部分だけです。移らないのはその周辺すべて。必須フィールド、既定値、参照画像の渡し方、資金が保留される時点、そして見たことのない状態に出会ったときの振る舞いです。

01

フィールド名と既定値はまず揃いません

推測せず、エンドポイントごとに対応表を書きます。入力は additionalProperties を閉じた公開スキーマで検証されるため、対応漏れはログの警告ではなく最初の本番リクエストでの 400 になります。

02

資金は完了時ではなく受理時に保留されます

createTask は見積額を保留し、cost と settled: false で返します。現在の提供元が成功時にだけ課金しているなら、トラフィックを移す前に照合処理が保留の概念を理解している必要があります。

03

エラー語彙は閉じていて小さい

九つの値がすべての失敗を覆い、content_rejected もそのひとつです。拒否は例外ではなく終端タスクです。切り替え後ではなく前に、既存のエラー分岐をこの九つへ対応づけてください。

実装方針

まず一つのエンドポイントを影で流し、数字を比べ、それから移す

ワークフローをひとつ選び、現在の入力・出力・失敗・単価を記録し、同じ条件でここでも走らせます。jobs/quote の見積もりを今の支払いと比べ、両方の経路をフラグの後ろで生かしたまま、数字が持つあいだだけ比率を上げていきます。

まず見積もり。作成とまったく同じ検証と受理判定を通しますが、資金は保留せず、生成も始めません。

POST /api/v1/jobs/quote

{
  "model": "<publisher>/<model>/text-to-video",
  "input": {
    "prompt": "A slow aerial drift over a misty pine forest at sunrise",
    "duration_seconds": 5,
    "resolution": "1080p"
  }
}

200 OK — nothing reserved, nothing started

{
  "code": 200,
  "msg": "success",
  "request_id": "req_example_quote",
  "data": {
    "quoteId": "qte_01k3m8x9q2z4v7n5p6r8s0t1w3",
    "model": "<publisher>/<model>/text-to-video",
    "estimatedCost": "0.750000",
    "maxCharge": "0.750000",
    "currency": "USD",
    "quantity": "5",
    "unit": "second",
    "expiresAt": "2026-09-12T12:05:00Z"
  }
}

契約

先に押さえておく項目

fal の代替:画像と動画の呼び出しを移行する — 先に押さえておく項目
フィールド / ヘッダー値・上限
POST /api/v1/jobs/quoteno hold · signed quote valid 5 min
quoteId + expectedCost40901 when the price moved
40240201 balance · 40202 spend cap
published call nameimmutable · renames keep a 308

横にスワイプして全項目を確認できます。

導入

最初の呼び出しから本番まで

  1. 01エンドポイントをひとつ選び、代表的なリクエスト十件と、その出力および現在の費用を採取します。
  2. 02各フィールドを対象エンドポイントの input_schema へ対応づけ、その表をバージョン付きで保管します。
  3. 03対応づけた本文ごとに見積もり、estimatedCost、quantity、unit を今日の請求と比べます。
  4. 04影、カナリア、比率の引き上げの順に進め、どの段階でも旧経路を呼べる状態にしておきます。

向き不向き

この方法が向いている場面

こんなときに選ぶ

  • 画像・動画・テキストで、ひとつの残高、ひとつの消費上限、ひとつのタスク契約にまとめたい。
  • ボトルネックがモデルの品質ではなく、コンテンツ方針やモデルごとの提供状況である。

こんなときは別の方法へ

  • 全部を即日切り替えたい場合。契約差はエンドポイントごとに、しかも遅れて現れます。
  • クライアントから直接モデルを呼んでいる場合。ここではキーはサーバーのものです。

裏付け

自分で確認できること

見積もりは本物のドライランです

POST /api/v1/jobs/quote は作成と同じ検証と受理判定を行い、estimatedCost、maxCharge、quantity、unit を返し、何も保留しません。署名付きの見積もりは五分間有効です。

価格が動いたら驚かせずに失敗します

作成時に quoteId と expectedCost を送ります。そのあいだに価格が変わっていれば、受理は資金を保留する前に業務コード 40901 を返します。

公開された呼び出し名は動きません

公開済みの呼び出し名は有効なままで、改名時は 308 と別名が残ります。対応表がリリースのあいだに静かに腐ることはありません。

公開前に

確認しておくプラットフォームの挙動

  • フィールド対応表をバージョン管理し、エンドポイントごとに成功と失敗のフィクスチャを残します。
  • 一件でも流す前に、対象エンドポイントが呼べて価格も付いていることを確認します。
  • ロールバックはステージングではなく、トラフィックを乗せた状態で予行演習します。
  • 最後の比率を切り替える前に、丸ひと月ぶんの保留と精算を照合します。

よくある質問

このページでよく聞かれること

メディアでは済みません。タスク契約、フィールド名、状態機械、課金の意味づけをすべて対応づける必要があります。テキストが最も近く、OpenAI 互換面なら通常は Base URL と model 値だけで足ります。

次に

ワークフローをひとつ対応づけて見積もる

一度にひとつのワークフローを移す。フィールドを対応づけ、状態とエラーを揃え、請求を比べ、実際に試したロールバック経路とともに切り替えます。

参考資料: fal model APIs ↗

関連ガイド