# MiniMax H3 Insert (video) > MiniMax H3 Insert cuts a new 5 to 13 second scene into an existing clip, then returns to the original footage. A prompt, reference images or reference clips guide the new scene. Status: roasOS API v1.1. Catalog `model-catalog@2026-10-06.v5`, pricing `customer-pricing@2026-11-05.v15`. The endpoint `POST /v1/video/h3-max-insert` is live. `POST /v1/generations` stays for one minor version as a deprecated alias (see "Today"). ## Endpoint POST https://api.roasos.com/v1/video/h3-max-insert Auth: Authorization: Bearer roasos_sk_… (scope api:write). Idempotency-Key required. quote_only / quote_id / webhook_url as in https://docs.roasos.com/llms.txt. ## Good at Add a product close-up into a talking-head ad, or swap a weak middle beat for a new one. Send `video_url` (up to 60 seconds, MP4), `start_seconds` (where the new scene starts, from 1.625) and `resume_seconds` (where the source continues, from 2.625). Both must fall inside the source. `duration_seconds` sets the new scene (5 to 13). Add `references` (up to 9 images) and `video_urls` (up to 3 clips, 2 to 15 seconds each and 15 seconds together) to guide it. It renders at 480p or 768p, and matches the colors to the source. ## Pricing Unit: clip. Pricing key: `h3-max-insert`. | request | credits | |---|---| | `5s_768p` | 4 | | `9s_768p` | 7 | | `13s_768p` | 10 | Credits come from the roasOS pricing table (`MODEL_COSTS`) through the catalog. No other field changes the price. ## Modes - `edit` Provider endpoints: `minimax/h3-max/insert-video`. ## Request fields | field | type | required | default | rule | |---|---|---|---|---| | `duration_seconds` | integer enum | no | `5` | `5`, `6`, `7`, `8`, `9`, `10`, `11`, `12`, `13` | | `prompt` | string | no | — | ≤ 10,000 characters | | `quote_id` | string | no | — | UUID | | `quote_only` | boolean | no | `false` | — | | `references` | string[] | no | — | ≤ 9 items | | `resolution` | enum | no | `768p` | `480p`, `768p` | | `resume_seconds` | number | yes | — | 2.625–60 | | `seed` | integer | no | — | 0–2147483647 | | `start_seconds` | number | yes | — | 1.625–60 | | `video_url` | string | yes | — | https URL; ≤ 4,096 characters | | `video_urls` | string[] | no | — | ≤ 3 items | | `wait_timeout_seconds` | integer | no | `0` | 0–60 | | `webhook_url` | string | no | — | https URL; ≤ 4,096 characters | The schema is strict: a field that is not in this table returns `400 unsupported_option`. Field names are the roasOS role names, one name per role across every family. ## Media - `references` — style and appearance references - `video_urls` — reference videos - `video_url` — the source video - Refused: `avatar_id`, `elements`, `product_id`, `product_images`, `reference_images`, `image_url`, `end_image_url`, `scene_id`, `scene_image`, `audio_urls`, `audio_url`, `voice_id`. A refused role returns `400 unsupported_option`. - Every URL must be an immutable object on `https://cdn.roasos.com/…` that your workspace owns; any other URL is `400 reference_media_not_workspace_owned`. Upload with `POST /v1/uploads` (direct POST of the bytes to `put_url`, or a `source_url` import), then use the returned CDN URL. ## Prompt Limit 10,000 characters. - Describe only the new scene and how it joins the footage around it. - Name the references by what they control: "the product in the first image". ## Not exposed - `enable_prompt_expansion`: pinned to `provider default (on); never sent`. - `color_match`: pinned to `provider default (on); never sent`. ## Result Result kind `video`. Always present: `url`. ```json { "data": { "id": "gen_…", "kind": "video", "model": "h3-max-insert", "status": "completed", "result": {"url":"https://cdn.roasos.com/workspaces/ws_01/result"} } } ``` Files live on `https://cdn.roasos.com` and are immutable; a result URL can be a media input to the next call. Poll `GET /v1/jobs/{id}/status` → `{ id, status, updated_at }`, then `GET /v1/jobs/{id}/result` (`409 run_not_completed` until the job is `completed`, `failed` or `canceled`). Statuses: `queued → processing → completed | failed | canceled`. ## Example ```bash # 1. quote — nothing is spent curl -X POST https://api.roasos.com/v1/video/h3-max-insert \ -H "Authorization: Bearer roasos_sk_live_…" \ -H "Idempotency-Key: 0f1c9e2a-h3-max-insert-0001" \ -H "Content-Type: application/json" \ -d '{"quote_only":true,"prompt":"A woman holds the bottle at eye level in a bright kitchen, morning light, static camera.","resume_seconds":2.625,"start_seconds":1.625,"video_url":"https://cdn.roasos.com/workspaces/ws_01/uploads/video_url.mp4"}' # → 200 { "data": { "kind": "quote", "quote_id": "q_7Hk…", "credits": 4, "expires_at": "…", "confirmation": { "model": "h3-max-insert", "example": "5s_768p" } } } # 2. run — the same body and the same Idempotency-Key, quote_id instead of quote_only curl -X POST https://api.roasos.com/v1/video/h3-max-insert \ -H "Authorization: Bearer roasos_sk_live_…" \ -H "Idempotency-Key: 0f1c9e2a-h3-max-insert-0001" \ -H "Content-Type: application/json" \ -d '{"quote_id":"q_7Hk…","prompt":"A woman holds the bottle at eye level in a bright kitchen, morning light, static camera.","resume_seconds":2.625,"start_seconds":1.625,"video_url":"https://cdn.roasos.com/workspaces/ws_01/uploads/video_url.mp4"}' # → 201 { "data": { "id": "gen_…", "kind": "video", "model": "h3-max-insert", "status": "queued", "credits_reserved": 4, "links": { "status": "/v1/jobs/gen_…/status", "result": "/v1/jobs/gen_…/result" } } } # 3. poll curl https://api.roasos.com/v1/jobs/gen_…/status -H "Authorization: Bearer roasos_sk_live_…" curl https://api.roasos.com/v1/jobs/gen_…/result -H "Authorization: Bearer roasos_sk_live_…" ``` ## Today `POST /v1/video/h3-max-insert` with `video_url`, `start_seconds`, `resume_seconds`, `prompt`, `references`, `video_urls`, `duration_seconds` (5-13), `resolution` (480p|768p) and `seed`. ## See also https://docs.roasos.com/models/video/h3-max-insert · https://api.roasos.com/v1/catalog/video/h3-max-insert · minimax/h3-max/insert-video