Bria Guided RMBG API, Bria Fibo Gen 1.5 API, Bria Fibo Edit 1.5, VRMBG 3.0 & RMBG 2.0 API: Pricing, Documentation
by Bria
Bria provides enterprise-focused AI image generation and editing capabilities, including powerful background removal (RMBG). Through Pixazo's API, businesses can access Bria's commercially-licensed models for creating and modifying images at scale. The API is designed for production workflows requiring high-quality outputs with clear intellectual property rights and enterprise-grade reliability.

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).
Bria Guided Remove Background API Documentation
Remove the background of a photo with Bria, and steer what stays with plain words: send the photo in image_url and, optionally, say in prompt what to keep, add or drop. Asynchronous: submit returns a request_id; poll the status endpoint until the request is COMPLETED, then download the image from output.media_url.
POST https://gateway.pixazo.ai/bria-guided-remove-background/v1/remove-backgroundAuthentication
All requests require an API key passed via header.
| Header | Type | Required | Description |
|---|---|---|---|
| Ocp-Apim-Subscription-Key | string | Yes | Your API subscription key |
Image to Image (Guided Background Removal) - Bria Guided Remove Background
Request Code
POST https://gateway.pixazo.ai/bria-guided-remove-background/v1/remove-background
Content-Type: application/json
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
"image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/images/input.jpg",
"prompt": "only the t-shirt"
}import requests
url = "https://gateway.pixazo.ai/bria-guided-remove-background/v1/remove-background"
headers = {
"Content-Type": "application/json",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
"image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/images/input.jpg",
"prompt": "only the t-shirt"
}
resp = requests.post(url, json=data, headers=headers)
print(resp.json())const res = await fetch("https://gateway.pixazo.ai/bria-guided-remove-background/v1/remove-background", {
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/images/input.jpg",
"prompt": "only the t-shirt"
})
});
console.log(await res.json());curl -X POST 'https://gateway.pixazo.ai/bria-guided-remove-background/v1/remove-background' \
-H 'Content-Type: application/json' \
-H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY' \
--data-raw '{"image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/images/input.jpg", "prompt": "only the t-shirt"}'Output
{
"request_id": "bria-guided-remove-background_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/bria-guided-remove-background_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/bria-guided-remove-background/v1/remove-background' \
-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/images/input.jpg", "prompt": "only the t-shirt"}'Callback Payload (success)
{
"request_id": "bria-guided-remove-background_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "bria-guided-remove-background",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/{request_id}/output.png"
],
"media_type": "image/png"
},
"created_at": "2026-10-09T10:04:54.387Z",
"completed_at": "2026-10-09 10:06:21"
}Failure callback shape
{
"request_id": "bria-guided-remove-background_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "bria-guided-remove-background",
"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 |
|---|---|---|---|---|---|
image_url | Yes | string | — | A publicly reachable https URL (recommended), a base64 data URI or raw base64 image bytes | The photo to cut out. |
prompt | No | string | Empty | Text | Plain words that change the default cutout of the photo's obvious subject: add something, drop something or narrow it, for example only the t-shirt. Leave it out for the plain cutout. |
autocrop | No | boolean | false | true, false | Crop the output canvas to the kept content. |
Good to know
- Each request returns one image.
batch_size,num_images,number_of_images,nandcountare rejected — send one request per image. - This API works on a single image and has no length setting.
duration,seconds,num_frames,frames_per_secondandmusic_length_msare rejected. - Send every field at the top level of the JSON body;
parameters,contentandtextare rejected. - Send the photo as
image_url: a publicly reachablehttpsURL (recommended), a base64 data URI or raw base64 image bytes. One photo per request. imageandimage_urlsare rejected: send one photo asimage_url.- Leave
promptout for the plain cutout of the photo's obvious subject. Use it to add something (the person with the bag), drop something (the woman without the sunglasses) or narrow it (only the t-shirt). - Set
autocroptotrueto crop the output canvas to the kept content. - Use the JSON types shown:
image_urlandpromptare strings, andautocropistrueorfalse(not"true"). - Omit a field instead of sending
null. - Results are always returned as a URL in
output.media_url;sync_modeis accepted only asfalse. - Webhooks are set with the
X-Webhook-URL/X-Webhook-Modeheaders;webhook_url,webhook_modeandcallback_urlin the JSON body are rejected. streamis not supported: the result is delivered when the job completes.
Steering the Cutout
- Without
prompt, the photo's obvious subject is kept and the background is removed. - With
prompt, plain words change what is kept: add something, drop something or narrow it. autocropset totruecrops the output canvas to the kept content.
Example: the plain cutout (no prompt)
{
"image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/images/input.jpg"
}Example: keep only the t-shirt and crop the canvas to it
{
"image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/images/input.jpg",
"prompt": "only the t-shirt",
"autocrop": true
}Example Request
{
"image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/images/input.jpg",
"prompt": "only the t-shirt"
}Example Response
{
"request_id": "bria-guided-remove-background_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/bria-guided-remove-background_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). |
| X-Webhook-Mode | No | terminal (default) or sync (see Webhook section). |
Response Handling
| Status Code | Meaning |
|---|---|
| 202 | Accepted — request queued; returns request_id and polling_url. |
| 400 | Invalid request — a required field is missing, a value has the wrong type, is too long, out of range or not one of the allowed values, or a field this operation does not accept was sent. The message says what to fix. |
| 401 | Unauthorized — missing or invalid subscription key. |
| 402 | Insufficient balance for the hold this request needs. |
| 429 | Too many requests. |
| 500 | Internal server error. |
Parameter problems are caught when you submit and returned as a 400, before any hold is placed on your balance. Problems that need the model to run are reported through the status endpoint as status: "ERROR", with a message in error saying what went wrong. 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 or empty image_url, image_url not a string | synchronous 400 |
autocrop not true or false — for example the string "true" | synchronous 400 |
prompt not a string | synchronous 400 |
sync_mode set to anything other than false (results are always returned as a URL in output.media_url) | synchronous 400 |
image, image_urls (send one photo as image_url) | synchronous 400 |
batch_size, num_images, number_of_images, n, count (one image per request) | synchronous 400 |
duration, seconds, num_frames, frames_per_second, music_length_ms (this API works on a single image) | synchronous 400 |
parameters, content, text (send the fields at the top level of the JSON body) | synchronous 400 |
webhook_url, webhook_mode, callback_url in the JSON body (use the X-Webhook-URL / X-Webhook-Mode headers) | synchronous 400 |
stream (the result is delivered when the job completes) | synchronous 400 |
| An image that cannot be read, for example a file that is not an image | status: "ERROR" |
| A request the model refuses, for example under its content policy | status: "ERROR" |
Example error responses
A refused request returns error, a message that joins every problem found, and the same problems one by one in violations.
Missing image_url (synchronous 400)
{
"error": "Invalid request parameters",
"message": "'image_url' is required",
"violations": [
"'image_url' is required"
]
}A photo sent as image (synchronous 400)
{
"error": "Invalid request parameters",
"message": "'image_url' is required; 'image' must be one of: (got \"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/images/input.jpg\"); 'image' is not accepted. Send the photo as 'image_url' (a public URL or a base64 data URI).",
"violations": [
"'image_url' is required",
"'image' must be one of: (got \"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/images/input.jpg\")",
"'image' is not accepted. Send the photo as 'image_url' (a public URL or a base64 data URI)."
]
}autocrop sent as a string (synchronous 400)
{
"error": "Invalid request parameters",
"message": "'autocrop' must be boolean (got string)",
"violations": [
"'autocrop' must be boolean (got string)"
]
}More than one image per request (synchronous 400)
{
"error": "Invalid request parameters",
"message": "'num_images' must be one of: (got 2); 'num_images' is not supported: each request returns one image. Send one request per image.",
"violations": [
"'num_images' must be one of: (got 2)",
"'num_images' is not supported: each request returns one image. Send one request per image."
]
}A length setting (synchronous 400)
{
"error": "Invalid request parameters",
"message": "'duration' must be one of: (got 10); 'duration' is not accepted: this API works on a single image and has no length setting.",
"violations": [
"'duration' must be one of: (got 10)",
"'duration' is not accepted: this API works on a single image and has no length setting."
]
}Retrieving Results
Poll the status endpoint with the request_id from the submit response until status is COMPLETED or ERROR, then download the image from output.media_url. 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/bria-guided-remove-background_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' \
-H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY'Completed response
{
"request_id": "bria-guided-remove-background_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "bria-guided-remove-background",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/{request_id}/output.png"
],
"media_type": "image/png"
},
"created_at": "2026-10-09T10:04:54.387Z",
"completed_at": "2026-10-09 10:06: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 — bria-guided-remove-background for this endpoint. |
| output.media_url | array of strings | URL of the image (one PNG file per request). |
| 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/bria-guided-remove-background/v1/remove-background. - Save the
request_idfrom the202response. - Poll
GET /v2/requests/status/{request_id}every 10 seconds or so, or use a Webhook instead. - When
statusisCOMPLETED, download the image fromoutput.media_url.
How Billing Is Measured
Billing is measured per image: each request is billed once, for one image. The prompt, autocrop and the size of the photo do 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.
Bria Guided Remove Background API Pricing
BRIA FIBO Gen 1.5 API Documentation
Generate an image from a text prompt with Bria's Fibo Gen 1.5 — high-fidelity output with accurate typography, trained only on licensed data. Describe the scene in prompt, or send a JSON structured_prompt for fine-grained control. Asynchronous: submit returns a request_id; poll the status endpoint until the request is COMPLETED, then download the image from output.media_url.
POST https://gateway.pixazo.ai/fibo-gen-1-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 - Fibo Gen 1.5
Request Code
POST https://gateway.pixazo.ai/fibo-gen-1-5/v1/text-to-image
Content-Type: application/json
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
"prompt": "A weathered brown leather armchair in a sunlit study, cracked grain texture, soft afternoon light raking across the surface.",
"aspect_ratio": "1:1",
"resolution": "1MP"
}import requests
url = "https://gateway.pixazo.ai/fibo-gen-1-5/v1/text-to-image"
headers = {
"Content-Type": "application/json",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
"prompt": "A weathered brown leather armchair in a sunlit study, cracked grain texture, soft afternoon light raking across the surface.",
"aspect_ratio": "1:1",
"resolution": "1MP"
}
resp = requests.post(url, json=data, headers=headers)
print(resp.json())const res = await fetch("https://gateway.pixazo.ai/fibo-gen-1-5/v1/text-to-image", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
},
body: JSON.stringify({
"prompt": "A weathered brown leather armchair in a sunlit study, cracked grain texture, soft afternoon light raking across the surface.",
"aspect_ratio": "1:1",
"resolution": "1MP"
})
});
console.log(await res.json());curl -X POST 'https://gateway.pixazo.ai/fibo-gen-1-5/v1/text-to-image' \
-H 'Content-Type: application/json' \
-H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY' \
--data-raw '{"prompt": "A weathered brown leather armchair in a sunlit study, cracked grain texture, soft afternoon light raking across the surface.", "aspect_ratio": "1:1", "resolution": "1MP"}'Output
{
"request_id": "fibo-gen-1-5_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/fibo-gen-1-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/fibo-gen-1-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 weathered brown leather armchair in a sunlit study, cracked grain texture, soft afternoon light raking across the surface.", "aspect_ratio": "1:1", "resolution": "1MP"}'Callback Payload (success)
{
"request_id": "fibo-gen-1-5_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "fibo-gen-1-5",
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/{request_id}/output.png"
],
"media_type": "image/png"
},
"created_at": "2026-09-21T11:00:12.102Z",
"completed_at": "2026-09-21T11:00:31.870Z"
}Failure callback shape
{
"request_id": "fibo-gen-1-5_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "fibo-gen-1-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 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 | Conditional | string | — | free text | What to generate. Required unless you send structured_prompt. There is no documented length limit. |
structured_prompt | Conditional | object | — | JSON scene specification | A structured description of the scene (objects, background, lighting, aesthetics, photographic characteristics, style, text to render). Use it instead of prompt when you need precise control. Its nested fields are passed to the model as-is; each entry in objects[] must include a relationship. |
aspect_ratio | No | string | 1:1 | 1:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9 | Aspect ratio of the generated image. |
resolution | No | string | 1MP | 1MP, 4MP | Output resolution class. 1MP is about one megapixel (1024×1024 at 1:1); 4MP is larger and takes longer. Both are billed the same. |
seed | No | integer | 5555 | any integer | Random seed. The default is a fixed value, so identical inputs reproduce the same image — change it to get variations. |
Good to know
- Exactly one image is generated per request. There is no batch option:
num_images,n,count,batch_sizeandnumber_of_imagesare rejected. - This operation takes no input image.
- Image URLs must be
httpsand publicly reachable; the gateway fetches them before generation. sync_modeis not supported — the finished image is always delivered through the status endpoint.- Cost is per generated image; the current rate is in the pricing panel on this page.
Example Request
{
"prompt": "A weathered brown leather armchair in a sunlit study, cracked grain texture, soft afternoon light raking across the surface.",
"aspect_ratio": "1:1",
"resolution": "1MP"
}Example Response
{
"request_id": "fibo-gen-1-5_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/fibo-gen-1-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 | Bad request — prompt and structured_prompt both missing, aspect_ratio or resolution outside the allowed values, or a batch field such as num_images. 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 image 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 and structured_prompt both missing | synchronous 400 |
aspect_ratio / resolution outside the allowed values | synchronous 400 |
num_images, n, count, batch_size, number_of_images, or sync_mode: true | synchronous 400 |
A structured_prompt the model cannot parse (e.g. an object without relationship) | 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 image from output.media_url.
curl 'https://gateway.pixazo.ai/v2/requests/status/fibo-gen-1-5_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' \
-H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY'Completed response
{
"request_id": "fibo-gen-1-5_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "fibo-gen-1-5",
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/{request_id}/output.png"
],
"media_type": "image/png"
},
"created_at": "2026-09-21T11:00:12.102Z",
"completed_at": "2026-09-21T11:00:31.870Z"
}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 | URL of the generated image (PNG). |
| output.media_type | string | image/png. |
| 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 is per generated image, and every request generates exactly one, so the amount held when the request is submitted is the amount charged on completion. It does not depend on resolution, aspect ratio, or the number of reference images you send. If the request fails, the hold is released in full.
The current rate is shown in the pricing panel on this page.
BRIA FIBO Gen 1.5 API Pricing
BRIA FIBO Edit 1.5 API Documentation
Edit one to four reference images from a natural-language instruction with Bria's Fibo Edit 1.5 — commercially safe, multi-reference editing for object and character combinations, background replacement, style transfer and more. Asynchronous: submit returns a request_id; poll the status endpoint until the request is COMPLETED, then download the image from output.media_url.
POST https://gateway.pixazo.ai/fibo-edit-1-5/v1/editAuthentication
All requests require an API key passed via header.
| Header | Type | Required | Description |
|---|---|---|---|
| Ocp-Apim-Subscription-Key | string | Yes | Your API subscription key |
Edit - Fibo Edit 1.5
Request Code
POST https://gateway.pixazo.ai/fibo-edit-1-5/v1/edit
Content-Type: application/json
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
"instruction": "Make the sky a warm sunset orange.",
"image_urls": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/car_race.jpeg"
]
}import requests
url = "https://gateway.pixazo.ai/fibo-edit-1-5/v1/edit"
headers = {
"Content-Type": "application/json",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
"instruction": "Make the sky a warm sunset orange.",
"image_urls": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/car_race.jpeg"
]
}
resp = requests.post(url, json=data, headers=headers)
print(resp.json())const res = await fetch("https://gateway.pixazo.ai/fibo-edit-1-5/v1/edit", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
},
body: JSON.stringify({
"instruction": "Make the sky a warm sunset orange.",
"image_urls": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/car_race.jpeg"
]
})
});
console.log(await res.json());curl -X POST 'https://gateway.pixazo.ai/fibo-edit-1-5/v1/edit' \
-H 'Content-Type: application/json' \
-H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY' \
--data-raw '{"instruction": "Make the sky a warm sunset orange.", "image_urls": ["https://pub-582b7213209642b9b995c96c95a30381.r2.dev/car_race.jpeg"]}'Output
{
"request_id": "fibo-edit-1-5_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/fibo-edit-1-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/fibo-edit-1-5/v1/edit' \
-H 'Content-Type: application/json' \
-H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY' \
-H 'X-Webhook-URL: https://your-server.com/webhook' \
--data-raw '{"instruction": "Make the sky a warm sunset orange.", "image_urls": ["https://pub-582b7213209642b9b995c96c95a30381.r2.dev/car_race.jpeg"]}'Callback Payload (success)
{
"request_id": "fibo-edit-1-5_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "fibo-edit-1-5",
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/{request_id}/output.png"
],
"media_type": "image/png"
},
"created_at": "2026-09-21T11:00:12.102Z",
"completed_at": "2026-09-21T11:00:31.870Z"
}Failure callback shape
{
"request_id": "fibo-edit-1-5_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "fibo-edit-1-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 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 |
|---|---|---|---|---|---|
instruction | Conditional | string | — | free text | What to change. Required unless you send structured_instruction. Refer to references by position (“put the bottle from image 2 into the hand in image 1”). |
structured_instruction | Conditional | object | — | JSON instruction | A structured edit instruction, used verbatim when instruction is absent. Every completed request also produces the expanded instruction the model resolved. |
image_urls | Yes | array of strings | — | 1–4 https URLs | Reference images, in the order your instruction refers to them. Each must be a publicly reachable URL; the gateway fetches and re-hosts them before generation. |
mask_url | No | string | — | https URL | Optional mask for a single-reference edit: white = regenerate, black = keep. Must match the reference image's pixel size. |
aspect_ratio | No | string | — (keeps the first reference's ratio) | 1:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9 | With one reference the output always keeps that image's ratio. With two or more, omit to keep the first reference's ratio, or choose one of the listed values. |
seed | No | integer | 5555 | any integer | Random seed. The default is a fixed value, so identical inputs reproduce the same image — change it to get variations. |
Good to know
- Exactly one image is generated per request. There is no batch option:
num_images,n,count,batch_sizeandnumber_of_imagesare rejected. - Inputs that belong to the other Fibo Edit 1.5 operations (
person_image_url,garment_image_urls,product_image_urls) are rejected on this operation. - Image URLs must be
httpsand publicly reachable; the gateway fetches them before generation. sync_modeis not supported — the finished image is always delivered through the status endpoint.- Cost is per generated image; the current rate is in the pricing panel on this page.
Example Request
{
"instruction": "Make the sky a warm sunset orange.",
"image_urls": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/car_race.jpeg"
]
}Example Response
{
"request_id": "fibo-edit-1-5_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/fibo-edit-1-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 | Bad request — image_urls missing, empty or longer than 4, instruction and structured_instruction both missing, an input that belongs to another operation, or a batch field such as num_images. 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 image 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_urls missing, empty, or more than 4 entries | synchronous 400 |
instruction and structured_instruction both missing | synchronous 400 |
person_image_url, garment_image_urls or product_image_urls sent to this operation | synchronous 400 |
| A reference or mask URL that is not https, not reachable, or not an image | status: "ERROR" |
mask_url sent with more than one reference, or a mask whose size differs from the reference | 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 image from output.media_url.
curl 'https://gateway.pixazo.ai/v2/requests/status/fibo-edit-1-5_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' \
-H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY'Completed response
{
"request_id": "fibo-edit-1-5_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "fibo-edit-1-5",
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/{request_id}/output.png"
],
"media_type": "image/png"
},
"created_at": "2026-09-21T11:00:12.102Z",
"completed_at": "2026-09-21T11:00:31.870Z"
}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 | URL of the generated image (PNG). |
| output.media_type | string | image/png. |
| 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 is per generated image, and every request generates exactly one, so the amount held when the request is submitted is the amount charged on completion. It does not depend on resolution, aspect ratio, or the number of reference images you send. If the request fails, the hold is released in full.
The current rate is shown in the pricing panel on this page.
BRIA FIBO Edit 1.5 API Pricing
BRIA FIBO Edit 1.5 API Documentation
Dress a person photo in garments or accessories from one to three reference images, built on Bria's Fibo Edit 1.5. Supports multi-garment changes and keeps the person's aspect ratio by default. Asynchronous: submit returns a request_id; poll the status endpoint until the request is COMPLETED, then download the image from output.media_url.
POST https://gateway.pixazo.ai/fibo-edit-1-5/v1/virtual-try-onAuthentication
All requests require an API key passed via header.
| Header | Type | Required | Description |
|---|---|---|---|
| Ocp-Apim-Subscription-Key | string | Yes | Your API subscription key |
Virtual Try-On - Fibo Edit 1.5
Request Code
POST https://gateway.pixazo.ai/fibo-edit-1-5/v1/virtual-try-on
Content-Type: application/json
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
"person_image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/vt_human.jpg",
"garment_image_urls": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/vt_top.jpeg"
]
}import requests
url = "https://gateway.pixazo.ai/fibo-edit-1-5/v1/virtual-try-on"
headers = {
"Content-Type": "application/json",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
"person_image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/vt_human.jpg",
"garment_image_urls": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/vt_top.jpeg"
]
}
resp = requests.post(url, json=data, headers=headers)
print(resp.json())const res = await fetch("https://gateway.pixazo.ai/fibo-edit-1-5/v1/virtual-try-on", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
},
body: JSON.stringify({
"person_image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/vt_human.jpg",
"garment_image_urls": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/vt_top.jpeg"
]
})
});
console.log(await res.json());curl -X POST 'https://gateway.pixazo.ai/fibo-edit-1-5/v1/virtual-try-on' \
-H 'Content-Type: application/json' \
-H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY' \
--data-raw '{"person_image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/vt_human.jpg", "garment_image_urls": ["https://pub-582b7213209642b9b995c96c95a30381.r2.dev/vt_top.jpeg"]}'Output
{
"request_id": "fibo-edit-1-5_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/fibo-edit-1-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/fibo-edit-1-5/v1/virtual-try-on' \
-H 'Content-Type: application/json' \
-H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY' \
-H 'X-Webhook-URL: https://your-server.com/webhook' \
--data-raw '{"person_image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/vt_human.jpg", "garment_image_urls": ["https://pub-582b7213209642b9b995c96c95a30381.r2.dev/vt_top.jpeg"]}'Callback Payload (success)
{
"request_id": "fibo-edit-1-5_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "fibo-edit-1-5",
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/{request_id}/output.png"
],
"media_type": "image/png"
},
"created_at": "2026-09-21T11:00:12.102Z",
"completed_at": "2026-09-21T11:00:31.870Z"
}Failure callback shape
{
"request_id": "fibo-edit-1-5_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "fibo-edit-1-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 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 |
|---|---|---|---|---|---|
person_image_url | Yes | string | — | https URL | A photo of the person to dress. Publicly reachable URL; jpg, jpeg, png, webp, gif, avif, heic and heif are accepted. |
garment_image_urls | Yes | array of strings | — | 1–3 https URLs | The garments or accessories to put on the person, one image each. |
instruction | No | string | — | free text | Optional extra direction. It is appended to a built-in try-on instruction, so state only what is specific — which garment replaces what, what must stay unchanged — not “put the garment on the person”. |
aspect_ratio | No | string | — (keeps the source image's ratio) | 1:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9 | Output aspect ratio. Omit it to keep the aspect ratio of the source image. |
seed | No | integer | 5555 | any integer | Random seed. The default is a fixed value, so identical inputs reproduce the same image — change it to get variations. |
Good to know
- Exactly one image is generated per request. There is no batch option:
num_images,n,count,batch_sizeandnumber_of_imagesare rejected. - Inputs that belong to the other Fibo Edit 1.5 operations (
image_urls,mask_url,product_image_urls) are rejected on this operation. - Image URLs must be
httpsand publicly reachable; the gateway fetches them before generation. sync_modeis not supported — the finished image is always delivered through the status endpoint.- Cost is per generated image; the current rate is in the pricing panel on this page.
Example Request
{
"person_image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/vt_human.jpg",
"garment_image_urls": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/vt_top.jpeg"
]
}Example Response
{
"request_id": "fibo-edit-1-5_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/fibo-edit-1-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 | Bad request — person_image_url or garment_image_urls missing, more than 3 garment images, an input that belongs to another operation, or a batch field such as num_images. 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 image 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 |
|---|---|
person_image_url or garment_image_urls missing, or more than 3 garment images | synchronous 400 |
image_urls, mask_url or product_image_urls sent to this operation | synchronous 400 |
| A person or garment URL that is not https, 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 image from output.media_url.
curl 'https://gateway.pixazo.ai/v2/requests/status/fibo-edit-1-5_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' \
-H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY'Completed response
{
"request_id": "fibo-edit-1-5_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "fibo-edit-1-5",
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/{request_id}/output.png"
],
"media_type": "image/png"
},
"created_at": "2026-09-21T11:00:12.102Z",
"completed_at": "2026-09-21T11:00:31.870Z"
}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 | URL of the generated image (PNG). |
| output.media_type | string | image/png. |
| 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 is per generated image, and every request generates exactly one, so the amount held when the request is submitted is the amount charged on completion. It does not depend on resolution, aspect ratio, or the number of reference images you send. If the request fails, the hold is released in full.
The current rate is shown in the pricing panel on this page.
BRIA FIBO Edit 1.5 API Pricing
BRIA FIBO Edit 1.5 API Documentation
Edit a person photo so the subject holds or carries a product from one to three reference images, built on Bria's Fibo Edit 1.5. The person's identity, face, expression, clothing, pose and background stay unchanged; only the hands and arms are adjusted to hold the product. Asynchronous: submit returns a request_id; poll the status endpoint until the request is COMPLETED, then download the image from output.media_url.
POST https://gateway.pixazo.ai/fibo-edit-1-5/v1/product-holdingAuthentication
All requests require an API key passed via header.
| Header | Type | Required | Description |
|---|---|---|---|
| Ocp-Apim-Subscription-Key | string | Yes | Your API subscription key |
Product Holding - Fibo Edit 1.5
Request Code
POST https://gateway.pixazo.ai/fibo-edit-1-5/v1/product-holding
Content-Type: application/json
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
"person_image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/vt_human.jpg",
"product_image_urls": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/nano-banana.jpeg"
]
}import requests
url = "https://gateway.pixazo.ai/fibo-edit-1-5/v1/product-holding"
headers = {
"Content-Type": "application/json",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
"person_image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/vt_human.jpg",
"product_image_urls": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/nano-banana.jpeg"
]
}
resp = requests.post(url, json=data, headers=headers)
print(resp.json())const res = await fetch("https://gateway.pixazo.ai/fibo-edit-1-5/v1/product-holding", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
},
body: JSON.stringify({
"person_image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/vt_human.jpg",
"product_image_urls": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/nano-banana.jpeg"
]
})
});
console.log(await res.json());curl -X POST 'https://gateway.pixazo.ai/fibo-edit-1-5/v1/product-holding' \
-H 'Content-Type: application/json' \
-H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY' \
--data-raw '{"person_image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/vt_human.jpg", "product_image_urls": ["https://pub-582b7213209642b9b995c96c95a30381.r2.dev/nano-banana.jpeg"]}'Output
{
"request_id": "fibo-edit-1-5_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/fibo-edit-1-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/fibo-edit-1-5/v1/product-holding' \
-H 'Content-Type: application/json' \
-H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY' \
-H 'X-Webhook-URL: https://your-server.com/webhook' \
--data-raw '{"person_image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/vt_human.jpg", "product_image_urls": ["https://pub-582b7213209642b9b995c96c95a30381.r2.dev/nano-banana.jpeg"]}'Callback Payload (success)
{
"request_id": "fibo-edit-1-5_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "fibo-edit-1-5",
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/{request_id}/output.png"
],
"media_type": "image/png"
},
"created_at": "2026-09-21T11:00:12.102Z",
"completed_at": "2026-09-21T11:00:31.870Z"
}Failure callback shape
{
"request_id": "fibo-edit-1-5_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "fibo-edit-1-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 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 |
|---|---|---|---|---|---|
person_image_url | Yes | string | — | https URL | A photo of the person who will hold the product. Publicly reachable URL; jpg, jpeg, png, webp, gif, avif, heic and heif are accepted. |
product_image_urls | Yes | array of strings | — | 1–3 https URLs | Reference images of the product — packaging, a second angle, a companion item. |
instruction | No | string | — | free text | Optional extra direction, appended to a built-in product-holding instruction — e.g. which hand, or that the logo should face the camera. |
aspect_ratio | No | string | — (keeps the source image's ratio) | 1:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9 | Output aspect ratio. Omit it to keep the aspect ratio of the source image. |
seed | No | integer | 5555 | any integer | Random seed. The default is a fixed value, so identical inputs reproduce the same image — change it to get variations. |
Good to know
- Exactly one image is generated per request. There is no batch option:
num_images,n,count,batch_sizeandnumber_of_imagesare rejected. - Inputs that belong to the other Fibo Edit 1.5 operations (
image_urls,mask_url,garment_image_urls) are rejected on this operation. - Image URLs must be
httpsand publicly reachable; the gateway fetches them before generation. sync_modeis not supported — the finished image is always delivered through the status endpoint.- Cost is per generated image; the current rate is in the pricing panel on this page.
Example Request
{
"person_image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/vt_human.jpg",
"product_image_urls": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/nano-banana.jpeg"
]
}Example Response
{
"request_id": "fibo-edit-1-5_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/fibo-edit-1-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 | Bad request — person_image_url or product_image_urls missing, more than 3 product images, an input that belongs to another operation, or a batch field such as num_images. 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 image 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 |
|---|---|
person_image_url or product_image_urls missing, or more than 3 product images | synchronous 400 |
image_urls, mask_url or garment_image_urls sent to this operation | synchronous 400 |
| A person or product URL that is not https, 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 image from output.media_url.
curl 'https://gateway.pixazo.ai/v2/requests/status/fibo-edit-1-5_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' \
-H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY'Completed response
{
"request_id": "fibo-edit-1-5_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "fibo-edit-1-5",
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/{request_id}/output.png"
],
"media_type": "image/png"
},
"created_at": "2026-09-21T11:00:12.102Z",
"completed_at": "2026-09-21T11:00:31.870Z"
}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 | URL of the generated image (PNG). |
| output.media_type | string | image/png. |
| 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 is per generated image, and every request generates exactly one, so the amount held when the request is submitted is the amount charged on completion. It does not depend on resolution, aspect ratio, or the number of reference images you send. If the request fails, the hold is released in full.
The current rate is shown in the pricing panel on this page.
BRIA FIBO Edit 1.5 API Pricing
BRIA FIBO Preview API Documentation
https://gateway.pixazo.ai/bria-fibo-bbq-preview/v1/bria-fibo-bbq-preview-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 |
Bria Fibo BBQ Preview generate request - Bria Fibo BBQ Preview
Request Code
POST https://gateway.pixazo.ai/bria-fibo-bbq-preview/v1/bria-fibo-bbq-preview-request
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
"prompt": "A magnificent hot air balloon festival at sunrise, dozens of colorful balloons floating over a misty valley with rolling hills"
}
import requests
url = "https://gateway.pixazo.ai/bria-fibo-bbq-preview/v1/bria-fibo-bbq-preview-request"
headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
"prompt": "A magnificent hot air balloon festival at sunrise, dozens of colorful balloons floating over a misty valley with rolling hills"
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
fetch('https://gateway.pixazo.ai/bria-fibo-bbq-preview/v1/bria-fibo-bbq-preview-request', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Cache-Control': 'no-cache',
'Ocp-Apim-Subscription-Key': 'YOUR_SUBSCRIPTION_KEY'
},
body: JSON.stringify({
prompt: 'A magnificent hot air balloon festival at sunrise, dozens of colorful balloons floating over a misty valley with rolling hills'
})
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
curl -X POST "https://gateway.pixazo.ai/bria-fibo-bbq-preview/v1/bria-fibo-bbq-preview-request" \
-H "Content-Type: application/json" \
-H "Cache-Control: no-cache" \
-H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
--data-raw '{
"prompt": "A magnificent hot air balloon festival at sunrise, dozens of colorful balloons floating over a misty valley with rolling hills"
}'
Output
{
"request_id": "bria-fibo-bbq-preview_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/bria-fibo-bbq-preview_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Webhook (Optional)
Add the X-Webhook-URL header to your submit request to receive a POST callback when the job completes — no polling required.
Using curl? These are HTTP request headers — pass each with -H, e.g. -H "X-Webhook-URL: https://your-server.com/webhook/callback". Do not paste them as bare lines, and end every line of a multi-line command with \.
Webhook Headers
| Header | Required | Default | Description |
|---|---|---|---|
X-Webhook-URL | Yes (to enable) | — | HTTPS endpoint on your server that will receive the POST callback. Must respond 2xx within a few seconds (process async if needed). |
X-Webhook-Mode | No | terminal | terminal — fires once at the final status (COMPLETED/FAILED/ERROR). sync — fires on every poll cycle plus the terminal event, and caps the queue’s polling delay at 15s for tighter progress updates. |
Example: enable webhook
X-Webhook-URL: https://your-server.com/webhook/callback
X-Webhook-Mode: terminal
Callback Payload
Your endpoint receives a POST application/json with the same shape as the GET /v2/requests/status/{request_id} response. Example terminal callback (mode terminal):
{
"request_id": "bria-fibo-bbq-preview_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "bria-fibo-bbq-preview",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/bria-fibo-bbq-preview_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.png"
],
"media_type": "image/png"
},
"created_at": "2026-05-22T13:17:32.110Z",
"updated_at": "2026-05-22 13:19:23",
"completed_at": "2026-05-22 13:19:23"
}
Failure callback shape
{
"request_id": "bria-fibo-bbq-preview_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "bria-fibo-bbq-preview",
"error": "Description of the error",
"output": null,
"created_at": "...",
"updated_at": "...",
"completed_at": "..."
}
Delivery semantics
- terminal mode (default) — exactly one
POSTwhen the request reaches a terminal status. No callback duringPROCESSING. - sync mode —
POSTon every status poll (with delay capped at ~15s) plus a finalPOSTat terminal status. Use when you want progress updates. - Idempotency — use
request_idas your idempotency key. Network retries can deliver the same callback more than once; your handler must tolerate duplicates. - Response — respond
200 OKwithin a few seconds. The queue does not block on slow handlers, but persistent failures may stop further deliveries. - HTTPS required — plain
http://URLs are rejected.
Request Parameters - Bria Fibo BBQ Preview generate request
| Parameter | Required | Type | Default | Allowed values / range | Description |
|---|---|---|---|---|---|
| prompt | No | string | — | — | A detailed text description of the image you want. Be specific about subject, setting, lighting, camera and style for best results. Can be omitted if you supply structured_prompt instead. |
| negative_prompt | No | string | — | — | Text describing what to avoid in the image (for example "blurry, text, watermark"). Empty by default. |
| structured_prompt | No | object | — | — | JSON object giving granular, structured control instead of (or alongside) a plain prompt — fields such as short_description, objects, background_setting, lighting, photographic_characteristics, artistic_style and aesthetics. FIBO is JSON-native, so a structured prompt gives the most precise and reproducible control. |
| image_url | No | string | — | — | Publicly accessible URL of a reference image used to guide the generation. Leave empty for pure text-to-image. |
| aspect_ratio | No | string | 1:1 | "1:1", "2:3", "3:2", "3:4", "4:3", "4:5", "5:4", "9:16", "16:9" | The aspect ratio (shape) of the output image. Use "16:9" for widescreen, "9:16" for vertical/mobile and "1:1" for square. |
| seed | No | integer | 5555 | — | Random seed that controls the generation's randomness. FIBO uses a fixed default seed (5555), so identical inputs return the same image; change the seed to get a different variation. |
| steps_num | No | integer | 50 | 20–50 | Number of inference steps the model runs while generating. Higher values refine detail and quality but increase processing time; lower values are faster. |
| guidance_scale | No | integer | 5 | 3–5 | Controls how closely the output follows your prompt (prompt adherence). Whole numbers only (3, 4 or 5); decimals and values outside this range are rejected. Higher values stick more strictly to the prompt; lower values allow more creative variation. |
| sync_mode | No | boolean | false | true, false | If on, the finished image is sent back directly as a data URI instead of a hosted download link, and it is not stored in request history. Handy for quick tests; for normal use, leave it off to get a download link. |
Minimum Request
{
"prompt": "A magnificent hot air balloon festival at sunrise, dozens of colorful balloons floating over a misty valley with rolling hills"
}
Full Request (all options)
{
"prompt": "A magnificent hot air balloon festival at sunrise, dozens of colorful balloons floating over a misty valley with rolling hills",
"aspect_ratio": "16:9",
"seed": 5555,
"steps_num": 50,
"guidance_scale": 5
}
Response
{
"request_id": "bria-fibo-bbq-preview_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/bria-fibo-bbq-preview_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
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 Bria Fibo BBQ Preview generate request.
| Code | Meaning |
|---|---|
| 202 | Accepted — Request queued |
| 400 | Bad Request |
| 401 | Unauthorized |
| 403 | Forbidden |
| 404 | Not Found |
| 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 'bria-fibo-bbq-preview' not found or is disabled"
}
Error via Status/Webhook
{
"request_id": "bria-fibo-bbq-preview_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "bria-fibo-bbq-preview",
"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/bria-fibo-bbq-preview_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
Response (Completed)
{
"request_id": "bria-fibo-bbq-preview_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "bria-fibo-bbq-preview",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/bria-fibo-bbq-preview_019dxxxx-xxxx/output.ext"
],
"media_type": "application/octet-stream"
},
"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|null | 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.
BRIA FIBO Preview API Pricing
Bria RMBG 2.0 API Documentation
https://gateway.pixazo.ai/bria-rmbg-2-0-682/v1/bria-rmbg-2-0-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 |
BRIA RMBG 2.0 generate request - BRIA RMBG 2.0 API
Request Code
POST https://gateway.pixazo.ai/bria-rmbg-2-0-682/v1/bria-rmbg-2-0-request
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
"image_url": "https://storage.googleapis.com/generativeai-downloads/images/cat.jpg"
}
import requests
url = "https://gateway.pixazo.ai/bria-rmbg-2-0-682/v1/bria-rmbg-2-0-request"
headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
"image_url": "https://storage.googleapis.com/generativeai-downloads/images/cat.jpg"
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
fetch("https://gateway.pixazo.ai/bria-rmbg-2-0-682/v1/bria-rmbg-2-0-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://storage.googleapis.com/generativeai-downloads/images/cat.jpg"
})
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error("Error:", error));
curl -X POST "https://gateway.pixazo.ai/bria-rmbg-2-0-682/v1/bria-rmbg-2-0-request" \
-H "Content-Type: application/json" \
-H "Cache-Control: no-cache" \
-H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
--data-raw '{
"image_url": "https://storage.googleapis.com/generativeai-downloads/images/cat.jpg"
}'
Output
{
"request_id": "bria-rmbg-2-0-682_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/bria-rmbg-2-0-682_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Webhook (Optional)
Add the X-Webhook-URL header to your submit request to receive a POST callback when the job completes — no polling required.
Using curl? These are HTTP request headers — pass each with -H, e.g. -H "X-Webhook-URL: https://your-server.com/webhook/callback". Do not paste them as bare lines, and end every line of a multi-line command with \.
Webhook Headers
| Header | Required | Default | Description |
|---|---|---|---|
X-Webhook-URL | Yes (to enable) | — | HTTPS endpoint on your server that will receive the POST callback. Must respond 2xx within a few seconds (process async if needed). |
X-Webhook-Mode | No | terminal | terminal — fires once at the final status (COMPLETED/FAILED/ERROR). sync — fires on every poll cycle plus the terminal event, and caps the queue’s polling delay at 15s for tighter progress updates. |
Example: enable webhook
X-Webhook-URL: https://your-server.com/webhook/callback
X-Webhook-Mode: terminal
Callback Payload
Your endpoint receives a POST application/json with the same shape as the GET /v2/requests/status/{request_id} response. Example terminal callback (mode terminal):
{
"request_id": "bria-rmbg-2-0-682_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "bria-rmbg-2-0-682",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/bria-rmbg-2-0-682_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.png"
],
"media_type": "image/png"
},
"created_at": "2026-05-22T13:17:32.110Z",
"updated_at": "2026-05-22 13:19:23",
"completed_at": "2026-05-22 13:19:23"
}
Failure callback shape
{
"request_id": "bria-rmbg-2-0-682_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "bria-rmbg-2-0-682",
"error": "Description of the error",
"output": null,
"created_at": "...",
"updated_at": "...",
"completed_at": "..."
}
Delivery semantics
- terminal mode (default) — exactly one
POSTwhen the request reaches a terminal status. No callback duringPROCESSING. - sync mode —
POSTon every status poll (with delay capped at ~15s) plus a finalPOSTat terminal status. Use when you want progress updates. - Idempotency — use
request_idas your idempotency key. Network retries can deliver the same callback more than once; your handler must tolerate duplicates. - Response — respond
200 OKwithin a few seconds. The queue does not block on slow handlers, but persistent failures may stop further deliveries. - HTTPS required — plain
http://URLs are rejected.
Request Parameters - BRIA RMBG 2.0 generate request
| Parameter | Required | Type | Default | Allowed values / range | Description |
|---|---|---|---|---|---|
| image_url | Yes | string | — | — | URL of the input image from which the background will be removed. Must be publicly accessible. |
| sync_mode | No | boolean | false | true, false | If on, the finished image is sent back directly as a data URI instead of a hosted download link, and it is not stored in request history. 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 | Image to remove the background from. |
Minimum Request
{
"image_url": "https://storage.googleapis.com/generativeai-downloads/images/cat.jpg"
}
Full Request (all options)
{
"image_url": "https://storage.googleapis.com/generativeai-downloads/images/cat.jpg"
}
Response
{
"request_id": "bria-rmbg-2-0-682_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/bria-rmbg-2-0-682_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Request Headers
| Header | Value |
|---|---|
| Content-Type | application/json |
| Cache-Control | no-cache |
| Ocp-Apim-Subscription-Key | Your API subscription key |
Response Handling
Common status codes for BRIA RMBG 2.0 generate request.
| Code | Meaning |
|---|---|
| 202 | Accepted — Request queued |
| 400 | Bad Request |
| 401 | Unauthorized |
| 403 | Forbidden |
| 404 | Not Found |
| 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 'bria-rmbg-2-0-682' not found or is disabled"
}
Error via Status/Webhook
{
"request_id": "bria-rmbg-2-0-682_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "bria-rmbg-2-0-682",
"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/bria-rmbg-2-0-682_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
Response (Completed)
{
"request_id": "bria-rmbg-2-0-682_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "bria-rmbg-2-0-682",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/bria-rmbg-2-0-682_019dxxxx-xxxx/output.ext"
],
"media_type": "application/octet-stream"
},
"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|null | 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.
Bria RMBG 2.0 API Pricing
Bria VRMBG 3.0 API Documentation
https://gateway.pixazo.ai/bria-video-background-removal-v3/v1/bria-video-background-removal-v3-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 |
Bria Video Background Removal v3 generate request
Request Code
POST https://gateway.pixazo.ai/bria-video-background-removal-v3/v1/bria-video-background-removal-v3-request
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_API_KEY
{
"video_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/topaz-upscale-video-753_019ffb10-e9d5-7c30-d9d5-939714350af0c/output.mp4",
"output_container_and_codec": "webm_vp9",
"preserve_audio": true,
"background_color": "Transparent"
}
import requests
url = "https://gateway.pixazo.ai/bria-video-background-removal-v3/v1/bria-video-background-removal-v3-request"
headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_API_KEY"
}
data = {
"video_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/topaz-upscale-video-753_019ffb10-e9d5-7c30-d9d5-939714350af0c/output.mp4",
"output_container_and_codec": "webm_vp9",
"preserve_audio": true,
"background_color": "Transparent"
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
const url = "https://gateway.pixazo.ai/bria-video-background-removal-v3/v1/bria-video-background-removal-v3-request";
const headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_API_KEY"
};
const data = {
"video_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/topaz-upscale-video-753_019ffb10-e9d5-7c30-d9d5-939714350af0c/output.mp4",
"output_container_and_codec": "webm_vp9",
"preserve_audio": true,
"background_color": "Transparent"
};
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/bria-video-background-removal-v3/v1/bria-video-background-removal-v3-request" \
-H "Content-Type: application/json" \
-H "Cache-Control: no-cache" \
-H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
--data-raw '{
"video_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/topaz-upscale-video-753_019ffb10-e9d5-7c30-d9d5-939714350af0c/output.mp4",
"output_container_and_codec": "webm_vp9",
"preserve_audio": true,
"background_color": "Transparent"
}'
Output
{
"request_id": "bria-video-background-removal-v3_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/bria-video-background-removal-v3_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 - Bria Video Background Removal v3 generate request
| Parameter | Required | Type | Default | Allowed values / range | Description |
|---|---|---|---|---|---|
| video_url | Yes | string | — | — | URL of the input video to remove the background from. Must be publicly accessible. Accepted formats: mp4, mov, webm, m4v, gif. |
| output_container_and_codec | No | string | "webm_vp9" | "mp4_h265", "mp4_h264", "webm_vp9", "mov_h265", "mov_proresks", "mkv_h265", "mkv_h264", "mkv_vp9", "gif" | Container and codec of the output video. Pick an alpha-capable codec (for example webm_vp9 or mov_proresks) when background_color is Transparent. |
| preserve_audio | No | boolean | true | true, false | If true, the audio track of the input video is preserved in the output video. |
| background_color | No | string | "Black" | "Transparent", "Black", "White", "Gray", "Red", "Green", "Blue", "Yellow", "Cyan", "Magenta", "Orange" | Background color composited behind the extracted subject. Use Transparent to keep an alpha channel (requires an alpha-capable output codec). |
Content Item Types & Limits
| Type | Max | Format / Size | Description |
|---|---|---|---|
| video | 1 | MP4, MOV | Video to remove the background from. |
Example Request
{
"video_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/topaz-upscale-video-753_019ffb10-e9d5-7c30-d9d5-939714350af0c/output.mp4",
"output_container_and_codec": "webm_vp9",
"preserve_audio": true,
"background_color": "Transparent"
}
Response
{
"request_id": "bria-video-background-removal-v3_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/bria-video-background-removal-v3_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 'bria-video-background-removal-v3' not found or is disabled"
}
Error via Status/Webhook
{
"request_id": "bria-video-background-removal-v3_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "bria-video-background-removal-v3",
"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/bria-video-background-removal-v3_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
Response (Completed)
{
"request_id": "bria-video-background-removal-v3_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "bria-video-background-removal-v3",
"error": null,
"output": {
"media_url": ["https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/bria-video-background-removal-v3_019dxxxx/output.webm"],
"media_type": "video/webm"
},
"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.
Bria VRMBG 3.0 API Pricing
Bria VRMBG 3.0 API Documentation
https://gateway.pixazo.ai/bria-video-background-removal-green-screen-despill/v1
Authentication
All requests require an API key passed via header.
| Header | Type | Required | Description |
|---|---|---|---|
| Ocp-Apim-Subscription-Key | string | Yes | Your API subscription key |
Bria Video Background Removal Green Screen Despill generate request
Request Code
POST https://gateway.pixazo.ai/bria-video-background-removal-green-screen-despill/v1/bria-video-background-removal-green-screen-despill-request
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_API_KEY
{
"video_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/greenscreen_test_3s.mp4",
"spill_suppression": 1,
"preserve_audio": true,
"output_container_and_codec": "webm_vp9"
}
import requests
url = "https://gateway.pixazo.ai/bria-video-background-removal-green-screen-despill/v1/bria-video-background-removal-green-screen-despill-request"
headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_API_KEY"
}
data = {
"video_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/greenscreen_test_3s.mp4",
"spill_suppression": 1,
"preserve_audio": true,
"output_container_and_codec": "webm_vp9"
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
const url = "https://gateway.pixazo.ai/bria-video-background-removal-green-screen-despill/v1/bria-video-background-removal-green-screen-despill-request";
const headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_API_KEY"
};
const data = {
"video_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/greenscreen_test_3s.mp4",
"spill_suppression": 1,
"preserve_audio": true,
"output_container_and_codec": "webm_vp9"
};
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/bria-video-background-removal-green-screen-despill/v1/bria-video-background-removal-green-screen-despill-request" \
-H "Content-Type: application/json" \
-H "Cache-Control: no-cache" \
-H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
--data-raw '{
"video_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/greenscreen_test_3s.mp4",
"spill_suppression": 1,
"preserve_audio": true,
"output_container_and_codec": "webm_vp9"
}'
Output
{
"request_id": "bria-video-background-removal-green-screen-despill_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/bria-video-background-removal-green-screen-despill_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 - Bria Video Background Removal Green Screen Despill generate request
| Parameter | Required | Type | Default | Allowed values / range | Description |
|---|---|---|---|---|---|
| video_url | Yes | string | — | — | URL of the source video filmed on a green screen. Must be publicly accessible. |
| spill_suppression | No | number | 1 | 0 (disabled), 0.1–5 (increasing suppression) | Strength of green-spill suppression. Higher values remove more green fringe. |
| preserve_audio | No | boolean | true | — | If true, the original audio track is preserved in the output video. If false, audio is removed. |
| output_container_and_codec | No | string | "webm_vp9" | mp4_h265, mp4_h264, webm_vp9, mov_h265, mov_proresks, mkv_h265, mkv_h264, mkv_vp9, gif | Output container and codec. Use webm_vp9 or mov_proresks to retain transparency. Other codecs will fall back to black background. |
Example Request
{
"video_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/greenscreen_test_3s.mp4",
"spill_suppression": 1,
"preserve_audio": true,
"output_container_and_codec": "webm_vp9"
}
Response
{
"request_id": "bria-video-background-removal-green-screen-despill_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/bria-video-background-removal-green-screen-despill_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 'bria-video-background-removal-green-screen-despill' not found or is disabled"
}
Error via Status/Webhook
{
"request_id": "bria-video-background-removal-green-screen-despill_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "bria-video-background-removal-green-screen-despill",
"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/bria-video-background-removal-green-screen-despill_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
Response (Completed)
{
"request_id": "bria-video-background-removal-green-screen-despill_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "bria-video-background-removal-green-screen-despill",
"error": null,
"output": {
"media_url": ["https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/bria-video-background-removal-green-screen-despill_019dxxxx/output.webm"],
"media_type": "video/webm"
},
"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.