Klingで動画を生成するAPIは、単一の共通エンドポイントではありません。Kuaishouの動画生成モデルであるKlingは、公式Open Platformに加え、WaveSpeedAI、KIE、falといったアグリゲーター経由でも利用できます。ただし、認証情報、モデルID、リクエスト形式、課金体系はサービスごとに異なります。共通しているのは非同期処理の流れです。ジョブを送信してIDを保存し、終了状態になるまで待機し、無制限な再試行をせずに出力を取得します。
SDKより先に、接続先を決める
Klingには公式Open Platformがありますが、「Kling API」で検索すると独立系のゲートウェイも多く見つかります。モデル名だけで選ぶのではなく、ベンダーとの契約要件、実装スピード、課金の管理しやすさを基準に経路を決めましょう。
| 接続先 | 認証形式 | ジョブの流れ | 向いているケース | 主な注意点 |
|---|---|---|---|---|
| Kling Open Platform | Klingの最新開発者ドキュメントにある認証情報とスキーマを使用 | 公式のタスクフローに従う | Kuaishouとの直接契約とファーストパーティアクセスが必要な場合 | オンボーディング、料金、同時実行ルールは公式アカウント上で確認が必要 |
| WaveSpeedAI | Authorization: Bearer <key> | POSTで予測を送信し、GETで結果を取得 | 複数モデルを横断してシンプルなREST APIで実装したい場合 | エンドポイントID、料金、上限はWaveSpeedのルールが適用される |
| KIE | Authorization: Bearer <token> | createTask後にコールバックまたはタスク照会 | Kling 3.0のマルチショットや名前付き要素を使いたい場合 | KIEのタスク形式はWaveSpeedやfalと互換ではない |
| fal | Authorization: Key $FAL_KEYまたはfal SDK | キューへの送信と結果取得 | キューヘルパーやモデル固有スキーマをSDKで使いたい場合 | エンドポイントIDとキューの挙動はfal固有 |
解像度ごとの料金は既存のKling 3 API料金ガイドを参照してください。ここでは、料金、音声倍率、同時実行数、失敗タスクの課金を、プロバイダー固有の設定として扱います。
公式Kling APIの流れ
調達上の理由でKuaishouとの直接契約が必要な場合や、ファーストパーティとしてのモデル提供を求める場合は、公式Open Platformを使います。現行の公式ドキュメントでは、認証情報の設定、タスク作成、コールバック、同時実行ルール、エラーコードが分かれているため、アグリゲーター用のペイロードを流用せず、公式の手順に従ってください。
- 認証ガイドで公式の認証情報を作成または取得し、トークンはサーバー側で保管します。
- 公式リファレンスに記載されたモデル固有のエンドポイントとリクエストフィールドを使い、非同期動画タスクを送信します。
- ステータス通知が必要なら
callback_urlを追加します。ドキュメント上のコールバック状態にはsubmitted、processing、succeed、failedがあり、失敗時はtask_status_msgを保存します。 - アカウントに割り当てられた最新の同時実行数をアプリケーション側でも制限します。公式の同時実行ガイドでは、過負荷時はHTTP
429、ビジネスコード1303になると説明されています。Klingが必ずキューに積んでくれるとは限りません。 - 公式のエラーコード一覧を使い、認証情報の不備、無効なパラメータ、リソース不足、ポリシーによるブロック、再試行可能なサーバー障害を区別します。
公式の認証ページは、アクセス可能なドキュメント版ではクライアントレンダリングされています。そのため本記事では、検証できないトークン生成コードは掲載していません。WaveSpeed、KIE、falのヘッダーが使えると決めつけず、現在の認証形式は該当ページからそのまま確認してください。
正確なペイロードを推測しなくても、公式APIのライフサイクルは次のように正規化できます。
official_credential = get_from_kling_console()
task = POST official_model_endpoint(official_credential, documented_input)
store(task.task_id)
wait_for_callback_or_query_status(task.task_id)
if status == "succeed": save_output(task_result.videos)
else: classify(http_status, business_code, task_status_msg)
これはライフサイクルの概略であり、そのまま使えるエンドポイントではありません。正確なトークン、パス、リクエストフィールド、レスポンス形式は、リンク先の公式リファレンスを確認してください。
アグリゲーターを選ぶべき場面
従量課金で素早く試作したい場合、複数モデルを1アカウントで使いたい場合、プロバイダーSDKを利用したい場合は、アグリゲーターが便利です。一方で、キー、スキーマ、キュー、出力URL、場合によっては保持期間もアグリゲーター側に依存します。再試行する前に、どの層で失敗したのかを分類しましょう。
共通化できるKling APIの契約
本番向けクライアントでは、プロバイダー固有の差異を内部関数の背後に隠すべきです。どの経路を選んでも、アプリケーションが行う処理は次のようになります。
- クレジットを消費する前に、プロンプトとメディアURLを検証する。
- プロバイダー固有のモデルIDで動画生成タスクを送信する。
- 返されたタスクIDまたは予測IDを直ちに永続化する。
- コールバックを受けるか、結果エンドポイントをポーリングして、ジョブが終了状態になるまで待つ。
- 出力URL、プロバイダー、モデル、パラメータ、コストメタデータを保存する。
- プロバイダーが失敗、キャンセル、タイムアウト、削除を報告したら再試行を止める。
抽象化レイヤーは、たとえば次のような独自の正規化オブジェクトを返す形にします。
{
"provider": "wavespeed",
"job_id": "provider-job-id",
"status": "queued",
"output_url": null,
"error": null
}
プロバイダーをまたいで考えやすいパラメータ
| 概念 | Klingでの一般的な使い方 | 値の例 |
|---|---|---|
| プロンプト | 被写体、動き、カメラ、照明、雰囲気を記述する | A slow dolly toward a rain-soaked neon street |
| 長さ | クリップの再生時間を選ぶ | エンドポイントに応じて3、5、10、15秒 |
| アスペクト比 | 配信先プラットフォームに合わせる | 16:9、9:16、1:1 |
| 音声・サウンド | 対応する経路ではネイティブ音声を有効化する | true / false またはsound |
| 開始画像 | 指定した最初のフレームをアニメーション化する | 公開された画像URL |
| 終了画像 | 対応時に最終フレームを誘導する | 公開された画像URL |
| ネガティブプロンプト | ぼやけ、歪み、不要なオブジェクトを除外する | プロバイダー固有の文字列フィールド |
| マルチショットプロンプト | 長いアイデアを複数ショットに分割する | プロンプトと時間を含むオブジェクトの配列 |
| モード・ティア | 試行コストと品質のバランスを取る | std、pro、またはプロバイダー固有のティア |
概念は共通でも、フィールド名は共通ではありません。generate_audio、sound、generate_audio: trueは、サービスによって近い挙動を示していても別の書き方です。各プロバイダーのスキーマは、別々のアダプターとして扱ってください。
プロバイダー間で流用できないもの
最初の落とし穴はモデルIDです。kling-3.0、kling-3.0/video、fal-ai/kling-video/v3/standard/text-to-video、kwaivgi/kling-v3.0-std/text-to-videoは、それぞれ別のAPI経路を指しており、置き換えて使える値ではありません。
同じことは認証ヘッダー、コールバック名、結果URL、タスク状態の値、ファイルアップロードのルールにも当てはまります。たとえばcompletedを固定したクライアントでは、別のプロバイダーが返すsucceededやfailedを誤って分類する可能性があります。
実際に異なる3つのリクエスト形式
以下のプロバイダー別の例を見ると、Klingに共通エンドポイントが存在しない理由が分かります。
WaveSpeedAI:予測IDを取得して結果をポーリング
WaveSpeedAIでは、Kling 3.0 Standardのテキスト動画生成エンドポイントを次のように案内しています。
POST https://api.wavespeed.ai/api/v3/kwaivgi/kling-v3.0-std/text-to-video
リクエストにはBearerトークンを使用します。エンドポイントは予測IDを返し、結果は次のURLから取得します。
GET https://api.wavespeed.ai/api/v3/predictions/{prediction_id}/result
最小構成のcURLフローは以下のとおりです。
export WAVESPEED_API_KEY="replace_me"
submit=$(curl --fail-with-body -s \
-X POST \
"https://api.wavespeed.ai/api/v3/kwaivgi/kling-v3.0-std/text-to-video" \
-H "Authorization: Bearer $WAVESPEED_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "A cinematic sunrise over a futuristic cityscape",
"duration": 5,
"aspect_ratio": "16:9",
"cfg_scale": 0.5,
"shot_type": "customize"
}')
prediction_id=$(printf '%s' "$submit" | jq -r '.data.id // .id')
curl -s \
"https://api.wavespeed.ai/api/v3/predictions/$prediction_id/result" \
-H "Authorization: Bearer $WAVESPEED_API_KEY"
WaveSpeedAIのモデルドキュメントでは、動画の長さは3〜15秒、アスペクト比は16:9、9:16、1:1、cfg_scaleのデフォルト値は0.5とされています。Standardの料金表では、5秒クリップは音声なしで$0.42、音声ありで$0.63です。ただし、これはあくまで同プロバイダーにおける料金のスナップショットであり、Kling全体に共通する価格ではありません。
本番では結果エンドポイントを短い間隔で連打せず、バックオフ付きでポーリングしてください。このエンドポイントで終了状態として定義されているcompleted、failed、cancelled、timeout、deletedを受け取ったら停止します。
KIE:createTaskとコールバックまたはタスク照会
KIEは共通のタスク作成エンドポイントを使用します。
POST https://api.kie.ai/api/v1/jobs/createTask
Kling 3.0のモデル識別子はkling-3.0/videoで、認証にはBearerトークンを使います。単一ショット向けのコンパクトなペイロードは次のとおりです。
{
"model": "kling-3.0/video",
"callBackUrl": "https://example.com/webhooks/kie",
"input": {
"prompt": "A paper boat moving across a sunlit stream, gentle camera push-in",
"duration": "5",
"aspect_ratio": "16:9",
"mode": "std",
"sound": false,
"multi_shots": false
}
}
KIEのドキュメントでは、動画は3〜15秒、出力アスペクト比は16:9、9:16、1:1で、マルチショットモードでは最大5ショットを指定できます。マルチショットの各エントリーは1〜12秒に設定可能です。画像要素にはJPGまたはPNGのURLを2〜4件指定でき、画像1枚あたりの上限は10 MBです。動画要素には、最大50 MBのMP4またはMOV URLを1件指定します。
コールバックは任意ですが、KIEは本番環境での利用を推奨しています。Webhookでは利用可能な場合に署名を検証し、すぐに応答を返したうえで、タスク結果をキューへ送る構成にしましょう。コールバックを取り逃した場合に備え、タスク照会のポーリングも復旧経路として残しておきます。
KIEは代表的な失敗に対して個別のレスポンスコードを定義しており、無効な認証は401、クレジット不足は402、検証エラーは422、レート制限は429です。コードとメッセージは必ずセットで記録してください。「Kling failed」という汎用エラーだけでは、安全に再試行できるか判断できません。
fal:モデルエンドポイントとキュークライアント
falはKling 3.0をモデル固有のエンドポイントIDとして公開しています。Standardのテキスト動画生成で案内されているIDは次のとおりです。
fal-ai/kling-video/v3/standard/text-to-video
Raw APIではAuthorization: Key $FAL_KEYヘッダーを使用します。PythonとJavaScriptの例では、falのキュー対応クライアントが使われており、通常は自前でポーリングループを書くより簡単です。
import { fal } from "@fal-ai/client";
fal.config({ credentials: process.env.FAL_KEY });
const result = await fal.subscribe(
"fal-ai/kling-video/v3/standard/text-to-video",
{
input: {
prompt: "A paper boat moving across a sunlit stream, gentle camera push-in",
duration: 5,
aspect_ratio: "16:9",
generate_audio: false,
negative_prompt: "blur, distort, low quality",
cfg_scale: 0.5
},
logs: true
}
);
console.log(result.data.video.url);
falのドキュメントでは、動画の長さは3〜15秒、テキスト動画生成のアスペクト比は3種類、cfg_scaleの範囲は0〜1、デフォルト値は0.5です。Standardスキーマではpromptとmulti_promptは代替関係にあり、両方ではなく片方だけを指定します。generate_audioのデフォルトはtrueと明記されているため、予算や後工程が無音出力を前提とするなら明示的に設定してください。
falは画像動画変換とモーションコントロールにも別IDを用意しています。現行のモデルリファレンスを確認せず、文字列のtext-to-videoだけを書き換えてIDを推測しないでください。
クォータ、待ち時間、クレジットを守る設計
公式プラットフォーム、WaveSpeedAI、KIE、falに共通する単一の公開Klingクォータはありません。同時実行数、レート制限、クレジット残高、失敗タスクへの課金、出力の保持期間は、選んだ経路ごとに異なります。KLING_LIMITのような定数にせず、プロバイダー設定として保持してください。
実運用上のリスクは、あるユーザーの次の指摘が端的に表しています。
「Klingは生成ごとに課金され、キュー待ち時間も実際に発生する。最初に組み込むべきなのはコストと同時実行数の上限だ。そうしないと、悪いフレームに対して再試行するエージェントが、夜のうちに気付かないままクレジットを使い切る。」 — @ukrroot on X
予算と同時実行数のガードレール
エージェントやバッチワーカーからKlingを呼び出せるようにする前に、次の制御を実装してください。
- 実行中ジョブの上限:プロンプトごとにジョブを起動するのではなく、プロバイダー別の上限を設定する。
- ジョブ単位の予算:送信前に、長さ、ティア、音声、出力数を見積もる。
- 再試行の予算:通信障害は選別して再試行する一方、検証、認証、クレジット不足のエラーは再試行しない。
- ジョブ台帳:後続リクエストの前にプロバイダーのジョブIDを記録し、ワーカー再起動による重複生成を防ぐ。
- 終了状態の方針:プロバイダーが安全な再送を明示しない限り、失敗、キャンセル、タイムアウト、削除済みジョブは完了として扱う。
- クレジットアラート:残高または予測支出がしきい値を超えたらキューを停止する。
- キーと出力の安全性:キーはサーバー側に保管し、露出したキーは即時ローテーションし、完了動画は永続ストレージへコピーする。
5秒のStandardテストは、15秒のProや音声ありジョブより安価かもしれません。しかし「安価」の基準はプロバイダーごとに異なります。デフォルトティアを決める前に、ライブのモデルページを確認してください。
本番投入前に計測すべき項目
すべてのリクエストで、次のフィールドを追跡しましょう。
| 指標 | 重要な理由 |
|---|---|
| キュー待ち時間 | プロバイダーの混雑とモデル推論時間を分けて把握できる |
| 推論時間 | 現実的なクライアント側タイムアウトの設定に役立つ |
| 最終ステータス | 失敗率とキャンセル率を確認できる |
| HTTPステータス | 401、402、422、429、サーバーエラーを区別できる |
| 実効コスト | 再試行、音声、放棄されたジョブを含めて把握できる |
| 出力保持期間 | 動画を自前ストレージへコピーするタイミングを判断できる |
| 実行中ジョブ数 | プロバイダーの上限に近づいているか把握できる |
レイテンシーとクォータはエンドポイント固有のものとして扱ってください。公開情報には、プロバイダー横断で共通するSLAは示されていません。
Kling API FAQ
Klingには公式APIがありますか?
あります。Klingは公式Open Platformの開発者ドキュメントを提供しています。公式経路とサードパーティゲートウェイは別サービスなので、最新の認証情報、クォータ、料金はKling Open Platformのドキュメントで確認してください。
Klingに共通のAPIエンドポイントはありますか?
ありません。公式プラットフォーム、WaveSpeedAI、KIE、falでは、エンドポイントパス、モデルID、認証ヘッダー、レスポンス形式がそれぞれ異なります。kling-3.0がどこでも有効だと考えず、プロバイダーごとのアダプターを実装してください。
ポーリングとWebhookはどちらを使うべきですか?
プロバイダーが対応しているなら、本番ではコールバックまたはWebhookを使うのが基本です。ただし、ローカルテストやコールバック取り逃し時の復旧用として、ポーリングも残しておきます。指数バックオフ、総待機時間の上限、冪等性を実装し、遅れて届いたコールバックでレコードが重複作成されないようにしてください。
対応する動画の長さとアスペクト比は?
現行のKling 3.0に関する複数のアグリゲータードキュメントでは、3〜15秒のクリップと16:9、9:16、1:1の比率が案内されています。ただし、個別エンドポイントでは異なる場合があります。これらを公式共通仕様とみなさず、選択したモデルページで検証してください。
音声を有効にするとコストは変わりますか?
通常は変わる可能性があります。WaveSpeedAIはKling 3.0 Standardエンドポイントについて、音声の倍率を1.5×と記載しています。一方でfalとKIEは、音声またはサウンドをリクエストパラメータとして公開しています。選択したエンドポイントの最新課金ページを確認し、フラグは明示的に設定してください。
再試行で追加料金が発生したのはなぜですか?
最初のジョブがまだキューにある状態でも、再試行によって2回目の生成が作成されることがあります。ジョブIDを永続化し、同時実行数の上限を設け、一時的な障害だけを再試行してください。曖昧なリクエストを再送する前に、プロバイダーの課金状況も照合しましょう。
最初の本番相当テストでは、5秒・無音・Standardのジョブを1件だけ実行し、ライフサイクル全体を記録します。重複ワーカーへの対処が機能してから、Pro、音声、マルチショット、同時実行数を追加してください。