Ideogram 4.5 API, Ideogram v4 API, Ideogram RMBG API: Pricing, Documentation
by Ideogram
Ideogram is renowned for its exceptional ability to generate images with accurate, readable text—a challenge for most AI image models. Through Pixazo's API, developers can create images containing logos, signs, typography, and text elements that render correctly. The API offers text-to-image and image-to-image generation, plus background removal.

Models Version
Get 10% Cashback on Your First Payment (up to $500)
Add funds and get 10% cashback on your first payment (up to $500).
Ideogram 4.5 API Documentation
Generate images, posters, logos and designs from a text prompt with Ideogram 4.5, Ideogram's model built for accurate text rendering inside the image. Choose low, medium or high quality and up to 8 images per request. Asynchronous: submit returns a request_id; poll the status endpoint until the request is COMPLETED, then download the images from output.media_url.
POST https://gateway.pixazo.ai/ideogram-v4-5/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 - Ideogram 4.5
Request Code
POST https://gateway.pixazo.ai/ideogram-v4-5/v1/text-to-image
Content-Type: application/json
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
"prompt": "A vintage travel poster of Kyoto in autumn, bold hand-lettered title reading \"KYOTO\" across the top",
"image_size": "portrait_4_3",
"quality": "medium",
"num_images": 1
}import requests
url = "https://gateway.pixazo.ai/ideogram-v4-5/v1/text-to-image"
headers = {
"Content-Type": "application/json",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
"prompt": "A vintage travel poster of Kyoto in autumn, bold hand-lettered title reading \"KYOTO\" across the top",
"image_size": "portrait_4_3",
"quality": "medium",
"num_images": 1
}
resp = requests.post(url, json=data, headers=headers)
print(resp.json())const res = await fetch("https://gateway.pixazo.ai/ideogram-v4-5/v1/text-to-image", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
},
body: JSON.stringify({
"prompt": "A vintage travel poster of Kyoto in autumn, bold hand-lettered title reading \"KYOTO\" across the top",
"image_size": "portrait_4_3",
"quality": "medium",
"num_images": 1
})
});
console.log(await res.json());curl -X POST 'https://gateway.pixazo.ai/ideogram-v4-5/v1/text-to-image' \
-H 'Content-Type: application/json' \
-H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY' \
--data-raw '{"prompt": "A vintage travel poster of Kyoto in autumn, bold hand-lettered title reading \"KYOTO\" across the top", "image_size": "portrait_4_3", "quality": "medium", "num_images": 1}'Output
{
"request_id": "ideogram-v4-5_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/ideogram-v4-5_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/ideogram-v4-5/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": "A vintage travel poster of Kyoto in autumn, bold hand-lettered title reading \"KYOTO\" across the top", "image_size": "portrait_4_3", "quality": "medium", "num_images": 1}'Callback Payload (success)
{
"request_id": "ideogram-v4-5_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "ideogram-v4-5",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/{request_id}/output.png"
],
"media_type": "image/png"
},
"created_at": "2026-10-02T10:04:54.387Z",
"completed_at": "2026-10-02 10:05:21"
}Failure callback shape
{
"request_id": "ideogram-v4-5_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "ideogram-v4-5",
"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 every poll while the request is processing (status
PROCESSING), plus the final COMPLETED/ERROR callback. - 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 | — | 1–10,000 characters | What to generate. To put words on the image, write them in the prompt exactly as they should appear — for example a sign reading "OPEN". |
image_size | No | string or object | "square_hd" | square_hd, square, portrait_4_3, landscape_4_3, portrait_16_9, landscape_16_9, or {"width", "height"} matching a supported size | Output size. See Image Sizes below for the preset dimensions and the supported exact sizes. |
quality | No | string | "medium" | low, medium, high | Rendering quality. Higher quality takes longer and is billed at a higher rate per image. |
enable_prompt_expansion | No | boolean | true | true, false | Lets Ideogram rewrite and enrich your prompt before generation. Set false to keep your exact wording. |
num_images | No | integer | 1 | 1–8 | How many images to generate from this request. Each image is billed. |
seed | No | integer | — (random) | any integer | Random seed. Reuse a seed with identical settings to get a similar result; omit it for a new variation each time. |
Good to know
sync_modeis not supported — a request withsync_mode: trueis rejected. Finished images are always delivered as URLs through the status endpoint.num_imagesis the only way to ask for several images.n,count,batch_size,number_of_imagesare rejected.- Omit optional fields you do not use — do not send them as
null.
Image Sizes
Pass image_size as one of the named presets, or as an object such as {"width": 1440, "height": 2560}. An object must match one of the 36 supported sizes below exactly. The size does not change the amount billed.
| Preset | Output size (width × height) |
|---|---|
square_hd | 1024×1024 (the default) |
square | 1024×1024 (same as square_hd) |
portrait_4_3 | 864×1152 |
landscape_4_3 | 1152×864 |
portrait_16_9 | 720×1280 |
landscape_16_9 | 1280×720 |
Supported exact sizes
| Orientation | Width × height |
|---|---|
| Square | 1024×1024, 2048×2048 |
| Landscape | 1280×720, 1152×864, 1120×896, 1280×800, 1440×720, 1248×832, 3072×1024, 2944×1152, 2560×1440, 3072×1280, 2304×1728, 2240×1792, 2560×1600, 3168×1296, 2880×1440, 2496×1664, 3328×1248 |
| Portrait | 720×1280, 864×1152, 896×1120, 800×1280, 720×1440, 832×1248, 1024×3072, 1152×2944, 1440×2560, 1280×3072, 1728×2304, 1792×2240, 1600×2560, 1296×3168, 1440×2880, 1248×3328, 1664×2496 |
Example Request
{
"prompt": "A vintage travel poster of Kyoto in autumn, bold hand-lettered title reading \"KYOTO\" across the top",
"image_size": "portrait_4_3",
"quality": "medium",
"num_images": 1
}Example Response
{
"request_id": "ideogram-v4-5_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/ideogram-v4-5_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 | Invalid parameters — a required field is missing, or a value has the wrong type, is out of range or is not one of the allowed values. Rejected before any hold is placed on your balance. |
| 401 | Unauthorized — missing or invalid subscription key. |
| 402 | Insufficient balance for the hold this request needs. |
| 429 | Too many requests. |
| 500 | Internal server error. |
Most parameter problems are caught when you submit and returned as a 400, before any hold is placed on your balance. Problems that need an image to be fetched or the model to run are reported through the status endpoint as status: "ERROR", with a message in error saying what to fix. Failed requests are not billed — the hold is released in full.
| Condition | How it surfaces |
|---|---|
| Missing or invalid subscription key | synchronous 401 |
| Balance too low for the hold | synchronous 402 |
Missing prompt, or a prompt longer than 10,000 characters | synchronous 400 |
quality not one of low, medium, high | synchronous 400 |
num_images not an integer from 1 to 8 | synchronous 400 |
sync_mode: true, or a batch field such as batch_size | synchronous 400 |
An image_size string that is not one of the presets | synchronous 400 |
An edit field such as image_url, mask_url or edit_precision (send edits to the Edit endpoint) | synchronous 400 |
A field older Ideogram versions used, such as rendering_speed, aspect_ratio, negative_prompt or style, or webhook_url / wait_seconds in the JSON body (use the X-Webhook-URL header and the ?wait_seconds= query parameter) | synchronous 400 |
A {"width", "height"} image_size that is not one of the supported exact sizes | status: "ERROR" |
| Any other field that is not in the parameters table (the provider rejects unknown fields) | status: "ERROR" |
| A prompt refused by the provider's content policy | status: "ERROR" |
Retrieving Results
Poll the status endpoint with the request_id from the submit response until status is COMPLETED or ERROR, then download the images from output.media_url — one URL per generated image. Treat any status other than QUEUED, PROCESSING or COMPLETED as a failure.
Endpoint
GET https://gateway.pixazo.ai/v2/requests/status/{request_id}
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEYcURL example
curl 'https://gateway.pixazo.ai/v2/requests/status/ideogram-v4-5_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' \
-H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY'Completed response
{
"request_id": "ideogram-v4-5_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "ideogram-v4-5",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/{request_id}/output.png"
],
"media_type": "image/png"
},
"created_at": "2026-10-02T10:04:54.387Z",
"completed_at": "2026-10-02 10:05:21"
}Response Fields
| Field | Type | Description |
|---|---|---|
| request_id | string | Unique request identifier. |
| status | string | QUEUED, PROCESSING, COMPLETED or ERROR. |
| model_id | string | The model that handled the request — ideogram-v4-5 for this endpoint. |
| output.media_url | array of strings | URLs of the generated images (PNG), one per image. |
| output.media_type | string | image/png. |
| created_at | string | Request creation timestamp. |
| completed_at | string | Completion timestamp. |
| error | string | Error message when status is ERROR. |
| polling_url | string | Status URL for this request (submit response only). |
Status Values & Flow
QUEUED → PROCESSING → COMPLETED (success) or ERROR (failure).
Typical workflow
- Send the request to
POST https://gateway.pixazo.ai/ideogram-v4-5/v1/text-to-image. - Save the
request_idfrom the202response. - Poll
GET /v2/requests/status/{request_id}every 5–10 seconds, or use a Webhook instead. - When
statusisCOMPLETED, download the images fromoutput.media_url.
How billing is measured
Billing is measured per generated image: the number of images you ask for (num_images, 1 by default) at the rate for the quality tier you choose — medium when you leave it out. The image size does not change the amount. The amount is placed as a hold when the request is submitted and released in full if the request fails.
The current rate is shown in the pricing panel on this page.
Ideogram 4.5 API Pricing
Billed per image by the quality parameter; image size does not change the price. Higher quality = more detail and better prompt adherence at higher cost and latency. Use low for drafts, medium (the default) for everyday work, high for final assets.
| Quality | Price (USD) |
|---|---|
| Per image (Low quality) | $0.03 |
| Per image (Medium quality, default) | $0.06 |
| Per image (High quality) | $0.10 |
Ideogram 4.5 API Documentation
Edit an image with a text prompt using Ideogram 4.5. Guide the edit with up to four reference images and limit it to part of the image with a mask. Asynchronous: submit returns a request_id; poll the status endpoint until the request is COMPLETED, then download the images from output.media_url.
POST https://gateway.pixazo.ai/ideogram-v4-5-edit/v1/edit-imageAuthentication
All requests require an API key passed via header.
| Header | Type | Required | Description |
|---|---|---|---|
| Ocp-Apim-Subscription-Key | string | Yes | Your API subscription key |
Edit - Ideogram 4.5
Request Code
POST https://gateway.pixazo.ai/ideogram-v4-5-edit/v1/edit-image
Content-Type: application/json
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
"prompt": "Replace the background with a sunlit beach at golden hour and keep the subject unchanged",
"image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/Image.jpeg",
"edit_precision": "regular",
"quality": "medium"
}import requests
url = "https://gateway.pixazo.ai/ideogram-v4-5-edit/v1/edit-image"
headers = {
"Content-Type": "application/json",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
"prompt": "Replace the background with a sunlit beach at golden hour and keep the subject unchanged",
"image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/Image.jpeg",
"edit_precision": "regular",
"quality": "medium"
}
resp = requests.post(url, json=data, headers=headers)
print(resp.json())const res = await fetch("https://gateway.pixazo.ai/ideogram-v4-5-edit/v1/edit-image", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
},
body: JSON.stringify({
"prompt": "Replace the background with a sunlit beach at golden hour and keep the subject unchanged",
"image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/Image.jpeg",
"edit_precision": "regular",
"quality": "medium"
})
});
console.log(await res.json());curl -X POST 'https://gateway.pixazo.ai/ideogram-v4-5-edit/v1/edit-image' \
-H 'Content-Type: application/json' \
-H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY' \
--data-raw '{"prompt": "Replace the background with a sunlit beach at golden hour and keep the subject unchanged", "image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/Image.jpeg", "edit_precision": "regular", "quality": "medium"}'Output
{
"request_id": "ideogram-v4-5-edit_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/ideogram-v4-5-edit_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/ideogram-v4-5-edit/v1/edit-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": "Replace the background with a sunlit beach at golden hour and keep the subject unchanged", "image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/Image.jpeg", "edit_precision": "regular", "quality": "medium"}'Callback Payload (success)
{
"request_id": "ideogram-v4-5-edit_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "ideogram-v4-5-edit",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/{request_id}/output.png"
],
"media_type": "image/png"
},
"created_at": "2026-10-02T10:04:54.387Z",
"completed_at": "2026-10-02 10:05:21"
}Failure callback shape
{
"request_id": "ideogram-v4-5-edit_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "ideogram-v4-5-edit",
"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 every poll while the request is processing (status
PROCESSING), plus the final COMPLETED/ERROR callback. - 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 | — | 1–10,000 characters | What to change in the source image, in plain words. Text you want on the image can be written exactly as it should appear. |
image_url | Yes | string | — | Public https URL — JPEG, PNG or WEBP | The image to edit. Only this image is changed. |
reference_image_urls | No | array of strings | — | 0–4 public https URLs (at most 3 with mask_url) | Images that guide the edit, such as a style, an object or a character. They are never edited themselves. |
mask_url | No | string | — | Public https URL, same width and height as image_url | Limits the edit to part of the image: black marks the area to edit, white the area to keep. Must contain both black and white areas. |
edit_precision | No | string | "regular" | regular | regular generates a new image guided by the source. Precise Edit (high) is not yet available on this endpoint. |
quality | No | string | "medium" | very_low, low, medium, high | Rendering quality. very_low is the fastest; higher quality takes longer and is billed at a higher rate per image. |
image_size | No | string or object | "auto" | auto, square_hd, square, portrait_4_3, landscape_4_3, portrait_16_9, landscape_16_9, or {"width", "height"}: each side at least 256 and a multiple of 32, at most 4,194,304 pixels in total, ratio at most 6:1 | auto keeps the source image's size. Presets and custom sizes are accepted only for unmasked edits. |
num_images | No | integer | 1 | 1–8 | How many images to generate from this request. Each image is billed. |
seed | No | integer | — (random) | any integer | Random seed. Reuse a seed with identical settings to get a similar result; omit it for a new variation each time. |
Good to know
- Image URLs must be
httpsand publicly reachable — JPEG, PNG or WEBP. sync_modeis not supported — a request withsync_mode: trueis rejected. Finished images are always delivered as URLs through the status endpoint.num_imagesis the only way to ask for several images.n,count,batch_size,number_of_imagesare rejected.- Omit optional fields you do not use — do not send them as
null.
Masks and Reference Images
- Only
image_urlis edited. Reference images guide the result — a style, an object, a character — and are never edited themselves. - A mask limits the edit to part of the image: black marks the area to edit, white the area to keep. Grey values are rounded to the nearer of the two. The mask must have the same width and height as the source image and contain both black and white areas.
- Up to 4 reference images, or up to 3 when you send a mask (the mask takes one of the slots).
edit_precisioncurrently accepts only"regular"(the default): the edit generates a new image guided by the source. Precise Edit ("high") is not yet available on this endpoint.- The output keeps the source image's size by default (
image_size: "auto", downscaled if the source is very large). Named presets and custom sizes are accepted only for unmasked edits.
Example: masked edit with a reference image
{
"prompt": "Replace the masked area with a neon sign that reads \"OPEN LATE\"",
"image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/Image.jpeg",
"mask_url": "https://your-cdn.example.com/mask.png",
"reference_image_urls": [
"https://your-cdn.example.com/neon-style.jpg"
]
}Example Request
{
"prompt": "Replace the background with a sunlit beach at golden hour and keep the subject unchanged",
"image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/Image.jpeg",
"edit_precision": "regular",
"quality": "medium"
}Example Response
{
"request_id": "ideogram-v4-5-edit_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/ideogram-v4-5-edit_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 | Invalid parameters — a required field is missing, or a value has the wrong type, is out of range or is not one of the allowed values. Rejected before any hold is placed on your balance. |
| 401 | Unauthorized — missing or invalid subscription key. |
| 402 | Insufficient balance for the hold this request needs. |
| 429 | Too many requests. |
| 500 | Internal server error. |
Most parameter problems are caught when you submit and returned as a 400, before any hold is placed on your balance. Problems that need an image to be fetched or the model to run are reported through the status endpoint as status: "ERROR", with a message in error saying what to fix. Failed requests are not billed — the hold is released in full.
| Condition | How it surfaces |
|---|---|
| Missing or invalid subscription key | synchronous 401 |
| Balance too low for the hold | synchronous 402 |
Missing prompt or image_url, or a prompt longer than 10,000 characters | synchronous 400 |
edit_precision or quality not one of the allowed values | synchronous 400 |
num_images not an integer from 1 to 8 | synchronous 400 |
More than 4 reference_image_urls | synchronous 400 |
sync_mode: true, or a batch field such as batch_size | synchronous 400 |
An image_size string that is not auto or one of the presets | synchronous 400 |
A preset or custom image_size together with mask_url | synchronous 400 |
A field older Ideogram versions used, such as rendering_speed, aspect_ratio, negative_prompt or style, or webhook_url / wait_seconds in the JSON body (use the X-Webhook-URL header and the ?wait_seconds= query parameter) | synchronous 400 |
| An image, reference or mask URL that is not reachable or not a supported image | status: "ERROR" |
| A mask whose size differs from the source image, or that is all black or all white | status: "ERROR" |
More than 3 reference_image_urls together with mask_url | status: "ERROR" |
A custom image_size outside the limits | status: "ERROR" |
| Any other field that is not in the parameters table (the provider rejects unknown fields) | status: "ERROR" |
| A prompt or image refused by the provider's content policy | status: "ERROR" |
Retrieving Results
Poll the status endpoint with the request_id from the submit response until status is COMPLETED or ERROR, then download the images from output.media_url — one URL per generated image. Treat any status other than QUEUED, PROCESSING or COMPLETED as a failure.
Endpoint
GET https://gateway.pixazo.ai/v2/requests/status/{request_id}
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEYcURL example
curl 'https://gateway.pixazo.ai/v2/requests/status/ideogram-v4-5-edit_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' \
-H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY'Completed response
{
"request_id": "ideogram-v4-5-edit_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "ideogram-v4-5-edit",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/{request_id}/output.png"
],
"media_type": "image/png"
},
"created_at": "2026-10-02T10:04:54.387Z",
"completed_at": "2026-10-02 10:05:21"
}Response Fields
| Field | Type | Description |
|---|---|---|
| request_id | string | Unique request identifier. |
| status | string | QUEUED, PROCESSING, COMPLETED or ERROR. |
| model_id | string | The model that handled the request — ideogram-v4-5-edit for this endpoint. |
| output.media_url | array of strings | URLs of the generated images (PNG), one per image. |
| output.media_type | string | image/png. |
| created_at | string | Request creation timestamp. |
| completed_at | string | Completion timestamp. |
| error | string | Error message when status is ERROR. |
| polling_url | string | Status URL for this request (submit response only). |
Status Values & Flow
QUEUED → PROCESSING → COMPLETED (success) or ERROR (failure).
Typical workflow
- Send the request to
POST https://gateway.pixazo.ai/ideogram-v4-5-edit/v1/edit-image. - Save the
request_idfrom the202response. - Poll
GET /v2/requests/status/{request_id}every 5–10 seconds, or use a Webhook instead. - When
statusisCOMPLETED, download the images fromoutput.media_url.
How billing is measured
Billing is measured per generated image: the number of images you ask for (num_images, 1 by default) at the rate for the quality tier you choose — medium when you leave it out. The image size does not change the amount. The amount is placed as a hold when the request is submitted and released in full if the request fails.
The current rate is shown in the pricing panel on this page.
Ideogram 4.5 API Pricing
Billed per image by the quality parameter (very_low, low, medium, high); image size does not change the price. medium is the default.
| Quality | Price (USD) |
|---|---|
| Per image (Very low quality) | $0.008 |
| Per image (Low quality) | $0.03 |
| Per image (Medium quality, default) | $0.06 |
| Per image (High quality) | $0.22 |
Ideogram v4 API Documentation
https://gateway.pixazo.ai/ideogram-v4/v1/ideogram-v4-request
Authentication
All requests require an API key passed via header.
| Header | Type | Required | Description |
|---|---|---|---|
| Ocp-Apim-Subscription-Key | string | Yes | Your API subscription key |
Ideogram V4 generate request
Request Code
POST https://gateway.pixazo.ai/ideogram-v4/v1/ideogram-v4-request
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_API_KEY
{
"prompt": "A vintage travel poster of Kyoto in autumn, bold hand-painted lettering reading KYOTO across the top",
"num_images": 1,
"image_size": "square_hd",
"output_format": "jpeg",
"rendering_speed": "BALANCED",
"acceleration": "none",
"expansion_model": "Medium",
"enable_safety_checker": true,
"sync_mode": false
}
import requests
url = "https://gateway.pixazo.ai/ideogram-v4/v1/ideogram-v4-request"
headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_API_KEY"
}
data = {
"prompt": "A vintage travel poster of Kyoto in autumn, bold hand-painted lettering reading KYOTO across the top",
"num_images": 1,
"image_size": "square_hd",
"output_format": "jpeg",
"rendering_speed": "BALANCED",
"acceleration": "none",
"expansion_model": "Medium",
"enable_safety_checker": true,
"sync_mode": false
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
const url = "https://gateway.pixazo.ai/ideogram-v4/v1/ideogram-v4-request";
const headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_API_KEY"
};
const data = {
"prompt": "A vintage travel poster of Kyoto in autumn, bold hand-painted lettering reading KYOTO across the top",
"num_images": 1,
"image_size": "square_hd",
"output_format": "jpeg",
"rendering_speed": "BALANCED",
"acceleration": "none",
"expansion_model": "Medium",
"enable_safety_checker": true,
"sync_mode": false
};
fetch(url, {
method: "POST",
headers: headers,
body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => console.log(data));
curl -X POST "https://gateway.pixazo.ai/ideogram-v4/v1/ideogram-v4-request" \
-H "Content-Type: application/json" \
-H "Cache-Control: no-cache" \
-H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
--data-raw '{
"prompt": "A vintage travel poster of Kyoto in autumn, bold hand-painted lettering reading KYOTO across the top",
"num_images": 1,
"image_size": "square_hd",
"output_format": "jpeg",
"rendering_speed": "BALANCED",
"acceleration": "none",
"expansion_model": "Medium",
"enable_safety_checker": true,
"sync_mode": false
}'
Output
{
"request_id": "ideogram-v4_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/ideogram-v4_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Webhook (Optional)
Add the X-Webhook-URL header to your generate request to receive a POST callback instead of polling.
X-Webhook-URL: https://your-server.com/webhook/callback
Request Parameters - Ideogram V4 generate request
| Parameter | Required | Type | Default | Allowed values / range | Description |
|---|---|---|---|---|---|
| prompt | Yes | string | — | — | Text prompt for image generation. Must describe the desired visual content with clarity. |
| num_images | No | integer | 1 | 1, 2, 3, 4 | Number of images to generate. |
| image_size | No | string or object | "square_hd" | "square_hd", "square", "portrait_4_3", "portrait_16_9", "landscape_4_3", "landscape_16_9", or custom {width, height} object | Image dimensions preset or custom resolution. |
| output_format | No | string | "jpeg" | "jpeg", "png" | Output image format. |
| rendering_speed | No | string | "BALANCED" | "TURBO", "BALANCED", "QUALITY" | Quality vs speed trade-off tier. |
| acceleration | No | string | "none" | "none", "low", "regular", "high" | Hardware acceleration level. Higher values may reduce generation time but increase cost. |
| expansion_model | No | string | "Medium" | "None", "Medium", "Large" | Which model expands (rewrites and enriches) your prompt before generation. "None" disables prompt expansion and skips its fee; "Medium" is fast; "Large" uses Ideogram's Magic Prompt for the highest quality. |
| enable_safety_checker | No | boolean | true | — | Turns on automatic filtering of unsafe or explicit (NSFW) content. Leave enabled unless you have a specific reason to disable it. |
| seed | No | integer | — | — | Random seed that controls the generation's randomness. Reuse the same seed with identical settings to reproduce the same result; leave it empty for a different output each time. |
| sync_mode | No | boolean | false | — | If on, the finished file is sent back directly instead of as a download link. Handy for quick tests; for normal use, leave it off to get a download link. |
Example Request
{
"prompt": "A vintage travel poster of Kyoto in autumn, bold hand-painted lettering reading KYOTO across the top",
"num_images": 1,
"image_size": "square_hd",
"output_format": "jpeg",
"rendering_speed": "BALANCED",
"acceleration": "none",
"expansion_model": "Medium",
"enable_safety_checker": true,
"sync_mode": false
}
Response
{
"request_id": "ideogram-v4_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/ideogram-v4_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Request Headers
| Header | Value |
|---|---|
| Content-Type | application/json |
| Cache-Control | no-cache |
| Ocp-Apim-Subscription-Key | YOUR_API_KEY |
Response Handling
Common status codes.
| Code | Meaning |
|---|---|
| 202 | Accepted — Request queued |
| 400 | Bad Request |
| 401 | Unauthorized |
| 402 | Insufficient Balance |
| 403 | Forbidden |
| 429 | Too Many Requests |
| 500 | Internal Server Error |
Error Responses
Queue system errors and model validation errors.
Queue System Errors
// 402 — Insufficient balance
{
"error": "Insufficient Balance",
"message": "Your wallet does not have enough balance."
}
// 400 — Model not found
{
"error": "Model not found",
"message": "Model 'ideogram-v4' not found or is disabled"
}
Error via Status/Webhook
{
"request_id": "ideogram-v4_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "ideogram-v4",
"error": "Description of the error",
"output": null
}
Retrieving Results
Poll the universal status endpoint to check progress and retrieve results.
Endpoint
GET https://gateway.pixazo.ai/v2/requests/status/{request_id}
Ocp-Apim-Subscription-Key: YOUR_API_KEY
cURL Example
curl -H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
"https://gateway.pixazo.ai/v2/requests/status/ideogram-v4_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
Response (Completed)
{
"request_id": "ideogram-v4_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "ideogram-v4",
"error": null,
"output": {
"media_url": ["https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/ideogram-v4_019dxxxx/output.jpeg"],
"media_type": "image/jpeg"
},
"created_at": "2026-03-31T10:00:00.000Z",
"updated_at": "2026-03-31T10:00:15.000Z",
"completed_at": "2026-03-31T10:00:15.000Z"
}
Response Fields
| Field | Type | Description |
|---|---|---|
| request_id | string | Unique request identifier |
| status | string | QUEUED, PROCESSING, COMPLETED, FAILED, or ERROR |
| model_id | string | Model that processed the request |
| error | string|null | Error message if failed |
| output.media_url | array | URLs to generated media (R2 CDN) |
| output.media_type | string | MIME type of the output |
| created_at | string | When request was created |
| completed_at | string | When request completed |
| polling_url | string | Status URL (initial response only) |
Status Values
| Status | Description |
|---|---|
| QUEUED | Request accepted, waiting to be processed |
| PROCESSING | Being processed by the model |
| COMPLETED | Done — output contains the result |
| FAILED | Failed — check error field |
| ERROR | System error — not charged |
Status Flow
QUEUED → PROCESSING → COMPLETED
→ FAILED
→ ERROR
Typical Workflow
- Send a generate request to the API endpoint
- Save the
request_idfrom the response - Poll every 5-10 seconds:
GET /v2/requests/status/{request_id} - When
statusis"COMPLETED", download fromoutput.media_url
Tip: Use X-Webhook-URL header to get a callback instead of polling.
Ideogram v4 API Pricing
Higher tier = more detail and better prompt adherence at higher cost and latency. Use Turbo for speed, Balanced for everyday work, Quality for final assets.
| Resolution | Price (USD) |
|---|---|
| Per megapixel (Turbo) | $0.0075 |
| Per megapixel (Balanced, default) | $0.015 |
| Per megapixel (Quality) | $0.025 |
Ideogram v4 API Documentation
https://gateway.pixazo.ai/ideogram-v4-image-to-image/v1/ideogram-v4-image-to-image-request
Authentication
All requests require an API key passed via header.
| Header | Type | Required | Description |
|---|---|---|---|
| Ocp-Apim-Subscription-Key | string | Yes | Your API subscription key |
Ideogram V4 Image to Image generate request
Request Code
POST https://gateway.pixazo.ai/ideogram-v4-image-to-image/v1/ideogram-v4-image-to-image-request
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_API_KEY
{
"prompt": "Restyle as a vibrant watercolor illustration with bold ink outlines",
"image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/Image.jpeg",
"image_size": "auto",
"strength": 0.8,
"num_images": 1,
"rendering_speed": "BALANCED",
"acceleration": "none",
"output_format": "jpeg",
"expansion_model": "Medium",
"enable_safety_checker": true,
"sync_mode": false
}
import requests
url = "https://gateway.pixazo.ai/ideogram-v4-image-to-image/v1/ideogram-v4-image-to-image-request"
headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_API_KEY"
}
data = {
"prompt": "Restyle as a vibrant watercolor illustration with bold ink outlines",
"image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/Image.jpeg",
"image_size": "auto",
"strength": 0.8,
"num_images": 1,
"rendering_speed": "BALANCED",
"acceleration": "none",
"output_format": "jpeg",
"expansion_model": "Medium",
"enable_safety_checker": true,
"sync_mode": false
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
const url = "https://gateway.pixazo.ai/ideogram-v4-image-to-image/v1/ideogram-v4-image-to-image-request";
const headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_API_KEY"
};
const data = {
"prompt": "Restyle as a vibrant watercolor illustration with bold ink outlines",
"image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/Image.jpeg",
"image_size": "auto",
"strength": 0.8,
"num_images": 1,
"rendering_speed": "BALANCED",
"acceleration": "none",
"output_format": "jpeg",
"expansion_model": "Medium",
"enable_safety_checker": true,
"sync_mode": false
};
fetch(url, {
method: "POST",
headers: headers,
body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => console.log(data));
curl -X POST "https://gateway.pixazo.ai/ideogram-v4-image-to-image/v1/ideogram-v4-image-to-image-request" \
-H "Content-Type: application/json" \
-H "Cache-Control: no-cache" \
-H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
--data-raw '{
"prompt": "Restyle as a vibrant watercolor illustration with bold ink outlines",
"image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/Image.jpeg",
"image_size": "auto",
"strength": 0.8,
"num_images": 1,
"rendering_speed": "BALANCED",
"acceleration": "none",
"output_format": "jpeg",
"expansion_model": "Medium",
"enable_safety_checker": true,
"sync_mode": false
}'
Output
{
"request_id": "ideogram-v4-image-to-image_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/ideogram-v4-image-to-image_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Webhook (Optional)
Add the X-Webhook-URL header to your generate request to receive a POST callback instead of polling.
X-Webhook-URL: https://your-server.com/webhook/callback
Request Parameters - Ideogram V4 Image to Image generate request
| Parameter | Required | Type | Default | Allowed values / range | Description |
|---|---|---|---|---|---|
| prompt | Yes | string | — | — | Text prompt describing the desired output. Must be descriptive for best results. |
| image_url | Yes | string | — | — | Upload your input image. JPG, PNG, WebP, GIF, or AVIF. |
| image_size | No | string or object | "auto" | "auto", "square_hd", "square", "portrait_4_3", "portrait_16_9", "landscape_4_3", "landscape_16_9" | Preset aspect ratios: `auto`, `square_hd`, `square`, `portrait_4_3`, `portrait_16_9`, `landscape_4_3`, `landscape_16_9`. Alternatively, provide a custom object with `width` and `height` integers. |
| strength | No | float | 0.8 | 0.0–1.0 | How much the result may differ from the input. Higher values allow bigger changes from the source; lower values keep the output closer to the original. |
| num_images | No | integer | 1 | 1–4 | Number of images to generate. Allowed range: 1–4. |
| rendering_speed | No | string | "BALANCED" | "TURBO", "BALANCED", "QUALITY" | Quality vs speed tier. Allowed: `TURBO`, `BALANCED`, `QUALITY`. |
| acceleration | No | string | "none" | "none", "low", "regular", "high" | Hardware acceleration level. Allowed: `none`, `low`, `regular`, `high`. |
| output_format | No | string | "jpeg" | "jpeg", "png" | Output image format. Allowed: `jpeg`, `png`. |
| expansion_model | No | string | "Medium" | "None", "Medium", "Large" | Model used to expand the prompt for richer generation. Allowed: `None`, `Medium`, `Large`. |
| enable_safety_checker | No | boolean | true | — | Turns on automatic filtering of unsafe or explicit (NSFW) content. Leave enabled unless you have a specific reason to disable it. |
| seed | No | integer | — | — | Random seed that controls the generation's randomness. Reuse the same seed with identical settings to reproduce the same result; leave it empty for a different output each time. |
| sync_mode | No | boolean | false | — | If on, the finished file is sent back directly instead of as a download link. Handy for quick tests; for normal use, leave it off to get a download link. |
Content Item Types & Limits
| Type | Max | Format / Size | Description |
|---|---|---|---|
| image | 1 | JPG, PNG, WEBP, GIF, AVIF · < 10 MB | Input image. |
Example Request
{
"prompt": "Restyle as a vibrant watercolor illustration with bold ink outlines",
"image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/nano-banana/nano-banana-a382a80b-f8df-4de1-a0c1-a5dcfd42dae4-1758783383399.jpg",
"image_size": "auto",
"strength": 0.8,
"num_images": 1,
"rendering_speed": "BALANCED",
"acceleration": "none",
"output_format": "jpeg",
"expansion_model": "Medium",
"enable_safety_checker": true,
"sync_mode": false
}
Response
{
"request_id": "ideogram-v4-image-to-image_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/ideogram-v4-image-to-image_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Request Headers
| Header | Value |
|---|---|
| Content-Type | application/json |
| Cache-Control | no-cache |
| Ocp-Apim-Subscription-Key | YOUR_API_KEY |
Response Handling
Common status codes.
| Code | Meaning |
|---|---|
| 202 | Accepted — Request queued |
| 400 | Bad Request |
| 401 | Unauthorized |
| 402 | Insufficient Balance |
| 403 | Forbidden |
| 429 | Too Many Requests |
| 500 | Internal Server Error |
Error Responses
Queue system errors and model validation errors.
Queue System Errors
// 402 — Insufficient balance
{
"error": "Insufficient Balance",
"message": "Your wallet does not have enough balance."
}
// 400 — Model not found
{
"error": "Model not found",
"message": "Model 'ideogram-v4-image-to-image' not found or is disabled"
}
Error via Status/Webhook
{
"request_id": "ideogram-v4-image-to-image_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "ideogram-v4-image-to-image",
"error": "Description of the error",
"output": null
}
Retrieving Results
Poll the universal status endpoint to check progress and retrieve results.
Endpoint
GET https://gateway.pixazo.ai/v2/requests/status/{request_id}
Ocp-Apim-Subscription-Key: YOUR_API_KEY
cURL Example
curl -H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
"https://gateway.pixazo.ai/v2/requests/status/ideogram-v4-image-to-image_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
Response (Completed)
{
"request_id": "ideogram-v4-image-to-image_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "ideogram-v4-image-to-image",
"error": null,
"output": {
"media_url": ["https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/ideogram-v4-image-to-image_019dxxxx/output.jpeg"],
"media_type": "image/jpeg"
},
"created_at": "2026-03-31T10:00:00.000Z",
"updated_at": "2026-03-31T10:00:15.000Z",
"completed_at": "2026-03-31T10:00:15.000Z"
}
Response Fields
| Field | Type | Description |
|---|---|---|
| request_id | string | Unique request identifier |
| status | string | QUEUED, PROCESSING, COMPLETED, FAILED, or ERROR |
| model_id | string | Model that processed the request |
| error | string|null | Error message if failed |
| output.media_url | array | URLs to generated media (R2 CDN) |
| output.media_type | string | MIME type of the output |
| created_at | string | When request was created |
| completed_at | string | When request completed |
| polling_url | string | Status URL (initial response only) |
Status Values
| Status | Description |
|---|---|
| QUEUED | Request accepted, waiting to be processed |
| PROCESSING | Being processed by the model |
| COMPLETED | Done — output contains the result |
| FAILED | Failed — check error field |
| ERROR | System error — not charged |
Status Flow
QUEUED → PROCESSING → COMPLETED
→ FAILED
→ ERROR
Typical Workflow
- Send a generate request to the API endpoint
- Save the
request_idfrom the response - Poll every 5-10 seconds:
GET /v2/requests/status/{request_id} - When
statusis"COMPLETED", download fromoutput.media_url
Tip: Use X-Webhook-URL header to get a callback instead of polling.
Ideogram v4 API Pricing
| Resolution | Price (USD) |
|---|---|
| Per megapixel (Turbo) | $0.0075 |
| Per megapixel (Balanced, default) | $0.015 |
| Per megapixel (Quality) | $0.025 |
Ideogram Remove Background API Documentation
https://gateway.pixazo.ai/ideogram-remove-background/v1/ideogram-remove-background-request
Authentication
All requests require an API key passed via header.
| Header | Type | Required | Description |
|---|---|---|---|
| Ocp-Apim-Subscription-Key | string | Yes | Your API subscription key |
Ideogram Remove Background generate request - Ideogram Remove Background
Request Code
POST https://gateway.pixazo.ai/ideogram-remove-background/v1/ideogram-remove-background-request
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
"image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/Image.jpeg"
}
import requests
url = "https://gateway.pixazo.ai/ideogram-remove-background/v1/ideogram-remove-background-request"
headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
"image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/Image.jpeg"
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
fetch('https://gateway.pixazo.ai/ideogram-remove-background/v1/ideogram-remove-background-request', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Cache-Control': 'no-cache',
'Ocp-Apim-Subscription-Key': 'YOUR_SUBSCRIPTION_KEY'
},
body: JSON.stringify({
image_url: 'https://pub-582b7213209642b9b995c96c95a30381.r2.dev/Image.jpeg'
})
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
curl -X POST "https://gateway.pixazo.ai/ideogram-remove-background/v1/ideogram-remove-background-request" \
-H "Content-Type: application/json" \
-H "Cache-Control: no-cache" \
-H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
--data-raw '{
"image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/Image.jpeg"
}'
Output
{
"images": [
{
"file_name": "nano-banana-pro-edit-output.png",
"content_type": "image/png",
"url": "[RESPONSE_URL]"
}
],
"description": ""
}
Request Parameters - Ideogram Remove Background generate request
| Parameter | Required | Type | Default | Allowed values / range | Description |
|---|---|---|---|---|---|
| image_url | Yes | string | — | — | Source image URL. Supported formats: JPEG, PNG, WebP. Max file size 10MB. |
| sync_mode | No | boolean | false | true, false | If on, the finished file is sent back directly instead of as a download link. Handy for quick tests; for normal use, leave it off to get a download link. |
Content Item Types & Limits
| Type | Max | Format / Size | Description |
|---|---|---|---|
| image | 1 | JPEG, PNG, WEBP · < 10 MB | Image to remove the background from. |
Minimum Request
{
"image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/upscaler_019ed0c8-bb34-7854-afbc-b2a164758a15b/output.png"
}
Full Request (all options)
{
"image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/Image.jpeg",
"sync_mode": false
}
Response
{
"request_id": "ideogram-remove-background_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/ideogram-remove-background_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Response Fields - Ideogram Remove Background generate request
| Field | Type | Description |
|---|---|---|
| request_id | string | Unique identifier for the job submission. |
| status | string | Current status of the request (QUEUED, PROCESSING, etc.). |
| polling_url | string | URL to use for checking the job status. |
Request Headers
| Header | Value |
|---|---|
| Content-Type | application/json |
| Cache-Control | no-cache |
| Ocp-Apim-Subscription-Key | Your subscription key |
Response Handling
Common status codes for Ideogram Remove Background generate request.
| Code | Meaning |
|---|---|
| 200 | Success |
| 400 | Bad Request |
| 401 | Unauthorized |
| 403 | Forbidden |
| 404 | Not Found |
| 429 | Too Many Requests |
| 500 | Internal Server Error |
Error Responses
400: Bad Request
{
"error": "Invalid image_url",
"message": "The provided image_url is malformed or unreachable."
}
401: Unauthorized
{
"error": "Unauthorized",
"message": "Missing or invalid Ocp-Apim-Subscription-Key header."
}
Status Workflow
Check status of your request using the polling_url returned in the response.
Status Values
| Status | Description |
|---|---|
| QUEUED | Request accepted, waiting to be processed |
| PROCESSING | Being processed by the model |
| COMPLETED | Done — output contains the result |
| FAILED | Failed — check error field |
| ERROR | System error — not charged |
Status Flow
Submitted
↓
QUEUED
↓
PROCESSING
↓
COMPLETED or FAILED or ERROR
Typical Workflow
- Submit request to /ideogram-remove-background-request
- Receive response with request_id and polling_url
- Make GET requests to polling_url every 2–3 seconds
- When status is COMPLETED, extract output from the response
- Handle FAILED or ERROR states as appropriate
Ideogram Remove Background check status - Ideogram Remove Background
Request Code
POST https://gateway.pixazo.ai/v2/requests/status/ideogram-remove-background_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
import requests
url = "https://gateway.pixazo.ai/v2/requests/status/ideogram-remove-background_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
headers = {
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
response = requests.get(url, headers=headers)
print(response.json())
fetch('https://gateway.pixazo.ai/v2/requests/status/ideogram-remove-background_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx', {
method: 'GET',
headers: {
'Ocp-Apim-Subscription-Key': 'YOUR_SUBSCRIPTION_KEY'
}
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
curl -H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
"https://gateway.pixazo.ai/v2/requests/status/ideogram-remove-background_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
Output
{
"images": [
{
"file_name": "nano-banana-pro-edit-output.png",
"content_type": "image/png",
"url": "[RESPONSE_URL]"
}
],
"description": ""
}
Request Parameters - Ideogram Remove Background check status
| Parameter | Required | Type | Default | Allowed values / range | Description |
|---|---|---|---|---|---|
| request_id | Yes | string | — | — | The unique request ID returned from the initial submission endpoint. |
Minimum Request
{
"request_id": "ideogram-remove-background_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Full Request (all options)
{
"request_id": "ideogram-remove-background_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Response
{
"request_id": "ideogram-remove-background_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "ideogram-remove-background",
"error": null,
"output": {
"media_url": ["https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/ideogram-remove-background_019dxxxx/output.png"],
"media_type": "image/png"
},
"created_at": "2026-03-31T10:00:00.000Z",
"updated_at": "2026-03-31T10:00:15.000Z",
"completed_at": "2026-03-31T10:00:15.000Z"
}
Response Fields - Ideogram Remove Background check status
| Field | Type | Description |
|---|---|---|
| request_id | string | Unique identifier for the request. |
| status | string | Current status of the job (QUEUED, PROCESSING, COMPLETED, FAILED, ERROR). |
| model_id | string | The model used for processing. |
| error | null|string | null if successful, error details if failed. |
| output | object | Contains media_url and media_type for the generated result. |
| output.media_url | array | Array of URLs pointing to the generated media. |
| output.media_type | string | MIME type of the output (e.g., image/png). |
| created_at | string | Timestamp when the request was received. |
| updated_at | string | Timestamp when the request status was last updated. |
| completed_at | string | Timestamp when the request was completed. |
Request Headers
| Header | Value |
|---|---|
| Ocp-Apim-Subscription-Key | Your subscription key |
Response Handling
Common status codes for Ideogram Remove Background check status.
| Code | Meaning |
|---|---|
| 200 | Success |
| 400 | Bad Request - Invalid request_id |
| 401 | Unauthorized |
| 404 | Not Found - Request ID not found |
| 429 | Too Many Requests |
| 500 | Internal Server Error |
Notes & Tips
- Pricing is $0.01 per request.
- Use
sync_mode: trueif you need the output as a data URI directly in the submission response (not recommended for production). - Wait 2–3 seconds between polling requests for optimal performance.
- Implement exponential backoff for retrying failed or system error responses.
- Image must be under 10MB and in JPEG, PNG, or WebP format.
- The output is always a transparent PNG, suitable for compositing.
- Responses from the polling endpoint are not cached — each poll counts toward your usage limits.
- Use the polling URL returned in the initial response — do not construct it manually.
Ideogram Remove Background API Pricing
⚡ 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.