Skip to navigation

MiniMax H3 Normal

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

Slower MiniMax H3 generation at half the Fast price. Generate 3–15 second videos with native audio at 480p, 768p, or 1080p.

Supported modes

ModeRequired inputRules
Text to videomodel, promptOmit all media arrays.
First framemodel, prompt, imagesProvide one image URL.
First and last framesmodel, prompt, imagesProvide two image URLs in first-to-last order.
Multimodal referencesmodel, prompt, reference_images and/or reference_videosDo not combine images with reference_* inputs.

Normal versus Fast: Normal has a longer processing wait and costs half of Fast at matching resolution and duration: USD 0.0175/s at 480p, USD 0.02/s at 768p, and USD 0.025/s at 1080p. The original minimax-h3 ID remains Fast; minimax-h3-fast is its explicit alias. Normal accepts at most two frame images OR up to four reference images and one reference video. It does not accept audio input, adaptive aspect ratio, 2K, or 4K. Output includes native audio with no audio-off switch. Optional seed must be an integer from 0 to 9007199254740991. Do not confuse speed tiers with a quality parameter: no quality field is exposed here.

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-normal.

Value: minimax-h3-normal


prompt   string   required

Video generation instructions.

Length: 1 to 5000 characters


images   string[]   optional

One first-frame image or first- and last-frame images in order. Cannot be combined with reference_images or reference_videos.

Count: 1 to 2 items


reference_images   string[]   optional

Up to four public HTTPS reference images, optionally combined with one reference video. Cannot be combined with images.

Count: 1 to 4 items


reference_videos   string[]   optional

One public HTTPS reference video, optionally combined with up to four reference images. Cannot be combined with images.

Count: 1 to 1 items


duration   integer   optional

Requested output duration in whole seconds.

Default: 5
Range: 3 to 15


aspect_ratio   enum<string>   optional

Output aspect ratio. Adaptive is not supported.

Available options: 16:9, 9:16, 1:1, 4:3, 3:4, 21:9
Default: "16:9"


resolution   enum<string>   optional

Normal output resolution. This model does not offer 2K or 4K.

Available options: 480p, 768p, 1080p
Default: "768p"


seed   integer   optional

Optional integer generation seed from 0 to 9007199254740991. Omit for a random seed.

Range: 0 to 9007199254740991

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-normal",
"prompt": "A slow cinematic push through a misty mountain village at dawn.",
"duration": 5,
"aspect_ratio": "16:9",
"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-normal",
"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-normal",
"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": "768p"
}'

Multimodal references

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-normal",
"prompt": "Create a cinematic performance using the supplied visual reference.",
"reference_images": [
"https://media.beatapi.io/samples/neon-singer.png"
],
"duration": 5,
"aspect_ratio": "16:9",
"resolution": "768p"
}'

Response

A successful request returns HTTP 201.

{
"data": {
"id": "task_8K2qA",
"object": "task",
"task_kind": "video",
"capability_id": "minimax-h3-normal",
"capability_version": null,
"media_type": "video",
"model": "minimax-h3-normal",
"status": "queued",
"stage": "queued",
"created_at": 1782210000,
"updated_at": 1782210000,
"completed_at": null,
"output": null,
"usage": {
"credits_reserved": 0.1,
"credits_charged": 0.1,
"billable_duration_seconds": 5,
"credits_settled": 0,
"credits_refunded": 0
},
"request_id": "req_abc123",
"error_code": null,
"error_message": null
}
}

Errors

StatusMeaning
400Malformed JSON or a field, value or combination this endpoint does not accept (bad_request; the message names the field), or input refused by moderation (content_policy_violation). Not retryable unchanged.
401No API key (missing_api_key), or a key that is wrong, expired, disabled or exhausted (invalid_api_key; the message says which). Send it as Authorization: Bearer <key>; the key works with or without the sk- prefix. Not retryable.
402Insufficient balance (insufficient_credits). The account balance is zero or below the price of this request. Top up, then send it again; not retryable before that.
403The key or account is not permitted to make this call (forbidden), for example a model that is not available on free credit (a top-up unlocks it), a request from outside the key’s IP allowlist, or a model outside the key’s group. Not retryable.
409The Idempotency-Key was already used with a different request body, or the first request with it is still being processed (idempotency_conflict). Not retryable unchanged.
429Too many requests (rate_limit_exceeded, including the free-model limits) or too many tasks processing at once (user_concurrency_exceeded). Retryable after Retry-After seconds (also error.retry_after_seconds).
500Unexpected internal error (internal_error). Retryable; keep request_id for support if it persists.
503The request could not be completed (processing_unavailable, processing_timeout, processing_failed or result_transfer_failed). Nothing was charged. Retryable with backoff; Retry-After is sent when the wait is known. BeatAPI does not answer 502 or 504.