curl --request POST \
--url https://api.apimart.ai/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'Idempotency-Key: <unique-operation-key>' \
--data '{
"model": "muse-video-ext",
"prompt": "Waves gently wash a beach at sunset, slow camera pan, natural ocean sounds, no text",
"aspect_ratio": "16:9",
"duration": 10,
"resolution": "720p"
}'
import requests
response = requests.post(
"https://api.apimart.ai/v1/videos/generations",
headers={
"Authorization": "Bearer <token>",
"Accept": "application/json",
"Idempotency-Key": "<unique-operation-key>"
},
json={
"model": "muse-video-ext",
"prompt": "Waves gently wash a beach at sunset, slow camera pan, natural ocean sounds, no text",
"aspect_ratio": "16:9",
"duration": 10,
"resolution": "720p"
}
)
response.raise_for_status()
print(response.json())
const response = await fetch("https://api.apimart.ai/v1/videos/generations", {
method: "POST",
headers: {
Authorization: "Bearer <token>",
"Content-Type": "application/json",
Accept: "application/json",
"Idempotency-Key": "<unique-operation-key>"
},
body: JSON.stringify({
"model": "muse-video-ext",
"prompt": "Waves gently wash a beach at sunset, slow camera pan, natural ocean sounds, no text",
"aspect_ratio": "16:9",
"duration": 10,
"resolution": "720p"
})
});
if (!response.ok) throw new Error(await response.text());
console.log(await response.json());
{
"code": 200,
"data": [
{
"status": "submitted",
"task_id": "task_01K..."
}
]
}
Muse Video Ext
Muse Video Ext 動画生成
テキストまたは最大 9 枚の参照画像から、約 10 秒・720p・音声付きの MP4 動画を 1 本生成します。
POST
/
v1
/
videos
/
generations
curl --request POST \
--url https://api.apimart.ai/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'Idempotency-Key: <unique-operation-key>' \
--data '{
"model": "muse-video-ext",
"prompt": "Waves gently wash a beach at sunset, slow camera pan, natural ocean sounds, no text",
"aspect_ratio": "16:9",
"duration": 10,
"resolution": "720p"
}'
import requests
response = requests.post(
"https://api.apimart.ai/v1/videos/generations",
headers={
"Authorization": "Bearer <token>",
"Accept": "application/json",
"Idempotency-Key": "<unique-operation-key>"
},
json={
"model": "muse-video-ext",
"prompt": "Waves gently wash a beach at sunset, slow camera pan, natural ocean sounds, no text",
"aspect_ratio": "16:9",
"duration": 10,
"resolution": "720p"
}
)
response.raise_for_status()
print(response.json())
const response = await fetch("https://api.apimart.ai/v1/videos/generations", {
method: "POST",
headers: {
Authorization: "Bearer <token>",
"Content-Type": "application/json",
Accept: "application/json",
"Idempotency-Key": "<unique-operation-key>"
},
body: JSON.stringify({
"model": "muse-video-ext",
"prompt": "Waves gently wash a beach at sunset, slow camera pan, natural ocean sounds, no text",
"aspect_ratio": "16:9",
"duration": 10,
"resolution": "720p"
})
});
if (!response.ok) throw new Error(await response.text());
console.log(await response.json());
{
"code": 200,
"data": [
{
"status": "submitted",
"task_id": "task_01K..."
}
]
}
この API は非同期で処理します。送信後にタスク ID を保存し、
GET /v1/tasks/{task_id} で状態と結果を取得します。デフォルトの送信レスポンスでは、ID は data[0].task_id にあります。curl --request POST \
--url https://api.apimart.ai/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'Idempotency-Key: <unique-operation-key>' \
--data '{
"model": "muse-video-ext",
"prompt": "Waves gently wash a beach at sunset, slow camera pan, natural ocean sounds, no text",
"aspect_ratio": "16:9",
"duration": 10,
"resolution": "720p"
}'
import requests
response = requests.post(
"https://api.apimart.ai/v1/videos/generations",
headers={
"Authorization": "Bearer <token>",
"Accept": "application/json",
"Idempotency-Key": "<unique-operation-key>"
},
json={
"model": "muse-video-ext",
"prompt": "Waves gently wash a beach at sunset, slow camera pan, natural ocean sounds, no text",
"aspect_ratio": "16:9",
"duration": 10,
"resolution": "720p"
}
)
response.raise_for_status()
print(response.json())
const response = await fetch("https://api.apimart.ai/v1/videos/generations", {
method: "POST",
headers: {
Authorization: "Bearer <token>",
"Content-Type": "application/json",
Accept: "application/json",
"Idempotency-Key": "<unique-operation-key>"
},
body: JSON.stringify({
"model": "muse-video-ext",
"prompt": "Waves gently wash a beach at sunset, slow camera pan, natural ocean sounds, no text",
"aspect_ratio": "16:9",
"duration": 10,
"resolution": "720p"
})
});
if (!response.ok) throw new Error(await response.text());
console.log(await response.json());
{
"code": 200,
"data": [
{
"status": "submitted",
"task_id": "task_01K..."
}
]
}
リクエストヘッダー
string
必須
APIMart API Key を
Bearer <token> 形式で指定します。送信とポーリングの両方で、同じユーザーの認証が必要です。string
指定を強く推奨します。独立した生成ごとに新しいキーを使用します(表示可能な ASCII 文字 1–191 文字、UUID 推奨)。例の
<unique-operation-key> を置き換えてください。送信のタイムアウトや通信障害後は、エンドポイント・本文・レスポンスバージョン・キーを変えずに再試行します。タスク ID の取得後はそのタスクの照会のみを行います。リクエストパラメータ
string
必須
固定値:
muse-video-ext。string
必須
生成内容を説明するテキスト。中国語と英語に対応し、前後の空白を除いて空にできません。参照画像がある場合も必須です。
string[]
最大 9 件の空でない参照画像入力。公開 URL、Data URI(
data:image/png;base64,... など)、生の base64 を指定できます。省略または [] でテキストのみの生成になります。PNG・JPEG・WebP を推奨します。URL はブラウザのログイン状態に依存せず、サーバーから直接アクセスできる必要があります。参照画像の元データの合計サイズは 11 MiB(11,534,336 バイト)以下です。画像 1 枚あたりの上限ではありません。base64 化によるリクエストサイズの増加にも注意してください。blob: URL、ローカルパス、File オブジェクトは送信できません。string
以下の 7 種類に対応します。省略するとテキストからの生成は
16:9、参照画像からの生成は参照画像の構図に従います。明示的に指定した比率が優先されます。自動選択ではこのフィールドを省略し、"auto" は送信しないでください。1:1、16:9、9:16、4:3、3:4、3:2、2:3string
互換フィールド。上記 7 種類または
auto を指定でき、1024x1024 などのピクセル寸法には対応しません。size: "auto" のみの指定は比率の未指定と同じです。aspect_ratio の使用を推奨します。両方が有効なら aspect_ratio が優先されますが、各フィールドは個別に検証されるため、不正な size はエラーになります。integer
デフォルト:"1"
1 回につき結果は 1 件です。数値の
1 のみ指定できます。0、負数、1 より大きい値はエラーになります。integer | string
デフォルト:"10"
約 10 秒で固定。数値
10 または文字列 "10"、"10s" に対応し、数値 10 を推奨します。互換エイリアスは seconds と duration_seconds です。いずれか 1 つを使用してください。送信した各フィールドは個別に検証されます。string
デフォルト:"720p"
720p のみ対応し、1080p や 4k は指定できません。実際の寸法と再生時間は返されたメディアのメタデータを確認してください。boolean
動画にはデフォルトで音声が付くため、省略できます。
true を指定しても動作は変わらず、false は拒否されます。約 10 秒・720p・音声付きの MP4 URL を返します。参照画像は生成の参考として使われ、最初のフレームがピクセル単位で一致する保証はありません。
その他の任意パラメータ
string
タスク通知を受け取るバックエンドのベース URL。末尾のスラッシュを除き
/callback を追加します。例:https://your-backend.example/muse → https://your-backend.example/muse/callback。ポーリングのみの場合は省略できます。string
Webhook のエラーメッセージの言語です。生成内容には影響しません。対応値:
zh、en、ja、ko、ru、fr、de、id、pt、es。zh-CN などの地域タグは使えません。ポーリング時の言語は GET のクエリパラメータで別途指定します。参照画像を使う生成例
{
"model": "muse-video-ext",
"prompt": "The fox in the reference image slowly raises its head, wind moves its fur, gentle camera push-in",
"image_urls": [
"https://your-cdn.example/fox.png"
],
"duration": 10,
"resolution": "720p"
}
aspect_ratio を追加します。複数画像は image_urls に追加し、合計 9 枚以内にしてください。
送信レスポンス
デフォルトは HTTP200 で、data は配列です。submitted は受付を示し、生成完了を意味しません。data[0].task_id を保存してタスクを照会してください。
任意のレスポンスバージョン:2026-07-27
任意のレスポンスバージョン:2026-07-27
X-APIMart-Response-Version: 2026-07-27 ヘッダーを送信すると HTTP 202 を返します。タスク ID は data.id、照会先は data.poll_url から取得します。{
"code": 202,
"request_id": "req_example",
"data": {
"id": "task_01K...",
"object": "generation.task",
"type": "video",
"status": "pending",
"progress": 0,
"poll_url": "/v1/tasks/task_01K..."
}
}
data[0].task_id として解析しないでください。タスクの状態と結果を取得
送信時に返された完全なタスク ID と同じユーザーの認証を使用します。language は任意のエラー文言の言語です。全フィールドは タスク照会 を参照してください。
curl --request GET \
--url 'https://api.apimart.ai/v1/tasks/<task_id>?language=ja' \
--header 'Authorization: Bearer <token>'
data.status | 処理 |
|---|---|
pending / processing | 待機中または処理中。照会を続けます。 |
completed | 生成成功。ポーリングを停止し、結果 URL を取得します。 |
failed | 生成失敗。ポーリングを停止し、data.error.message を確認します。 |
unknown / … | 状態を確認できません。ID を保持して回数を制限して照会を再試行します。成功扱いや自動再生成はしないでください。 |
data.status で判断します。HTTP 200 や progress: 100 だけでは成功を意味しません。処理中の polling_error も終端の失敗ではありません。
完了時の照会レスポンス例(結果 URL は例示用):
{
"code": 200,
"data": {
"id": "task_01K...",
"status": "completed",
"progress": 100,
"result": {
"videos": [
{
"url": [
"https://cdn.example/generated-video.mp4"
]
}
]
}
}
}
data はオブジェクト、url は文字列配列です。最初の結果は data.result.videos[0].url[0] にあります。expires_at がある場合は Unix 秒の有効期限です。必要なファイルは期限前に保存してください。actual_time はタスクの処理時間で、動画の再生時間ではありません。
機能制限とエラー処理
参照動画・参照音声・マスク・開始/終了フレーム指定・延長・remix には対応しません。quality は生成に影響しません。seed、negative_prompt、width、height、response_format、output_format はこのモデルの生成パラメータではないため省略してください。async: false でも同期生成にはならず、stream による SSE 生成ストリームもありません。
HTTP / error.code | 対応 |
|---|---|
400 / invalid_request_error | プロンプト、参照画像数、比率、出力数、固定の出力仕様を確認します。 |
409 / idempotency_in_progress | Retry-After に従って待ち、同じ冪等キーで元のリクエストを再試行します。 |
409 / idempotency_key_reused | 同じキーが異なるリクエストで使われています。独立した生成ごとに新しいキーを使うよう修正します。 |
409 / idempotency_result_indeterminate | 自動再送信を停止し、調査のためキーとタスク情報を保持します。 |
429 | Retry-After に従って待機してから再試行します。 |
200 を返す場合があります。data.status と data.error.message を確認してください。送信時の通信エラーや 5xx は受付後に発生した可能性があるため、新しいキーですぐに再送信しないでください。