HappyHorse 1.0
1 枚以上の画像から、720p または 1080p の 3~15 秒の動画を生成します。画像は必須です。
- 非同期です。作成の呼び出しはタスク ID を返し、動画はタスクが成功した時点で得られます。
- 画像から動画のみです。
imagesは必須です(リンク 1~9 個)。テキストから動画のモードはありません。 - 3~15 秒のクリップを生成できます。
durationは秒数の整数です。 - 料金は、解像度とリクエストした秒数に応じて決まります。失敗したタスクには課金されません。
執筆時点で、HappyHorse 1.0 は公開中のモデル一覧(GET /v1/media/models)に載っていません。一覧に載るまでは、作成リクエストは 503 processing_unavailable で拒否されます。利用を前提に組み込む前に、一覧を確認してください。
このモデルをテスト画面で開きます。BeatAPI の API キーを入力するとタスクを作成できます。実際に呼び出され、ご自身の残高から課金されます。
モデル ID
2 つの HappyHorse モデルがこのエンドポイントを共有し、まったく同じリクエストを受け付けます。以下の値はゲートウェイの仕様から直接取得したものです。
エンドポイントと認証
POST https://api.beatapi.io/v1/videos/tasks
Authorization
string
必須
BeatAPI の API キーを Bearer <BEATAPI_API_KEY> の形式で送信します。キーはダッシュボードで作成できます。キーはサーバー側で保管し、ブラウザーやモバイルアプリに含めないでください。
ボディは JSON で送信し、Content-Type: application/json を指定します。Idempotency-Key は任意です。論理的に 1 件のリクエストごとに一意の値(255 文字以内)を送り、まったく同じボディを再試行するときだけ再利用してください。24 時間以内に同じキーと同じボディで再試行すると、最初のレスポンスが Idempotent-Replayed: true 付きで再度返されます。同じキーで異なるボディを送ると 409 idempotency_conflict が返ります。2xx 以外のレスポンスは保存されないため、400 や 402 の後の再試行は改めて実行されます。
リクエストの流れ
タスクを作成する
下記のパラメーターをエンドポイントに POST します。201 が返れば、タスクが受け付けられ、料金が残高から仮確保されたことを意味します。処理はバックグラウンドで実行されます。data.id を保存してください。
完了を待つ
GET /v1/tasks/{task_id} を呼び出し、status が succeeded または failed になるまで、呼び出しの間隔を data.poll_after_seconds(画像は 5 秒、動画は 8 秒)だけ空けてください。あるいは task.succeeded と task.failed のWebhookを登録することもできます。処理タイムアウトで停止したタスクはイベントを送信しないため、フォールバックとしてポーリングも続けてください。
入力モード
リクエストパラメーター
model
string
必須
実行するモデルです。
値:happyhorse-1.0
値が正しくない場合
- 指定がない場合:
"model" is required - 画像モデルをこのエンドポイントに送った場合:
"model" nano-banana-2 is served by POST /v1/images/tasks, not this endpoint
prompt
string
必須
動画で起こることを、動き、表情、カメラワークとして記述します。
長さ:1–5000 文字
- 長さは文字数で数えます(CJK 文字は 1 文字として数えます)。
値が正しくない場合
- 指定がない場合:
"prompt" is required - 空、または上限を超えている場合:
"prompt" has an unsupported length - 文字列ではない場合:
"prompt" must be a string
images
string[]
必須
動かしたい画像、または使いたい順に並べた複数の画像です。必須です。
要素数:1–9
各要素は公開されている https:// の URL です。ローカルファイルは先に アップロード(POST /v1/files)し、返された data.url を渡してください。
- 各リンクは公開された
https://URL である必要があります。ゲートウェイはタスク作成時にファイルのダウンロードや計測を行いません。 - このモデルにはテキストから動画のモードがありません。
imagesのないリクエストは拒否されます。 aspect_ratioとresolutionを省略するとデフォルト(16:9、720p)のままになります。ゲートウェイは画像からこれらを読み取らないためです。希望する形を指定してください。
値が正しくない場合
- 指定がない場合:
"images" is required - リンクが 10 個以上:
"images" accepts at most 9 items - 空の配列:
"images" requires at least 1 item - 配列ではない場合:
"images" must be an array - https:// のリンクではない場合:
"images[0]" must be a public HTTPS URL
duration
integer
任意デフォルト: 5
動画の長さを秒単位の整数で指定します。
デフォルト:5
範囲:3–15
- 省略すると
5が使われ、その分が課金されます。 - 料金は秒数で決まる(「課金」を参照)ため、価格を左右する主な項目です。
値が正しくない場合
- 3~15 の範囲外、整数ではない、または文字列で送った場合:
"duration" is outside its supported range
aspect_ratio
string
任意デフォルト: 16:9
動画の縦横比を 幅:高さ の形式で指定します。
指定できる値:16:9, 9:16, 1:1, 4:3, 3:4
デフォルト:16:9
- 省略すると
16:9が使われます。縦長の画像でも同様です。 - このモデルでは
adaptiveは使えません。
値が正しくない場合
- リストにない値:
"aspect_ratio" must be one of: [16:9 9:16 1:1 4:3 3:4]
resolution
string
任意デフォルト: 720p
出力解像度です。1080p は 720p より 1 秒あたりの料金が高くなります。
指定できる値:720p, 1080p
デフォルト:720p
- 小文字のみです。
値が正しくない場合
- リストにない値(例:
480p、720P):"resolution" must be one of: [720p 1080p]
入力メディアの上限
ゲートウェイはタスク作成前にすべての入力を読み取り、次の上限を超えるものは、その入力を示す 400 bad_request で拒否します。課金はされません。
- ゲートウェイはタスク作成時に画像ファイルを読み取らないため、このモデルではサイズ、解像度、形式の制限は確認されません。上記のフィールドのルールのみが適用されます。
- モデルが取得または利用できないリンクは、タスク作成後にタスクを失敗させます。通常は
bad_requestで、入力がモデレーションで拒否された場合はcontent_policy_violationです。いずれも全額返金されます。 - ローカルファイルがある場合は、
POST /v1/filesでアップロードし(png、jpg、jpeg、webp に対応。最大 50 MB)、返されたdata.urlを渡してください。
このモデルが受け付けないフィールド
以下のフィールドを送ると、無視されるのではなく、課金前に拒否されます。
reference_images、reference_videos、reference_audios、generate_audio、seed、quality、sound、task_type、output_format、watermark、およびほかの動画モデルのフィールド →field "reference_videos" is not supported by model happyhorse-1.0(送ったフィールド名が入ります)。画像はimagesに入れてください。- 動画エンドポイントがまったく認識しないフィールド →
unknown field: <name>。
リクエスト例
画像から動画
画像 1 枚から作る 5 秒の 720p 縦向きクリップです。
複数の画像
2 枚の画像をリストの順にモデルへ渡し、10 秒の 1080p クリップを作ります。
レスポンス
タスクの作成(201)
タスクオブジェクトです。タスクが成功するまで output は null です。「実行中」と記載されたフィールドは、タスクの完了後に表示されなくなります。
完了したタスク
GET /v1/tasks/{task_id} は HTTP 200 と status: "succeeded" を返し、結果は data.output に入ります。
出力フィールド
失敗したタスク
失敗したタスクも、GET /v1/tasks/{task_id} では HTTP 200 になります。失敗はボディに示されます。仮確保された金額は全額戻されるため、課金されません。
完全なコード例
タスクを作成し、サーバーが示すポーリング間隔で完了を待ち、結果の URL を出力します。環境変数に BEATAPI_API_KEY を設定し、requests をインストールしてください。
課金
- これらの料金はモデルが一覧に載った後に適用されます。それまでは作成リクエストは拒否され、課金されません。
- 料金は、解像度とリクエストした秒数(
duration、省略時は 5)に応じて決まります。1080p は 720p より 1 秒あたりの料金が高くなります。aspect_ratioと画像の枚数は料金に影響しません。 - 下の表は 8 秒のクリップの料金です。他の長さは、解像度ごとの同じ単価で 1 秒単位で計算されます。
- 料金はタスク作成時に確保されます。
data.usage.billable_duration_secondsに計算の基になった秒数が表示されます。 - 失敗したタスク(送信後にモデレーションで拒否されたものを含む)は全額返金されます。
現在の定価です。料金ページと同じ金額です。割引を個別に契約しているアカウントでは、より低い金額になります。実際に課金された金額は、タスクの data.usage で確認できます。
よくあるエラー
HTTP エラー早見表
タスクが作られる前のエラーは、2xx 以外のレスポンスで返されます。課金はされません。error.code または error.retryable で処理を分岐してください。message には問題の内容が示されます。全一覧と再試行のルールはエラーにあります。
認証
Send your API key as Authorization: Bearer <BEATAPI_API_KEY>.
ヘッダー
ボディは JSON で送信し、Content-Type: application/json を指定します。Idempotency-Key は任意です。論理的に 1 件のリクエストごとに一意の値(255 文字以内)を送り、まったく同じボディを再試行するときだけ再利用してください。24 時間以内に同じキーと同じボディで再試行すると、最初のレスポンスが Idempotent-Replayed: true 付きで再度返されます。同じキーで異なるボディを送ると 409 idempotency_conflict が返ります。2xx 以外のレスポンスは保存されないため、400 や 402 の後の再試行は改めて実行されます。
リクエスト
動かしたい画像、または使いたい順に並べた複数の画像です。必須です。
要素数:1–9
各要素は公開されている https:// の URL です。ローカルファイルは先に アップロード(POST /v1/files)し、返された data.url を渡してください。
- 各リンクは公開された
https://URL である必要があります。ゲートウェイはタスク作成時にファイルのダウンロードや計測を行いません。 - このモデルにはテキストから動画のモードがありません。
imagesのないリクエストは拒否されます。 aspect_ratioとresolutionを省略するとデフォルト(16:9、720p)のままになります。ゲートウェイは画像からこれらを読み取らないためです。希望する形を指定してください。
値が正しくない場合
- 指定がない場合:
"images" is required - リンクが 10 個以上:
"images" accepts at most 9 items - 空の配列:
"images" requires at least 1 item - 配列ではない場合:
"images" must be an array - https:// のリンクではない場合:
"images[0]" must be a public HTTPS URL
実行するモデルです。
値:happyhorse-1.0
値が正しくない場合
- 指定がない場合:
"model" is required - 画像モデルをこのエンドポイントに送った場合:
"model" nano-banana-2 is served by POST /v1/images/tasks, not this endpoint
動画で起こることを、動き、表情、カメラワークとして記述します。
長さ:1–5000 文字
- 長さは文字数で数えます(CJK 文字は 1 文字として数えます)。
値が正しくない場合
- 指定がない場合:
"prompt" is required - 空、または上限を超えている場合:
"prompt" has an unsupported length - 文字列ではない場合:
"prompt" must be a string
動画の縦横比を 幅:高さ の形式で指定します。
指定できる値:16:9, 9:16, 1:1, 4:3, 3:4
デフォルト:16:9
- 省略すると
16:9が使われます。縦長の画像でも同様です。 - このモデルでは
adaptiveは使えません。
値が正しくない場合
- リストにない値:
"aspect_ratio" must be one of: [16:9 9:16 1:1 4:3 3:4]
動画の長さを秒単位の整数で指定します。
デフォルト:5
範囲:3–15
- 省略すると
5が使われ、その分が課金されます。 - 料金は秒数で決まる(「課金」を参照)ため、価格を左右する主な項目です。
値が正しくない場合
- 3~15 の範囲外、整数ではない、または文字列で送った場合:
"duration" is outside its supported range
出力解像度です。1080p は 720p より 1 秒あたりの料金が高くなります。
指定できる値:720p, 1080p
デフォルト:720p
- 小文字のみです。
値が正しくない場合
- リストにない値(例:
480p、720P):"resolution" must be one of: [720p 1080p]
レスポンス
タスクオブジェクトです。タスクが成功するまで output は null です。「実行中」と記載されたフィールドは、タスクの完了後に表示されなくなります。

