> ## Documentation Index
> Fetch the complete documentation index at: https://docs.apimart.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Muse Video Ext 動画生成

> テキストまたは最大 9 枚の参照画像から、約 10 秒・720p・音声付きの MP4 動画を 1 本生成します。

> [!NOTE]
>
> この API は非同期で処理します。送信後にタスク ID を保存し、`GET /v1/tasks/{task_id}` で状態と結果を取得します。デフォルトの送信レスポンスでは、ID は `data[0].task_id` にあります。

```bash cURL theme={null}
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"
  }'
```

```python Python theme={null}
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())
```

```javascript JavaScript theme={null}
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());
```

```json 200 theme={null}
{
  "code": 200,
  "data": [
    {
      "status": "submitted",
      "task_id": "task_01K..."
    }
  ]
}
```

## リクエストヘッダー

**Authorization** `string` *required*

APIMart API Key を `Bearer <token>` 形式で指定します。送信とポーリングの両方で、同じユーザーの認証が必要です。

**Idempotency-Key** `string`

指定を強く推奨します。独立した生成ごとに新しいキーを使用します（表示可能な ASCII 文字 1–191 文字、UUID 推奨）。例の `<unique-operation-key>` を置き換えてください。送信のタイムアウトや通信障害後は、エンドポイント・本文・レスポンスバージョン・キーを変えずに再試行します。タスク ID の取得後はそのタスクの照会のみを行います。

## リクエストパラメータ

**model** `string` *required*

固定値： `muse-video-ext`。

**prompt** `string` *required*

生成内容を説明するテキスト。中国語と英語に対応し、前後の空白を除いて空にできません。参照画像がある場合も必須です。

**image\_urls** `string[]`

最大 9 件の空でない参照画像入力。公開 URL、Data URI（`data:image/png;base64,...` など）、生の base64 を指定できます。省略または `[]` でテキストのみの生成になります。PNG・JPEG・WebP を推奨します。URL はブラウザのログイン状態に依存せず、サーバーから直接アクセスできる必要があります。

参照画像の元データの合計サイズは **11 MiB（11,534,336 バイト）以下**です。画像 1 枚あたりの上限ではありません。base64 化によるリクエストサイズの増加にも注意してください。`blob:` URL、ローカルパス、`File` オブジェクトは送信できません。

**aspect\_ratio** `string`

以下の 7 種類に対応します。省略するとテキストからの生成は `16:9`、参照画像からの生成は参照画像の構図に従います。明示的に指定した比率が優先されます。自動選択ではこのフィールドを省略し、`"auto"` は送信しないでください。

`1:1`、`16:9`、`9:16`、`4:3`、`3:4`、`3:2`、`2:3`

**size** `string`

互換フィールド。上記 7 種類または `auto` を指定でき、`1024x1024` などのピクセル寸法には対応しません。`size: "auto"` のみの指定は比率の未指定と同じです。`aspect_ratio` の使用を推奨します。両方が有効なら `aspect_ratio` が優先されますが、各フィールドは個別に検証されるため、不正な `size` はエラーになります。

**n** `integer` (default: 1)

1 回につき結果は 1 件です。数値の `1` のみ指定できます。`0`、負数、`1` より大きい値はエラーになります。

**duration** `integer | string` (default: 10)

約 10 秒で固定。数値 `10` または文字列 `"10"`、`"10s"` に対応し、数値 `10` を推奨します。互換エイリアスは `seconds` と `duration_seconds` です。いずれか 1 つを使用してください。送信した各フィールドは個別に検証されます。

**resolution** `string` (default: 720p)

`720p` のみ対応し、`1080p` や `4k` は指定できません。実際の寸法と再生時間は返されたメディアのメタデータを確認してください。

**audio** `boolean`

動画にはデフォルトで音声が付くため、省略できます。`true` を指定しても動作は変わらず、`false` は拒否されます。

> [!NOTE]
>
> 約 10 秒・720p・音声付きの MP4 URL を返します。参照画像は生成の参考として使われ、最初のフレームがピクセル単位で一致する保証はありません。

### その他の任意パラメータ

**webhook** `string`

タスク通知を受け取るバックエンドのベース URL。末尾のスラッシュを除き `/callback` を追加します。例：`https://your-backend.example/muse` → `https://your-backend.example/muse/callback`。ポーリングのみの場合は省略できます。

**language** `string`

Webhook のエラーメッセージの言語です。生成内容には影響しません。対応値：`zh`、`en`、`ja`、`ko`、`ru`、`fr`、`de`、`id`、`pt`、`es`。`zh-CN` などの地域タグは使えません。ポーリング時の言語は GET のクエリパラメータで別途指定します。

## 参照画像を使う生成例

```json theme={null}
{
  "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"
}
```

例の URL をアクセス可能な画像 URL に置き換えてください。この例は比率を省略して参照画像の構図に従います。固定する場合は `aspect_ratio` を追加します。複数画像は `image_urls` に追加し、合計 9 枚以内にしてください。

## 送信レスポンス

デフォルトは HTTP `200` で、`data` は配列です。`submitted` は受付を示し、生成完了を意味しません。`data[0].task_id` を保存してタスクを照会してください。

> **任意のレスポンスバージョン：2026-07-27**
>
> `X-APIMart-Response-Version: 2026-07-27` ヘッダーを送信すると HTTP `202` を返します。タスク ID は `data.id`、照会先は `data.poll_url` から取得します。
>
> ```json theme={null}
> {
>   "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..."
>   }
> }
> ```
>
> このバージョンは GET のレスポンス構造を変更しません。ヘッダーを追加した場合、送信レスポンスを `data[0].task_id` として解析しないでください。

## タスクの状態と結果を取得

送信時に返された完全なタスク ID と同じユーザーの認証を使用します。`language` は任意のエラー文言の言語です。全フィールドは [タスク照会](https://docs.apimart.ai/ja/api-reference/tasks/status.md) を参照してください。

```bash theme={null}
curl --request GET \
  --url 'https://api.apimart.ai/v1/tasks/<task_id>?language=ja' \
  --header 'Authorization: Bearer <token>'
```

5–10 秒間隔を推奨します。同じタスクへの照会を重複実行しないでください。クライアントのタイムアウトやポーリング停止はサーバー上のタスクをキャンセルしません。ID を保存して後から GET を再開し、新規生成を自動送信しないでください。

| `data.status` | 処理 |
| - | - |
| `pending` / `processing` | 待機中または処理中。照会を続けます。 |
| `completed` | 生成成功。ポーリングを停止し、結果 URL を取得します。 |
| `failed` | 生成失敗。ポーリングを停止し、`data.error.message` を確認します。 |
| `unknown` / … | 状態を確認できません。ID を保持して回数を制限して照会を再試行します。成功扱いや自動再生成はしないでください。 |

終了は `data.status` で判断します。HTTP `200` や `progress: 100` だけでは成功を意味しません。処理中の `polling_error` も終端の失敗ではありません。

完了時の照会レスポンス例（結果 URL は例示用）：

```json theme={null}
{
  "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` に従って待機してから再試行します。 |

タスク失敗時も HTTP `200` を返す場合があります。`data.status` と `data.error.message` を確認してください。送信時の通信エラーや `5xx` は受付後に発生した可能性があるため、新しいキーですぐに再送信しないでください。


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.