MiniMax H3 Image API
The MiniMax H3 Image API in two tiers: minimax-h3-image (standard) and minimax-h3-image-highspeed (faster). One endpoint covers text-to-image and editing: a prompt alone, or a prompt plus 1–16 reference images; 1–10 images per request at 1K / 2K / 4K (default 2K) in any ratio from 1:3 to 3:1, or an exact size between 655,360 and 20,000,000 pixels. Both tiers take the same request and differ only in speed and price.
Autenticación
All requests carry the API key in the header:
Authorization: Bearer YOUR_API_KEYPrecios
| Item | minimax-h3-image | minimax-h3-image-highspeed |
|---|---|---|
| Per output image · 1K / 2K | $0.03 | $0.05 |
| Per output image · 4K | $0.10 | $0.18 |
| Per reference image | +$0.01 | +$0.015 |
An exact size is priced by area: up to 5,033,165 pixels at the 1K / 2K price, above that at the 4K price. The text prompt is free. Credit for n images plus every reference image is reserved when the task is created; on completion you are charged only for the images actually delivered and the rest is released. A request that fails entirely costs nothing.
Text-to-image
/v1/images/generationsAsync by default: create returns a taskId; poll GET ?task_id= until completed and read resultUrls (one URL per image), or receive a webhook via callback_url. In our tests a 1K 16:9 text-to-image request took about 10 seconds and returned 1360×768; a 1K poster on Highspeed took about 6 seconds. 4K and several images per request take longer.
# Text-to-image — create returns a taskId, then poll for the result.
curl -X POST https://api.apimodels.app/v1/images/generations \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "minimax-h3-image",
"prompt": "A cozy cafe counter at golden hour, a ceramic latte cup with leaf latte art and rising steam, a croissant on a small plate, warm window light, shallow depth of field, film grain",
"resolution": "1K",
"aspect_ratio": "16:9",
"n": 2
}'
# → { "code": 200, "data": { "taskId": "...", "state": "pending", "model": "minimax-h3-image" } }
curl "https://api.apimodels.app/v1/images/generations?task_id=TASK_ID" \
-H "Authorization: Bearer YOUR_API_KEY"
# → { "code": 200, "data": { "state": "completed", "resultUrls": ["https://r2.apimodels.app/...", "https://r2.apimodels.app/..."] } }Editing · combining pictures
Include image (one) or images (up to 16) to edit or combine; refer to them as image 1, image 2 in the prompt. References can be public URLs or data URIs; anything above about 2.4 megapixels is scaled down before it is sent. An edit with one 1K reference image took about 16 seconds in our test.
# Edit / combine — 1 to 16 reference images (+$0.01 each, +$0.015 on Highspeed).
curl -X POST https://api.apimodels.app/v1/images/generations \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "minimax-h3-image",
"prompt": "Replace the croissant on the plate with a slice of strawberry cheesecake. Keep the cup, saucer, latte art, steam, table, window light and everything else exactly the same.",
"image": "https://example.com/cafe.jpg",
"resolution": "1K",
"aspect_ratio": "16:9"
}'
# Several references — refer to them as image 1, image 2 in the prompt.
curl -X POST https://api.apimodels.app/v1/images/generations \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "minimax-h3-image",
"prompt": "put the vase from image 2 on the table in image 1; keep the room, furniture and lighting unchanged",
"images": ["https://example.com/dining-room.jpg", "https://example.com/vase.png"]
}'One call, OpenAI style
Pass a WIDTHxHEIGHT size and no callback_url and the request stays open until the images are ready; the reply is { created, data: [{ b64_json, url, width, height }], size }, and "response_format": "url" leaves out the base64 copy. The OpenAI SDK's images.generate gets this same response. Give the call a generous timeout: 4K or several images can take more than a minute.
# One call: an exact WIDTHxHEIGHT size and no callback_url — the images come back in this response.
curl -X POST https://api.apimodels.app/v1/images/generations \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "minimax-h3-image-highspeed",
"prompt": "A minimalist jazz night poster: a deep blue background, a gold trumpet silhouette, the headline \"BLUE NOTE FRIDAY\" in large elegant serif letters, and a smaller line \"Live at The Lantern Room - 9 PM\" at the bottom",
"size": "2720x1536",
"response_format": "url"
}'
# → { "created": ..., "data": [{ "url": "https://r2.apimodels.app/...", "width": 2720, "height": 1536 }], "size": "2720x1536" }Parámetros
| Field | Required | Type | Description |
|---|---|---|---|
| model | Yes | string | minimax-h3-image or minimax-h3-image-highspeed (MiniMax's spelling, MiniMax-H3-Image / MiniMax-H3-Image-Highspeed, also works) |
| prompt | Yes | string | Required, up to 32,000 characters; refer to reference images as image 1, image 2 |
| n | No | integer | 1–10, default 1; only delivered images are charged |
| resolution | No | string | 1K / 2K / 4K (default 2K); area is accepted too |
| aspect_ratio | No | string | auto (default, the model picks from the prompt) or any X:Y between 1:3 and 3:1, e.g. 16:9, 4:5, 21:9 |
| size | No | string | Exact size such as 2720x1536; 655,360–20,000,000 pixels and 1:3–3:1. When size is set, resolution and aspect_ratio no longer apply; without callback_url the images come back in the same response |
| image / images / image_urls | No | string / string[] | 1–16 reference images (URL or data URI); each 128–8192 px per side, the long side at most 4× the short side, up to 64 MB |
| output_format | No | string | jpeg (default) / png / webp |
| output_compression | No | integer | 0–100, default 95; higher means better quality and larger files; jpeg / webp only |
| disable_prompt_enhanced | No | boolean | true turns off prompt enhancement; text-to-image only, and needs an aspect_ratio (X:Y) or size |
| aigc_watermark | No | boolean | true adds a visible AI-generated label to the image, default false; the implicit label in the file metadata is always written |
| response_format | No | string | One-call mode: b64_json (default, url included) or url |
| callback_url | No | string | Webhook URL called when the task completes |
Limits
- Masks (mask / mask_url), transparent backgrounds (background: "transparent"), negative_prompt and seed are not supported and return 400.
- n above 10, more than 16 reference images, a shape beyond 1:3–3:1 and a size outside 655,360–20,000,000 pixels all return 400.
- Edits always use prompt enhancement; disable_prompt_enhanced applies to text-to-image only.
- There is no seed, so the same request returns a different picture each time.
- Parameters that cannot be honoured return 400 with the reason instead of being silently ignored.
Not every request succeeds
Content review can refuse a prompt or an image, and the upstream occasionally returns a temporary error. When you ask for several images you pay only for the ones delivered; if the whole request fails nothing is charged and the reserved credit is released. The response carries the failure reason: for review refusals, change the prompt or image; for temporary errors, retry. Result files are deleted after 30 days, so download or re-host them promptly.
Try it in the playground: MiniMax H3 Image / Highspeed (one image per run there; use the API for several images, exact sizes and PNG / WebP). For transparent assets, see Seedream 5.5.
Preguntas frecuentes
How do I edit an image with MiniMax H3 Image?
POST to /v1/images/generations with model minimax-h3-image, a prompt that says what to change, and the picture as image (or up to 16 pictures as images, called image 1, image 2 in the prompt). Each reference image adds $0.01 ($0.015 on Highspeed).
How much does MiniMax H3 Image cost?
Standard: $0.03 per image at 1K or 2K and $0.10 at 4K, plus $0.01 per reference image. Highspeed: $0.05 and $0.18, plus $0.015 per reference image. Only delivered images are charged; failed requests are free.
Can I get the image back in one call?
Yes: pass an exact size such as 2720x1536 and no callback_url, or call images.generate from the OpenAI SDK with base_url https://api.apimodels.app/v1. Otherwise the call returns a taskId to poll.