> ## Documentation Index
> Fetch the complete documentation index at: https://docs.apimart.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# FLUX 3 Image Pembuatan Gambar

> Pembuatan teks ke gambar, pengeditan satu gambar, dan hingga 10 gambar referensi, dengan beragam rasio aspek serta resolusi hingga 4k.

<Info>
  Endpoint ini bersifat asinkron. Pengiriman yang berhasil mengembalikan `task_id`. Gunakan [kueri tugas](/id/api-reference/tasks/status) untuk mengambil status dan gambar. Hentikan polling saat status menjadi `completed` atau `failed`. Pembuatan pada `4k` dapat memerlukan beberapa menit; batas waktu tunggu keseluruhan 10 menit disarankan.
</Info>

<RequestExample>
  ```bash cURL theme={null}
  curl --request POST \
    --url https://api.apimart.ai/v1/images/generations \
    --header 'Authorization: Bearer <token>' \
    --header 'Content-Type: application/json' \
    --data '{
      "model": "flux-3-image",
      "prompt": "Bidikan sinematik ultralebar jalan pesisir berkabut saat fajar, satu mobil antik dengan lampu depan menyala",
      "aspect_ratio": "21:9",
      "resolution": "2k"
    }'
  ```

  ```python Python theme={null}
  import requests

  response = requests.post(
      "https://api.apimart.ai/v1/images/generations",
      headers={"Authorization": "Bearer <token>"},
      json={
          "model": "flux-3-image",
          "prompt": "Bidikan sinematik ultralebar jalan pesisir berkabut saat fajar, satu mobil antik dengan lampu depan menyala",
          "aspect_ratio": "21:9",
          "resolution": "2k"
      }
  )
  print(response.json())
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch("https://api.apimart.ai/v1/images/generations", {
    method: "POST",
    headers: {
      Authorization: "Bearer <token>",
      "Content-Type": "application/json"
    },
    body: JSON.stringify({
      model: "flux-3-image",
      prompt: "Bidikan sinematik ultralebar jalan pesisir berkabut saat fajar, satu mobil antik dengan lampu depan menyala",
      aspect_ratio: "21:9",
      resolution: "2k"
    })
  });
  console.log(await response.json());
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={null}
  {
    "code": 200,
    "data": [
      {
        "status": "submitted",
        "task_id": "task_01K..."
      }
    ]
  }
  ```
</ResponseExample>

## Header permintaan

<ParamField header="Authorization" type="string" required>
  Autentikasi Bearer dengan format `Bearer <token>`, dengan `<token>` sebagai APIMart API Key Anda.
</ParamField>

## Parameter permintaan

<ParamField body="model" type="string" required>
  Harus `flux-3-image`.
</ParamField>

<ParamField body="prompt" type="string" required>
  Deskripsi adegan untuk teks ke gambar atau instruksi pengeditan gambar. Prompt negatif tidak didukung; jelaskan gambar yang ingin Anda hasilkan.

  Gunakan tag dan JSON bbox dalam `prompt` untuk menentukan tata letak atau area pengeditan lokal. Lihat contoh di bawah.
</ParamField>

<ParamField body="image_urls" type="string[]">
  Daftar gambar referensi, maksimal 10 gambar. Mendukung URL HTTP(S) yang dapat diakses publik atau masukan Base64.

  Hilangkan untuk teks ke gambar. Sertakan satu gambar untuk pengeditan tunggal atau beberapa gambar sebagai referensi.
</ParamField>

<ParamField body="aspect_ratio" type="string" default="auto">
  Rasio aspek keluaran. Nilai yang didukung:

  `21:9`, `2:1`, `16:9`, `3:2`, `7:5`, `4:3`, `5:4`, `1:1`, `4:5`, `3:4`, `5:7`, `2:3`, `9:16`, `1:2`, `9:21`, atau `auto`.

  Format rasio seperti `16x9` juga diterima. Dengan `auto`:

  * Pengeditan atau beberapa gambar referensi: mengikuti rasio aspek gambar referensi pertama.
  * Teks ke gambar: ditentukan oleh prompt; menggunakan `1:1` jika rasio tidak ditentukan.
</ParamField>

<ParamField body="size" type="string">
  Parameter kompatibilitas untuk rasio aspek. Dapat menggantikan `aspect_ratio` dan menerima nilai yang sama. Disarankan menggunakan hanya salah satu bidang.

  Dimensi piksel seperti `1024x1024` tidak didukung dan mengembalikan HTTP 400. Gunakan `resolution` untuk memilih resolusi keluaran.
</ParamField>

<ParamField body="resolution" type="string" default="1k">
  Tingkat resolusi keluaran. Mendukung `768sq`, `1k`, `1.5k`, `2k`, dan `4k`, tanpa membedakan huruf besar dan kecil. `768` setara dengan `768sq`.

  Parameter ini menentukan tingkat penagihan. Jika dihilangkan, pembuatan dan penagihan menggunakan `1k`. Nilai yang tidak didukung, seperti `3k`, mengembalikan HTTP 400.
</ParamField>

<ParamField body="safety_tolerance" type="integer" default="2">
  Toleransi keamanan konten, dari 0–4. 0 adalah yang paling ketat.
</ParamField>

<ParamField body="grounding" type="boolean" default="true">
  Apakah pencarian web atau gambar diizinkan sebelum pembuatan. Atur ke `false` untuk menonaktifkan.

  Harus berupa boolean, bukan string `"false"` atau `"true"`.
</ParamField>

<ParamField body="n" type="integer" default="1">
  Setiap permintaan menghasilkan 1 gambar; hanya `1` yang didukung. Kirim tugas terpisah untuk beberapa gambar. Nilai di atas 1 mengembalikan HTTP 400.
</ParamField>

## Parameter yang tidak didukung

Parameter berikut mengembalikan HTTP 400 jika disertakan; tidak diabaikan begitu saja:

* `width`, `height`
* Dimensi piksel pada `size`, seperti `1024x1024`
* `seed`, `steps`, `guidance`
* `output_format`, `negative_prompt`, `prompt_upsampling`, `mask_url`

Gunakan `resolution` untuk resolusi lebih tinggi dan `aspect_ratio` untuk rasio aspek tertentu.

## Mengedit gambar referensi

```json theme={null}
{
  "model": "flux-3-image",
  "prompt": "Ubah mobil dalam gambar menjadi merah sambil mempertahankan jalan, latar belakang, dan pencahayaan aslinya",
  "image_urls": ["https://example.com/car.jpg"],
  "aspect_ratio": "auto",
  "resolution": "2k"
}
```

Ganti URL contoh dengan URL gambar yang dapat diakses publik. Untuk beberapa referensi, berikan beberapa URL dalam `image_urls`, maksimal 10 gambar secara keseluruhan.

## Beberapa gambar referensi

Pengeditan, pengeditan lokal, dan tata letak menggunakan endpoint serta model yang sama pada halaman ini, dengan penagihan berdasarkan `resolution`. Referensi diberi nomor berurutan: `ref_image_0` untuk gambar pertama dan `ref_image_1` untuk gambar kedua. Anda juga dapat memakai `Image 1` / `Image 2` dalam prompt.

```json theme={null}
{
  "model": "flux-3-image",
  "prompt": "Ubah Image 1 menjadi gaya Image 2.",
  "image_urls": [
    "https://example.com/subject.jpg",
    "https://example.com/style.jpg"
  ],
  "aspect_ratio": "auto"
}
```

## Pengeditan lokal (bounding box)

Awali `prompt` dengan instruksi bahasa alami dan gunakan `<tag>`, seperti `<car_1>`, untuk merujuk elemen. Tambahkan array JSON dalam string yang sama, dengan satu objek per kotak. bbox bukan parameter permintaan terpisah.

| Bidang | Keterangan |
| - | - |
| `id` | Sesuai dengan tag elemen dalam prompt, tanpa tanda kurung sudut. |
| `from` | Asal elemen, misalnya `ref_image_0`; gunakan `null` untuk elemen baru atau yang digambar ulang. |
| `src_bbox` | Kotak dalam gambar sumber; juga harus `null` jika `from` bernilai `null`. |
| `tgt_bbox` | Kotak dalam gambar keluaran; sama dengan `src_bbox` berarti tetap di posisi semula, berbeda berarti dipindahkan. |
| `desc` | Menjelaskan perubahan pada elemen atau bagian yang harus dipertahankan. |

Semua bidang kotak (`src_bbox`, `tgt_bbox`, `bbox`) memakai `[atas, kiri, bawah, kanan]`, yaitu `[y1, x1, y2, x2]`, pada **grid ternormalisasi 0–1000**: kiri atas `[0,0]` dan kanan bawah `[1000,1000]`. Ini bukan koordinat piksel.

Contoh ini mengubah mobil dalam kotak menjadi merah dan menjelaskan latar yang dipertahankan. URL serta posisi kotak hanya ilustrasi; sesuaikan dengan gambar Anda.

```json theme={null}
{
  "model": "flux-3-image",
  "prompt": "Dalam <ref_image_0>, ubah mobil <car_1> menjadi merah dan pertahankan latar <background_1>. [{\"id\":\"car_1\",\"from\":null,\"src_bbox\":null,\"tgt_bbox\":[250,300,750,800],\"desc\":\"Mobil merah dengan bentuk dan arah asli tetap dipertahankan.\"},{\"id\":\"background_1\",\"from\":\"ref_image_0\",\"src_bbox\":[0,0,1000,1000],\"tgt_bbox\":[0,0,1000,1000],\"desc\":\"Pertahankan jalan, latar belakang, dan pencahayaan asli.\"}]",
  "image_urls": [
    "https://example.com/car.jpg"
  ],
  "aspect_ratio": "auto",
  "resolution": "2k"
}
```

### Memindahkan elemen

Letakkan objek berikut dalam array bbox di akhir prompt. `from` menunjukkan gambar sumber, `src_bbox` posisi asli, dan `tgt_bbox` posisi baru. Gunakan juga tag `<knight_1>` yang sesuai dalam instruksi bahasa alami.

```json theme={null}
{
  "id": "knight_1",
  "from": "ref_image_0",
  "src_bbox": [
    500,
    150,
    850,
    350
  ],
  "tgt_bbox": [
    194,
    55,
    544,
    255
  ],
  "desc": "Figur ksatria amigurumi kecil berwarna abu-abu."
}
```

## Tata letak teks ke gambar

Tata letak juga dapat digunakan tanpa gambar referensi. Setiap kotak memakai `id`, `bbox`, dan `desc`. Tentukan `aspect_ratio` secara eksplisit karena grid koordinat meregang mengikuti rasio aspek.

```json theme={null}
{
  "model": "flux-3-image",
  "aspect_ratio": "1:1",
  "prompt": "Ilustrasi minimalis siluet hitam orang berlari <silhouette_1> di atas latar hijau kekuningan polos <background_1>. [{\"id\":\"background_1\",\"bbox\":[0,0,1000,1000],\"desc\":\"Latar hijau kekuningan neon dengan tekstur kertas halus.\"},{\"id\":\"silhouette_1\",\"bbox\":[150,150,850,850],\"desc\":\"Siluet hitam orang berlari dengan tekstur titik-titik.\"}]"
}
```

### Catatan penggunaan

* JSON bbox adalah bagian dari string `prompt`. Saat menulis JSON permintaan secara manual, escape tanda kutip ganda di dalamnya menjadi `\"`. SDK atau metode serialisasi JSON dapat melakukannya secara otomatis.

* Daftarkan juga area yang harus tetap sama dan jelaskan apa yang harus dipertahankan dalam `desc`.

* Tag elemen dalam prompt harus sesuai satu per satu dengan nilai `id` JSON. Pengenal referensi seperti `<ref_image_0>` merujuk ke gambar masukan.

* Model ini tidak memiliki parameter `mask` dan tidak mendukung `mask_url`; menyertakan `mask_url` mengembalikan HTTP 400. Pengeditan bbox tidak menggunakan parameter unggahan mask.

## Respons pengiriman

<ResponseField name="code" type="integer">
  Kode status respons. `200` menunjukkan keberhasilan.
</ResponseField>

<ResponseField name="data" type="array">
  Hasil pengiriman tugas.

  <Expandable title="Tampilkan bidang tugas">
    <ResponseField name="status" type="string">
      `submitted` menunjukkan pengiriman berhasil, bukan pembuatan selesai.
    </ResponseField>

    <ResponseField name="task_id" type="string">
      ID tugas untuk memeriksa status dan hasil tugas.
    </ResponseField>
  </Expandable>
</ResponseField>

## Memeriksa hasil tugas

```bash theme={null}
curl --request GET \
  --url https://api.apimart.ai/v1/tasks/task_01K... \
  --header 'Authorization: Bearer <token>'
```

Contoh respons berhasil (URL gambar hanya sebagai placeholder):

```json theme={null}
{
  "code": 200,
  "data": {
    "status": "completed",
    "result": {
      "images": [
        {
          "url": ["https://example.com/generated-image.jpg"]
        }
      ]
    }
  }
}
```

Baca tautan gambar dari array `data.result.images[0].url`. Jika status tugas adalah `failed`, periksa pesan kesalahan yang dikembalikan dan jangan terus menunggu gambar.

## Resolusi dan penagihan

Ditagih per gambar. Harga satuan hanya ditentukan oleh `resolution`, bukan rasio aspek atau jumlah gambar referensi. Gambar referensi tidak dikenai biaya tambahan.

| Tingkat resolusi | Perkiraan ukuran keluaran |
| - | - |
| `768sq` | Sekitar 768×768 |
| `1k` (default) | Sekitar 1MP |
| `1.5k` | Sekitar 2MP |
| `2k` | Sekitar 4MP |
| `4k` | Sekitar 16MP |

Ukuran keluaran bersifat perkiraan; dimensi piksel sebenarnya mengikuti gambar yang dikembalikan. Lihat [harga model](https://apimart.ai/pricing) untuk tiap tingkat.

Tugas yang gagal atau diblokir moderasi konten menerima pengembalian dana penuh.

## Kesalahan parameter umum

| Permintaan | Hasil dan tindakan |
| - | - |
| `resolution: "3k"` | HTTP 400; gunakan salah satu dari 5 tingkat yang didukung |
| `size: "1024x1024"` | HTTP 400; gunakan rasio aspek dan pilih resolusi melalui `resolution` |
| `n: 2` | HTTP 400; hanya 1 gambar yang dihasilkan per permintaan |
| 11 gambar referensi | HTTP 400; berikan maksimal 10 |
| `grounding: "false"` | HTTP 400; gunakan boolean `false` |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.