# MiniMax H3 768p and 2K

Call MiniMax H3 768p and 2K with POST /v1/videos. Use image_url for image-to-video, and start_image_url plus end_image_url for first and last frames.

`minimax-h3-768p` and `minimax-h3-2k` use the same video task API. The create call returns a task object, not the finished video file.

```http
POST /v1/videos
```

Poll and download:

```http
GET /v1/videos/{task_id}
GET /v1/videos/{task_id}/content
```

Send JSON. Put every field at the top level. Do not wrap these fields in `metadata`. Image inputs must be public URLs that stay available until the task finishes.

These models are not the 1440p `minimax-h3` model. Do not send `start_frame`, `end_frame`, or `reference_images` here.

## Models and prices

Billing is per generated second: `duration × unit price`. Failed tasks are refunded in full.

| Model ID | Resolution | Flex | Official | Duration |
| --- | --- | ---: | ---: | --- |
| `minimax-h3-768p` | 768p | ¥0.35/sec | ¥0.50/sec | 4–15 sec |
| `minimax-h3-2k` | 2K | ¥0.56/sec | ¥0.80/sec | 4–15 sec |

An 8-second clip costs ¥2.80 Flex or ¥4.00 Official at 768p, and ¥4.48 Flex or ¥6.40 Official at 2K.

The official route is the fastest, about 30 seconds per video. The 933 route passes face checks. Audio references are free. Reference video adds ¥0.18 per second. Each image after the fifth adds ¥0.10. H3 Context IR, for stronger multimodal context, costs ¥0.1 per call.

## Parameters

| Parameter | Required | Description |
| --- | --- | --- |
| `model` | Yes | `minimax-h3-768p` or `minimax-h3-2k` |
| `prompt` | Yes | Subject, action, and camera |
| `duration` | No | Integer seconds, 4–15. Send it explicitly |
| `aspect_ratio` | No | `16:9`, `9:16`, `1:1`, `4:3`, `3:4`, `21:9`, `3:2`, `2:3`. Default `16:9`. `ratio` is accepted |
| `image_url` | No | Reference image for image-to-video. A URL string or `{"url":"..."}` |
| `start_image_url` | No | First frame. Use only together with `end_image_url` |
| `end_image_url` | No | Last frame |

## Image-to-video

Send only `image_url`. Do not also send first and last frame fields.

```bash
curl https://kaienapi.com/v1/videos \
  -H "Authorization: Bearer <YOUR_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "minimax-h3-768p",
    "prompt": "The person slowly turns and smiles",
    "duration": 4,
    "aspect_ratio": "9:16",
    "image_url": "https://example.com/portrait.jpg"
  }'
```

For 2K, change `model` to `minimax-h3-2k`.

## First and last frames

Send only `start_image_url` and `end_image_url`. Do not send `image_url`. Do not put the last frame in `extra_images`, and do not expect `@Image2` to lock the last frame. Describe a transition from the first image to the last image. Use 8 seconds, and match the aspect ratio to the images.

```bash
curl https://kaienapi.com/v1/videos \
  -H "Authorization: Bearer <YOUR_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "minimax-h3-768p",
    "prompt": "Transition smoothly from the first frame to the last frame, camera steady",
    "duration": 8,
    "aspect_ratio": "16:9",
    "start_image_url": "https://example.com/first.jpg",
    "end_image_url": "https://example.com/last.jpg"
  }'
```

If the two images differ a lot, a completed task does not guarantee both ends stay locked. Check the opening and ending frames before relying on the result.

## Polling

Poll every 3 to 5 seconds. Stop when `status` is `completed`.

```bash
curl "https://kaienapi.com/v1/videos/$TASK_ID" \
  -H "Authorization: Bearer <YOUR_API_KEY>"
```

Read `url` from the response. That address downloads the video file directly. If `status` is `failed`, read `error` and do not recreate the same request indefinitely.
