MiniMax H3 Max

POST https://api.beatapi.io/v1/videos/tasks

A post-trained H3 tuned for prompt adherence. Text or first and last frames, at 480P or 768P.

Supported modes

ModeRequired inputRules
Text to videomodel, promptOmit images.
First framemodel, prompt, imagesProvide one image URL.
First and last framesmodel, prompt, imagesProvide two image URLs in first-to-last order.

Async flow: Create the task, save data.id, then poll the Task with GET /v1/tasks/{task_id}. On succeeded, read data.output.media. On failed, read data.error_code and data.error_message, then follow the error and retry policy.

Using a local file? upload a local input first and pass the returned data.url.

Authorization

Authorization   string   required

Send your BeatAPI API key as a Bearer token. Create one on the Dashboard.

Authorization: Bearer <BEATAPI_API_KEY>

Keep permanent API keys on trusted servers. Content-Type: application/json is required for the request body. Idempotency-Key is optional when the endpoint exposes it and is recommended for safe retries with the exact same body.

Request body

model   string   required

Must be minimax-h3-max.

Value: minimax-h3-max


prompt   string   required

What should happen in the shot — the motion, the expression, the camera.

Length: 1 to 5000 characters


images   string[]   optional

Public HTTPS images. One starts the render from a first frame; a second becomes the last frame, in first-to-last order.

Count: 1 to 2 items


duration   integer   optional

Requested output duration in seconds. Billed per second at the rate for the chosen resolution. If a duration is unsupported, the API returns 400.

Default: 5
Range: x >= 1


resolution   enum<string>   optional

Output resolution. Upper-case P, and the only two values this model accepts. Price scales with it.

Available options: 480P, 768P
Default: "768P"


seed   integer   optional

Reuse a seed to re-render the same motion. A random seed is chosen when omitted.

Range: x >= 0

Request examples

Text to video

$curl --request POST \
> --url https://api.beatapi.io/v1/videos/tasks \
> --header 'Authorization: Bearer <BEATAPI_API_KEY>' \
> --header 'Content-Type: application/json' \
> --data '{
> "model": "minimax-h3-max",
> "prompt": "A slow cinematic push through a misty mountain village at dawn.",
> "duration": 5,
> "resolution": "768P"
>}'

First frame

$curl --request POST \
> --url https://api.beatapi.io/v1/videos/tasks \
> --header 'Authorization: Bearer <BEATAPI_API_KEY>' \
> --header 'Content-Type: application/json' \
> --data '{
> "model": "minimax-h3-max",
> "prompt": "The performer turns toward the camera as neon light sweeps across the scene.",
> "images": [
> "https://media.beatapi.io/samples/neon-singer.png"
> ],
> "duration": 5,
> "resolution": "768P"
>}'

First and last frames

$curl --request POST \
> --url https://api.beatapi.io/v1/videos/tasks \
> --header 'Authorization: Bearer <BEATAPI_API_KEY>' \
> --header 'Content-Type: application/json' \
> --data '{
> "model": "minimax-h3-max",
> "prompt": "Move smoothly from the opening portrait to the final product reveal.",
> "images": [
> "https://media.beatapi.io/samples/neon-singer.png",
> "https://media.beatapi.io/samples/smart-bottle.png"
> ],
> "duration": 5,
> "resolution": "480P"
>}'

Response

A successful request returns HTTP 201.

1{
2 "data": {
3 "id": "task_8K2qA",
4 "object": "task",
5 "task_kind": "video",
6 "capability_id": "minimax-h3-max",
7 "capability_version": null,
8 "media_type": "video",
9 "model": "minimax-h3-max",
10 "status": "queued",
11 "stage": "queued",
12 "created_at": 1782210000,
13 "updated_at": 1782210000,
14 "completed_at": null,
15 "output": null,
16 "usage": {
17 "credits_reserved": 0.4,
18 "credits_charged": 0.4,
19 "billable_duration_seconds": 5,
20 "credits_settled": 0,
21 "credits_refunded": 0
22 },
23 "request_id": "req_abc123",
24 "error_code": null,
25 "error_message": null
26 }
27}

Errors

StatusMeaning
400Invalid request.
401Missing, invalid, or inactive API key.
402Insufficient USD balance
409Idempotency key conflicts with another request body
429Request rate limit exceeded.