Kling 4.0
Kling 4.0 を使用して、テキスト、最初と最後のフレーム、またはマルチモーダルな参照データから動画を生成します。このページでは、このモデルにおけるリクエストの送信から生成結果の受け取りまでの一連のワークフローを解説します。
APIモデルID: kling-4-0
動画生成は非同期で行われます。タスク作成時に返される taskId を保存し、そのステータスを確認するか、ウェブフックで結果を受け取ってください。
対応機能
| 機能 | 対応している値 |
|---|---|
| 出力解像度 | 720p · 1080p |
| 出力時間 | 3–30 s |
| アスペクト比 | auto, 16:9, 9:16, 1:1, 21:9 |
| 参照画像 | 画像は10枚まで |
| 参照動画 | 動画は5本まで |
| 参照音声ファイル | 音声ファイルは3個まで |
| 参照ファイルの合計数 | 参考ファイルは最大15個まで |
| 参照動画 (Σ) | 30 秒 |
| seed | 非対応 |
料金とクレジット
動画生成の料金は、課金対象となる秒単位の長さに基づいて、クレジットで請求されます。動画の入力がない場合、課金対象は出力された動画の長さとなります。動画の入力がある場合は、参照動画の長さも課金対象に加算されます。
以下の表は、1秒あたりに消費されるクレジット数を示したものであり、タスク全体の総コストではありません。料金レートは、モデル、出力解像度、およびビデオ・ツー・ビデオ(V2V)モードで参照動画が提供されているかどうかによって異なります。総コストの計算方法については、表の下にある計算式と例をご参照ください。
| 出力解像度 | 動画入力なし | 動画入力あり |
|---|---|---|
720p | 13クレジット/秒 | 8クレジット/秒 |
1080p | 20クレジット/秒 | 13クレジット/秒 |
- 動画入力なしの場合:出力秒数 × 動画入力なしの単価
- 動画入力がある場合、T はサーバーが測定した参照動画の合計秒数です。最終クレジット数を切り上げます。
ceil((duration + max(duration, T)) × rate) - 画像または音声のみを参照させる場合は、動画入力なしの単価が適用されます。動画入力ありの課金単価は、reference-to-video モードで参照動画が実際に提供された場合にのみ適用されます。
料金の計算例
5秒間の720p動画(テキストから動画):5 × 13 = 65 クレジット
5秒間の参照動画をもとに、5秒間の720p動画を出力:(5 + 5)× 8 = 80 クレジット
クレジットはリクエスト時に仮確保され、タスクが成功した時点で決済(実売上)されます。失敗またはタイムアウトしたタスクは、返金処理に回されます。課金ステータスが refund_failed になった場合は返金処理が未完了であることを意味します。APIログを確認するか、サポートまでお問い合わせください。
認証
ダッシュボードでAPIキーを作成してください。APIキーの全体が表示されるのは作成時の1回のみです。キーは安全なサーバー上で管理し、すべてのリクエストのヘッダーに Bearer トークンとして含めて送信してください。
ベースURL
https://api.seevio.aiAuthorization: Bearer sk_live_your_api_key
Content-Type: application/jsonこれらのサンプルコードを実行する前に、環境変数 SEEVIO_API_KEY を設定してください。JavaScriptのサンプルはサーバー上の Node.js で、Pythonのサンプルは requests ライブラリを使用して実行します。
クイックスタート
この最小限のリクエストを送信し、返された taskId を保存した上で、後述のタスクステータス確認の例を実行してください。作成レスポンスに含まれる credits の値は、確保(仮売上)されたクレジット量を示しています。
curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer $SEEVIO_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "kling-4-0",
"input": {
"prompt": "A cat surfing at sunset, cinematic lighting",
"duration": 5,
"resolution": "720p",
"generation_type": "text-to-video"
}
}'タスク作成時のレスポンス例
リクエストが承認されると、APIは次のJSONレスポンスを返します。taskIdは、その後のステータス照会に使用するタスク識別子です。creditsは、このタスクに確保されたクレジット数を示します。このレスポンスはタスクの作成が完了したことを示すものであり、動画の生成完了を意味するものではありません。動画の生成結果を取得するには、タスクステータスをポーリングするか、Webhookを使用する必要があります。
{
"taskId": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"credits": 65
}タスクの作成
POST https://api.seevio.ai/v1/videos/generationsmodel、input、およびオプションの callback_url を含む JSON オブジェクトを送信してください。model ID は常にこのページに表示されているものを指定してください。指定しない場合は自動的に seedance-2-0 が選択されます。
リクエストボディ
| フィールド | データ型 | 必須 | 説明と制約条件 |
|---|---|---|---|
model | string | はい | モデルID。Kling 4.0を使用するには、このフィールドをkling-4-0に設定してください。 |
callback_url | string | いいえ | タスク完了時または失敗時に POST コールバックを受け取るための、一般公開されている HTTPS エンドポイント。プライベートネットワークや localhost は指定できません。 例: https://example.com/webhooks/seevio |
input | object | はい | 入力パラメータ |
入力パラメータ
| フィールド | データ型 | デフォルト値 | 説明と制約条件 |
|---|---|---|---|
input.generation_type | string | text-to-video | text-to-video | image-to-video | reference-to-video |
input.prompt | string | — | 最大8000文字。画像からの生成では省略可能、それ以外では必須です。参照は種類別に配列順で @Image1、@Video1、@Audio1 から指定します。 |
input.duration | integer | 5 | 3–30 s |
input.resolution | string | 720p | 720p | 1080p |
input.aspect_ratio | string | モードによる | 対応している値 auto16:99:161:121:9固定比率を指定すると、その比率で出力します。省略時または auto の場合、テキストからの生成では 16:9、画像からの生成では最初のフレームの比率を使用します。参照モードでは参照画像や動画から比率を決めます。 |
input.image_urls | string[] | [] | 画像から生成する場合は先頭フレーム、任意で最終フレームの順に指定します。参照モードは画像10枚までです。 |
input.keyframe_urls | string[] | [] | 画像から生成する際の中間フレームを順に指定します。最終フレームなしで9枚、ありで8枚までです。 |
input.video_urls | string[] | [] | 参照モード専用です。動作やカメラワークの参考にする動画の HTTPS URL を指定します。最大5本で、各2~30秒、合計30秒以内です。 |
input.audio_urls | string[] | [] | 参照モード専用です。生成する声や音の参考にする音声の HTTPS URL を指定します。最大3本で、各5~30秒です。 |
input.keep_original_sound | boolean | false | video_urls に参照動画がある場合、true は元の音声を保持し、false(既定値)は新しい音声を生成します。参照動画がない場合、この設定は無視されます。 |
作成時のレスポンス
HTTP 200 は taskId(文字列)と credits(数値)を返します。これはタスクの作成が受け付けられたことを意味し、生成の完了を示すものではありません。以下のクレジット数は、5秒間の720pクイックスタートに対応する額です。
{
"taskId": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"credits": 65
}生成モードとコード例
テキストから動画 (Text to Video)
テキストプロンプトから動画を生成します。このモードではメディアURLは送信されません。
curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer $SEEVIO_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "kling-4-0",
"input": {
"prompt": "A cat surfing at sunset, cinematic lighting",
"duration": 5,
"resolution": "720p",
"generation_type": "text-to-video"
}
}'最初のフレーム (First frame)
最初のフレームとして画像を1枚提供し、プロンプトで動画の動きを説明します。
curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer $SEEVIO_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "kling-4-0",
"input": {
"prompt": "A cat surfing at sunset, cinematic lighting",
"duration": 5,
"resolution": "720p",
"generation_type": "image-to-video",
"image_urls": [
"https://example.com/first.jpg"
]
}
}'最初と最後のフレーム (First & last frames)
画像から生成する場合は先頭フレーム、任意で最終フレームの順に指定します。参照モードは画像10枚までです。
curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer $SEEVIO_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "kling-4-0",
"input": {
"prompt": "",
"duration": 5,
"resolution": "720p",
"generation_type": "image-to-video",
"image_urls": [
"https://example.com/first.jpg",
"https://example.com/last.jpg"
]
}
}'キーフレームの例:バラの開花
同じアングルの写真4枚で、バラが開く8秒のタイムラプスを作ります。image_urls には最初のフレームとなるつぼみ、最後のフレームとなる満開の花の順に指定します。keyframe_urls には花びらが開き始めた写真、半開きの写真の順に指定します。つぼみから咲き始め、半開き、満開へと変化します。中間フレームの順序は配列で指定し、表示のタイミングはモデルが決めます。
example.com のメディアURLは、ご自身でホストしている公開済みの HTTPS ファイルのURLに置き換えてください。サンプルのURLはリクエストの構造を示すためのものであり、ダウンロード可能なアセットではありません。
curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer $SEEVIO_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "kling-4-0",
"input": {
"prompt": "A time-lapse of a rose opening. Keep the camera still and the light soft as the petals unfold.",
"duration": 8,
"resolution": "720p",
"generation_type": "image-to-video",
"image_urls": [
"https://example.com/rose-bud.jpg",
"https://example.com/rose-full-bloom.jpg"
],
"keyframe_urls": [
"https://example.com/rose-opening.jpg",
"https://example.com/rose-half-open.jpg"
]
}
}'マルチモーダル参照
画像、動画、音声の参照データを組み合わせます。プロンプトの指定は必須です。参照動画を入力すると料金の算出方法が変わります。
curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer $SEEVIO_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "kling-4-0",
"input": {
"prompt": "Animate @Image1 with the movement of @Video1 and ambience from @Audio1.",
"duration": 5,
"resolution": "720p",
"generation_type": "reference-to-video",
"image_urls": [
"https://example.com/character.jpg"
],
"video_urls": [
"https://example.com/motion.mp4"
],
"audio_urls": [
"https://example.com/surf.mp3"
],
"keep_original_sound": false
}
}'タスクのステータス確認
GET https://api.seevio.ai/v1/tasks/{taskId}サンプルのIDを、作成時に返された taskId に置き換えてください。ステータス確認は、そのAPIキーを所有するユーザーのタスクのみ可能です。権限がない、または存在しないIDの場合は HTTP 404 が返されます。
最初は10〜20秒間隔でポーリングを開始し、HTTP 429(レートリミット)が発生した場合は間隔を空け、ステータスが completed または failed になったら終了します。本番環境ではウェブフックの使用を推奨します。以下の各コード例は、1回のステータス確認リクエストを行うものです。
curl --fail-with-body https://api.seevio.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
-H "Authorization: Bearer $SEEVIO_API_KEY"| ステータス | 説明と制約条件 |
|---|---|
queued | 受け付けられ、処理待ちの状態です。 |
generating | 動画を生成中です。 |
completed | 生成成功(最終状態)。有効期限が切れる前に data.results から動画をダウンロードしてください。 |
failed | 生成失敗(最終状態)。failed_reason と billing_status を確認してください。 |
| フィールド | データ型 | 説明と制約条件 |
|---|---|---|
id | string | タスク識別子。作成時のレスポンスに含まれる taskId と同一です。 |
created_at | number | Unixタイムスタンプ(秒)で表されるタスク作成日時。 |
model | string | このタスクに使用された公開モデルのID。 |
billing_status | string | reserved(仮確保)、charged(決済完了)、refunded(返金済み)、または refund_failed(返金失敗)。 |
credits | number | このタスクのために仮確保されたクレジット。返金された後もこの値は保持されます。実際の課金結果を判断するには billing_status を参照してください。 |
failed_reason | string | null | タスクが失敗した場合のエラー理由。それ以外は null。ステータス確認時にタスクが失敗している場合、レスポンスに data は含まれません。 |
data | object | タスクが失敗していない場合に返されます。出力結果と処理の詳細が含まれます。 |
data.results | string[] | 動画URLの配列。生成が完了するまで、または動画の有効期限が切れた後は空になります。 |
data.video_expires_at | string | null | ISO 8601 形式のタイムスタンプで表される動画の有効期限。まだ利用できない場合は null。この期限までに結果を保存してください。 |
data.last_frame_url | string | null | 最終フレームがリクエストされ、取得可能な場合はそのURL。それ以外は null。 |
data.processing_time | number | null | タスクの処理時間(秒単位)。取得できない場合は null となります。 |
タスク完了時:動画生成結果を含むクエリレスポンス
クエリのレスポンスとしてstatus=completedが返された場合は、動画の生成が完了しています。data.resultsから動画のURLを取得し、data.video_expires_atの期限までにダウンロードしてください。billing_status=chargedは、確保されていたクレジットの決済が確定したことを示します。
{
"id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"created_at": 1788652800,
"model": "kling-4-0",
"is_draft": false,
"draft_task_id": null,
"status": "completed",
"billing_status": "charged",
"credits": 65,
"failed_reason": null,
"data": {
"results": [
"https://cdn.seevio.ai/api/videos/example.mp4"
],
"video_expires_at": "2026-09-07T00:00:00Z",
"last_frame_url": null,
"processing_time": 48
}
}タスク失敗時:エラー原因と決済詳細を含むクエリレスポンス
クエリのレスポンスとしてstatus=failedが返された場合は、動画生成が正常に終了しなかったことを意味します。失敗の理由はfailed_reasonで、返金結果はbilling_statusで確認できます。この例では、refundedとなっておりクレジットが返却されたことを示しています。creditsには最初に確保された額がそのまま表示され、レスポンスにdataは含まれません。
{
"id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"created_at": 1788652800,
"model": "kling-4-0",
"is_draft": false,
"draft_task_id": null,
"status": "failed",
"billing_status": "refunded",
"credits": 65,
"failed_reason": "provider_failed"
}ウェブフック
作成リクエスト時に callback_url を設定すると、タスクが完了または失敗した際、JSONデータが POST リクエストで送信されます。受信側は15秒以内に 2xx レスポンスを返してください。配信に失敗した場合は再試行されます。同一のタスクIDで重複してコールバックを受信することがあるため、冪等(べきとう)な処理を行ってください。
コールバックエンドポイントは、JSON形式のリクエストボディ(Content-Type: application/json)を含むPOSTリクエストを受け付ける必要があります。
コールバックを指定してタスクを作成
curl --fail-with-body https://api.seevio.ai/v1/videos/generations \
-H "Authorization: Bearer $SEEVIO_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "kling-4-0",
"input": {
"prompt": "A cat surfing at sunset, cinematic lighting",
"duration": 5,
"resolution": "720p",
"generation_type": "text-to-video"
},
"callback_url": "https://example.com/webhooks/seevio"
}'タスク完了:処理成功時のコールバックペイロード
生成が成功すると、コールバックのステータスは「status=completed」になります。idでタスクを特定し、data.resultsから動画のURLを取得してください。data.video_expires_atの期限が切れる前に、結果をダウンロードして保存してください。
created_at はイベント作成時刻、task_created_at はタスク作成時刻で、どちらも Unix 秒です。例では推奨フィールドを示しています。応答には追加フィールドが含まれる場合があります。
{
"id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"created_at": 1788652848,
"model": "kling-4-0",
"status": "completed",
"task_created_at": 1788652800,
"billing_status": "charged",
"credits": 65,
"failed_reason": null,
"data": {
"results": [
"https://cdn.seevio.ai/api/videos/example.mp4"
],
"video_expires_at": "2026-09-07T00:00:00Z",
"last_frame_url": null,
"processing_time": 48
}
}タスク失敗:処理失敗時のコールバックペイロード
生成が失敗すると、コールバックのステータスは「status=failed」になります。idでタスクを特定し、failed_reasonで失敗の理由、credits_refundedで返還されたクレジット数を確認してください。
{
"id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
"created_at": 1788652848,
"model": "kling-4-0",
"status": "failed",
"task_created_at": 1788652800,
"billing_status": "refunded",
"credits": 65,
"failed_reason": "provider_failed",
"credits_refunded": 65
}レシーバーの実装例
export async function POST(request: Request) {
const callbackData = await request.json();
if (callbackData.status === "completed") {
const videoUrls = callbackData.data.results;
// Save the video URLs and mark this task as completed in your application.
console.log(callbackData.id, videoUrls);
}
if (callbackData.status === "failed") {
const { failed_reason, credits_refunded } = callbackData;
// Record the failure reason and refunded credits for this task.
console.error(callbackData.id, failed_reason, credits_refunded);
}
return new Response(null, { status: 200 });
}このNext.jsのサンプルコードは、JSON形式のコールバックボディを読み込み、成功したタスクと失敗したタスクを直接処理します。実際のアプリケーション開発では、永続化処理やタスクIDの重複排除を追加してください。また、時間のかかる処理はキューに登録してから、コールバックへの応答を返すようにしてください。
メディア要件と制限事項
- すべてのメディアURLおよびコールバックURLは、一般公開されている HTTPS URLである必要があります。localhost、プライベートIP、クッキーやログインが必要なファイルは避けてください。参照動画・音声のURLは、直接読み込み可能なメディアファイルである必要があります。
- 動画ファイルサイズは1点あたり100 MB以下にする必要があります。
- 音声ファイルサイズは1点あたり15 MB以下にする必要があります。
- 参考ファイルは最大15個まで