Ming Image API: Pricing, Documentation
by Ant Ling
Ming Image is a design-focused image model built for layouts where the text has to be right: posters, app and web mockups, infographics and social graphics with sharp, legible typography. Through Pixazo's API, developers can generate a finished design from a text prompt, then split any flattened design into editable transparent layers (text, images, containers and background) so each element can be moved, restyled or replaced on its own. Billing follows what the model actually produces, so smaller canvases and fewer returned layers cost less.

Models Version
Get $5 Free Credit on First Payment
No strings attached — add funds and get $5 bonus instantly
Ming Image 0.1 API Documentation
Generate a design-grade image from a text prompt with Ming Image 0.1 — posters, UI mockups, infographics and other text-rich layouts, with sharp, legible typography. Asynchronous: submit returns a request_id; poll the status endpoint until the request is COMPLETED, then download the image from output.media_url. Generation typically takes under two minutes.
POST https://gateway.pixazo.ai/ming-image/v1/text-to-imageAuthentication
All requests require an API key passed via header.
| Header | Type | Required | Description |
|---|---|---|---|
| Ocp-Apim-Subscription-Key | string | Yes | Your API subscription key |
Text to Image - Ming Image 0.1
Request Code
POST https://gateway.pixazo.ai/ming-image/v1/text-to-image
Content-Type: application/json
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
"prompt": "Minimalist event poster, bold title \"PIXAZO SUMMIT 2026\", date line \"October 12\", geometric shapes, warm orange and navy",
"output_format": "png"
}import requests
url = "https://gateway.pixazo.ai/ming-image/v1/text-to-image"
headers = {
"Content-Type": "application/json",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
"prompt": "Minimalist event poster, bold title \"PIXAZO SUMMIT 2026\", date line \"October 12\", geometric shapes, warm orange and navy",
"output_format": "png"
}
resp = requests.post(url, json=data, headers=headers)
print(resp.json())const res = await fetch("https://gateway.pixazo.ai/ming-image/v1/text-to-image", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
},
body: JSON.stringify({
"prompt": "Minimalist event poster, bold title \"PIXAZO SUMMIT 2026\", date line \"October 12\", geometric shapes, warm orange and navy",
"output_format": "png"
})
});
console.log(await res.json());curl -X POST 'https://gateway.pixazo.ai/ming-image/v1/text-to-image' \
-H 'Content-Type: application/json' \
-H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY' \
--data-raw '{"prompt": "Minimalist event poster, bold title \"PIXAZO SUMMIT 2026\", date line \"October 12\", geometric shapes, warm orange and navy", "output_format": "png"}'Output
{
"request_id": "ming-image_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/ming-image_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}Webhook (Optional)
Instead of polling, you can receive a Webhook callback when the request reaches a terminal state. Provide a Webhook URL via header on the submit request.
| Header | Required | Description |
|---|---|---|
| X-Webhook-URL | To enable | HTTPS URL to receive the Webhook callback. |
| X-Webhook-Mode | No | terminal (default, one callback on COMPLETED/ERROR) or sync (per-poll callbacks). |
Example: enable Webhook
curl -X POST 'https://gateway.pixazo.ai/ming-image/v1/text-to-image' \
-H 'Content-Type: application/json' \
-H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY' \
-H 'X-Webhook-URL: https://your-server.com/webhook' \
--data-raw '{"prompt": "Minimalist event poster, bold title \"PIXAZO SUMMIT 2026\", date line \"October 12\", geometric shapes, warm orange and navy", "output_format": "png"}'Callback Payload (success)
{
"request_id": "ming-image_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "ming-image",
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/{request_id}/output.png"
],
"media_type": "image/png"
},
"created_at": "2026-09-24T08:44:03.986Z",
"completed_at": "2026-09-24T08:45:54.402Z"
}Failure callback shape
{
"request_id": "ming-image_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "ming-image",
"error": "Description of the failure"
}Delivery semantics
- terminal mode: one Webhook callback when the request is COMPLETED or ERROR.
- sync mode: a Webhook callback on each status change.
- Callbacks are idempotent on
request_id— de-duplicate on it. - Respond
200within a few seconds; the Webhook endpoint must be HTTPS.
Request Parameters
| Parameter | Required | Type | Default | Allowed values / range | Description |
|---|---|---|---|---|---|
prompt | Yes | string | — | up to 4,000 characters | What to design: layout, the exact text to render (in quotes), palette and style. Describe the aspect ratio in words — the service chooses the canvas. |
output_format | No | string | png | png, jpeg, webp | Format of the returned image. |
Good to know
- One request produces one image. There is no batch option:
num_images,n,count,batch_sizeandnumber_of_imagesare rejected. image_url,num_layers,sizeandenhance_promptbelong to Layer Decomposition and are rejected here; the canvas size is chosen by the service.- The current rates are in the pricing panel on this page.
Example Request
{
"prompt": "Minimalist event poster, bold title \"PIXAZO SUMMIT 2026\", date line \"October 12\", geometric shapes, warm orange and navy",
"output_format": "png"
}Example Response
{
"request_id": "ming-image_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/ming-image_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}Request Headers
| Header | Required | Description |
|---|---|---|
| Content-Type | Yes | application/json |
| Ocp-Apim-Subscription-Key | Yes | Your API subscription key. |
| X-Webhook-URL | No | Enable Webhook callbacks (see Webhook section). |
Response Handling
| Status Code | Meaning |
|---|---|
| 202 | Accepted — request queued; returns request_id and polling_url. |
| 400 | Bad request — prompt missing or over 4,000 characters, a size or other Layer Decomposition field, or a batch field. Anything checkable from the request body alone. |
| 401 | Unauthorized — missing or invalid subscription key. |
| 402 | Insufficient balance. |
| 429 | Too many requests. |
| 500 | Internal server error. |
Only what can be judged from the request body itself is rejected synchronously. Everything that needs an input to be fetched or the model to run is reported through the status endpoint instead, as status: "ERROR". Failed requests are not billed — the hold is released in full.
| Condition | How it surfaces |
|---|---|
prompt missing, or longer than 4,000 characters | synchronous 400 |
size, image_url, num_layers or enhance_prompt sent to this operation | synchronous 400 |
A batch field (n, num_images, count, batch_size, number_of_images) | synchronous 400 |
| A prompt the provider rejects | status: "ERROR" |
Retrieving Results
Poll the status endpoint with the request_id from the submit response until status is COMPLETED (or FAILED/ERROR), then download the result from output.media_url. Most requests finish in under two minutes, so poll every 5–10 seconds rather than continuously.
curl 'https://gateway.pixazo.ai/v2/requests/status/ming-image_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' \
-H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY'Completed response
{
"request_id": "ming-image_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "ming-image",
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/{request_id}/output.png"
],
"media_type": "image/png"
},
"created_at": "2026-09-24T08:44:03.986Z",
"completed_at": "2026-09-24T08:45:54.402Z"
}Text to Image returns one image on a canvas the model chooses from your prompt, about 4 megapixels (for example 2048 x 2048 square, or 1440 x 2560 portrait). Layer Decomposition returns one RGBA image per returned layer, front to back, each the full working canvas with transparency around its content; the model can return fewer layers than requested.
Response Fields
| Field | Type | Description |
|---|---|---|
| request_id | string | Unique request identifier. |
| status | string | QUEUED, PROCESSING, COMPLETED, FAILED, or ERROR. |
| model_id | string | The model that handled the request. |
| output.media_url | array | One URL for a design; one URL per returned layer, front to back, for a decomposition. |
| output.media_type | string | image/png by default (image/jpeg or image/webp when requested). |
| created_at | string | Request creation timestamp. |
| completed_at | string | Completion timestamp. |
| error | string | Error message when status is FAILED/ERROR. |
Status Values & Flow
QUEUED → PROCESSING → COMPLETED (success) or FAILED/ERROR (failure).
How billing is measured
Billing follows what the model actually produced, measured in image tokens. Text to Image: the larger the canvas the model chooses, the higher the charge — never more than for a 2048 × 2048 image. Layer Decomposition: the source image plus each layer returned, at the resolution tier the service used (512 < 1k < 2k). When you submit, a hold is placed for the largest possible charge — every requested layer at the requested tier, with auto held at the 2k rate — and it is settled down to the actual usage when the request completes. If the request fails, the hold is released in full.
The current rates are shown in the pricing panel on this page.
Ming Image 0.1 API Pricing
Charged by the canvas the model chooses from your prompt: a 2048 × 2048 image is the most it costs, and smaller canvases (for example a 1440 × 2560 portrait) cost less.
Ming Image 0.1 API Documentation
Split a flattened design into editable RGBA layers with Ming Image 0.1 — text, images, containers and background on separate transparent layers. Asynchronous: submit returns a request_id; poll the status endpoint until the request is COMPLETED, then download the layers from output.media_url. Decomposition typically takes under two minutes.
POST https://gateway.pixazo.ai/ming-image/v1/layer-decomposeAuthentication
All requests require an API key passed via header.
| Header | Type | Required | Description |
|---|---|---|---|
| Ocp-Apim-Subscription-Key | string | Yes | Your API subscription key |
Layer Decomposition - Ming Image 0.1
Request Code
POST https://gateway.pixazo.ai/ming-image/v1/layer-decompose
Content-Type: application/json
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
"image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/meshy-7/multi-1.png",
"num_layers": 2,
"prompt": "1 statue, 2 background",
"size": "1k"
}import requests
url = "https://gateway.pixazo.ai/ming-image/v1/layer-decompose"
headers = {
"Content-Type": "application/json",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
"image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/meshy-7/multi-1.png",
"num_layers": 2,
"prompt": "1 statue, 2 background",
"size": "1k"
}
resp = requests.post(url, json=data, headers=headers)
print(resp.json())const res = await fetch("https://gateway.pixazo.ai/ming-image/v1/layer-decompose", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
},
body: JSON.stringify({
"image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/meshy-7/multi-1.png",
"num_layers": 2,
"prompt": "1 statue, 2 background",
"size": "1k"
})
});
console.log(await res.json());curl -X POST 'https://gateway.pixazo.ai/ming-image/v1/layer-decompose' \
-H 'Content-Type: application/json' \
-H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY' \
--data-raw '{"image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/meshy-7/multi-1.png", "num_layers": 2, "prompt": "1 statue, 2 background", "size": "1k"}'Output
{
"request_id": "ming-image_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/ming-image_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}Webhook (Optional)
Instead of polling, you can receive a Webhook callback when the request reaches a terminal state. Provide a Webhook URL via header on the submit request.
| Header | Required | Description |
|---|---|---|
| X-Webhook-URL | To enable | HTTPS URL to receive the Webhook callback. |
| X-Webhook-Mode | No | terminal (default, one callback on COMPLETED/ERROR) or sync (per-poll callbacks). |
Example: enable Webhook
curl -X POST 'https://gateway.pixazo.ai/ming-image/v1/layer-decompose' \
-H 'Content-Type: application/json' \
-H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY' \
-H 'X-Webhook-URL: https://your-server.com/webhook' \
--data-raw '{"image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/meshy-7/multi-1.png", "num_layers": 2, "prompt": "1 statue, 2 background", "size": "1k"}'Callback Payload (success)
{
"request_id": "ming-image_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "ming-image",
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/{request_id}/output_0.png",
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/{request_id}/output_1.png"
],
"media_type": "image/png"
},
"created_at": "2026-09-24T08:44:03.986Z",
"completed_at": "2026-09-24T08:45:54.402Z"
}Failure callback shape
{
"request_id": "ming-image_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "ming-image",
"error": "Description of the failure"
}Delivery semantics
- terminal mode: one Webhook callback when the request is COMPLETED or ERROR.
- sync mode: a Webhook callback on each status change.
- Callbacks are idempotent on
request_id— de-duplicate on it. - Respond
200within a few seconds; the Webhook endpoint must be HTTPS.
Request Parameters
| Parameter | Required | Type | Default | Allowed values / range | Description |
|---|---|---|---|---|---|
image_url | Yes | string | — | http(s) URL, up to 20 MB | The flattened design to decompose. Must be publicly reachable. |
num_layers | No | integer | 4 | 1–6 | How many layers to ask for. The model can return fewer; you are charged only for the layers returned. |
prompt | No | string | — | up to 4,000 characters | Optional layer plan, front to back, e.g. 1 text, 2 image, 3 background. If it states a count (3 layers: …) that count must equal num_layers. |
size | No | string | auto | 512, 1k, 2k, auto | Working resolution, as a pixel budget: 512 ≈ 512 × 512, 1k ≈ 1024 × 1024, 2k ≈ 2048 × 2048 pixels' worth; the service keeps the source aspect ratio. It also sets the rate per image. auto lets the service choose from the source, and you are charged at the tier it used. |
output_format | No | string | png | png, webp | Format of the returned layers. Layers carry transparency, so JPEG is not offered. |
enhance_prompt | No | boolean | true | true, false | Let the service refine the layer plan. Set false when you supply a complete plan and want it followed as written. |
Good to know
- One request decomposes one image. There is no batch option:
num_images,n,count,batch_sizeandnumber_of_imagesare rejected. - Only Text to Image generates from a prompt alone; this operation always needs an
image_url. - The current rates are in the pricing panel on this page.
Example Request
{
"image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/meshy-7/multi-1.png",
"num_layers": 2,
"prompt": "1 statue, 2 background",
"size": "1k"
}Example Response
{
"request_id": "ming-image_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/ming-image_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}Request Headers
| Header | Required | Description |
|---|---|---|
| Content-Type | Yes | application/json |
| Ocp-Apim-Subscription-Key | Yes | Your API subscription key. |
| X-Webhook-URL | No | Enable Webhook callbacks (see Webhook section). |
Response Handling
| Status Code | Meaning |
|---|---|
| 202 | Accepted — request queued; returns request_id and polling_url. |
| 400 | Bad request — image_url missing, num_layers outside 1–6 or not an integer, a plan whose layer count differs from num_layers, an unknown size, or JPEG output. Anything checkable from the request body alone. |
| 401 | Unauthorized — missing or invalid subscription key. |
| 402 | Insufficient balance. |
| 429 | Too many requests. |
| 500 | Internal server error. |
Only what can be judged from the request body itself is rejected synchronously. Everything that needs an input to be fetched or the model to run is reported through the status endpoint instead, as status: "ERROR". Failed requests are not billed — the hold is released in full.
| Condition | How it surfaces |
|---|---|
image_url missing, or not a string | synchronous 400 |
num_layers outside 1–6 or not an integer; a plan stating a different layer count | synchronous 400 |
size outside 512/1k/2k/auto, or output_format jpeg | synchronous 400 |
A batch field (n, num_images, count, batch_size, number_of_images) | synchronous 400 |
| An image URL that is not reachable or not an image | status: "ERROR" |
Retrieving Results
Poll the status endpoint with the request_id from the submit response until status is COMPLETED (or FAILED/ERROR), then download the result from output.media_url. Most requests finish in under two minutes, so poll every 5–10 seconds rather than continuously.
curl 'https://gateway.pixazo.ai/v2/requests/status/ming-image_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' \
-H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY'Completed response
{
"request_id": "ming-image_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "ming-image",
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/{request_id}/output_0.png",
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/{request_id}/output_1.png"
],
"media_type": "image/png"
},
"created_at": "2026-09-24T08:44:03.986Z",
"completed_at": "2026-09-24T08:45:54.402Z"
}Text to Image returns one image on a canvas the model chooses from your prompt, about 4 megapixels (for example 2048 x 2048 square, or 1440 x 2560 portrait). Layer Decomposition returns one RGBA image per returned layer, front to back, each the full working canvas with transparency around its content; the model can return fewer layers than requested.
Response Fields
| Field | Type | Description |
|---|---|---|
| request_id | string | Unique request identifier. |
| status | string | QUEUED, PROCESSING, COMPLETED, FAILED, or ERROR. |
| model_id | string | The model that handled the request. |
| output.media_url | array | One URL for a design; one URL per returned layer, front to back, for a decomposition. |
| output.media_type | string | image/png by default (image/jpeg or image/webp when requested). |
| created_at | string | Request creation timestamp. |
| completed_at | string | Completion timestamp. |
| error | string | Error message when status is FAILED/ERROR. |
Status Values & Flow
QUEUED → PROCESSING → COMPLETED (success) or FAILED/ERROR (failure).
How billing is measured
Billing follows what the model actually produced, measured in image tokens. Text to Image: the larger the canvas the model chooses, the higher the charge — never more than for a 2048 × 2048 image. Layer Decomposition: the source image plus each layer returned, at the resolution tier the service used (512 < 1k < 2k). When you submit, a hold is placed for the largest possible charge — every requested layer at the requested tier, with auto held at the 2k rate — and it is settled down to the actual usage when the request completes. If the request fails, the hold is released in full.
The current rates are shown in the pricing panel on this page.
Ming Image 0.1 API Pricing
Billed per image: the source plus each layer returned, at the resolution tier the service used. auto is held at the 2k rate and settled to the tier it actually used.
| Resolution tier | Price (USD) |
|---|---|
| 512 (about 512x512 pixels) | $0.00108 per image: the source plus each returned layer |
| 1k (about 1024x1024 pixels) | $0.0043 per image: the source plus each returned layer |
| 2k (about 2048x2048 pixels) | $0.0172 per image: the source plus each returned layer |
⚡ Performance
Live usage measured on Pixazo's gateway, split by model version. Generation time is how long a generation takes end-to-end (lower is better). Success rate is the percent of generations that complete (higher is better).
〰 Uptime
Percent of generations that succeeded over the selected period, per model version.