---
title: "H3 Frames to Video"
method: POST
path: "/v2/hailuo/frames-to-video"
tags: ["H3 Video"]
---

# H3 Frames to Video

`POST /v2/hailuo/frames-to-video`

## Request

- Base URL: `https://genaipro.io/api`
- URL: `https://genaipro.io/api/v2/hailuo/frames-to-video`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/genaipro/apis/genaipro-api/docs/v2/hailuo/frames-to-video/post.ts> (a function with typed inputs; its response is checked against the schema)

Generate H3 / H3 Max video from a start image (required) and an optional end image, guided by a text prompt. Returns immediately with `202 Accepted`.

The output aspect ratio follows the start image and the task shows `aspect_ratio: "Auto"`. Leave `aspect_ratio` out: it is not used, but if sent it must still be one of `21:9`, `16:9`, `4:3`, `1:1`, `3:4`, `9:16` — any other value, including `Auto`, returns `400`.

### Example

```bash
curl -X POST https://genaipro.io/api/v2/hailuo/frames-to-video \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -F "start_image=@first.jpg" \
  -F "end_image=@last.jpg" \
  -F "prompt=The camera slowly pushes in as the sun sets" \
  -F "model=h3_max" \
  -F "resolution=768p" \
  -F "duration=6" \
  -F "number_of_videos=1"
```

> **Rate limit:** 30 requests/minute — shared across all `/v2/hailuo` creation endpoints.

## Request body `multipart/form-data`

- object
  - `start_image` string, binary, required: First frame — JPEG/PNG/WebP, max 20 MB, short side ≥ 300 px, long side ≤ 5760 px, aspect ratio 2:5–5:2
  - `end_image` string, binary: Optional last frame — same limits as `start_image`
  - `prompt` string, required: Text description to guide the video (at most 2400 characters)
  - `model` 'h3' | 'h3_max', required: Video model — `h3` or `h3_max`
  - `number_of_videos` string: Number of videos to generate (1–4). Sent as string in form data.
  - `duration` string: Clip length in whole seconds — 5–15 (`h3` at `2k`: 5–12). Sent as string in form data.
  - `resolution` '480p' | '768p' | '2k': Output resolution — `h3`: `768p` or `2k`; `h3_max`: `480p` or `768p`.
  - `callback_url` string: Optional `http`/`https` webhook URL. When the task reaches `completed` or `failed`, GenAIPro POSTs the task object (same shape as `GET /v2/hailuo/tasks/{id}`) to this URL.

## Response `202`

Task accepted for processing

- H3Task: Task object returned by every `/v2/hailuo` endpoint — creation (`202`), `GET /tasks/{id}`, `GET /histories`, the `hailuo_task_updated` WebSocket event and the `callback_url` webhook.
  - `id` string: Task ID (use for `GET /v2/hailuo/tasks/{id}`)
  - `prompt` string: The prompt used for generation (for Boost HD, the source task's prompt)
  - `file_urls` string[]: URLs of the generated files (empty while processing). Public; deleted about 90 days after creation (then `404`) — download them yourself.
  - `status` 'processing' | 'completed' | 'failed': Task status
  - `error` string: Error message — present only when `status` is `failed`
  - `failed_slots` object[]: Outputs that failed while the rest completed (their credits are refunded). Present only when `status` is `completed` and some outputs failed; `file_urls` contains only the generated files.
    - `index` integer: 0-based position of the failed output in the request
    - `error` string
  - `task_type` string: `text_to_video`, `frames_to_video`, `reference_to_video` or `upscale_video` (image tasks: `create_image`)
  - `aspect_ratio` string: Aspect ratio of the task — `Auto` for frames-to-video (follows the start image)
  - `model` string: Model and options of the task. Video: `<model>_<resolution>_<duration>s` (e.g. `h3_768p_10s`, `h3_max_480p_5s`); Boost HD: `upscale_<resolution>` (e.g. `upscale_1440p`).
  - `number_of_outputs` integer: Number of videos (or images) requested
  - `created_at` string, date-time: Timestamp when the task was created

## Other responses

- `400`: Invalid request (missing `start_image` / prompt / model, image outside the limits, unsupported option, non-numeric `duration` / `number_of_videos`, insufficient credits)
- `401`: Missing or invalid API token
- `403`: H3 video generation is not enabled for your account, or video generation is temporarily disabled
- `413`: Request body exceeds 41 MB
- `429`: Rate limit exceeded
- `503`: No capacity for this model right now (nothing is charged) — retry later

## Changes

- **2026-10-29** `8e065c159192`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/genaipro/apis/genaipro-api/changes/v2/hailuo/frames-to-video/post.md)

---

[API](https://skmtc.dev/genaipro/apis/genaipro-api.md) - [All operations](https://skmtc.dev/genaipro/apis/genaipro-api/llms.txt) - [OpenAPI document](https://skmtc.dev/genaipro/apis/genaipro-api/revisions/264ca07ba262?raw)
