# MiniMax H3 Max Insert

VIDEOFeaturedminimax-h3-max-insert

**MiniMax H3 Max Insert** from [MiniMax](https://www.minimaxi.com/) splices a newly generated scene into an existing clip. Pick where the cut starts and where the original footage resumes, describe the scene or guide it with up to five reference images and three reference videos, and H3 Max generates 5 to 13 seconds that pick up from the footage before the cut and hand back to the footage after it, with optional color matching across both seams. Sources run up to 60 seconds, and the edited clip keeps the source’s shape at 480p or 768p. Built for adding beats, reaction shots and story moments to game trailers and cutscenes without reshooting the take.

Best for

Replacing a moment inside a clip with a new 5-13 second scene, Cutting to a new beat and returning to the original footage, Scenes guided by a prompt, reference images, or reference videos

POST

/v2/workspaces/{workspace\_id}/base-models/minimax-h3-max-insert/inferences

```bash
curl --request POST \
  --url https://api.app.layer.ai/api/v2/workspaces/:workspace_id/base-models/minimax-h3-max-insert/inferences \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
  "prompt": "a knight standing in a snowy forest",
  "aspect_ratio": "LANDSCAPE_16_9_480p",
  "duration_seconds": 5,
  "guidance_file_init_video": [
    {
      "url": "<file_url>"
    }
  ],
  "guidance_file_reference_image": [
    {
      "url": "<file_url>"
    }
  ],
  "guidance_file_reference_video": [
    {
      "url": "<file_url>"
    }
  ],
  "video_section": {
    "start_seconds": 0,
    "end_seconds": 0
  }
}'
```

```python
import requests


url = "https://api.app.layer.ai/api/v2/workspaces/:workspace_id/base-models/minimax-h3-max-insert/inferences"


payload = {
    "prompt": "a knight standing in a snowy forest",
    "aspect_ratio": "LANDSCAPE_16_9_480p",
    "duration_seconds": 5,
    "guidance_file_init_video": [{ "url": "<file_url>" }],
    "guidance_file_reference_image": [{ "url": "<file_url>" }],
    "guidance_file_reference_video": [{ "url": "<file_url>" }],
    "video_section": {
        "start_seconds": 0,
        "end_seconds": 0
    }
}
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}


response = requests.post(url, json=payload, headers=headers)


print(response.json())
```

```js
const url = 'https://api.app.layer.ai/api/v2/workspaces/:workspace_id/base-models/minimax-h3-max-insert/inferences';
const options = {
  method: 'POST',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '{"prompt":"a knight standing in a snowy forest","aspect_ratio":"LANDSCAPE_16_9_480p","duration_seconds":5,"guidance_file_init_video":[{"url":"<file_url>"}],"guidance_file_reference_image":[{"url":"<file_url>"}],"guidance_file_reference_video":[{"url":"<file_url>"}],"video_section":{"start_seconds":0,"end_seconds":0}}'
};


try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main


import (
  "fmt"
  "strings"
  "net/http"
  "io"
)


func main() {


  url := "https://api.app.layer.ai/api/v2/workspaces/:workspace_id/base-models/minimax-h3-max-insert/inferences"


  payload := strings.NewReader("{\n  \"prompt\": \"a knight standing in a snowy forest\",\n  \"aspect_ratio\": \"LANDSCAPE_16_9_480p\",\n  \"duration_seconds\": 5,\n  \"guidance_file_init_video\": [\n    {\n      \"url\": \"<file_url>\"\n    }\n  ],\n  \"guidance_file_reference_image\": [\n    {\n      \"url\": \"<file_url>\"\n    }\n  ],\n  \"guidance_file_reference_video\": [\n    {\n      \"url\": \"<file_url>\"\n    }\n  ],\n  \"video_section\": {\n    \"start_seconds\": 0,\n    \"end_seconds\": 0\n  }\n}")


  req, _ := http.NewRequest("POST", url, payload)


  req.Header.Add("Authorization", "Bearer <token>")
  req.Header.Add("Content-Type", "application/json")


  res, _ := http.DefaultClient.Do(req)


  defer res.Body.Close()
  body, _ := io.ReadAll(res.Body)


  fmt.Println(res)
  fmt.Println(string(body))


}
```

```php
<?php


$curl = curl_init();


curl_setopt_array($curl, [
  CURLOPT_URL => "https://api.app.layer.ai/api/v2/workspaces/:workspace_id/base-models/minimax-h3-max-insert/inferences",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => json_encode([
    'prompt' => 'a knight standing in a snowy forest',
    'aspect_ratio' => 'LANDSCAPE_16_9_480p',
    'duration_seconds' => 5,
    'guidance_file_init_video' => [
        [
                'url' => '<file_url>'
        ]
    ],
    'guidance_file_reference_image' => [
        [
                'url' => '<file_url>'
        ]
    ],
    'guidance_file_reference_video' => [
        [
                'url' => '<file_url>'
        ]
    ],
    'video_section' => [
        'start_seconds' => 0,
        'end_seconds' => 0
    ]
  ]),
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer <token>",
    "Content-Type: application/json"
  ],
]);


$response = curl_exec($curl);
$err = curl_error($curl);


curl_close($curl);


if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
```

```java
OkHttpClient client = new OkHttpClient();


MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\n  \"prompt\": \"a knight standing in a snowy forest\",\n  \"aspect_ratio\": \"LANDSCAPE_16_9_480p\",\n  \"duration_seconds\": 5,\n  \"guidance_file_init_video\": [\n    {\n      \"url\": \"<file_url>\"\n    }\n  ],\n  \"guidance_file_reference_image\": [\n    {\n      \"url\": \"<file_url>\"\n    }\n  ],\n  \"guidance_file_reference_video\": [\n    {\n      \"url\": \"<file_url>\"\n    }\n  ],\n  \"video_section\": {\n    \"start_seconds\": 0,\n    \"end_seconds\": 0\n  }\n}");
Request request = new Request.Builder()
  .url("https://api.app.layer.ai/api/v2/workspaces/:workspace_id/base-models/minimax-h3-max-insert/inferences")
  .post(body)
  .addHeader("Authorization", "Bearer <token>")
  .addHeader("Content-Type", "application/json")
  .build();


Response response = client.newCall(request).execute();
```

```ruby
require 'uri'
require 'net/http'


url = URI("https://api.app.layer.ai/api/v2/workspaces/:workspace_id/base-models/minimax-h3-max-insert/inferences")


http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true


request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"prompt\": \"a knight standing in a snowy forest\",\n  \"aspect_ratio\": \"LANDSCAPE_16_9_480p\",\n  \"duration_seconds\": 5,\n  \"guidance_file_init_video\": [\n    {\n      \"url\": \"<file_url>\"\n    }\n  ],\n  \"guidance_file_reference_image\": [\n    {\n      \"url\": \"<file_url>\"\n    }\n  ],\n  \"guidance_file_reference_video\": [\n    {\n      \"url\": \"<file_url>\"\n    }\n  ],\n  \"video_section\": {\n    \"start_seconds\": 0,\n    \"end_seconds\": 0\n  }\n}"


response = http.request(request)
puts response.read_body
```

```csharp
var client = new RestClient("https://api.app.layer.ai/api/v2/workspaces/:workspace_id/base-models/minimax-h3-max-insert/inferences");
var request = new RestRequest("", Method.Post);
request.AddHeader("Authorization", "Bearer <token>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"prompt\": \"a knight standing in a snowy forest\",\n  \"aspect_ratio\": \"LANDSCAPE_16_9_480p\",\n  \"duration_seconds\": 5,\n  \"guidance_file_init_video\": [\n    {\n      \"url\": \"<file_url>\"\n    }\n  ],\n  \"guidance_file_reference_image\": [\n    {\n      \"url\": \"<file_url>\"\n    }\n  ],\n  \"guidance_file_reference_video\": [\n    {\n      \"url\": \"<file_url>\"\n    }\n  ],\n  \"video_section\": {\n    \"start_seconds\": 0,\n    \"end_seconds\": 0\n  }\n}", ParameterType.RequestBody);
var response = client.Execute(request);
```

* Layer API

## Authorizations

* **[bearerAuth](/docs/v2/rest-api#bearerauth)**
* **[oauth2](/docs/v2/rest-api#oauth2)**

## Parameters

### Path Parameters

**workspace\_id**

required

_Workspace Id_

Id of the workspace that owns the resource.

string format: uuid

Id of the workspace that owns the resource.

### Query Parameters

**session\_name**

_Session Name_

Organize this run under a named session. A new session is created if none matches.

string

nullable

Organize this run under a named session. A new session is created if none matches.

### Header Parameters

**Idempotency-Key**

string

<= 255 characters

Opaque key making this request safe to retry. The first request with a given key executes; a later request with the same key returns that first response with `Idempotent-Replayed: true` instead of executing again. The key covers the method, path, query, and body it was first used with; reusing it for a different request is rejected with 422\. Replayable for 24 hours.

## Request Bodyrequired

_MiniMax H3 Max Insert_object

**prompt**

_Prompt_

string

""

**aspect\_ratio**

_Aspect ratio_

string

default: LANDSCAPE\_16\_9\_480p

Allowed values: LANDSCAPE\_21\_9\_480p LANDSCAPE\_16\_9\_480p LANDSCAPE\_4\_3\_480p SQUARE\_480p PORTRAIT\_3\_4\_480p PORTRAIT\_9\_16\_480p LANDSCAPE\_21\_9\_768p LANDSCAPE\_16\_9\_768p LANDSCAPE\_4\_3\_768p SQUARE\_768p PORTRAIT\_3\_4\_768p PORTRAIT\_9\_16\_768p

**seed**

_Seed_

_Advanced field._

integer

nullable

**duration\_seconds**

_Duration_

integer

default: 5

**guidance\_file\_init\_video**

required

_Source video_

The video to modify

Array<object>

\>= 1 items

_InferenceFormFileRef_

A single guidance/reference file supplied to a `reference_image_list` field.

The slot’s guidance `type` is fixed by the field it’s attached to; the caller supplies the file URL and, where the model supports per-file weighting, a weight.

object

**url**

required

_Url_

string

**weight**

_Weight_

number

nullable

**guidance\_file\_reference\_image**

_Reference image_

Guides style and content without being modified

Array<object>

_InferenceFormFileRef_

A single guidance/reference file supplied to a `reference_image_list` field.

The slot’s guidance `type` is fixed by the field it’s attached to; the caller supplies the file URL and, where the model supports per-file weighting, a weight.

object

**url**

required

_Url_

string

**weight**

_Weight_

number

nullable

**guidance\_file\_reference\_video**

_Reference video_

Guides style and motion without being modified

Array<object>

_InferenceFormFileRef_

A single guidance/reference file supplied to a `reference_image_list` field.

The slot’s guidance `type` is fixed by the field it’s attached to; the caller supplies the file URL and, where the model supports per-file weighting, a weight.

object

**url**

required

_Url_

string

**weight**

_Weight_

number

nullable

**video\_section**

required

_Span to replace_

Where the new scene cuts in and where the source footage picks up again, in seconds from the clip’s start.

object

**start\_seconds**

required

_Start Seconds_

number

**end\_seconds**

required

_End Seconds_

number

**prompt\_language**

_Prompt language_

_Advanced field._

string

nullable

##### Example

```json
{
  "prompt": "a knight standing in a snowy forest",
  "aspect_ratio": "LANDSCAPE_16_9_480p",
  "duration_seconds": 5,
  "guidance_file_init_video": [
    {
      "url": "<file_url>"
    }
  ],
  "guidance_file_reference_image": [
    {
      "url": "<file_url>"
    }
  ],
  "guidance_file_reference_video": [
    {
      "url": "<file_url>"
    }
  ],
  "video_section": {
    "start_seconds": 0,
    "end_seconds": 0
  }
}
```

## Responses

### 202

Successful Response

_ExecuteForgeOutput_object

**inference\_id**

required

_Inference Id_

Unique identifier for this forge run.

string format: uuid

**status**

required

_InferenceStatus_

Current status: IN\_PROGRESS.

string

Allowed values: in\_progress complete failed cancelled deleted

**estimated\_price\_creative\_units**

_Estimated Price Creative Units_

Estimated price in Creative Units.

number

nullable

**poll\_interval\_seconds**

required

_Poll Interval Seconds_

Suggested polling interval in seconds.

integer

**created\_at**

required

_Created At_

Timestamp of when the run was created.

string format: date-time

**session\_id**

_Session Id_

Session ID the run was added to, if a session was specified.

string format: uuid

nullable

**normalized\_parameters**

Any of:

**NormalizedInferenceParameters**

_NormalizedInferenceParameters_

Inference parameters after model-specific normalization.

These reflect the actual values used for generation, including model defaults applied for any parameters not explicitly set.

object

**width**

_Width_

Resolved output width in pixels.

integer

nullable

**height**

_Height_

Resolved output height in pixels.

integer

nullable

**batch\_size**

_Batch Size_

Number of outputs to generate.

integer

nullable

**num\_inference\_steps**

_Num Inference Steps_

Resolved number of diffusion steps.

integer

nullable

**guidance\_scale**

_Guidance Scale_

Resolved guidance scale.

number

nullable

**duration\_seconds**

_Duration Seconds_

Resolved output length in seconds — video duration or audio clip length.

number

nullable

**fps**

_Fps_

Resolved FPS.

integer

nullable

**null**

null

##### Example

```json
{
  "status": "in_progress"
}
```

### 401

Unauthenticated — missing or invalid Bearer token.

object

**type**

required

string

**title**

required

string

**status**

required

integer

**detail**

required

string

##### Example

```json
{
  "type": "https://api.layer.ai/errors/ERROR_CODE",
  "title": "Error Title",
  "status": 400,
  "detail": "Human-readable description."
}
```

### 403

Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.

object

**type**

required

string

**title**

required

string

**status**

required

integer

**detail**

required

string

##### Example

```json
{
  "type": "https://api.layer.ai/errors/ERROR_CODE",
  "title": "Error Title",
  "status": 400,
  "detail": "Human-readable description."
}
```

### 404

Resource not found.

object

**type**

required

string

**title**

required

string

**status**

required

integer

**detail**

required

string

##### Example

```json
{
  "type": "https://api.layer.ai/errors/ERROR_CODE",
  "title": "Error Title",
  "status": 400,
  "detail": "Human-readable description."
}
```

### 409

The request with this `Idempotency-Key` is still running — retry after the number of seconds in `Retry-After`.

object

**type**

required

string

**title**

required

string

**status**

required

integer

**detail**

required

string

##### Example

```json
{
  "type": "https://api.layer.ai/errors/ERROR_CODE",
  "title": "Error Title",
  "status": 400,
  "detail": "Human-readable description."
}
```

### 422

Invalid input parameters, or an `Idempotency-Key` reused for a different request.

object

**type**

required

string

**title**

required

string

**status**

required

integer

**detail**

required

string

##### Example

```json
{
  "type": "https://api.layer.ai/errors/ERROR_CODE",
  "title": "Error Title",
  "status": 400,
  "detail": "Human-readable description."
}
```

### 429

Rate limited — retry after the number of seconds in `Retry-After`.

object

**type**

required

string

**title**

required

string

**status**

required

integer

**detail**

required

string

##### Example

```json
{
  "type": "https://api.layer.ai/errors/ERROR_CODE",
  "title": "Error Title",
  "status": 400,
  "detail": "Human-readable description."
}
```

### 500

Internal server error.

object

**type**

required

string

**title**

required

string

**status**

required

integer

**detail**

required

string

##### Example

```json
{
  "type": "https://api.layer.ai/errors/ERROR_CODE",
  "title": "Error Title",
  "status": 400,
  "detail": "Human-readable description."
}
```
