MiniMax H3 Image Highspeed
Generate or edit an image from text and up to 16 reference images, at 1K, 2K or 4K or at an exact pixel size, billed by the tokens each render uses.
- Asynchronous: the create call returns a task ID in a moment; the image arrives when the task succeeds.
- One image per task. To get several images, create several tasks.
- Text to image, or edit and combine up to 16 reference images given as public HTTPS links.
- Choose the frame with
resolutionandaspect_ratio, or with one exactsizesuch as2720x1536. Never both.aspect_ratiodefaults toauto, which lets the model choose the frame from the prompt and any images. - Billed by tokens: text input (the prompt, including MiniMax’s prompt enhancement), reference-image input and image output, each at its own per-1M-token rate. The per-image prices below are estimates. The default
resolutionis4K;1Kand2Kuse the same output tokens and so cost the same. - The result is a
png(the default),jpegorwebpfile, chosen withoutput_format. A failed task costs nothing.
MiniMax H3 Image Highspeed is the Highspeed line of MiniMax’s image model. It takes the same request as minimax-h3-image, billed by tokens at higher rates for image input and image output.
Opens this model in the API Explorer. Enter your BeatAPI API key to create a task: the call is real and is billed to your own balance.
Model IDs
Both MiniMax H3 Image models use this endpoint and take the same fields. The values below come straight from the gateway contract.
Endpoint and authentication
POST https://api.beatapi.io/v1/images/tasks
Authorization
string
Required
Your BeatAPI API key, sent as Bearer <BEATAPI_API_KEY>. Create keys in the Dashboard. Keep keys on your server; never ship them in a browser or mobile app.
Send the body as JSON with Content-Type: application/json. Idempotency-Key is optional: send a unique value (at most 255 characters) per logical request and reuse it only to retry that exact body. Within 24 hours a retry with the same key and body returns the first response again with Idempotent-Replayed: true; the same key with a different body returns 409 idempotency_conflict. Responses other than 2xx are not stored, so a retry after a 400 or 402 runs again.
How a request works
Create the task
POST the parameters below to the endpoint. A 201 means the task was accepted and its price reserved from your balance; the work runs in the background. Save data.id.
Wait for it to finish
Call GET /v1/tasks/{task_id} and wait data.poll_after_seconds between calls (5 s for images, 8 s for videos) until status is succeeded or failed. Or register a webhook for task.succeeded and task.failed; keep polling as the fallback, because a task stopped by the processing timeout sends no event.
Save the result
On succeeded, download every data.output.media[].url and store the files you need; BeatAPI does not promise how long result URLs stay available. On failed, read data.error_code and data.error_message: the reserved amount was returned to your balance, and data.retryable says whether sending the same request again can succeed.
Input modes
Request parameters
model
string
Required
The model to run.
Value: minimax-h3-image-highspeed
If the value is wrong
- Missing:
"model" is required - Unknown model ID:
"model" minimax-image-9 is not catalogued - A video model sent to this endpoint:
"model" seedance-2.5 is served by POST /v1/videos/tasks, not this endpoint
prompt
string
Required
What to draw, or what to change in the reference images. Plain language works best: subject, style, lighting, composition, and any text that must appear in the image.
Length: 1–5000 characters
- Length is counted in characters (a CJK character counts as one).
- When you send
images, say which image does what, for example “Use the first image for the product and the second for the background”. - MiniMax’s prompt enhancement is on for every order. It adds text tokens to the input, which are billed at the text-input rate.
If the value is wrong
- Missing:
"prompt" is required - Empty or longer than the limit:
"prompt" has an unsupported length - Not a string:
"prompt" must be a string
images
string[]
Optional
Reference images to edit or combine. Sending this field switches the request from text-to-image to image editing.
Items: 1–16
Each item is a public https:// URL. For a local file, upload it first with POST /v1/files and pass the returned data.url.
- Each link must return the image file itself (PNG, JPEG or WebP) over public HTTPS, at most 50 MB. The gateway downloads the first bytes of every link before creating the task and recognises the type from those bytes, not from the file name or
Content-Type. - Links to web pages, login walls, expired signed URLs or hotlink-protected hosts are refused, because they do not return an image.
- Positions in error messages are 0-based:
images[0]is the first link. - The reference images are billed as image input, at their own per-1M-token rate (see Pricing).
If the value is wrong
- More than the maximum:
"images" accepts at most 16 items - An empty array:
"images" requires at least 1 item - Not an https:// link:
"images[0]" must be a public HTTPS URL - A private or unsafe address:
"images[0]" must be a publicly reachable HTTPS image URL - The host answers with a 4xx error:
"images[0]" could not be downloaded: the URL returned HTTP 404 - The link returns something other than PNG, JPEG or WebP:
"images[0]" is not a PNG, JPEG or WebP image: the URL returned text/html - Larger than 50 MB:
"images[2]" is 63.4 MB; images must be 50 MB or smaller
Example
aspect_ratio
string
OptionalDefault: auto
Shape of the image as width:height. Send it together with resolution, or leave both out and send size.
Allowed values: auto, 1:1, 3:2, 2:3, 4:3, 3:4, 5:4, 4:5, 16:9, 9:16, 2:1, 1:2, 3:1, 1:3, 21:9, 9:21
Default: auto
- The default is
auto: the model chooses the frame from the prompt and from the reference images, if any. Name a ratio when the shape matters. - Panoramic shapes
2:1,1:2,3:1,1:3,21:9and9:21are accepted. The widest or tallest frame is 3:1. - Not allowed together with
size.
If the value is wrong
- A value not in the list:
"aspect_ratio" must be one of: [auto 1:1 3:2 2:3 4:3 3:4 5:4 4:5 16:9 9:16 2:1 1:2 3:1 1:3 21:9 9:21] - Sent together with
size:"size" already fixes the output; do not send "aspect_ratio" with it
resolution
string
OptionalDefault: 4K
Size class of the image: 1K, 2K or 4K. A larger class gives a larger image; the exact pixel size depends on aspect_ratio and is decided by the model.
Allowed values: 1K, 2K, 4K
Default: 4K
- If you leave the field out,
4Kis used. 1Kand2Kuse the same output tokens, so they cost the same.4Kuses about four times as many and costs more (see Pricing).- Use the capital K:
2kis refused. - This page does not promise exact pixel dimensions for a class. If you need an exact frame, send
size. - Not allowed together with
size, which carries its own size.
If the value is wrong
- A value not in the list:
"resolution" must be one of: [1K 2K 4K] - Sent together with
size:"size" already fixes the output; do not send "resolution" with it
size
string
Optional
An exact output frame as WIDTHxHEIGHT in pixels, for example 2720x1536. It replaces resolution and aspect_ratio.
- The total must be between 655,360 and 20,000,000 pixels, and the long edge at most three times the short edge. There is no edge multiple to respect.
- The frame is rendered exactly as asked and never rounded.
- The separator can be
x,Xor×; spaces around it are ignored. - Billing follows the tokens the render uses: a larger frame uses more output tokens and so costs more (see Pricing).
- Do not send
resolutionoraspect_ratiowith it, even the default values.
If the value is wrong
- Not a string:
"size" must be a string - Not in WIDTHxHEIGHT form (a number alone,
auto, a comma):"size" must be WIDTHxHEIGHT in pixels, for example 2720x1536 - Too few or too many pixels:
"size" must have between 655,360 and 20,000,000 pixels; 512x512 has 262,144 - Wider or taller than 3:1:
"size" must not be wider or taller than 3:1 - Sent with
resolution:"size" already fixes the output; do not send "resolution" with it - Sent with
aspect_ratio:"size" already fixes the output; do not send "aspect_ratio" with it
Example
output_format
string
OptionalDefault: png
The file type of the image: png, jpeg or webp.
Allowed values: png, jpeg, webp
Default: png
- The default is
png. - The format does not change the price.
- Read
mime_typeon the output for the type of the stored file.
If the value is wrong
- A value not in the list:
"output_format" must be one of: [png jpeg webp]
Example
The gateway also checks these combinations before creating the task:
- size is WIDTHxHEIGHT and replaces resolution and aspect_ratio: 655,360-20,000,000 pixels in total, at most 3:1; it is rendered exactly, never rounded
- billed per token at the listed rates for the tokens each render uses (text input including prompt enhancement, reference images, image output); the listed per-image prices are estimates; 1K and 2K use the same output tokens
- aspect_ratio auto lets the model choose the frame from the prompt and any images
Input media limits
The gateway reads every input before the task is created and refuses one outside these limits with a 400 bad_request that names the input. Nothing is charged.
- Reference images: PNG, JPEG or WebP, recognised from the file content; at most 50 MB each (decimal megabytes; checked when the host states the size); 1 to 16 links. GIF, HEIC and SVG are refused.
- No pixel or aspect-ratio limit is checked on the reference images themselves.
- If a host does not answer in time, the link is not refused at create. The gateway fetches it again when the task is dispatched, and a link that still cannot be fetched fails the task, which is refunded.
- Have a local file? Upload it with
POST /v1/filesand pass the returneddata.url.
Choose the frame: resolution and aspect_ratio, or size
There are two ways to say how big and how wide the image is, and they exclude each other:
- Tier and ratio. Send
resolution(1K,2Kor4K) and, if you want a shape,aspect_ratio. Leave both out and you get4Kandauto: the model chooses the frame. - Exact size. Send
sizealone, for example2720x1536: 655,360 to 20,000,000 pixels, at most 3:1, rendered exactly.
Sending size with resolution or with aspect_ratio is refused with "size" already fixes the output; do not send "resolution" with it (or "aspect_ratio"). The check applies even when the other field holds its default value.
What the estimate assumes
The per-image prices in the table below are estimates. Each one assumes 3,000 text tokens (the prompt and MiniMax’s prompt enhancement) and the output tokens of the tier, and no reference images. What you are charged is settled to the tokens the render actually used.
Fields this model does not accept
The image endpoint knows a few fields that other image models use. Sending one of them here is refused instead of being ignored, so you never pay for a setting that had no effect:
background,quality,seed,enhance_prompt→field "background" is not supported by model minimax-h3-image-highspeed(with the field you sent and the model you called).- Any other unknown field, such as
normoderation→unknown field: n. There is non: one task makes one image.
Request examples
Text to image
A 2K landscape image from a prompt, with a tier and a ratio.
Let the model choose the frame
Only a prompt: resolution is 4K and aspect_ratio is auto, so the model chooses the frame.
Edit one image
Change the background and keep the product.
Combine several images
Name each reference in the prompt by its position.
Exact size
A 2720x1536 frame as WebP. size stands alone: no resolution, no aspect_ratio.
Responses
Create a task (201)
The task object. output is null until the task succeeds. Fields marked “while running” disappear once the task finishes.
Finished task
GET /v1/tasks/{task_id} returns HTTP 200 with status: "succeeded" and the result in data.output.
Output fields
Failed task
A failed task is still HTTP 200 on GET /v1/tasks/{task_id}: the failure is in the body. The reservation is returned in full, so nothing is charged.
Complete example
Create a task, wait for it with the server’s polling hint, and print the result URLs. Set BEATAPI_API_KEY in your environment and install requests.
Billing
- Billed by tokens at the per-1M-token rates in the table below: text input (the prompt, including MiniMax’s prompt enhancement), image input (the reference images in
images) and image output. The model counts the tokens; theresolutionorsize, the prompt and the reference images all change the count. - The per-image prices are estimates for one render of each
resolutionwithout reference images, at 3,000 text tokens and the output tokens in the table above.1Kand2Kuse the same output tokens and so have the same estimate. - When the task is created, the estimate for its tier is reserved from your balance, and from the key’s quota if it has one. When it succeeds, the charge is settled to the tokens the render actually used, so the final
data.usagecan differ from the reservation. A request refused before a task exists costs nothing. - A failed task is refunded in full.
Current list prices, the same as on Pricing. An account with a negotiated discount pays less; data.usage on the task always shows the amount actually charged.
Common errors
HTTP errors at a glance
Errors before a task exists arrive as a non-2xx response, and nothing is charged. Branch on error.code or error.retryable; message names the problem. The full list and retry policy are on Errors.
Authentication
Send your API key as Authorization: Bearer <BEATAPI_API_KEY>.
Headers
Send the body as JSON with Content-Type: application/json. Idempotency-Key is optional: send a unique value (at most 255 characters) per logical request and reuse it only to retry that exact body. Within 24 hours a retry with the same key and body returns the first response again with Idempotent-Replayed: true; the same key with a different body returns 409 idempotency_conflict. Responses other than 2xx are not stored, so a retry after a 400 or 402 runs again.
Request
The model to run.
Value: minimax-h3-image-highspeed
If the value is wrong
- Missing:
"model" is required - Unknown model ID:
"model" minimax-image-9 is not catalogued - A video model sent to this endpoint:
"model" seedance-2.5 is served by POST /v1/videos/tasks, not this endpoint
What to draw, or what to change in the reference images. Plain language works best: subject, style, lighting, composition, and any text that must appear in the image.
Length: 1–5000 characters
- Length is counted in characters (a CJK character counts as one).
- When you send
images, say which image does what, for example “Use the first image for the product and the second for the background”. - MiniMax’s prompt enhancement is on for every order. It adds text tokens to the input, which are billed at the text-input rate.
If the value is wrong
- Missing:
"prompt" is required - Empty or longer than the limit:
"prompt" has an unsupported length - Not a string:
"prompt" must be a string
Shape of the image as width:height. Send it together with resolution, or leave both out and send size.
Allowed values: auto, 1:1, 3:2, 2:3, 4:3, 3:4, 5:4, 4:5, 16:9, 9:16, 2:1, 1:2, 3:1, 1:3, 21:9, 9:21
Default: auto
- The default is
auto: the model chooses the frame from the prompt and from the reference images, if any. Name a ratio when the shape matters. - Panoramic shapes
2:1,1:2,3:1,1:3,21:9and9:21are accepted. The widest or tallest frame is 3:1. - Not allowed together with
size.
If the value is wrong
- A value not in the list:
"aspect_ratio" must be one of: [auto 1:1 3:2 2:3 4:3 3:4 5:4 4:5 16:9 9:16 2:1 1:2 3:1 1:3 21:9 9:21] - Sent together with
size:"size" already fixes the output; do not send "aspect_ratio" with it
Reference images to edit or combine. Sending this field switches the request from text-to-image to image editing.
Items: 1–16
Each item is a public https:// URL. For a local file, upload it first with POST /v1/files and pass the returned data.url.
- Each link must return the image file itself (PNG, JPEG or WebP) over public HTTPS, at most 50 MB. The gateway downloads the first bytes of every link before creating the task and recognises the type from those bytes, not from the file name or
Content-Type. - Links to web pages, login walls, expired signed URLs or hotlink-protected hosts are refused, because they do not return an image.
- Positions in error messages are 0-based:
images[0]is the first link. - The reference images are billed as image input, at their own per-1M-token rate (see Pricing).
If the value is wrong
- More than the maximum:
"images" accepts at most 16 items - An empty array:
"images" requires at least 1 item - Not an https:// link:
"images[0]" must be a public HTTPS URL - A private or unsafe address:
"images[0]" must be a publicly reachable HTTPS image URL - The host answers with a 4xx error:
"images[0]" could not be downloaded: the URL returned HTTP 404 - The link returns something other than PNG, JPEG or WebP:
"images[0]" is not a PNG, JPEG or WebP image: the URL returned text/html - Larger than 50 MB:
"images[2]" is 63.4 MB; images must be 50 MB or smaller
Example
"images": [
"https://cdn.beatapi.io/samples/smart-bottle.png",
"https://cdn.beatapi.io/samples/neon-singer.png"
]
The file type of the image: png, jpeg or webp.
Allowed values: png, jpeg, webp
Default: png
- The default is
png. - The format does not change the price.
- Read
mime_typeon the output for the type of the stored file.
If the value is wrong
- A value not in the list:
"output_format" must be one of: [png jpeg webp]
Example
"output_format": "webp"
Size class of the image: 1K, 2K or 4K. A larger class gives a larger image; the exact pixel size depends on aspect_ratio and is decided by the model.
Allowed values: 1K, 2K, 4K
Default: 4K
- If you leave the field out,
4Kis used. 1Kand2Kuse the same output tokens, so they cost the same.4Kuses about four times as many and costs more (see Pricing).- Use the capital K:
2kis refused. - This page does not promise exact pixel dimensions for a class. If you need an exact frame, send
size. - Not allowed together with
size, which carries its own size.
If the value is wrong
- A value not in the list:
"resolution" must be one of: [1K 2K 4K] - Sent together with
size:"size" already fixes the output; do not send "resolution" with it
An exact output frame as WIDTHxHEIGHT in pixels, for example 2720x1536. It replaces resolution and aspect_ratio.
- The total must be between 655,360 and 20,000,000 pixels, and the long edge at most three times the short edge. There is no edge multiple to respect.
- The frame is rendered exactly as asked and never rounded.
- The separator can be
x,Xor×; spaces around it are ignored. - Billing follows the tokens the render uses: a larger frame uses more output tokens and so costs more (see Pricing).
- Do not send
resolutionoraspect_ratiowith it, even the default values.
If the value is wrong
- Not a string:
"size" must be a string - Not in WIDTHxHEIGHT form (a number alone,
auto, a comma):"size" must be WIDTHxHEIGHT in pixels, for example 2720x1536 - Too few or too many pixels:
"size" must have between 655,360 and 20,000,000 pixels; 512x512 has 262,144 - Wider or taller than 3:1:
"size" must not be wider or taller than 3:1 - Sent with
resolution:"size" already fixes the output; do not send "resolution" with it - Sent with
aspect_ratio:"size" already fixes the output; do not send "aspect_ratio" with it
Example
"size": "2720x1536"
Response
The task object. output is null until the task succeeds. Fields marked “while running” disappear once the task finishes.

