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.

Get API Key
Bria API

Models Version

WELCOME BONUS

Get 10% Cashback on Your First Payment (up to $500)

Add funds and get 10% cashback on your first payment (up to $500).

Claim Your Cashback →

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-background

Authentication

All requests require an API key passed via header.

HeaderTypeRequiredDescription
Ocp-Apim-Subscription-KeystringYesYour 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.

HeaderRequiredDescription
X-Webhook-URLTo enableHTTPS URL to receive the Webhook callback.
X-Webhook-ModeNoterminal (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 200 within a few seconds; the Webhook endpoint must be HTTPS.

Request Parameters

ParameterRequiredTypeDefaultAllowed values / rangeDescription
image_urlYesstring—A publicly reachable https URL (recommended), a base64 data URI or raw base64 image bytesThe photo to cut out.
promptNostringEmptyTextPlain 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.
autocropNobooleanfalsetrue, falseCrop the output canvas to the kept content.

Good to know

  • Each request returns one image. batch_size, num_images, number_of_images, n and count are rejected — send one request per image.
  • This API works on a single image and has no length setting. duration, seconds, num_frames, frames_per_second and music_length_ms are rejected.
  • Send every field at the top level of the JSON body; parameters, content and text are rejected.
  • Send the photo as image_url: a publicly reachable https URL (recommended), a base64 data URI or raw base64 image bytes. One photo per request.
  • image and image_urls are rejected: send one photo as image_url.
  • Leave prompt out 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 autocrop to true to crop the output canvas to the kept content.
  • Use the JSON types shown: image_url and prompt are strings, and autocrop is true or false (not "true").
  • Omit a field instead of sending null.
  • Results are always returned as a URL in output.media_url; sync_mode is accepted only as false.
  • Webhooks are set with the X-Webhook-URL / X-Webhook-Mode headers; webhook_url, webhook_mode and callback_url in the JSON body are rejected.
  • stream is 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.
  • autocrop set to true crops 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

HeaderRequiredDescription
Content-TypeYesapplication/json
Ocp-Apim-Subscription-KeyYesYour API subscription key.
X-Webhook-URLNoEnable Webhook callbacks (see Webhook section).
X-Webhook-ModeNoterminal (default) or sync (see Webhook section).

Response Handling

Status CodeMeaning
202Accepted — request queued; returns request_id and polling_url.
400Invalid 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.
401Unauthorized — missing or invalid subscription key.
402Insufficient balance for the hold this request needs.
429Too many requests.
500Internal 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.

ConditionHow it surfaces
Missing or invalid subscription keysynchronous 401
Balance too low for the holdsynchronous 402
Missing or empty image_url, image_url not a stringsynchronous 400
autocrop not true or false — for example the string "true"synchronous 400
prompt not a stringsynchronous 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 imagestatus: "ERROR"
A request the model refuses, for example under its content policystatus: "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_KEY

cURL 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

FieldTypeDescription
request_idstringUnique request identifier.
statusstringQUEUED, PROCESSING, COMPLETED or ERROR.
model_idstringThe model that handled the request — bria-guided-remove-background for this endpoint.
output.media_urlarray of stringsURL of the image (one PNG file per request).
output.media_typestringimage/png.
created_atstringRequest creation timestamp.
completed_atstringCompletion timestamp.
errorstringError message when status is ERROR.
polling_urlstringStatus URL for this request (submit response only).

Status Values & Flow

QUEUED → PROCESSING → COMPLETED (success) or ERROR (failure).

Typical workflow

  1. Send the request to POST https://gateway.pixazo.ai/bria-guided-remove-background/v1/remove-background.
  2. Save the request_id from the 202 response.
  3. Poll GET /v2/requests/status/{request_id} every 10 seconds or so, or use a Webhook instead.
  4. When status is COMPLETED, download the image from output.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

Your request will cost $0.03 per image.
2. BRIA FIBO Gen 1.5

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-image

Authentication

All requests require an API key passed via header.

HeaderTypeRequiredDescription
Ocp-Apim-Subscription-KeystringYesYour 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.

HeaderRequiredDescription
X-Webhook-URLTo enableHTTPS URL to receive the Webhook callback.
X-Webhook-ModeNoterminal (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 200 within a few seconds; the Webhook endpoint must be HTTPS.

Request Parameters

ParameterRequiredTypeDefaultAllowed values / rangeDescription
promptConditionalstring—free textWhat to generate. Required unless you send structured_prompt. There is no documented length limit.
structured_promptConditionalobject—JSON scene specificationA 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_ratioNostring1:11:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9Aspect ratio of the generated image.
resolutionNostring1MP1MP, 4MPOutput resolution class. 1MP is about one megapixel (1024×1024 at 1:1); 4MP is larger and takes longer. Both are billed the same.
seedNointeger5555any integerRandom 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_size and number_of_images are rejected.
  • This operation takes no input image.
  • Image URLs must be https and publicly reachable; the gateway fetches them before generation.
  • sync_mode is 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

HeaderRequiredDescription
Content-TypeYesapplication/json
Ocp-Apim-Subscription-KeyYesYour API subscription key.
X-Webhook-URLNoEnable Webhook callbacks (see Webhook section).

Response Handling

Status CodeMeaning
202Accepted — request queued; returns request_id and polling_url.
400Bad 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.
401Unauthorized — missing or invalid subscription key.
402Insufficient balance.
429Too many requests.
500Internal 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.

ConditionHow it surfaces
prompt and structured_prompt both missingsynchronous 400
aspect_ratio / resolution outside the allowed valuessynchronous 400
num_images, n, count, batch_size, number_of_images, or sync_mode: truesynchronous 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

FieldTypeDescription
request_idstringUnique request identifier.
statusstringQUEUED, PROCESSING, COMPLETED, FAILED, or ERROR.
model_idstringThe model that handled the request.
output.media_urlarrayURL of the generated image (PNG).
output.media_typestringimage/png.
created_atstringRequest creation timestamp.
completed_atstringCompletion timestamp.
errorstringError 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

Your request will cost $0.042 per image.
3. BRIA FIBO Edit 1.5

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/edit

Authentication

All requests require an API key passed via header.

HeaderTypeRequiredDescription
Ocp-Apim-Subscription-KeystringYesYour 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.

HeaderRequiredDescription
X-Webhook-URLTo enableHTTPS URL to receive the Webhook callback.
X-Webhook-ModeNoterminal (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 200 within a few seconds; the Webhook endpoint must be HTTPS.

Request Parameters

ParameterRequiredTypeDefaultAllowed values / rangeDescription
instructionConditionalstring—free textWhat 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_instructionConditionalobject—JSON instructionA structured edit instruction, used verbatim when instruction is absent. Every completed request also produces the expanded instruction the model resolved.
image_urlsYesarray of strings—1–4 https URLsReference 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_urlNostring—https URLOptional mask for a single-reference edit: white = regenerate, black = keep. Must match the reference image's pixel size.
aspect_ratioNostring— (keeps the first reference's ratio)1:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9With 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.
seedNointeger5555any integerRandom 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_size and number_of_images are 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 https and publicly reachable; the gateway fetches them before generation.
  • sync_mode is 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

HeaderRequiredDescription
Content-TypeYesapplication/json
Ocp-Apim-Subscription-KeyYesYour API subscription key.
X-Webhook-URLNoEnable Webhook callbacks (see Webhook section).

Response Handling

Status CodeMeaning
202Accepted — request queued; returns request_id and polling_url.
400Bad 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.
401Unauthorized — missing or invalid subscription key.
402Insufficient balance.
429Too many requests.
500Internal 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.

ConditionHow it surfaces
image_urls missing, empty, or more than 4 entriessynchronous 400
instruction and structured_instruction both missingsynchronous 400
person_image_url, garment_image_urls or product_image_urls sent to this operationsynchronous 400
A reference or mask URL that is not https, not reachable, or not an imagestatus: "ERROR"
mask_url sent with more than one reference, or a mask whose size differs from the referencestatus: "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

FieldTypeDescription
request_idstringUnique request identifier.
statusstringQUEUED, PROCESSING, COMPLETED, FAILED, or ERROR.
model_idstringThe model that handled the request.
output.media_urlarrayURL of the generated image (PNG).
output.media_typestringimage/png.
created_atstringRequest creation timestamp.
completed_atstringCompletion timestamp.
errorstringError 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

Your request will cost $0.042 per image.
Image to Image (Virtual Try On)

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-on

Authentication

All requests require an API key passed via header.

HeaderTypeRequiredDescription
Ocp-Apim-Subscription-KeystringYesYour 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.

HeaderRequiredDescription
X-Webhook-URLTo enableHTTPS URL to receive the Webhook callback.
X-Webhook-ModeNoterminal (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 200 within a few seconds; the Webhook endpoint must be HTTPS.

Request Parameters

ParameterRequiredTypeDefaultAllowed values / rangeDescription
person_image_urlYesstring—https URLA photo of the person to dress. Publicly reachable URL; jpg, jpeg, png, webp, gif, avif, heic and heif are accepted.
garment_image_urlsYesarray of strings—1–3 https URLsThe garments or accessories to put on the person, one image each.
instructionNostring—free textOptional 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_ratioNostring— (keeps the source image's ratio)1:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9Output aspect ratio. Omit it to keep the aspect ratio of the source image.
seedNointeger5555any integerRandom 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_size and number_of_images are 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 https and publicly reachable; the gateway fetches them before generation.
  • sync_mode is 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

HeaderRequiredDescription
Content-TypeYesapplication/json
Ocp-Apim-Subscription-KeyYesYour API subscription key.
X-Webhook-URLNoEnable Webhook callbacks (see Webhook section).

Response Handling

Status CodeMeaning
202Accepted — request queued; returns request_id and polling_url.
400Bad 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.
401Unauthorized — missing or invalid subscription key.
402Insufficient balance.
429Too many requests.
500Internal 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.

ConditionHow it surfaces
person_image_url or garment_image_urls missing, or more than 3 garment imagessynchronous 400
image_urls, mask_url or product_image_urls sent to this operationsynchronous 400
A person or garment URL that is not https, not reachable, or not an imagestatus: "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

FieldTypeDescription
request_idstringUnique request identifier.
statusstringQUEUED, PROCESSING, COMPLETED, FAILED, or ERROR.
model_idstringThe model that handled the request.
output.media_urlarrayURL of the generated image (PNG).
output.media_typestringimage/png.
created_atstringRequest creation timestamp.
completed_atstringCompletion timestamp.
errorstringError 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

Your request will cost $0.042 per image.
Image to Image (Product Holding)

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-holding

Authentication

All requests require an API key passed via header.

HeaderTypeRequiredDescription
Ocp-Apim-Subscription-KeystringYesYour 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.

HeaderRequiredDescription
X-Webhook-URLTo enableHTTPS URL to receive the Webhook callback.
X-Webhook-ModeNoterminal (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 200 within a few seconds; the Webhook endpoint must be HTTPS.

Request Parameters

ParameterRequiredTypeDefaultAllowed values / rangeDescription
person_image_urlYesstring—https URLA 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_urlsYesarray of strings—1–3 https URLsReference images of the product — packaging, a second angle, a companion item.
instructionNostring—free textOptional extra direction, appended to a built-in product-holding instruction — e.g. which hand, or that the logo should face the camera.
aspect_ratioNostring— (keeps the source image's ratio)1:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9Output aspect ratio. Omit it to keep the aspect ratio of the source image.
seedNointeger5555any integerRandom 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_size and number_of_images are 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 https and publicly reachable; the gateway fetches them before generation.
  • sync_mode is 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

HeaderRequiredDescription
Content-TypeYesapplication/json
Ocp-Apim-Subscription-KeyYesYour API subscription key.
X-Webhook-URLNoEnable Webhook callbacks (see Webhook section).

Response Handling

Status CodeMeaning
202Accepted — request queued; returns request_id and polling_url.
400Bad 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.
401Unauthorized — missing or invalid subscription key.
402Insufficient balance.
429Too many requests.
500Internal 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.

ConditionHow it surfaces
person_image_url or product_image_urls missing, or more than 3 product imagessynchronous 400
image_urls, mask_url or garment_image_urls sent to this operationsynchronous 400
A person or product URL that is not https, not reachable, or not an imagestatus: "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

FieldTypeDescription
request_idstringUnique request identifier.
statusstringQUEUED, PROCESSING, COMPLETED, FAILED, or ERROR.
model_idstringThe model that handled the request.
output.media_urlarrayURL of the generated image (PNG).
output.media_typestringimage/png.
created_atstringRequest creation timestamp.
completed_atstringCompletion timestamp.
errorstringError 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

Your request will cost $0.042 per image.
4. BRIA FIBO Preview

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

HeaderRequiredDefaultDescription
X-Webhook-URLYes (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-ModeNoterminalterminal — 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 POST when the request reaches a terminal status. No callback during PROCESSING.
  • sync mode — POST on every status poll (with delay capped at ~15s) plus a final POST at terminal status. Use when you want progress updates.
  • Idempotency — use request_id as your idempotency key. Network retries can deliver the same callback more than once; your handler must tolerate duplicates.
  • Response — respond 200 OK within 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

ParameterRequiredTypeDefaultAllowed values / rangeDescription
promptNostring——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_promptNostring——Text describing what to avoid in the image (for example "blurry, text, watermark"). Empty by default.
structured_promptNoobject——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_urlNostring——Publicly accessible URL of a reference image used to guide the generation. Leave empty for pure text-to-image.
aspect_ratioNostring1: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.
seedNointeger5555—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_numNointeger5020–50Number of inference steps the model runs while generating. Higher values refine detail and quality but increase processing time; lower values are faster.
guidance_scaleNointeger53–5Controls 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_modeNobooleanfalsetrue, falseIf 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
Bad Request
401 Unauthorized
403 Forbidden
404 Not Found
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

FieldTypeDescription
request_idstringUnique request identifier
statusstringQUEUED, PROCESSING, COMPLETED, FAILED, or ERROR
model_idstringModel that processed the request
errorstring|nullError message if failed
output.media_urlarrayURLs to generated media (R2 CDN)
output.media_typestringMIME type of the output
created_atstringWhen request was created
completed_atstring|nullWhen request completed
polling_urlstringStatus URL (initial response only)

Status Values

StatusDescription
QUEUEDRequest accepted, waiting to be processed
PROCESSINGBeing processed by the model
COMPLETEDDone — output contains the result
FAILEDFailed — check error field
ERRORSystem error — not charged

Status Flow

QUEUED → PROCESSING → COMPLETED
                    → FAILED
                    → ERROR

Typical Workflow

  1. Send a generate request to the API endpoint
  2. Save the request_id from the response
  3. Poll every 5-10 seconds: GET /v2/requests/status/{request_id}
  4. When status is "COMPLETED", download from output.media_url

Tip: Use X-Webhook-URL header to get a callback instead of polling.

BRIA FIBO Preview API Pricing

Your request will cost $0.04 per image.
5. Bria RMBG 2.0

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

HeaderRequiredDefaultDescription
X-Webhook-URLYes (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-ModeNoterminalterminal — 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 POST when the request reaches a terminal status. No callback during PROCESSING.
  • sync mode — POST on every status poll (with delay capped at ~15s) plus a final POST at terminal status. Use when you want progress updates.
  • Idempotency — use request_id as your idempotency key. Network retries can deliver the same callback more than once; your handler must tolerate duplicates.
  • Response — respond 200 OK within 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

ParameterRequiredTypeDefaultAllowed values / rangeDescription
image_urlYesstring——URL of the input image from which the background will be removed. Must be publicly accessible.
sync_modeNobooleanfalsetrue, falseIf 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

TypeMaxFormat / SizeDescription
image1JPG, PNG, WEBPImage 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
Bad Request
401 Unauthorized
403 Forbidden
404 Not Found
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

FieldTypeDescription
request_idstringUnique request identifier
statusstringQUEUED, PROCESSING, COMPLETED, FAILED, or ERROR
model_idstringModel that processed the request
errorstring|nullError message if failed
output.media_urlarrayURLs to generated media (R2 CDN)
output.media_typestringMIME type of the output
created_atstringWhen request was created
completed_atstring|nullWhen request completed
polling_urlstringStatus URL (initial response only)

Status Values

StatusDescription
QUEUEDRequest accepted, waiting to be processed
PROCESSINGBeing processed by the model
COMPLETEDDone — output contains the result
FAILEDFailed — check error field
ERRORSystem error — not charged

Status Flow

QUEUED → PROCESSING → COMPLETED
                    → FAILED
                    → ERROR

Typical Workflow

  1. Send a generate request to the API endpoint
  2. Save the request_id from the response
  3. Poll every 5-10 seconds: GET /v2/requests/status/{request_id}
  4. When status is "COMPLETED", download from output.media_url

Tip: Use X-Webhook-URL header to get a callback instead of polling.

Bria RMBG 2.0 API Pricing

Your request will cost $0.018 per image.
6. Bria VRMBG 3.0

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.

HeaderTypeRequiredDescription
Ocp-Apim-Subscription-KeystringYesYour 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_urlYesstring——URL of the input video to remove the background from. Must be publicly accessible. Accepted formats: mp4, mov, webm, m4v, gif.
output_container_and_codecNostring"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_audioNobooleantruetrue, falseIf true, the audio track of the input video is preserved in the output video.
background_colorNostring"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

TypeMaxFormat / SizeDescription
video1MP4, MOVVideo 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-Typeapplication/json
Cache-Controlno-cache
Ocp-Apim-Subscription-KeyYOUR_API_KEY

Response Handling

Common status codes.

CodeMeaning
202Accepted — Request queued
Bad Request
401Unauthorized
402Insufficient Balance
403Forbidden
Too Many Requests
500Internal 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

FieldTypeDescription
request_idstringUnique request identifier
statusstringQUEUED, PROCESSING, COMPLETED, FAILED, or ERROR
model_idstringModel that processed the request
errorstring|nullError message if failed
output.media_urlarrayURLs to generated media (R2 CDN)
output.media_typestringMIME type of the output
created_atstringWhen request was created
completed_atstringWhen request completed
polling_urlstringStatus URL (initial response only)

Status Values

StatusDescription
QUEUEDRequest accepted, waiting to be processed
PROCESSINGBeing processed by the model
COMPLETEDDone — output contains the result
FAILEDFailed — check error field
ERRORSystem error — not charged

Status Flow

QUEUED → PROCESSING → COMPLETED
                    → FAILED
                    → ERROR

Typical Workflow

  1. Send a generate request to the API endpoint
  2. Save the request_id from the response
  3. Poll every 5-10 seconds: GET /v2/requests/status/{request_id}
  4. When status is "COMPLETED", download from output.media_url

Tip: Use X-Webhook-URL header to get a callback instead of polling.

Bria VRMBG 3.0 API Pricing

Your request will cost $0.05 per second of video.
about $0.03 for a 6-second clip
equivalent to $0.25 per minute of video
Video to Video (Green Screen Despill)

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.

HeaderTypeRequiredDescription
Ocp-Apim-Subscription-KeystringYesYour 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_urlYesstring——URL of the source video filmed on a green screen. Must be publicly accessible.
spill_suppressionNonumber10 (disabled), 0.1–5 (increasing suppression)Strength of green-spill suppression. Higher values remove more green fringe.
preserve_audioNobooleantrue—If true, the original audio track is preserved in the output video. If false, audio is removed.
output_container_and_codecNostring"webm_vp9"mp4_h265, mp4_h264, webm_vp9, mov_h265, mov_proresks, mkv_h265, mkv_h264, mkv_vp9, gifOutput 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-Typeapplication/json
Cache-Controlno-cache
Ocp-Apim-Subscription-KeyYOUR_API_KEY

Response Handling

Common status codes.

CodeMeaning
202Accepted — Request queued
Bad Request
401Unauthorized
402Insufficient Balance
403Forbidden
Too Many Requests
500Internal 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

FieldTypeDescription
request_idstringUnique request identifier
statusstringQUEUED, PROCESSING, COMPLETED, FAILED, or ERROR
model_idstringModel that processed the request
errorstring|nullError message if failed
output.media_urlarrayURLs to generated media (R2 CDN)
output.media_typestringMIME type of the output
created_atstringWhen request was created
completed_atstringWhen request completed
polling_urlstringStatus URL (initial response only)

Status Values

StatusDescription
QUEUEDRequest accepted, waiting to be processed
PROCESSINGBeing processed by the model
COMPLETEDDone — output contains the result
FAILEDFailed — check error field
ERRORSystem error — not charged

Status Flow

QUEUED → PROCESSING → COMPLETED
                    → FAILED
                    → ERROR

Typical Workflow

  1. Send a generate request to the API endpoint
  2. Save the request_id from the response
  3. Poll every 5-10 seconds: GET /v2/requests/status/{request_id}
  4. When status is "COMPLETED", download from output.media_url

Tip: Use X-Webhook-URL header to get a callback instead of polling.

Bria VRMBG 3.0 API Pricing

Your request will cost $0.05 per second of source video.
about $0.30 for a 6-second clip
equivalent to $3.00 per minute of video