Source: https://ailoot.ai/models/id/google-gemini-2-5-flash-image/
Canonical: https://ailoot.ai/models/id/google-gemini-2-5-flash-image/
Language: id

# Google: Nano Banana (Gemini 2.5 Flash Image)

[Markdown](https://ailoot.ai/models/id/google-gemini-2-5-flash-image/index.md) · [JSON](https://ailoot.ai/models/id/google-gemini-2-5-flash-image/facts.json)

## [Google: Nano Banana (Gemini 2.5 Flash Image)](https://ailoot.ai/models/id/google-gemini-2-5-flash-image/)

Nano Banana (Gemini 2.5 Flash Image) menghasilkan dan menyunting gambar dari teks serta gambar. Gunakan alur percakapannya untuk menyusun adegan, mengubah elemen terpilih, menggabungkan referensi visual, atau menyempurnakan gambar produk sambil menyatakan detail mana yang harus dipertahankan.

- [**Ailoot Ultra · OpenAI Chat** `POST /v1/chat/completions` `google/gemini-2.5-flash-image`](https://ailoot.ai/models/id/google-gemini-2-5-flash-image/#method-0)
- [**Ailoot Ultra · Gambar** `POST /v1/images/generations` `google/gemini-2.5-flash-image`](https://ailoot.ai/models/id/google-gemini-2-5-flash-image/#method-1)
- [**Ailoot Ultra · Anthropic Messages** `POST /v1/messages` `google/gemini-2.5-flash-image`](https://ailoot.ai/models/id/google-gemini-2-5-flash-image/#method-2)

Tentang model

Deskripsi ini mencakup kemampuan model. Masukan, keluaran, dan opsi yang tersedia di Ailoot tercantum di bawah untuk metode yang dipilih.

Gemini 2.5 Flash Image, yang juga dikenal sebagai Nano Banana, adalah model teks dan gambar Google untuk kreasi visual serta penyuntingan gambar melalui percakapan. Model ini menerima instruksi dengan referensi gambar opsional dan dapat mengembalikan gambar bersama teks pendamping. Edisi 2.5 Flash Image yang tepat ini berbeda dari Nano Banana 2, Nano Banana Pro, dan model gambar Lite yang lebih baru. Hasil yang berguna adalah aset visual yang dihasilkan atau direvisi, bukan respons model teks umum Gemini 2.5.

Kartu model khususnya mencantumkan 65,536 token masukan dan 32,768 token keluaran. Gambar dan instruksi merupakan bagian masukan, sedangkan gambar atau teks yang dikembalikan merupakan bagian hasil. Tabel resolusi dalam panduan memberikan keluaran 1:1 pada 1024×1024, 3:4 pada 864×1184, dan 16:9 pada 1344×768, di antara rasio aspek yang didukung. Pilih bentuk tampilan yang dimaksud sebelum merancang adegan. Opsi resolusi tinggi pada edisi gambar Gemini yang lebih baru tidak boleh diperlakukan sebagai kontrol yang didokumentasikan untuk model yang tepat ini.

Untuk pembuatan gambar dari teks, tentukan subjek, aksi, lingkungan, gaya, pencahayaan, dan sudut pandang. Ilustrasi produk dapat menggunakan identitas visual yang diberikan dan meminta detail material yang terlihat jelas dalam latar yang sesuai. Jelaskan tujuan gambar agar model dapat mengalokasikan ruang untuk subjek dan teks apa pun. Deskripsi fotografis seperti tampilan dekat, komposisi dari atas, atau perspektif sudut rendah membantu mendefinisikan pembingkaian lebih jelas daripada daftar kata gaya yang tidak berkaitan.

Untuk penyuntingan, berikan gambar asli dan identifikasi bagian yang harus diubah. Panduan pembuat menjelaskan penambahan atau penghapusan elemen, semantic masking, transfer gaya, dan komposisi menggunakan referensi. Permintaan yang berguna menyebutkan revisi sekaligus kondisi yang harus dipertahankan—misalnya, mengubah latar belakang sambil mempertahankan bentuk, permukaan, dan label produk. Beri label peran setiap masukan ketika menggabungkan referensi, seperti penampilan subjek, latar, atau gaya. Panduan menyatakan bahwa edisi ini bekerja paling baik dengan hingga tiga gambar masukan; ini adalah panduan praktis, bukan alasan untuk menggabungkan kumpulan referensi yang saling bertentangan tanpa batas.

Penyempurnaan melalui percakapan dapat mempertahankan subjek yang sama sambil mengubah keputusan visual tertentu. Minta satu revisi yang saling terhubung pada satu waktu dan simpan gambar sumber serta hasil yang diterima yang digunakan untuk giliran tersebut. Jelaskan apa yang harus tetap konsisten dan apa yang boleh bervariasi. Untuk rangkaian aset, identifikasi subjek bersama, warna, dan aturan visual secara eksplisit, alih-alih menganggap prompt baru yang terpisah akan memulihkannya. Bandingkan gambar yang direvisi dengan referensi sebelum menganggap instruksi pelestarian berhasil diikuti.

Untuk teks dalam gambar, tetapkan kata-kata persis terlebih dahulu, lalu minta gambar yang memuat teks tersebut, sesuai saran panduan. Nyatakan bahasa, urutan baca, penempatan, dan penekanan relatif label. Permintaan infografis harus mengidentifikasi hubungan yang dijelaskan setiap label dan elemen visual yang mendukungnya. Tinjau ejaan, tanda baca, dan keterkaitan visual pada ukuran tampilan sebenarnya; label hasil generasi yang tampak terbaca masih dapat mengubah nama, angka, atau makna yang dimaksud.

Kartu model tidak mencantumkan thinking, grounding pencarian, function calling, eksekusi kode, atau keluaran terstruktur yang dibatasi untuk edisi ini. Kartu tersebut juga tidak mengiklankan pembuatan audio atau Live API. Masukan yang didokumentasikan adalah teks dan gambar, sehingga fitur audio, video, dan pemrosesan dokumen dari model Gemini lain tidak boleh dilekatkan pada profil ini. Aplikasi harus menangani bagian konten yang dikembalikan secara eksplisit, alih-alih menganggap balasan prosa biasa memuat aset gambar yang selesai.

Panduan mencatat bahwa jumlah gambar yang diminta mungkin tidak selalu diikuti dan gambar yang dihasilkan menyertakan penandaan SynthID. Periksa setiap gambar yang dikembalikan untuk memastikan komposisi, kesetiaan subjek, jumlah objek, dan kata-kata persis. Jika adegan memiliki beberapa komponen, jelaskan susunan yang dimaksud dalam urutan jelas dan nyatakan penampilan yang diinginkan secara positif. Simpan identitas model yang tepat, prompt, dan referensi bersama hasil. Dengan demikian, tugas pembuatan atau penyuntingan visual dapat ditinjau dan revisi berikutnya memiliki titik awal konkret.

Tugas praktis

### Tugas praktis

Contoh teknis dalam bahasa Inggris

```
Change a product photo background

Using the supplied product photograph, preserve the ceramic mug's shape, handle, glaze and existing logo exactly. Replace only the background with a pale stone tabletop and soft morning side light. Keep the camera angle and mug position. Remove unrelated background clutter and add no new lettering, props or decorative marks.
```

#### Hasil yang diharapkan

```
An edited image retaining the reference mug while changing its setting and light as requested.
```

#### Periksa hasil

```
Compare the result with the reference for mug geometry, logo fidelity, camera angle and removal of clutter.
```

**Ailoot Ultra · OpenAI Chat** `POST /v1/chat/completions` `google/gemini-2.5-flash-image`

[`google/gemini-2.5-flash-image`](https://ailoot.ai/models/id/#m=google%2Fgemini-2.5-flash-image&route=Ultra&caller=google%2Fgemini-2.5-flash-image&fmt=chat)

Google /`google/gemini-2.5-flash-image`

### Mulai

Nano Banana (Gemini 2.5 Flash Image) menghasilkan dan menyunting gambar dari teks serta gambar. Gunakan alur percakapannya untuk menyusun adegan, mengubah elemen terpilih, menggabungkan referensi visual, atau menyempurnakan gambar produk sambil menyatakan detail mana yang harus dipertahankan.

Masukan yang diterima

Teks

Hasil

Teks

### Tersedia di Ailoot · masukan & metode

**Ailoot Ultra · OpenAI Chat** `POST /v1/chat/completions`

Masukan

`text`

Keluaran

`text`

Format keluaran

json atau SSE

| Kolom | Jenis | Persyaratan | Nilai & batasan | Bawaan |
| --- | --- | --- | --- | --- |
| Kolom`model` | Jenis`string` | PersyaratanWajib | Nilai & batasan google/gemini-2.5-flash-image | Bawaan— |
| Kolom`messages` | Jenis`message[]` | PersyaratanWajib | Nilai & batasan Item minimum: 1 | Bawaan— |
| Kolom`messages[].role` | Jenis`string` | PersyaratanWajib | Nilai & batasan Contoh: system, user, assistant, tool, function Kondisi: Peran ini direpresentasikan secara eksplisit oleh tipe kompatibilitas dalam kode sumber; kumpulan peran model yang tepat tetap khusus untuk tiap model. Bergantung pada model | Bawaan— |
| Kolom`messages[].content` | Jenis`string\|content_part[]\|null` | PersyaratanOpsional | Nilai & batasan | Bawaan— |
| Kolom`messages[].tool_calls` | Jenis`tool_call[]` | PersyaratanOpsional | Nilai & batasan | Bawaan— |
| Kolom`messages[].tool_call_id` | Jenis`string` | PersyaratanOpsional | Nilai & batasan Berlaku jika: role=tool; gunakan ID yang benar-benar dikembalikan | Bawaan— |
| Kolom`messages[].name` | Jenis`string` | PersyaratanOpsional | Nilai & batasan | Bawaan— |
| Kolom`messages[].reasoning_content` | Jenis`string` | PersyaratanOpsional | Nilai & batasan Berlaku jika: Kirim kembali penalaran yang benar-benar dikembalikan jika model ini menggunakannya | Bawaan— |
| Kolom`messages[].reasoning_details` | Jenis`object\|array` | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
| Kolom`max_tokens` | Jenis`integer` | PersyaratanOpsional | Nilai & batasan Minimum: 1 Bergantung pada model | Bawaan— |
| Kolom`max_completion_tokens` | Jenis`integer` | PersyaratanOpsional | Nilai & batasan Minimum: 1 Bergantung pada model | Bawaan— |
| Kolom`stream` | Jenis`boolean` | PersyaratanOpsional | Nilai & batasan | Bawaanfalse |
| Kolom`stream_options.include_usage` | Jenis`boolean` | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
| Kolom`temperature` | Jenis`number` | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
| Kolom`top_p` | Jenis`number` | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
| Kolom`stop` | Jenis`string\|string[]` | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
| Kolom`tools` | Jenis`function_tool[]` | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
| Kolom`tools[].type` | Jenis`string` | PersyaratanOpsional | Nilai & batasan function Bergantung pada model | Bawaan— |
| Kolom`tools[].function.name` | Jenis`string` | PersyaratanWajib | Nilai & batasan Berlaku jika: alat fungsi disediakan | Bawaan— |
| Kolom`tools[].function.description` | Jenis`string` | PersyaratanOpsional | Nilai & batasan | Bawaan— |
| Kolom`tools[].function.parameters` | Jenis`JSON_schema` | PersyaratanOpsional | Nilai & batasan | Bawaan— |
| Kolom`tool_choice` | Jenis`string\|object` | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
| Kolom`parallel_tool_calls` | Jenis`boolean` | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
| Kolom`response_format` | Jenis`object` | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
| Kolom`reasoning_effort` | Jenis`string` | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
| Kolom`reasoning` | Jenis`object` | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
| Kolom`service_tier` | Jenis`string` | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
| Kolom`instructions` | Jenis`string` | PersyaratanOpsional | Nilai & batasan Kolom kompatibilitas | Bawaan— |
| Kolom`functions` | Jenis`function[]` | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
| Kolom`function_call` | Jenis`string\|object` | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
| Kolom`prompt_cache_options` | Jenis`object` | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
| Kolom`modalities` | Jenis`string[]` | PersyaratanOpsional | Nilai & batasan text | Bawaan— |
| Kolom`provider` | Jenis`object` | PersyaratanOpsional | Nilai & batasan Kondisi: provider.options ditolak pada rute teks Ultra ini | Bawaan— |
| Kolom`cache_control.ttl` | Jenis`string` | PersyaratanOpsional | Nilai & batasan Kondisi: 1h ditolak pada lokasi cache prompt yang digunakan | Bawaan— |

Kombinasi bahan masukan

**Teks** · Teks UTF8

`messages[].content`

Parameter metode dan siklus hidup

| Parameter | Kontrak |
| --- | --- |
| Parameter`content_type` | Kontrakapplication/json |
| Parameter`required` | Kontrakmodel, messages |
| Parameter`material_types` | Kontraktext |
| Parameter`messages` | Kontrakarray pesan dengan struktur role/content |
| Parameter`file_material` | Kontrakdokumen UTF-8 yang sebenarnya dimasukkan sebagai teks apa adanya; ID file tidak disimpulkan |
| Parameter`optional_controls` | Kontrakstream, temperature, top\_p, stop, max\_tokens, max\_completion\_tokens, reasoning, response\_format, tools, tool\_choice |
| Parameter`control_scope` | Kontrakkhusus model; alat fungsi pengguna berbeda dari alat yang dihosting |
| Parameter`output_modalities` | Kontraktext |
| Parameter`hosted_operations` | Kontrakfalse |
| Parameter`multimodal_input_binding` | Kontraknull |

Siklus hidup: `synchronous_or_streamed`

Kirim ID model yang tepat bersama messages.

Panjang konteks bukan batas keluaran.

File teks dapat menyediakan teks apa adanya; masukan gambar/audio/objek file memerlukan pengikatan yang tepat.

### Paket

Referensi tarif tidak menambah opsi permintaan. Parameter yang didukung tercantum pada metode yang dipilih.

Mode Fast

Tarif standar Saat mode fast dipilih

Mode Flex

Tarif standar Saat mode flex dipilih

Upaya penalaran maksimum

Tarif standar Saat upaya penalaran maksimum menggunakan penyesuaian default

Harga cache eksplisit

Tidak diaktifkan Saat cache eksplisit diminta

#### Tarif Ailoot

#### Harga menurut konfigurasi

Cocokkan setiap biaya dengan kondisi yang ditampilkan. Gunakan satu tarif untuk setiap kelompok konfigurasi alternatif.

| Konfigurasi | Jadwal tarif | Token konteks, lebih dari | Token konteks, hingga dan termasuk | Biaya |
| --- | --- | --- | --- | --- |
| KonfigurasiTarif dasar token | Jadwal tarifTarif dasar | Token konteks, lebih dari— | Token konteks, hingga dan termasukTanpa batas atas | Biaya Masukan · Token masukan **$0.0006** / 1K token Keluaran · Token keluaran **$0.005** / 1K token Masukan · Pembacaan cache **$0.00006** / 1K token Masukan · Penulisan cache **$0.0001666666666666666** / 1K token Masukan · Penulisan cache, 1 jam **—** / 1K token Keluaran · Token gambar keluaran **$0.06** / 1K token gambar |
| KonfigurasiPanjang permintaan · tingkat 1 | Jadwal tarif— | Token konteks, lebih dari0 | Token konteks, hingga dan termasukTanpa batas atas | Biaya Masukan · Token masukan **$0.0006** / 1K token Keluaran · Token keluaran **$0.005** / 1K token Masukan · Pembacaan cache **$0.00006** / 1K token Masukan · Penulisan cache **$0.0001666666666666666** / 1K token Masukan · Penulisan cache, 1 jam **—** / 1K token |

#### Detail tarif referensi

Jadwal referensi tingkat model tidak mengubah pemilihan metode, estimasi harga, atau biaya. Biaya aktif menggunakan tarif metode Ailoot yang dipilih.

google/gemini-2.5-flash-image

#### Harga menurut konfigurasi

| Konfigurasi | Kondisi penagihan | Biaya |
| --- | --- | --- |
| Konfigurasigoogle/gemini-2.5-flash-image · Konfigurasi bawaan | Kondisi penagihanKonfigurasi bawaan | Biaya Masukan · Masukan **US$0,0006** / 1K token Keluaran · Keluaran **US$0,06** / 1K token |

Google: Nano Banana (Gemini 2.5 Flash Image)

#### Harga menurut konfigurasi

| Konfigurasi | Kondisi penagihan | Biaya |
| --- | --- | --- |
| KonfigurasiGoogle: Nano Banana (Gemini 2.5 Flash Image) · Konfigurasi bawaan | Kondisi penagihanKonfigurasi bawaan | Biaya Masukan · Token masukan **US$0,0006** / 1K token Keluaran · Token keluaran **US$0,005** / 1K token Masukan · Gambar masukan **US$0,0006** / 1K token Keluaran · Gambar keluaran **US$0,06** / 1K token Masukan · Masukan audio **US$0,002** / 1K token Masukan · Pembacaan cache audio **US$0,0002** / 1K token Keluaran · Pencarian web **US$0,028** per pencarian Keluaran · Token penalaran **US$0,005** / 1K token Masukan · Pembacaan cache **US$0,00006** / 1K token Masukan · Penulisan cache · 5 menit **≈US$0,000167** / 1K token |

Ailoot mencadangkan perkiraan dana sebelum permintaan. Setelah hasil diterima, tagihan akhir diselesaikan berdasarkan penggunaan yang terukur. Penyelesaian tagihan streaming menggunakan catatan penggunaan akhir. [Cara kerja cadangan dan penyelesaian tagihan →](https://ailoot.ai/docs/id/billing/reserve/)

### Contoh permintaan

#### Ailoot Ultra · OpenAI Chat

curlPython SDKAliran Python

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "google/gemini-2.5-flash-image", "messages": [{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}]}')

Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
r=json.loads(Path("result.json").read_text())
for x in r.get("choices",[]):
    if x.get("message",{}).get("content"): print(x["message"]["content"])
PY_RESULT
```

```python
from openai import OpenAI
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
result=client.chat.completions.create(model='google/gemini-2.5-flash-image',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}])
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(result.to_dict(mode="json"))
```

```python
from openai import OpenAI
import os
from pathlib import Path

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

with client.chat.completions.stream(model='google/gemini-2.5-flash-image',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_completion()
    save_result(final.to_dict(mode="json"),"stream-result")
```

### Terima dan simpan hasil

#### Ailoot Ultra · OpenAI Chat

json atau SSE

##### Simpan semua hasil yang selesai

Simpan setiap respons lengkap, berkas, dan bagian konten yang dikembalikan.

Simpan setiap alternatif jawaban beserta konten, panggilan alat, dan penalarannya. Dalam SSE, gabungkan delta menurut indeks alternatif jawaban/alat, lalu pertahankan alasan penghentian akhir dan data penggunaan.

##### Jika respons asli perlu diperiksa

Simpan ID permintaan/respons dan header. URL umum untuk pengambilan tugas teks tidak disediakan.

Kolom respons

| Kolom | Jenis |
| --- | --- |
| Kolom`choices[].index` | Jenisinteger |
| Kolom`choices[].message.content` | Jenisstring\|null |
| Kolom`choices[].message.tool_calls` | Jenistool\_call\[\] |
| Kolom`choices[].message.reasoning_content` | Jenisstring |
| Kolom`choices[].message.reasoning_details` | Jenisobject\|array |
| Kolom`choices[].finish_reason` | Jenisstring\|null |
| Kolom`usage` | Jenisobject |

Kesalahan dan langkah berikutnya

| Respons | Kondisi | Langkah berikutnya |
| --- | --- | --- |
| Respons400 · `invalid_request_error` | KondisiBidang wajib, representasi materi, atau nilai parameter tidak valid | Langkah berikutnyaPerbaiki bidang yang ditunjukkan sebelum permintaan pembuatan baru. |

### Alias

#### Alias model

**Ailoot Ultra** [`google/gemini-2.5-flash-image`](https://ailoot.ai/models/id/#m=google%2Fgemini-2.5-flash-image&route=Ultra&caller=google%2Fgemini-2.5-flash-image&fmt=chat)

#### Alias jalur metode

`/v1/images`

#### ID pemanggil terkait

[`google/gemini-2.5-flash-image`](https://ailoot.ai/models/id/#m=google%2Fgemini-2.5-flash-image&route=Ultra&caller=google%2Fgemini-2.5-flash-image&fmt=chat)

**Ailoot Ultra · Gambar** `POST /v1/images/generations` `google/gemini-2.5-flash-image`

[`google/gemini-2.5-flash-image`](https://ailoot.ai/models/id/#m=google%2Fgemini-2.5-flash-image&route=Ultra&caller=google%2Fgemini-2.5-flash-image&fmt=images)

Google /`google/gemini-2.5-flash-image`

### Mulai

Nano Banana (Gemini 2.5 Flash Image) menghasilkan dan menyunting gambar dari teks serta gambar. Gunakan alur percakapannya untuk menyusun adegan, mengubah elemen terpilih, menggabungkan referensi visual, atau menyempurnakan gambar produk sambil menyatakan detail mana yang harus dipertahankan.

Masukan yang diterima

Teks · Gambar

Hasil

Gambar

### Tersedia di Ailoot · masukan & metode

**Ailoot Ultra · Gambar** `POST /v1/images/generations`

Masukan

`text`, `image`

Keluaran

`image`

| Kolom | Jenis | Persyaratan | Nilai & batasan | Bawaan |
| --- | --- | --- | --- | --- |
| Kolom`model` | Jenis`string` | PersyaratanWajib | Nilai & batasan google/gemini-2.5-flash-image | Bawaan— |
| Kolom`prompt` | Jenis`string` | PersyaratanWajib | Nilai & batasan Panjang minimum: 1 | Bawaan— |
| Kolom`aspect_ratio` | Jenis`string` | PersyaratanOpsional | Nilai & batasan 1:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9, 21:9 | Bawaan— |
| Kolom`n` | Jenis`integer` | PersyaratanOpsional | Nilai & batasan Minimum: 1 Maksimum: 1 | Bawaan— |
| Kolom`input_references` | Jenis`array` | PersyaratanOpsional | Nilai & batasan Item minimum: 0 Item maksimum: 3 | Bawaan— |
| Kolom`provider` | Jenis`object` | PersyaratanOpsional | Nilai & batasan | Bawaan— |

Parameter metode dan siklus hidup

| Parameter | Kontrak |
| --- | --- |
| Parameter`content_type` | Kontrakapplication/json |
| Parameter`required` | Kontrakmodel, prompt |
| Parameter`material_types` | Kontraktext, image |

Siklus hidup: `synchronous_result_then_owned_library`

`GET /v1/media/tasks/{task_id}` · task\_id aktual yang dikembalikan atau catatan pustaka media

`GET /v1/media/assets/{asset_id}/content`

`GET /v1/media/assets`

`GET /v1/media/assets/{asset_id}`

### Paket

##### Cara menghitung biaya akhir

Tarif yang ditampilkan memperkirakan biaya sebelum pembuatan. Biaya akhir dihitung dari biaya yang tercatat untuk proses pembuatan awal. Durasi keluaran yang terukur dan kuantitas perkiraan bukanlah kuantitas akhir yang ditagihkan.

Referensi tarif tidak menambah opsi permintaan. Parameter yang didukung tercantum pada metode yang dipilih.

Mode Fast

Tidak ditentukan Saat mode fast dipilih

Mode Flex

Tidak ditentukan Saat mode flex dipilih

Upaya penalaran maksimum

Tidak ditentukan Saat upaya penalaran maksimum menggunakan penyesuaian default

#### Perkiraan tarif untuk perbandingan

#### Harga menurut konfigurasi

Cocokkan setiap biaya dengan kondisi yang ditampilkan. Gunakan satu tarif untuk setiap kelompok konfigurasi alternatif.

| Konfigurasi | Jadwal tarif | Jumlah perkiraan | Biaya |
| --- | --- | --- | --- |
| KonfigurasiTarif dasar token | Jadwal tarifTarif dasar | Jumlah perkiraan— | Biaya Masukan · Token masukan · Perkiraan hanya untuk perbandingan **—** / 1K token Keluaran · Token keluaran · Perkiraan hanya untuk perbandingan **—** / 1K token Masukan · Pembacaan cache · Perkiraan hanya untuk perbandingan **—** / 1K token Masukan · Penulisan cache · Perkiraan hanya untuk perbandingan **—** / 1K token Masukan · Penulisan cache, 1 jam · Perkiraan hanya untuk perbandingan **—** / 1K token |
| KonfigurasiPerkiraan biaya pembuatan | Jadwal tarif— | Jumlah perkiraanestimasi satu kali pembuatan | Biaya Keluaran · Perkiraan biaya pembuatan · Perkiraan hanya untuk perbandingan **$0.24576** estimasi sebelum pembuatan Perkiraan ini bukan biaya tambahan maupun tarif tetap untuk proses pembuatan yang telah selesai. |

Ailoot mencadangkan perkiraan dana sebelum permintaan. Setelah hasil diterima, tagihan akhir diselesaikan berdasarkan penggunaan yang terukur. Penyelesaian tagihan streaming menggunakan catatan penggunaan akhir. [Cara kerja cadangan dan penyelesaian tagihan →](https://ailoot.ai/docs/id/billing/reserve/)

### Contoh permintaan

#### Ailoot Ultra · Gambar

curl

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
export AILOOT_API_KEY
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p={'model': 'google/gemini-2.5-flash-image', 'prompt': 'a red panda astronaut floating in space, studio lighting'}

Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/images/generations \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json, os, subprocess
from pathlib import Path
from urllib.parse import urlsplit, urljoin

def save_images(items):
    if not items: raise SystemExit("No completed images; retain the full response")
    for index, item in enumerate(items):
        encoded=item.get("b64_json")
        uri=item.get("url", "")
        if not encoded and uri.startswith("data:image/"):
            header, separator, encoded=uri.partition(",")
            if not separator or ";base64" not in header: raise SystemExit("Unsupported image data URI")
        if encoded:
            raw=base64.b64decode(encoded,validate=True)
        elif uri:
            uri=urljoin("https://api.ailoot.ai",uri)
            parsed=urlsplit(uri)
            if parsed.scheme!="https" or not parsed.netloc or parsed.username or parsed.password:
                raise SystemExit("Invalid returned image URL")
            owned=parsed.netloc=="api.ailoot.ai" and parsed.path.startswith("/v1/media/assets/") and parsed.path.endswith("/content")
            args=["curl","--fail-with-body","--silent","--show-error",uri]
            if owned: args += ["-H","Authorization: Bearer "+os.environ["AILOOT_API_KEY"]]
            temporary=Path(f"image-{index}.bin")
            subprocess.run(args+["-o",str(temporary)],check=True)
            raw=temporary.read_bytes()
            temporary.unlink()
        else: raise SystemExit("Image has neither bytes nor URL")
        if not raw: raise SystemExit("Empty image result")
        ext="png" if raw.startswith(b"\x89PNG") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else "svg" if raw.lstrip().startswith((b"<svg",b"<?xml")) else "bin"
        Path(f"image-{index}.{ext}").write_bytes(raw)
    print("Every returned image saved; complete response metadata retained")
save_images(json.loads(Path("result.json").read_text())["data"])
PY_RESULT
```

### Terima dan simpan hasil

#### Ailoot Ultra · Gambar

Unduh setiap gambar yang dikembalikan atau simpan konten Base64-nya

- `GET /v1/media/tasks/{task_id}`
- `GET /v1/media/assets/{asset_id}/content`
- `GET /v1/media/assets`
- `GET /v1/media/assets/{asset_id}`

Pembacaan konten lain

Baca aset yang sudah ada dan menjadi milik Anda

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/media/assets \
  -H "Authorization: Bearer $AILOOT_API_KEY" -o owned-assets.json
# Preserve every returned asset and follow its exact signed content URL. Do not construct a signed token.
```

##### Simpan semua hasil yang selesai

Simpan setiap gambar yang selesai; ambil setiap URL yang dikembalikan atau dekode konten Base64-nya.

Simpan respons dan header secara lengkap, setiap keluaran aktual, identifikator asli yang dikembalikan, dan semua kolom usage. Pulihkan operasi asli tanpa mengirim ulang permintaan pembuatan.

##### Jika respons asli perlu diperiksa

Simpan X-Client-Request-ID yang dikembalikan untuk rekonsiliasi. Baca hanya nilai task\_id/asset\_id yang benar-benar dikembalikan atau pustaka media milik Anda; jangan pernah membuat URL tugas dari ID operasi dan jangan pernah mengirim ulang permintaan pembuatan.

Kolom respons

| Kolom | Jenis |
| --- | --- |
| Kolom`created` | Jenis |
| Kolom`data[].url` | Jenis |
| Kolom`data[].b64_json` | Jenis |
| Kolom`usage` | Jenis |

### Alias

#### Alias model

**Ailoot Ultra** [`google/gemini-2.5-flash-image`](https://ailoot.ai/models/id/#m=google%2Fgemini-2.5-flash-image&route=Ultra&caller=google%2Fgemini-2.5-flash-image&fmt=images)

#### Alias jalur metode

`/v1/images`

#### ID pemanggil terkait

[`google/gemini-2.5-flash-image`](https://ailoot.ai/models/id/#m=google%2Fgemini-2.5-flash-image&route=Ultra&caller=google%2Fgemini-2.5-flash-image&fmt=images)

**Ailoot Ultra · Anthropic Messages** `POST /v1/messages` `google/gemini-2.5-flash-image`

[`google/gemini-2.5-flash-image`](https://ailoot.ai/models/id/#m=google%2Fgemini-2.5-flash-image&route=Ultra&caller=google%2Fgemini-2.5-flash-image&fmt=messages)

Google /`google/gemini-2.5-flash-image`

### Mulai

Nano Banana (Gemini 2.5 Flash Image) menghasilkan dan menyunting gambar dari teks serta gambar. Gunakan alur percakapannya untuk menyusun adegan, mengubah elemen terpilih, menggabungkan referensi visual, atau menyempurnakan gambar produk sambil menyatakan detail mana yang harus dipertahankan.

Masukan yang diterima

Teks

Hasil

json · sse

### Tersedia di Ailoot · masukan & metode

**Ailoot Ultra · Anthropic Messages** `POST /v1/messages`

Masukan

`text`

Keluaran

`json`, `sse`

Format keluaran

JSON atau SSE

| Kolom | Jenis | Persyaratan | Nilai & batasan | Bawaan |
| --- | --- | --- | --- | --- |
| Kolom`model` | Jenis`string` | PersyaratanWajib | Nilai & batasan google/gemini-2.5-flash-image | Bawaan— |
| Kolom`messages` | Jenis`message[]` | PersyaratanWajib | Nilai & batasan | Bawaan— |
| Kolom`messages[].role` | Jenis`string` | PersyaratanWajib | Nilai & batasan user, assistant | Bawaan— |
| Kolom`messages[].content` | Jenis`string` | PersyaratanWajib | Nilai & batasan | Bawaan— |
| Kolom`max_tokens` | Jenis`integer` | PersyaratanWajib | Nilai & batasan | Bawaan— |
| Kolom`stream` | Jenis`boolean` | PersyaratanOpsional | Nilai & batasan | Bawaanfalse |

Kombinasi bahan masukan

**Teks** · Teks UTF-8

`string messages[].content`

Parameter metode dan siklus hidup

| Parameter | Kontrak |
| --- | --- |
| Parameter`content_type` | Kontrakapplication/json |
| Parameter`required` | Kontrakmodel, messages, max\_tokens |
| Parameter`optional_controls` | Kontrakstream |
| Parameter`material_types` | Kontraktext |
| Parameter`text_file_material` | KontrakBaca dokumen UTF-8 yang sebenarnya dan masukkan teksnya ke string masukan atau konten pesan yang ditunjukkan. |

Siklus hidup: `synchronous_or_streamed`

### Paket

Referensi tarif tidak menambah opsi permintaan. Parameter yang didukung tercantum pada metode yang dipilih.

Mode Fast

Tarif standar Saat mode fast dipilih

Mode Flex

Tarif standar Saat mode flex dipilih

Upaya penalaran maksimum

Tarif standar Saat upaya penalaran maksimum menggunakan penyesuaian default

Harga cache eksplisit

Tidak diaktifkan Saat cache eksplisit diminta

#### Tarif Ailoot

#### Harga menurut konfigurasi

Cocokkan setiap biaya dengan kondisi yang ditampilkan. Gunakan satu tarif untuk setiap kelompok konfigurasi alternatif.

| Konfigurasi | Jadwal tarif | Token konteks, lebih dari | Token konteks, hingga dan termasuk | Biaya |
| --- | --- | --- | --- | --- |
| KonfigurasiTarif dasar token | Jadwal tarifTarif dasar | Token konteks, lebih dari— | Token konteks, hingga dan termasukTanpa batas atas | Biaya Masukan · Token masukan **$0.0006** / 1K token Keluaran · Token keluaran **$0.005** / 1K token Masukan · Pembacaan cache **$0.00006** / 1K token Masukan · Penulisan cache **$0.0001666666666666666** / 1K token Masukan · Penulisan cache, 1 jam **—** / 1K token Keluaran · Token gambar keluaran **$0.06** / 1K token gambar |
| KonfigurasiPanjang permintaan · tingkat 1 | Jadwal tarif— | Token konteks, lebih dari0 | Token konteks, hingga dan termasukTanpa batas atas | Biaya Masukan · Token masukan **$0.0006** / 1K token Keluaran · Token keluaran **$0.005** / 1K token Masukan · Pembacaan cache **$0.00006** / 1K token Masukan · Penulisan cache **$0.0001666666666666666** / 1K token Masukan · Penulisan cache, 1 jam **—** / 1K token |

Ailoot mencadangkan perkiraan dana sebelum permintaan. Setelah hasil diterima, tagihan akhir diselesaikan berdasarkan penggunaan yang terukur. Penyelesaian tagihan streaming menggunakan catatan penggunaan akhir. [Cara kerja cadangan dan penyelesaian tagihan →](https://ailoot.ai/docs/id/billing/reserve/)

### Contoh permintaan

#### Ailoot Ultra · Anthropic Messages

Isi permintaan JSON minimal yang lengkapcurl · gunakan dokumen UTF-8 AndaPython · simpan hasil secara lengkap

```json
{
  "model": "google/gemini-2.5-flash-image",
  "max_tokens": 128,
  "messages": [
    {
      "role": "user",
      "content": "Summarize the incident report."
    }
  ],
  "stream": false
}
```

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 document}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json, os
from pathlib import Path

source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
    raise SystemExit('Choose a document containing text')
payload = {'model': 'google/gemini-2.5-flash-image', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
Path('request.json').write_text(json.dumps(payload, ensure_ascii=False), encoding='utf-8')
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
  -H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path

result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))
PY_RESULT
```

```python
import json, os
from pathlib import Path

source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
    raise SystemExit('Choose a document containing text')
payload = {'model': 'google/gemini-2.5-flash-image', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
from urllib.request import Request, urlopen
from urllib.error import HTTPError

api_key = os.environ['AILOOT_API_KEY']
if not api_key.strip():
    raise SystemExit('Set AILOOT_API_KEY before making a request')
headers = {'x-api-key': 'PLACEHOLDER_KEY', 'anthropic-version': '2023-06-01', 'Content-Type': 'application/json'}
headers['x-api-key'] = api_key
request = Request('https://api.ailoot.ai/v1/messages', data=json.dumps(payload, ensure_ascii=False).encode('utf-8'), headers=headers, method='POST')
try:
    with urlopen(request, timeout=120) as response:
        raw = response.read()
        Path('response-headers.txt').write_text(str(response.headers), encoding='utf-8')
except HTTPError as error:
    Path('result.json').write_bytes(error.read())
    Path('response-headers.txt').write_text(str(error.headers), encoding='utf-8')
    raise
Path('result.json').write_bytes(raw)
import json
from pathlib import Path

result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))
```

### Terima dan simpan hasil

#### Ailoot Ultra · Anthropic Messages

JSON atau SSE

##### Simpan semua hasil yang selesai

Simpan setiap respons lengkap, berkas, dan bagian konten yang dikembalikan.

Simpan semua blok konten, tanda tangan penalaran, dan ID penggunaan alat yang sebenarnya. Gabungkan semua delta blok SSE; blok teks pertama bukan keseluruhan keluaran.

##### Jika respons asli perlu diperiksa

Simpan ID permintaan/respons dan header. URL umum untuk pengambilan tugas teks tidak disediakan.

Kolom respons

| Kolom | Jenis |
| --- | --- |
| Kolom`id` | Jenisstring |
| Kolom`model` | Jenisstring |
| Kolom`content[]` | Jenistext\|thinking\|tool\_use\|other content block |
| Kolom`stop_reason` | Jenisstring\|null |
| Kolom`usage` | Jenisobject |

Kesalahan dan langkah berikutnya

| Respons | Kondisi | Langkah berikutnya |
| --- | --- | --- |
| Respons400 · `invalid_request_error` | KondisiBidang wajib, representasi materi, atau nilai parameter tidak valid | Langkah berikutnyaPerbaiki bidang yang ditunjukkan sebelum permintaan pembuatan baru. |

### Alias

#### Alias model

**Ailoot Ultra** [`google/gemini-2.5-flash-image`](https://ailoot.ai/models/id/#m=google%2Fgemini-2.5-flash-image&route=Ultra&caller=google%2Fgemini-2.5-flash-image&fmt=messages)

#### Alias jalur metode

`/v1/images`

#### ID pemanggil terkait

[`google/gemini-2.5-flash-image`](https://ailoot.ai/models/id/#m=google%2Fgemini-2.5-flash-image&route=Ultra&caller=google%2Fgemini-2.5-flash-image&fmt=messages)

FAQ · Google: Nano Banana (Gemini 2.5 Flash Image)

Input dan hasil apa yang tersedia?

`POST /v1/chat/completions` · `google/gemini-2.5-flash-image`: `text` → `text` `POST /v1/images/generations` · `google/gemini-2.5-flash-image`: `text`, `image` → `image` `POST /v1/messages` · `google/gemini-2.5-flash-image`: `text` → `json`, `sse`

Kolom apa yang digunakan permintaan?

`POST /v1/chat/completions` · `google/gemini-2.5-flash-image`: `model`, `messages`, `stream`, `modalities`, `provider` `POST /v1/images/generations` · `google/gemini-2.5-flash-image`: `model`, `prompt`, `aspect_ratio`, `n`, `input_references`, `provider` `POST /v1/messages` · `google/gemini-2.5-flash-image`: `model`, `messages`, `max_tokens`, `stream`

Batasan apa yang berlaku?

`POST /v1/chat/completions` · `google/gemini-2.5-flash-image`: `messages.min_items`: `1` `POST /v1/images/generations` · `google/gemini-2.5-flash-image`: `n.minimum`: `1`; `n.maximum`: `1`

Hubungkan Ailoot ke Claude Code, OpenCode, Hermes, atau aplikasi Anda.

## Perusahaan dan portofolio proyeknya

Perusahaan dan portofolio proyeknya: jutaan pelanggan; penjualan miliaran setiap bulan.

## Beli token dengan diskon.

Diskon langganan untuk pekerjaan rutin. Kode promo — hingga 50% untuk pembelian token.

Langganan

Pilih paket dengan diskon untuk permintaan rutin Anda.

Kode promo hingga 50%

Masukkan kode saat membeli. Harga dihitung ulang sesuai promosi aktif.

Biaya dalam riwayat

Model, token, dan jumlah tagihan disimpan untuk setiap permintaan.

[Pilih langganan](https://ailoot.ai/docs/id/billing/subscriptions/) · [Lihat harga model](https://ailoot.ai/models/id/)

## Hubungkan API ke produk yang Anda jual.

SaaS, aplikasi, dan bot — sesuai penawaran dan perjanjian lisensi Ailoot. Untuk penjualan kembali, mintalah lisensi reseller.

Aplikasi komersial

Integrasikan pembuatan teks, gambar, video, dan suara dalam fitur berbayar layanan Anda.

Lisensi reseller

Kirim deskripsi proyek dan skema akses. Mintalah ketentuan penggunaan dan penjualan kembali secara tertulis.

Dokumen di situs

Penawaran, perjanjian lisensi, dan kebijakan pemrosesan data tersedia sebelum koneksi.

[Minta lisensi reseller](mailto:support@ailoot.ai) · [Penawaran dan perjanjian lisensi](https://ailoot.ai/legal/offer?lang=id)

## Ailoot · Perusahaan dan portofolio proyeknya





Ailoot bertumpu pada pengalaman operasional yang teruji, basis pelanggan yang besar, layanan yang stabil, dan pemantauan KPI berkelanjutan.





Perusahaan dan portofolio proyeknya: jutaan pelanggan; penjualan miliaran setiap bulan.





Ailoot memanfaatkan pengalaman operasional ini untuk akses API ke fitur AI dalam produk pelanggan, agen, aplikasi, dan otomatisasi.
