Boogu Image API: Pricing, Documentation
by Boogu
Boogu Image API is a high-performance image generation and editing API designed to transform text prompts and existing images into detailed, visually rich outputs with strong prompt adherence and photorealistic quality. Built on the Boogu-Image model family, the API supports text-to-image creation, image-to-image editing, fast image synthesis, and multilingual text rendering, making it suitable for creative design, marketing assets, concept art, product visualization, and content generation workflows. Its architecture focuses on accurate scene understanding, coherent compositions, realistic lighting, stable typography, and reliable preservation of subject details during image editing, enabling developers to integrate advanced AI-powered image creation capabilities into applications and automated workflows through a scalable API interface.

Models Version
Get $5 Free Credit on First Payment
No strings attached — add funds and get $5 bonus instantly
Boogu Image v1 API Documentation
https://gateway.pixazo.ai/boogu-image/v1/boogu-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 |
Boogu Image generate request
Request Code
POST https://gateway.pixazo.ai/boogu-image/v1/boogu-image-request
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_API_KEY
{
"prompt": "A serene Japanese tea garden at dusk with stone lanterns lighting a winding path",
"negative_prompt": "",
"image_size": "square_hd",
"num_inference_steps": 30,
"guidance_scale": 4,
"cfg_range_start": 0,
"cfg_range_end": 1,
"num_images": 1,
"output_format": "jpeg",
"enable_safety_checker": true,
"sync_mode": false
}
import requests
url = "https://gateway.pixazo.ai/boogu-image/v1/boogu-image-request"
headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_API_KEY"
}
data = {
"prompt": "A serene Japanese tea garden at dusk with stone lanterns lighting a winding path",
"negative_prompt": "",
"image_size": "square_hd",
"num_inference_steps": 30,
"guidance_scale": 4,
"cfg_range_start": 0,
"cfg_range_end": 1,
"num_images": 1,
"output_format": "jpeg",
"enable_safety_checker": true,
"sync_mode": false
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
const url = "https://gateway.pixazo.ai/boogu-image/v1/boogu-image-request";
const headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_API_KEY"
};
const data = {
"prompt": "A serene Japanese tea garden at dusk with stone lanterns lighting a winding path",
"negative_prompt": "",
"image_size": "square_hd",
"num_inference_steps": 30,
"guidance_scale": 4,
"cfg_range_start": 0,
"cfg_range_end": 1,
"num_images": 1,
"output_format": "jpeg",
"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/boogu-image/v1/boogu-image-request" \
-H "Content-Type: application/json" \
-H "Cache-Control: no-cache" \
-H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
--data-raw '{
"prompt": "A serene Japanese tea garden at dusk with stone lanterns lighting a winding path",
"negative_prompt": "",
"image_size": "square_hd",
"num_inference_steps": 30,
"guidance_scale": 4,
"cfg_range_start": 0,
"cfg_range_end": 1,
"num_images": 1,
"output_format": "jpeg",
"enable_safety_checker": true,
"sync_mode": false
}'
Output
{
"request_id": "boogu-image_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/boogu-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 - Boogu Image generate request
| Parameter | Required | Type | Default | Allowed values / range | Description |
|---|---|---|---|---|---|
| prompt | Yes | string | — | — | Instruction describing the image to generate. Supports bilingual input (e.g., English and Chinese). |
| negative_prompt | No | string | "" | — | Description of elements that should NOT appear in the generated image. |
| image_size | No | string or object | "square_hd" | "square_hd", "square", "portrait_4_3", "portrait_16_9", "landscape_4_3", "landscape_16_9", or {width, height} | Preset aspect ratios: square_hd, square, portrait_4_3, portrait_16_9, landscape_4_3, landscape_16_9. Alternatively, provide a custom object with width and height keys. |
| num_inference_steps | No | integer | 30 | 20–50 | Number of refinement steps the model runs while generating. Higher values refine detail and quality but increase processing time; lower values are faster. |
| guidance_scale | No | float | 4 | 1–8 | Controls how closely the output follows your prompt (prompt adherence). Higher values stick more strictly to the prompt; lower values allow more creative variation. |
| cfg_range_start | No | float | 0 | 0–1 | The point in the generation process (a fraction from 0 to 1) where prompt guidance starts being applied. Most users can leave this at the default. |
| cfg_range_end | No | float | 1 | 0–1 | The point in the generation process (a fraction from 0 to 1) where prompt guidance stops being applied. Most users can leave this at the default. |
| num_images | No | integer | 1 | 1–4 | Number of images to generate. Valid range: 1–4. |
| output_format | No | string | "jpeg" | "jpeg", "png" | Output image format. Allowed values: jpeg, png. |
| 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 serene Japanese tea garden at dusk with stone lanterns lighting a winding path",
"negative_prompt": "",
"image_size": "square_hd",
"num_inference_steps": 30,
"guidance_scale": 4,
"cfg_range_start": 0,
"cfg_range_end": 1,
"num_images": 1,
"output_format": "jpeg",
"enable_safety_checker": true,
"sync_mode": false
}
Response
{
"request_id": "boogu-image_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/boogu-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 'boogu-image' not found or is disabled"
}
Error via Status/Webhook
{
"request_id": "boogu-image_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "boogu-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/boogu-image_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
Response (Completed)
{
"request_id": "boogu-image_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "boogu-image",
"error": null,
"output": {
"media_url": ["https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/boogu-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.
Boogu Image v1 API Pricing
Boogu Image v1 API Documentation
https://gateway.pixazo.ai/boogu-image-edit/v1/boogu-image-edit-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 |
Boogu Image Edit generate request
Request Code
POST https://gateway.pixazo.ai/boogu-image-edit/v1/boogu-image-edit-request
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_API_KEY
{
"prompt": "Change the background to a snowy mountain landscape at golden hour",
"image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/Image.jpeg",
"negative_prompt": "",
"num_images": 1,
"num_inference_steps": 30,
"guidance_scale": 4,
"image_guidance_scale": 1,
"cfg_range_start": 0,
"cfg_range_end": 1,
"output_format": "jpeg",
"enable_safety_checker": true,
"sync_mode": false
}
import requests
url = "https://gateway.pixazo.ai/boogu-image-edit/v1/boogu-image-edit-request"
headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_API_KEY"
}
data = {
"prompt": "Change the background to a snowy mountain landscape at golden hour",
"image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/Image.jpeg",
"negative_prompt": "",
"num_images": 1,
"num_inference_steps": 30,
"guidance_scale": 4,
"image_guidance_scale": 1,
"cfg_range_start": 0,
"cfg_range_end": 1,
"output_format": "jpeg",
"enable_safety_checker": true,
"sync_mode": false
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
const url = "https://gateway.pixazo.ai/boogu-image-edit/v1/boogu-image-edit-request";
const headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_API_KEY"
};
const data = {
"prompt": "Change the background to a snowy mountain landscape at golden hour",
"image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/Image.jpeg",
"negative_prompt": "",
"num_images": 1,
"num_inference_steps": 30,
"guidance_scale": 4,
"image_guidance_scale": 1,
"cfg_range_start": 0,
"cfg_range_end": 1,
"output_format": "jpeg",
"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/boogu-image-edit/v1/boogu-image-edit-request" \
-H "Content-Type: application/json" \
-H "Cache-Control: no-cache" \
-H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
--data-raw '{
"prompt": "Change the background to a snowy mountain landscape at golden hour",
"image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/Image.jpeg",
"negative_prompt": "",
"num_images": 1,
"num_inference_steps": 30,
"guidance_scale": 4,
"image_guidance_scale": 1,
"cfg_range_start": 0,
"cfg_range_end": 1,
"output_format": "jpeg",
"enable_safety_checker": true,
"sync_mode": false
}'
Output
{
"request_id": "boogu-image-edit_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/boogu-image-edit_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 - Boogu Image Edit generate request
| Parameter | Required | Type | Default | Allowed values / range | Description |
|---|---|---|---|---|---|
| prompt | Yes | string | — | — | Edit instruction describing how to transform the input image. Must be descriptive and specific for best results. |
| image_url | Yes | string | — | — | Upload your input image. JPG, PNG, WebP, GIF, or AVIF. |
| negative_prompt | No | string | "" | — | Text describing elements that should NOT appear in the edited image. Use to exclude unwanted objects, styles, or artifacts. |
| 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} | Preset aspect ratios: 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. |
| num_images | No | integer | 1 | 1–4 | Number of images to generate. Allowed range: 1–4. |
| num_inference_steps | No | integer | 30 | 20–50 | Number of refinement steps the model runs while generating. Higher values refine detail and quality but increase processing time; lower values are faster. |
| guidance_scale | No | float | 4 | 1–8 | Controls how closely the output follows your prompt (prompt adherence). Higher values stick more strictly to the prompt; lower values allow more creative variation. |
| image_guidance_scale | No | float | 1 | 1–8 | Controls how closely the output follows the input image. Higher values preserve more input structure. |
| cfg_range_start | No | float | 0 | 0–1 | The point in the generation process (a fraction from 0 to 1) where prompt guidance starts being applied. Most users can leave this at the default. |
| cfg_range_end | No | float | 1 | 0–1 | The point in the generation process (a fraction from 0 to 1) where prompt guidance stops being applied. Most users can leave this at the default. |
| output_format | No | string | "jpeg" | "jpeg", "png" | Output image format. |
| 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 | Image to edit. |
Example Request
{
"prompt": "Change the background to a snowy mountain landscape at golden hour",
"image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/nano-banana-pro-async_019efef2-90a7-74ff-577a-87e614a738b25/output.jpg",
"negative_prompt": "",
"num_images": 1,
"num_inference_steps": 30,
"guidance_scale": 4,
"image_guidance_scale": 1,
"cfg_range_start": 0,
"cfg_range_end": 1,
"output_format": "jpeg",
"enable_safety_checker": true,
"sync_mode": false
}
Response
{
"request_id": "boogu-image-edit_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/boogu-image-edit_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 'boogu-image-edit' not found or is disabled"
}
Error via Status/Webhook
{
"request_id": "boogu-image-edit_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "boogu-image-edit",
"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/boogu-image-edit_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
Response (Completed)
{
"request_id": "boogu-image-edit_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "boogu-image-edit",
"error": null,
"output": {
"media_url": ["https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/boogu-image-edit_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.