# Fibo 2.0 Generate API

> Mô hình tạo hình ảnh từ văn bản, mở rộng lời nhắc thành VGL có cấu trúc, với thiết lập sẵn phong cách và chế độ hình ảnh tham chiếu

Tạo hình ảnh từ `prompt` tự do được mở rộng thành tài liệu VGL và tài liệu này được trả về. Bạn cũng có thể truyền trực tiếp `vgl`, tinh chỉnh bằng lời nhắc hoặc cung cấp `image_url` làm tham chiếu trực quan. `style` cung cấp Kodak Film, Hard Flash, Hazy Dreamy và Rough Realism. `aspect_ratio` có 16 giá trị được liệt kê và hỗ trợ `seed`.

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

## 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/generate` 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 |
|---|---|---|---|---|---|---|
| `prompt` |  | string \| null | no |  |  | Yêu cầu tạo sinh chỉ định các thay đổi đối với 'vgl' khi tài liệu đó được cung cấp. Nếu không, mô tả tự do được mở rộng thành tài liệu VGL và được đưa vào phản hồi. |
| `style` |  | enum (string) \| null | no |  | `Kodak Film`, `Hard Flash`, `Hazy Dreamy`, `Rough Realism` | Kiểu hình ảnh được tạo chỉ khả dụng với 'prompt'. Không hỗ trợ kết hợp kiểu này với 'image_url', 'vgl' hoặc 'negative_prompt'. |
| `image_url` | `image` | string (image URL) \| null | no |  |  | Hình ảnh tham chiếu cho chế độ inspire; không thể kết hợp với `vgl`. Khi cung cấp `prompt`, VGL lấy tín hiệu hình ảnh từ tham chiếu để tạo cảnh mới theo lời nhắc thay vì sao chép tham chiếu. Không có `prompt`, VGL mô tả chính tham chiếu, tạo ra một biến thể gần giống. |
| `vgl` |  | object {short_description, objects, background_setting, lighting, aesthetics, photographic_characteristics, style_medium, text_render, context, artistic_style} \| null | no |  |  | Tài liệu VGL (Visual Generation Language) chứa mô tả cảnh JSON có cấu trúc; chấp nhận các tài liệu được trả về từ yêu cầu trước đó. Không có `prompt`, tài liệu được kết xuất không thay đổi; có `prompt`, VGL tinh chỉnh tài liệu theo lời nhắc trước khi kết xuất. Không thể kết hợp với `image_url` hoặc `style`. |
| `vgl.short_description` |  | string \| null | no |  |  | Mô tả ngắn về hình ảnh đầu ra dự kiến. |
| `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 | `[]` |  | Chỉ định nội dung hình ảnh được tạo dưới dạng danh sách, ghi lại thuộc tính của từng đối tượng và mối quan hệ của chúng với các đối tượng khác được mô tả. |
| `vgl.objects[].description` |  | string \| null | no |  |  | Mô tả đối tượng đầu ra dự kiến. |
| `vgl.objects[].location` |  | string \| null | no |  |  | Vị trí đối tượng trong hình ảnh. |
| `vgl.objects[].relationship` |  | string | yes |  |  | Mối quan hệ của đối tượng với các đối tượng khác trong hình ảnh. |
| `vgl.objects[].relative_size` |  | string \| null | no |  |  | Kích thước của đối tượng so với hình ảnh. |
| `vgl.objects[].shape_and_color` |  | string \| null | no |  |  | Hình dạng và màu sắc của đối tượng. |
| `vgl.objects[].texture` |  | string \| null | no |  |  | Kết cấu của đối tượng. |
| `vgl.objects[].appearance_details` |  | string \| null | no |  |  | Chi tiết mô tả diện mạo của đối tượng. |
| `vgl.objects[].number_of_objects` |  | integer \| null | no |  |  | Số lượng đối tượng trong hình ảnh. |
| `vgl.objects[].pose` |  | string \| null | no |  |  | Tư thế của đối tượng được mô tả. |
| `vgl.objects[].expression` |  | string \| null | no |  |  | Biểu cảm của đối tượng được mô tả. |
| `vgl.objects[].clothing` |  | string \| null | no |  |  | Trang phục của đối tượng được mô tả. |
| `vgl.objects[].action` |  | string \| null | no |  |  | Hành động của đối tượng được mô tả. |
| `vgl.objects[].gender` |  | string \| null | no |  |  | Giới tính của đối tượng được mô tả. |
| `vgl.objects[].skin_tone_and_texture` |  | string \| null | no |  |  | Kết cấu và tông màu da của đối tượng được mô tả. |
| `vgl.objects[].orientation` |  | string \| null | no |  |  | Hướng của đối tượng được mô tả. |
| `vgl.background_setting` |  | string \| null | no |  |  | Bối cảnh nền cho hình ảnh được tạo. |
| `vgl.lighting` |  | object {conditions, direction, shadows} \| null | no |  |  | Ánh sáng cho hình ảnh được tạo. |
| `vgl.lighting.conditions` |  | string \| null | no |  |  | Điều kiện ánh sáng cho hình ảnh được tạo. |
| `vgl.lighting.direction` |  | string \| null | no |  |  | Hướng chiếu sáng cho hình ảnh được tạo. |
| `vgl.lighting.shadows` |  | string \| null | no |  |  | Bóng đổ cần thể hiện trong hình ảnh được tạo. |
| `vgl.aesthetics` |  | object {composition, color_scheme, mood_atmosphere} \| null | no |  |  | Đặc tính thẩm mỹ cho hình ảnh được tạo. |
| `vgl.aesthetics.composition` |  | string \| null | no |  |  | Bố cục cho hình ảnh được tạo. |
| `vgl.aesthetics.color_scheme` |  | string \| null | no |  |  | Bảng màu cho hình ảnh được tạo. |
| `vgl.aesthetics.mood_atmosphere` |  | string \| null | no |  |  | Tâm trạng và không khí cho hình ảnh được tạo. |
| `vgl.photographic_characteristics` |  | object {depth_of_field, focus, camera_angle, lens_focal_length} \| null | no |  |  | Đặc tính nhiếp ảnh cho hình ảnh được tạo. |
| `vgl.photographic_characteristics.depth_of_field` |  | string \| null | no |  |  | Độ sâu trường ảnh cho hình ảnh được tạo. |
| `vgl.photographic_characteristics.focus` |  | string \| null | no |  |  | Lấy nét cho hình ảnh được tạo. |
| `vgl.photographic_characteristics.camera_angle` |  | string \| null | no |  |  | Góc máy ảnh cho hình ảnh được tạo. |
| `vgl.photographic_characteristics.lens_focal_length` |  | string \| null | no |  |  | Thiết lập ống kính cho hình ảnh được tạo, biểu thị bằng tiêu cự. |
| `vgl.style_medium` |  | string \| null | no |  |  | Chất liệu phong cách cho hình ảnh được tạo. |
| `vgl.text_render` |  | array of object {text, location, size, color, font, appearance_details} \| null | no | `[]` |  | Danh sách mục văn bản cần đưa vào hình ảnh. |
| `vgl.text_render[].text` |  | string | yes |  |  | Văn bản cần kết xuất, đồng thời được trình bày trực quan cho fibo-2 dưới dạng hình ảnh để giúp tái tạo chính xác nội dung đã cung cấp. |
| `vgl.text_render[].location` |  | string \| null | no |  |  | Vị trí văn bản trong hình ảnh. |
| `vgl.text_render[].size` |  | string \| null | no |  |  | Kích thước văn bản trong hình ảnh. |
| `vgl.text_render[].color` |  | string \| null | no |  |  | Màu dùng cho văn bản. |
| `vgl.text_render[].font` |  | string \| null | no |  |  | Kiểu phông chữ của văn bản. |
| `vgl.text_render[].appearance_details` |  | string \| null | no |  |  | Chi tiết đáng chú ý bổ sung về diện mạo của văn bản. |
| `vgl.context` |  | string \| null | no |  |  | Bối cảnh cho hình ảnh được tạo. |
| `vgl.artistic_style` |  | string \| null | no |  |  | Phong cách nghệ thuật cho hình ảnh được tạo. |
| `seed` |  | integer | no | `5555` | 0 – 2,147,483,647 | Seed kiểm soát tính ngẫu nhiên để tái lập kết quả, trong khoảng từ 0 đến 2147483647. |
| `aspect_ratio` |  | enum (string) | no | `1:1` | `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` | Tỷ lệ hình ảnh khoảng một megapixel. Các tỷ lệ khả dụng: 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. |

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
{}
```

A fuller example:

```json
{
  "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field"
}
```

## 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/generate?wait=20" \
  -H "Authorization: Bearer $DOITONG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field"
  }'

# 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/generate?wait=20", {
  method: "POST",
  headers,
  body: JSON.stringify({
    "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field"
  }),
});
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 = {
    "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field",
}

# Run the model; wait up to 20 s for the finished result in the same call
r = requests.post(API + "/run/bria/fibo-2/generate", 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/generate",
      "input": {
        "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field"
      },
      "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/generate",
  "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": {
    "prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field"
  },
  "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} | Hình ảnh do mô hình tạo ra. |
| `images` | array of object {url, content_type, file_name, file_size, width, height} | Danh sách hình ảnh khớp với định dạng do các ứng dụng FIBO khác trả về; mục duy nhất là cùng hình ảnh đó. |
| `vgl` | object | VGL dùng để tạo hình ảnh. |

## Related models

- [Fibo 2.0 Edit](https://doitong.com/developers/models/bria/fibo-2/edit.md) (`bria/fibo-2/edit`): $0.04 / image
- [FLUX.1 \[dev\]](https://doitong.com/developers/models/flux/dev.md) (`flux/dev`): $0.025 / megapixel
- [FLUX.1 \[schnell\]](https://doitong.com/developers/models/flux/schnell.md) (`flux/schnell`): $0.003 / megapixel
- [FLUX.2 \[dev\]](https://doitong.com/developers/models/flux-2.md) (`flux-2`): $0.012 / megapixel
- [FLUX.2 \[pro\]](https://doitong.com/developers/models/flux-2-pro.md) (`flux-2-pro`): $0.015 / megapixel of output image
- [GPT Image 2.5 Text to Image](https://doitong.com/developers/models/openai/gpt-image-2.5/flare/text-to-image.md) (`openai/gpt-image-2.5/flare/text-to-image`): from $0.008 / image
- [Ideogram V4.5](https://doitong.com/developers/models/ideogram/v4.5.md) (`ideogram/v4.5`): from $0.03 / image
- [Nano Banana 2](https://doitong.com/developers/models/nano-banana-2.md) (`nano-banana-2`): from $0.06 / image

## Links

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