# Fibo 2.0 Edit API

> ویرایشگر مبتنی بر دستور برای 1 تا 4 تصویر، با ماسک اختیاری برای ویرایش ناحیه‌ای یک تصویر

یک تا چهار تصویر موجود در `image_urls` را ویرایش می‌کند؛ `instruction` با ارجاع به آن‌ها به‌شکل <image_1>، <image_2> و مانند آن نوشته می‌شود. برای تعویض پس‌زمینه و بازچینی محصول کاربرد دارد. `mask_url` در درخواست‌های تک‌تصویری ویرایش را به یک ناحیه محدود می‌کند. `aspect_ratio` دارای 16 مقدار است و می‌توان یک سند ساختاریافتهٔ `vgl` را ارسال یا دوباره استفاده کرد.

- Model id: `bria/fibo-2/edit`
- 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.com/v1/run/bria/fibo-2/edit`
- Quote: `POST https://api.doitong.com/v1/quote/bria/fibo-2/edit`
- Docs page: https://doitong.com/fa/developers/models/bria/fibo-2/edit

## 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.com/v1/quote/bria/fibo-2/edit` 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_urls` | `images` | array of image URL | yes |  | 1 – 4 items | ورودی‌های ویرایش که بر اساس ترتیب ارسال به‌صورت <image_1>، <image_2> و غیره برای استفاده در دستور نمایه‌گذاری می‌شوند. 1–4 تصویر را به‌صورت فایل یا URL ارائه کنید. |
| `instruction` |  | string \| null | no |  |  | جهت‌های ویرایش که در صورت ارائه همراه با 'vgl'، آن را تغییر می‌دهند. در غیر این صورت، درخواست آزاد به سند VGL گسترش یافته و در پاسخ گنجانده می‌شود. |
| `aspect_ratio` |  | enum (string) \| null | no |  | `1:1`, `1:2`, `1:3`, `1:4`, `1:5`, `2:1`, `2:3`, `3:1`, `3:2`, `3:4`, `4:1`, `4:3`, `4:5`, `5:1`, `5:4`, `9:16`, `9:21`, `10:16`, `16:9`, `16:10`, `21:9` | تنظیم نسبت تصویر برای خروجی تقریباً یک مگاپیکسلی؛ یک تصویر ورودی، صرف‌نظر از این تنظیم، نسبت خود را حفظ می‌کند. با چند ورودی، حذف تنظیم از نسبت تصویر اول استفاده می‌کند. |
| `seed` |  | integer | no | `5555` | 0 – 2,147,483,647 | Seed کنترل‌کننده تصادفی‌بودن برای نتایج قابل‌بازآفرینی، در بازه 0 تا 2147483647. |
| `mask_url` | `mask` | string (image URL) \| null | no |  |  | ماسک ویرایش برای درخواست‌های دارای یک تصویر، ارائه‌شده به‌صورت فایل یا URL با ابعادی مطابق همان تصویر. نواحی سفید نشان‌دهنده نواحی تولید مجدد و نواحی سیاه نشان‌دهنده همه بخش‌های دیگر هستند. نتیجه از ابعاد ورودی استفاده می‌کند و پیکسل‌های خارج از ماسک را حفظ می‌کند. |
| `vgl` |  | object {short_description, objects, background_setting, lighting, aesthetics, photographic_characteristics, style_medium, text_render, context, artistic_style, edit_instruction} \| null | no |  |  | سند VGL (Visual Generation Language) که می‌تواند از پاسخ قبلی دوباره استفاده شود. همراه با 'instruction'، تصویر اول را نشان می‌دهد و مبنای ویرایش را فراهم می‌کند؛ بدون 'instruction'، ویرایش را بدون تغییر مشخص می‌کند و باید شامل 'edit_instruction' باشد. |
| `vgl.short_description` |  | string \| null | no |  |  | توضیح کوتاه تصویر خروجی موردنظر. |
| `vgl.objects` |  | array of object {description, location, relationship, relative_size, shape_and_color, texture, appearance_details, number_of_objects, pose, expression, clothing, action, gender, skin_tone_and_texture, orientation} \| null | no | `[]` |  | محتوای تصویر تولیدشده را به‌صورت فهرست مشخص کنید و ویژگی‌های هر شیء و روابط آن با سایر اشیای تصویرشده را ثبت کنید. |
| `vgl.objects[].description` |  | string \| null | no |  |  | توضیح شیء خروجی موردنظر. |
| `vgl.objects[].location` |  | string \| null | no |  |  | موقعیت شیء در تصویر. |
| `vgl.objects[].relationship` |  | string | yes |  |  | رابطه شیء با اشیای دیگر تصویر. |
| `vgl.objects[].relative_size` |  | string \| null | no |  |  | اندازه شیء نسبت به تصویر. |
| `vgl.objects[].shape_and_color` |  | string \| null | no |  |  | شکل و رنگ شیء. |
| `vgl.objects[].texture` |  | string \| null | no |  |  | بافت شیء. |
| `vgl.objects[].appearance_details` |  | string \| null | no |  |  | جزئیات توصیف‌کننده ظاهر شیء. |
| `vgl.objects[].number_of_objects` |  | integer \| null | no |  |  | تعداد اشیا در تصویر. |
| `vgl.objects[].pose` |  | string \| null | no |  |  | ژست شیء تصویرشده. |
| `vgl.objects[].expression` |  | string \| null | no |  |  | حالت چهره نمایش‌داده‌شده توسط شیء تصویرشده. |
| `vgl.objects[].clothing` |  | string \| null | no |  |  | لباس پوشیده‌شده توسط شیء تصویرشده. |
| `vgl.objects[].action` |  | string \| null | no |  |  | عمل انجام‌شده توسط شیء تصویرشده. |
| `vgl.objects[].gender` |  | string \| null | no |  |  | جنسیت شیء تصویرشده. |
| `vgl.objects[].skin_tone_and_texture` |  | string \| null | no |  |  | بافت و تُن پوست شیء تصویرشده. |
| `vgl.objects[].orientation` |  | string \| null | no |  |  | جهت‌گیری شیء تصویرشده. |
| `vgl.background_setting` |  | string \| null | no |  |  | پس‌زمینه تصویر تولیدشده. |
| `vgl.lighting` |  | object {conditions, direction, shadows} \| null | no |  |  | نورپردازی تصویر تولیدشده. |
| `vgl.lighting.conditions` |  | string \| null | no |  |  | شرایط نورپردازی تصویر تولیدشده. |
| `vgl.lighting.direction` |  | string \| null | no |  |  | جهت نورپردازی تصویر تولیدشده. |
| `vgl.lighting.shadows` |  | string \| null | no |  |  | سایه‌هایی که باید در تصویر تولیدشده نمایش داده شوند. |
| `vgl.aesthetics` |  | object {composition, color_scheme, mood_atmosphere} \| null | no |  |  | ویژگی‌های زیبایی‌شناختی تصویر تولیدشده. |
| `vgl.aesthetics.composition` |  | string \| null | no |  |  | ترکیب‌بندی تصویر تولیدشده. |
| `vgl.aesthetics.color_scheme` |  | string \| null | no |  |  | پالت رنگ تصویر تولیدشده. |
| `vgl.aesthetics.mood_atmosphere` |  | string \| null | no |  |  | حال‌وهوا و فضای تصویر تولیدشده. |
| `vgl.photographic_characteristics` |  | object {depth_of_field, focus, camera_angle, lens_focal_length} \| null | no |  |  | ویژگی‌های عکاسانه تصویر تولیدشده. |
| `vgl.photographic_characteristics.depth_of_field` |  | string \| null | no |  |  | عمق میدان تصویر تولیدشده. |
| `vgl.photographic_characteristics.focus` |  | string \| null | no |  |  | تمرکز تصویر تولیدشده. |
| `vgl.photographic_characteristics.camera_angle` |  | string \| null | no |  |  | زاویه دوربین تصویر تولیدشده. |
| `vgl.photographic_characteristics.lens_focal_length` |  | string \| null | no |  |  | تنظیم لنز تصویر تولیدشده، بیان‌شده به‌صورت فاصله کانونی. |
| `vgl.style_medium` |  | string \| null | no |  |  | رسانه سبکی تصویر تولیدشده. |
| `vgl.text_render` |  | array of object {text, location, size, color, font, appearance_details} \| null | no | `[]` |  | فهرست ورودی‌های متنی برای گنجاندن در تصویر. |
| `vgl.text_render[].text` |  | string | yes |  |  | متن برای رندر، که به‌صورت بصری نیز به fibo-2 به‌عنوان تصویر ارائه می‌شود تا بازتولید دقیق عبارت ارائه‌شده آسان‌تر شود. |
| `vgl.text_render[].location` |  | string \| null | no |  |  | جای‌گذاری متن در تصویر. |
| `vgl.text_render[].size` |  | string \| null | no |  |  | اندازه متن در تصویر. |
| `vgl.text_render[].color` |  | string \| null | no |  |  | رنگ استفاده‌شده برای متن. |
| `vgl.text_render[].font` |  | string \| null | no |  |  | سبک قلم متن. |
| `vgl.text_render[].appearance_details` |  | string \| null | no |  |  | جزئیات مهم اضافی درباره ظاهر متن. |
| `vgl.context` |  | string \| null | no |  |  | زمینه تصویر تولیدشده. |
| `vgl.artistic_style` |  | string \| null | no |  |  | سبک هنری تصویر تولیدشده. |
| `vgl.edit_instruction` |  | string \| null | no |  |  | دستوری برای توضیح نحوه ویرایش تصویر. |

File parameters (`images`, `mask`) 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
{
  "images": [
    "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg"
  ]
}
```

A fuller example:

```json
{
  "image_urls": [
    "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.com/v1/run/bria/fibo-2/edit?wait=20" \
  -H "Authorization: Bearer $DOITONG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "image_urls": [
      "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.com/v1/requests/REQUEST_ID?wait=20" \
  -H "Authorization: Bearer $DOITONG_API_KEY"
```

### JavaScript

```javascript
const API = "https://api.doitong.com/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-2/edit?wait=20", {
  method: "POST",
  headers,
  body: JSON.stringify({
    "image_urls": [
      "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.com/v1"
headers = {"Authorization": "Bearer " + os.environ["DOITONG_API_KEY"]}

payload = {
    "image_urls": [
        "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-2/edit", 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.com/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-2/edit",
      "input": {
        "image_urls": [
          "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-2/edit",
  "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_urls": [
      "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
    },
    "images": [
      {
        "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
      }
    ],
    "vgl": {}
  },
  "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.com/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t",
    "cancel": "https://api.doitong.com/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t/cancel"
  }
}
```

### Output fields (`output`)

| Field | Type | Description |
|---|---|---|
| `image` | object {url, content_type, file_name, file_size, width, height} | تصویر حاصل از ویرایش. |
| `images` | array of object {url, content_type, file_name, file_size, width, height} | فهرست تصاویر مطابق قالبی که دیگر برنامه‌های FIBO برمی‌گردانند؛ تنها ورودی آن همان تصویر است. |
| `vgl` | object | VGL استفاده‌شده برای ویرایش، شامل `edit_instruction`. |

## Related models

- [Fibo 2.0 Generate](https://doitong.com/developers/models/bria/fibo-2/generate.md) (`bria/fibo-2/generate`): $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
- [Seedream 5.0 Pro Edit](https://doitong.com/developers/models/bytedance/seedream/v5/pro/edit.md) (`bytedance/seedream/v5/pro/edit`): from $0.0675 / run of output image
- [Bria](https://doitong.com/developers/models/bria/reimagine.md) (`bria/reimagine`): $0.04 / image

## Links

- HTML page: https://doitong.com/developers/models/bria/fibo-2/edit
- 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-2/edit
- Errors: https://doitong.com/developers/docs/errors
- Model details as JSON: https://api.doitong.com/v1/models/bria/fibo-2/edit
