# Bria Expand (FIBO-Edit-1.5) API

> Công cụ mở rộng ảnh, kéo dài hình ảnh sang tỷ lệ khung hình mới hoặc canvas tùy chỉnh dưới 25 megapixel

Mở rộng hình ảnh vượt ra ngoài các đường biên. Chọn một trong chín giá trị `aspect_ratio`, hoặc xác định `canvas_size` dạng [width, height] với diện tích dưới 25 megapixel, cùng `original_image_size` và `original_image_location`. `prompt` tùy chọn mô tả vùng mới. `retain_original_quality` và `preserve_alpha` được bật mặc định, còn `return_model_output` dùng cho chẩn đoán.

- Model id: `bria/fibo-edit-1.5/expand`
- Made by: Bria AI
- Category: Image Editing
- Output: image
- Price: $0.04 / image (cheapest run $0.04 (40 API credits))
- Run: `POST https://api.doitong.ru/v1/run/bria/fibo-edit-1.5/expand`
- Quote: `POST https://api.doitong.ru/v1/quote/bria/fibo-edit-1.5/expand`
- Docs page: https://doitong.com/vi/developers/models/bria/fibo-edit-1.5/expand

## Pricing

Price: **$0.04 / image**. Billed per generated image.

The full example input below costs $0.04 = 40 API credits (1 image × 40 API credits).

Prices are the upstream price in USD, paid from the API balance in API credits (1000 API credits = 1 USD). `POST https://api.doitong.ru/v1/quote/bria/fibo-edit-1.5/expand` with the same JSON body returns the exact price for that input; the quote is exactly what a run charges. Invalid input is never charged and failed or canceled requests are refunded automatically.

## Input parameters

Send either the canonical name or the native field name (not both). Canonical names are the same across models.

| Parameter | Canonical name | Type | Required | Default | Allowed values / range | Description |
|---|---|---|---|---|---|---|
| `image_url` | `image` | string (image URL) | yes |  |  | Hình ảnh để mở rộng, được cung cấp dưới dạng tệp hoặc URL. |
| `canvas_size` |  | array of integer \| null | no |  | 2 – 2 items | Kích thước hình ảnh mở rộng đi kèm với 'original_image_location'. Chỉ định [width, height] cho canvas cuối, giữ diện tích dưới 25 megapixel. |
| `aspect_ratio` |  | enum (string) \| null | no |  | `1:1`, `2:3`, `3:2`, `3:4`, `4:3`, `4:5`, `5:4`, `9:16`, `16:9` | Thiết lập tỷ lệ hình ảnh cuối để căn giữa hình ảnh gốc và mở rộng canvas xung quanh. Việc chỉ định tham số này được ưu tiên hơn cả 'original_image_size' và 'original_image_location'. |
| `original_image_size` |  | array of integer \| null | no |  | 2 – 2 items | Kích thước mục tiêu [width, height] của hình ảnh gốc trong canvas. Cung cấp 'aspect_ratio' sẽ ghi đè thiết lập này; nếu không, hình ảnh được đổi kích thước theo các kích thước này trước khi đặt. |
| `original_image_location` |  | array of integer \| null | no |  | 2 – 2 items | Tọa độ đặt [x, y] cho góc trên bên trái của hình ảnh gốc, bị bỏ qua khi cung cấp 'aspect_ratio'. Cho phép đặt vượt ngoài ranh giới canvas và cắt hình ảnh gốc. |
| `prompt` |  | string \| null | no |  |  | Mô tả tùy chọn về nội dung cho vùng được thêm. Điều chỉnh canvas đơn giản thường không cần mô tả: bỏ qua tham số này yêu cầu mô hình chỉ mở rộng hình ảnh hiện có. |
| `seed` |  | integer \| null | no |  | 0 – 2,147,483,647 | Seed tạo ngẫu nhiên, luôn được đưa vào phản hồi dù được cung cấp ở đây hay được chọn ngẫu nhiên khi bỏ qua. Giá trị từ phản hồi trước đó có thể tái tạo kết quả của phản hồi đó. |
| `negative_prompt` |  | string \| null | no |  |  | Kiểm tra tương thích cho các yêu cầu được viết cho route SDXL expansion API: cung cấp đầu vào không được hỗ trợ này sẽ kích hoạt từ chối rõ ràng để giá trị không bị mất âm thầm. Thay vào đó, dùng 'prompt'. |
| `retain_original_quality` |  | boolean | no | `true` |  | Bật để giữ các pixel gốc được bảo vệ bởi mặt nạ ở độ phân giải đầy đủ mà không lấy mẫu lại. Mô hình tạo sinh ở khoảng một megapixel, sau đó nâng cấp cho canvas lớn hơn. Tắt tùy chọn này khiến kết quả mềm đồng đều, có thể che đường nối trên nền có kết cấu. |
| `preserve_alpha` |  | boolean | no | `true` |  | Bảo toàn độ trong suốt đầu vào bằng cách mở rộng kênh alpha gốc qua sao chép cạnh khi cần để mở rộng đối tượng tách. Vì tạo sinh hoạt động trong RGB, mô hình không tạo alpha. Tắt để nhận đầu ra RGB đã làm phẳng. |
| `return_model_output` |  | boolean | no | `false` |  | Trả về thêm một khung hình chẩn đoán để phân biệt lỗi mô hình với lỗi ghép ảnh mà không thay đổi hình ảnh cuối. Khung hình này hiển thị kết quả của mô hình trước khi chèn lại hình ảnh gốc và hòa trộn đường nối; mọi lỗi biên đã nhìn thấy trong khung này là lỗi tạo sinh, không phải lỗi hậu xử lý. |

File parameters (`image`) take a public `https://` URL, a `data:` URI up to 10 MB, or the `file_url` of an upload from `POST /files`.

## Example input

Required parameters only:

```json
{
  "image": "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg"
}
```

A fuller example:

```json
{
  "image_url": "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg"
}
```

## Run it

Set `DOITONG_API_KEY` to a key from https://doitong.com/developers/dashboard#keys. `?wait=20` returns the finished request in the same call when it is ready within 20 seconds; otherwise poll `GET /requests/{id}` (it also accepts `?wait=`), or pass `webhook_url`.

### curl

```bash
# Run the model; wait up to 20 s for the finished result in the same call
curl -X POST "https://api.doitong.ru/v1/run/bria/fibo-edit-1.5/expand?wait=20" \
  -H "Authorization: Bearer $DOITONG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "image_url": "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg"
  }'

# Still "queued" or "running"? Poll with the id from the response:
curl "https://api.doitong.ru/v1/requests/REQUEST_ID?wait=20" \
  -H "Authorization: Bearer $DOITONG_API_KEY"
```

### JavaScript

```javascript
const API = "https://api.doitong.ru/v1";
const headers = {
  "Authorization": "Bearer " + process.env.DOITONG_API_KEY,
  "Content-Type": "application/json",
};

// Run the model; wait up to 20 s for the finished result in the same call
let res = await fetch(API + "/run/bria/fibo-edit-1.5/expand?wait=20", {
  method: "POST",
  headers,
  body: JSON.stringify({
    "image_url": "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg"
  }),
});
let request = await res.json();
if (!res.ok) throw new Error(request.error.code + ": " + request.error.message);

// Not finished yet: long-poll until it is
while (request.status === "queued" || request.status === "running") {
  res = await fetch(API + "/requests/" + request.id + "?wait=20", { headers });
  request = await res.json();
}
if (request.status !== "succeeded") throw new Error(JSON.stringify(request.error));
console.log(request.outputs.map((o) => o.url), request.cost.credits + " API credits ($" + request.cost.usd + ")");
```

### Python

```python
import os
import requests

API = "https://api.doitong.ru/v1"
headers = {"Authorization": "Bearer " + os.environ["DOITONG_API_KEY"]}

payload = {
    "image_url": "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg",
}

# Run the model; wait up to 20 s for the finished result in the same call
r = requests.post(API + "/run/bria/fibo-edit-1.5/expand", params={"wait": 20}, json=payload, headers=headers)
request = r.json()
if not r.ok:
    raise RuntimeError(request["error"]["code"] + ": " + request["error"]["message"])

# Not finished yet: long-poll until it is
while request["status"] in ("queued", "running"):
    request = requests.get(API + "/requests/" + request["id"], params={"wait": 20}, headers=headers).json()
if request["status"] != "succeeded":
    raise RuntimeError(request["error"])
print([o["url"] for o in request["outputs"]], request["cost"]["credits"], "API credits", "$" + request["cost"]["usd"])
```

### MCP

The MCP server at `https://api.doitong.ru/v1/mcp` exposes the tools `search_models`, `get_model`, `quote`, `run`, `get_request`, `cancel_request`, `list_requests`, `create_upload` and `get_account`. A `run` call for this model:

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "run",
    "arguments": {
      "model_id": "bria/fibo-edit-1.5/expand",
      "input": {
        "image_url": "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg"
      },
      "wait_seconds": 20
    }
  }
}
```

## Response

Every call returns a request object. `status` is one of `queued`, `running`, `succeeded`, `failed`, `canceled`. `outputs` lists the generated files with URLs on our storage (kept forever, or 7 days with `?storage=temporary`; `storage` says which); `output` is the model's own result object with the same URLs.

```json
{
  "id": "req_8k2m4q7x1z9c3v5b6n0p2r4t",
  "object": "request",
  "model": "bria/fibo-edit-1.5/expand",
  "status": "succeeded",
  "created_at": "2026-10-20T12:00:00Z",
  "started_at": "2026-10-20T12:00:02Z",
  "completed_at": "2026-10-20T12:00:09Z",
  "queue_position": null,
  "cost": {
    "credits": 40,
    "usd": "0.04",
    "charged": 40,
    "refunded": 0
  },
  "input": {
    "image_url": "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg"
  },
  "output": {
    "image": {
      "url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.jpeg",
      "content_type": "image/jpeg",
      "file_name": "0-output.jpeg",
      "file_size": 1843200,
      "width": 1024,
      "height": 768
    },
    "seed": 42,
    "structured_instruction": {},
    "model_output": {
      "url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.jpeg",
      "content_type": "image/jpeg",
      "file_name": "0-output.jpeg",
      "file_size": 1843200,
      "width": 1024,
      "height": 768
    }
  },
  "outputs": [
    {
      "type": "image",
      "url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.jpeg",
      "content_type": "image/jpeg",
      "file_size": 1843200,
      "width": 1024,
      "height": 768,
      "stored": true
    }
  ],
  "error": null,
  "metrics": {
    "inference_seconds": 6.8
  },
  "urls": {
    "self": "https://api.doitong.ru/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t",
    "cancel": "https://api.doitong.ru/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t/cancel"
  }
}
```

### Output fields (`output`)

| Field | Type | Description |
|---|---|---|
| `image` | object {url, content_type, file_name, file_size, width, height} | Hình ảnh là kết quả mở rộng. |
| `seed` | integer | Seed được áp dụng trong quá trình tạo sinh, cho phép tái tạo kết quả. |
| `structured_instruction` | object | Lời nhắc có cấu trúc dùng để điều kiện hóa mô hình. |
| `model_output` | object {url, content_type, file_name, file_size, width, height} \| null | Khung hình chưa ghép chỉ được đưa vào khi bật 'return_model_output'. Khung hình có kích thước canvas được yêu cầu và chứa đầu ra của mô hình mà không có nội dung được dán hoặc hòa trộn. |

## Related models

- [Bria Product Holding (FIBO-Edit-1.5)](https://doitong.com/developers/models/bria/fibo-edit-1.5/product-holding.md) (`bria/fibo-edit-1.5/product-holding`): $0.04 / image
- [Bria Virtual Try-On (FIBO-Edit-1.5)](https://doitong.com/developers/models/bria/fibo-edit-1.5/virtual-try-on.md) (`bria/fibo-edit-1.5/virtual-try-on`): $0.04 / image
- [Fibo Edit 1.5 Image Editing](https://doitong.com/developers/models/bria/fibo-edit-1.5/edit.md) (`bria/fibo-edit-1.5/edit`): $0.04 / image
- [FLUX.1 Kontext \[pro\]](https://doitong.com/developers/models/flux-pro/kontext.md) (`flux-pro/kontext`): $0.04 / image
- [GPT Image 2.5 Edit](https://doitong.com/developers/models/openai/gpt-image-2.5/flare/edit.md) (`openai/gpt-image-2.5/flare/edit`): from $0.12 / image
- [Nano Banana 2 Edit](https://doitong.com/developers/models/nano-banana-2/edit.md) (`nano-banana-2/edit`): from $0.06 / image
- [Nano Banana Pro Edit](https://doitong.com/developers/models/nano-banana-pro/edit.md) (`nano-banana-pro/edit`): from $0.15 / image
- [Qwen Image 3 Edit](https://doitong.com/developers/models/alibaba/qwen-image-3/edit.md) (`alibaba/qwen-image-3/edit`): from $0.04 / image

## Links

- HTML page: https://doitong.com/developers/models/bria/fibo-edit-1.5/expand
- All models and guides for AI agents: https://doitong.com/developers/llms.txt
- OpenAPI 3.1 with this model's typed request body: https://doitong.com/developers/openapi.json?model=bria/fibo-edit-1.5/expand
- Errors: https://doitong.com/developers/docs/errors
- Model details as JSON: https://api.doitong.ru/v1/models/bria/fibo-edit-1.5/expand
