Source: https://ailoot.ai/models/id/gpt-image-2-5-sunburst/
Canonical: https://ailoot.ai/models/id/gpt-image-2-5-sunburst/
Language: id

# GPT Image 2.5 Sunburst

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

## [GPT Image 2.5 Sunburst](https://ailoot.ai/models/id/gpt-image-2-5-sunburst/)

GPT Image 2.5 Sunburst membuat gambar dari instruksi teks. Mendukung ukuran khusus, tingkat kualitas yang diperluas, dan latar transparan; produsen juga menekankan ketepatan penyuntingan.

- [**Ailoot · Gambar** `POST /v1/images/generations` `gpt-image-2.5-sunburst`](https://ailoot.ai/models/id/gpt-image-2-5-sunburst/#method-0)
- [**Ailoot · Gambar** `POST /v1/images/generations` `gpt-image`](https://ailoot.ai/models/id/gpt-image-2-5-sunburst/#method-1)
- [**Ailoot · Gambar** `POST /v1/images/generations` `gpt-image-2.5`](https://ailoot.ai/models/id/gpt-image-2-5-sunburst/#method-2)
- [**Ailoot · Gambar** `POST /v1/images/generations` `gpt-image-2.5-latest`](https://ailoot.ai/models/id/gpt-image-2-5-sunburst/#method-3)
- [**Ailoot · Gambar** `POST /v1/images/generations` `gpt-image-latest`](https://ailoot.ai/models/id/gpt-image-2-5-sunburst/#method-4)

Tentang model

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

#### Generasi dan pengolahan gambar

GPT Image 2.5 Sunburst adalah model OpenAI untuk membuat gambar. Produsen memberikan perhatian khusus pada ketepatan penyuntingan materi sumber. Model mendukung instruksi teks dan, dalam operasi yang disediakan untuk itu, gambar sumber visual.

Kartu Ailoot saat ini menyediakan mode pembuatan gambar dari teks. Adegan, komposisi, gaya, dan detail hasil yang akan dibuat dapat ditentukan. Cara penggunaan referensi, penyuntingan, dan perubahan area berdasarkan mask yang dijelaskan OpenAI memerlukan dukungan gambar masukan tersendiri; keberadaan generasi teks tidak mengonfirmasi dukungan tersebut.

#### Kualitas dan bentuk bingkai

Tersedia `low`, `medium`, `high`, `xhigh`, `max`, dan `auto`. Pemilihan kualitas mengendalikan mode pembentukan gambar. Kualitas berbeda dari dimensi komposisi dan tingkat kompresi berkas yang diperoleh.

Ukuran dapat berupa persegi, horizontal, vertikal, dipilih otomatis, atau ditentukan secara manual. Untuk ukuran khusus, setiap sisi merupakan kelipatan 16 piksel dan tidak melebihi 3840 piksel. Luas harus berkisar antara 655 360 dan 8 294 400 piksel, sedangkan rasio sisi panjang terhadap sisi pendek tidak melebihi 3:1. Semua kondisi diterapkan bersamaan.

Produsen menandai resolusi di atas `2560x1440` sebagai eksperimental. Bingkai besar memungkinkan pemilihan ruang komposisi yang sesuai, tetapi tidak menghapus pemeriksaan tulisan dan posisi objek.

#### Format hasil dan latar

PNG digunakan secara default; JPEG dan WebP juga tersedia. Kompresi dapat diatur dalam JPEG dan WebP. Latar transparan memerlukan PNG atau WebP karena JPEG tidak menyimpan kanal alfa. Selain transparansi, tersedia latar tidak transparan dan pemilihan otomatis.

Ukuran, kualitas, format, dan latar mengatur sisi hasil yang berbeda. Gaya gambar ditentukan melalui deskripsi teks bersama isi adegan. Dukungan pengaturan tertentu perlu dipertimbangkan secara terpisah dari kemampuan umum produsen.

#### Ketepatan perubahan dan pemeriksaan gambar

Menurut OpenAI, pemrosesan instruksi kompleks dapat memakan waktu hingga dua menit. Ini merupakan deskripsi generasi pada layanan produsen, bukan jaminan waktu keseluruhan untuk memperoleh hasil dalam aplikasi tertentu.

Dalam operasi penyuntingan yang didukung secara terpisah, mask mengarahkan perubahan area yang dipilih. Mask tidak menjamin kesesuaian hasil yang ketat dengan batasnya, sehingga janji perubahan setempat yang tepat akan terlalu kuat. Penggunaan mode tersebut memerlukan cara pengiriman sumber yang sesuai.

Saat menghasilkan gambar, model juga dapat melakukan kesalahan dalam posisi teks dan detail atau mengubah penampilan karakter di antara gambar terpisah. Pemeriksaan tulisan, komposisi, dan konsistensi merupakan bagian pemeriksaan berkas jadi. Bahkan instruksi terperinci tidak menjamin sifat tersebut.

**Ailoot · Gambar** `POST /v1/images/generations` `gpt-image-2.5-sunburst`

[`gpt-image-2.5-sunburst`](https://ailoot.ai/models/id/#m=gpt-image-2.5-sunburst&route=Core&caller=gpt-image-2.5-sunburst&fmt=images)

OpenAI /`gpt-image-2.5-sunburst`

ID model

- `gpt-image-2.5-sunburst`
- `gpt-image`
- `gpt-image-2.5`
- `gpt-image-2.5-latest`
- `gpt-image-latest`

### Mulai

GPT Image 2.5 Sunburst membuat gambar dari instruksi teks. Mendukung ukuran khusus, tingkat kualitas yang diperluas, dan latar transparan; produsen juga menekankan ketepatan penyuntingan.

Masukan yang diterima

Teks

Hasil

Gambar

### Tersedia di Ailoot · masukan & metode

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

Masukan

`text`

Keluaran

`image`

Format keluaran

Berkas gambar

| Kolom | Jenis | Persyaratan | Nilai & batasan | Bawaan |
| --- | --- | --- | --- | --- |
| Kolom`model` | Jenis`string` | PersyaratanWajib | Nilai & batasan gpt-image-2.5-sunburst | Bawaan— |
| Kolom`prompt` | Jenis`string` | PersyaratanWajib | Nilai & batasan Panjang minimum: 1 | Bawaan— |
| Kolom`n` | Jenis`integer` | PersyaratanOpsional | Nilai & batasan Minimum: 1 | Bawaan1 |
| Kolom`response_format` | Jenis`string` | PersyaratanOpsional | Nilai & batasan url, b64\_json | Bawaan— |
| Kolom`stream` | Jenis`boolean` | PersyaratanOpsional | Nilai & batasan | Bawaanfalse |
| Kolom`size` | Jenis`string` | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
| Kolom`quality` | Jenis`string` | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
| Kolom`background` | Jenis`string` | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
| Kolom`output_format` | Jenis`string` | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
| Kolom`output_compression` | Jenis`integer` | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
| Kolom`moderation` | Jenis`string` | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
| Kolom`input_fidelity` | Jenis`string` | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
| Kolom`style` | Jenis`string` | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
| Kolom`partial_images` | Jenis`integer` | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |

Kombinasi bahan masukan

**Teks ke gambar** · Wajib: prompt

Parameter metode dan siklus hidup

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

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

Struktur metode dan ID bersifat eksak; kemampuan pemasok terpisah dari penerimaan permintaan.

### Paket

#### Tarif metode Ailoot

Masukan teks

US$0,005 */ 1K*

Masukan, gambar

US$0,008 */ 1K tokens*

Keluaran, gambar

US$0,03 */ 1K tokens*

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 · Gambar

curlPython SDKNode.js SDK

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
export AILOOT_API_KEY
export AILOOT_API_KEY
: "${AILOOT_PROMPT_FILE:?Set your actual UTF-8 image brief}"
export AILOOT_PROMPT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "gpt-image-2.5-sunburst", "prompt": ""}')
f=Path(os.environ["AILOOT_PROMPT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 brief")
p['prompt']=f.read_text(encoding="utf-8")
if not p['prompt'].strip():raise SystemExit("Brief must contain text")
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
```

```python
from openai import OpenAI
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")

f=Path(os.environ["AILOOT_PROMPT_FILE"])
if not f.is_file():raise SystemExit("Set your actual UTF-8 image brief file")
request={'model': 'gpt-image-2.5-sunburst', 'prompt': ''}
request["prompt"]=f.read_text(encoding="utf-8")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
result=client.images.generate(**request)
Path("sdk-result.txt").write_text(str(result),encoding="utf-8")
save_images([{"b64_json":getattr(item,"b64_json",None),"url":getattr(item,"url",None)} for item in result.data])
```

```js
import OpenAI from "openai";
import { readFileSync, writeFileSync } from "node:fs";
const key=process.env.AILOOT_API_KEY;
if(!key) throw new Error("Set your actual Ailoot API key");
const client=new OpenAI({baseURL:"https://api.ailoot.ai/v1",apiKey:key,maxRetries:0});
const request={"model": "gpt-image-2.5-sunburst", "prompt": ""};
if(!process.env.AILOOT_PROMPT_FILE)throw new Error("Set your actual UTF-8 image brief file");
request.prompt=readFileSync(process.env.AILOOT_PROMPT_FILE,"utf8");
const result=await client.images.generate(request);
writeFileSync("sdk-result.json",JSON.stringify(result,null,2));
if(!result.data?.length) throw new Error("No completed images");
for(let index=0;index<result.data.length;index++) {
  const item=result.data[index];let encoded=item.b64_json,uri=item.url||"",raw;
  if(!encoded && uri.startsWith("data:image/")) {
    const comma=uri.indexOf(",");if(comma<0 || !uri.slice(0,comma).includes(";base64")) throw new Error("Unsupported image data URI");
    encoded=uri.slice(comma+1);
  }
  if(encoded) {
    if(encoded.length%4!==0 || !/^[A-Za-z0-9+/]*={0,2}$/.test(encoded)) throw new Error("Invalid Base64");
    raw=Buffer.from(encoded,"base64");
  } else if(uri) {
    const u=new URL(uri,"https://api.ailoot.ai");
    if(u.protocol!=="https:" || u.username || u.password) throw new Error("Invalid returned URL");
    const owned=u.origin==="https://api.ailoot.ai" && u.pathname.startsWith("/v1/media/assets/") && u.pathname.endsWith("/content");
    const response=await fetch(u,{headers:owned?{Authorization:"Bearer "+key}:{},redirect:"manual"});
    if(!response.ok) throw new Error("Image content download failed: "+response.status);
    raw=Buffer.from(await response.arrayBuffer());
  } else throw new Error("Image has neither bytes nor URL");
  if(!raw.length) throw new Error("Empty image result");
  const ext=raw.subarray(0,4).equals(Buffer.from([137,80,78,71]))?"png":raw[0]===255&&raw[1]===216?"jpg":raw.toString("ascii",0,4)==="RIFF"&&raw.toString("ascii",8,12)==="WEBP"?"webp":raw.toString("utf8").trimStart().startsWith("<svg")||raw.toString("utf8").trimStart().startsWith("<?xml")?"svg":"bin";
  writeFileSync(`image-${index}.${ext}`,raw);
}
console.log("Every returned image saved; sdk-result.json retains complete metadata");
```

### Terima dan simpan hasil

#### Ailoot · 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}`

##### Simpan semua hasil yang selesai

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

Simpan setiap item data. Dekodekan setiap b64\_json atau ambil data dari setiap URL bertanda tangan yang dikembalikan. Pilih ekstensi nama file berdasarkan MIME/bytes aktual.

##### Jika respons asli perlu diperiksa

Jika hasil pembuatan atau penyuntingan gambar perlu diperiksa, simpan operation\_id/X-Client-Request-ID asli dan informasi hasil yang dikembalikan. Pulihkan hasil milik Anda yang sudah ada melalui pustaka media menggunakan nilai task\_id atau asset\_id aktual. Jangan mengirim ulang permintaan pembuatan/penyuntingan atau membuat URL polling dari operation\_id.

Kolom respons

| Kolom | Jenis |
| --- | --- |
| Kolom`created` | Jenisinteger |
| Kolom`data[].url` | Jenisstring |
| Kolom`data[].b64_json` | Jenisbase64 string |
| 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. |
| Respons`server_error` | KondisiRespons yang dikembalikan menyatakan bahwa operasi atau hasil perlu diperiksa | Langkah berikutnyaSimpan ID operasi/tugas asli yang dikembalikan, header permintaan, dan respons; lanjutkan pembacaan yang didukung untuk operasi asli tersebut. Jangan kirim ulang permintaan pembuatan. |

### Alias

#### Alias model

**Ailoot** [`gpt-image-2.5-sunburst`](https://ailoot.ai/models/id/#m=gpt-image-2.5-sunburst&route=Core&caller=gpt-image-2.5-sunburst&fmt=images), [`gpt-image`](https://ailoot.ai/models/id/#m=gpt-image-2.5-sunburst&route=Core&caller=gpt-image&fmt=images), [`gpt-image-2.5`](https://ailoot.ai/models/id/#m=gpt-image-2.5-sunburst&route=Core&caller=gpt-image-2.5&fmt=images), [`gpt-image-2.5-latest`](https://ailoot.ai/models/id/#m=gpt-image-2.5-sunburst&route=Core&caller=gpt-image-2.5-latest&fmt=images), [`gpt-image-latest`](https://ailoot.ai/models/id/#m=gpt-image-2.5-sunburst&route=Core&caller=gpt-image-latest&fmt=images)

#### Alias jalur metode

Gunakan jalur metode yang ditampilkan di atas.

#### ID pemanggil terkait

[`gpt-image-2.5-sunburst`](https://ailoot.ai/models/id/#m=gpt-image-2.5-sunburst&route=Core&caller=gpt-image-2.5-sunburst&fmt=images), [`gpt-image`](https://ailoot.ai/models/id/#m=gpt-image-2.5-sunburst&route=Core&caller=gpt-image&fmt=images), [`gpt-image-2.5`](https://ailoot.ai/models/id/#m=gpt-image-2.5-sunburst&route=Core&caller=gpt-image-2.5&fmt=images), [`gpt-image-2.5-latest`](https://ailoot.ai/models/id/#m=gpt-image-2.5-sunburst&route=Core&caller=gpt-image-2.5-latest&fmt=images), [`gpt-image-latest`](https://ailoot.ai/models/id/#m=gpt-image-2.5-sunburst&route=Core&caller=gpt-image-latest&fmt=images)

**Ailoot · Gambar** `POST /v1/images/generations` `gpt-image`

[`gpt-image`](https://ailoot.ai/models/id/#m=gpt-image-2.5-sunburst&route=Core&caller=gpt-image&fmt=images)

OpenAI /`gpt-image`

ID model

- `gpt-image-2.5-sunburst`
- `gpt-image`
- `gpt-image-2.5`
- `gpt-image-2.5-latest`
- `gpt-image-latest`

### Mulai

GPT Image 2.5 Sunburst membuat gambar dari instruksi teks. Mendukung ukuran khusus, tingkat kualitas yang diperluas, dan latar transparan; produsen juga menekankan ketepatan penyuntingan.

Masukan yang diterima

Teks

Hasil

Gambar

### Tersedia di Ailoot · masukan & metode

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

Masukan

`text`

Keluaran

`image`

Format keluaran

Berkas gambar

| Kolom | Jenis | Persyaratan | Nilai & batasan | Bawaan |
| --- | --- | --- | --- | --- |
| Kolom`model` | Jenis`string` | PersyaratanWajib | Nilai & batasan gpt-image | Bawaan— |
| Kolom`prompt` | Jenis`string` | PersyaratanWajib | Nilai & batasan Panjang minimum: 1 | Bawaan— |
| Kolom`n` | Jenis`integer` | PersyaratanOpsional | Nilai & batasan Minimum: 1 | Bawaan1 |
| Kolom`response_format` | Jenis`string` | PersyaratanOpsional | Nilai & batasan url, b64\_json | Bawaan— |
| Kolom`stream` | Jenis`boolean` | PersyaratanOpsional | Nilai & batasan | Bawaanfalse |
| Kolom`size` | Jenis`string` | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
| Kolom`quality` | Jenis`string` | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
| Kolom`background` | Jenis`string` | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
| Kolom`output_format` | Jenis`string` | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
| Kolom`output_compression` | Jenis`integer` | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
| Kolom`moderation` | Jenis`string` | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
| Kolom`input_fidelity` | Jenis`string` | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
| Kolom`style` | Jenis`string` | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
| Kolom`partial_images` | Jenis`integer` | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |

Kombinasi bahan masukan

**Teks ke gambar** · Wajib: prompt

Parameter metode dan siklus hidup

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

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

Struktur metode dan ID bersifat eksak; kemampuan pemasok terpisah dari penerimaan permintaan.

### Paket

#### Tarif metode Ailoot

Masukan teks

US$0,005 */ 1K*

Masukan, gambar

US$0,008 */ 1K tokens*

Keluaran, gambar

US$0,03 */ 1K tokens*

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 · Gambar

curlPython SDKNode.js SDK

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
export AILOOT_API_KEY
export AILOOT_API_KEY
: "${AILOOT_PROMPT_FILE:?Set your actual UTF-8 image brief}"
export AILOOT_PROMPT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "gpt-image", "prompt": ""}')
f=Path(os.environ["AILOOT_PROMPT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 brief")
p['prompt']=f.read_text(encoding="utf-8")
if not p['prompt'].strip():raise SystemExit("Brief must contain text")
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
```

```python
from openai import OpenAI
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")

f=Path(os.environ["AILOOT_PROMPT_FILE"])
if not f.is_file():raise SystemExit("Set your actual UTF-8 image brief file")
request={'model': 'gpt-image', 'prompt': ''}
request["prompt"]=f.read_text(encoding="utf-8")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
result=client.images.generate(**request)
Path("sdk-result.txt").write_text(str(result),encoding="utf-8")
save_images([{"b64_json":getattr(item,"b64_json",None),"url":getattr(item,"url",None)} for item in result.data])
```

```js
import OpenAI from "openai";
import { readFileSync, writeFileSync } from "node:fs";
const key=process.env.AILOOT_API_KEY;
if(!key) throw new Error("Set your actual Ailoot API key");
const client=new OpenAI({baseURL:"https://api.ailoot.ai/v1",apiKey:key,maxRetries:0});
const request={"model": "gpt-image", "prompt": ""};
if(!process.env.AILOOT_PROMPT_FILE)throw new Error("Set your actual UTF-8 image brief file");
request.prompt=readFileSync(process.env.AILOOT_PROMPT_FILE,"utf8");
const result=await client.images.generate(request);
writeFileSync("sdk-result.json",JSON.stringify(result,null,2));
if(!result.data?.length) throw new Error("No completed images");
for(let index=0;index<result.data.length;index++) {
  const item=result.data[index];let encoded=item.b64_json,uri=item.url||"",raw;
  if(!encoded && uri.startsWith("data:image/")) {
    const comma=uri.indexOf(",");if(comma<0 || !uri.slice(0,comma).includes(";base64")) throw new Error("Unsupported image data URI");
    encoded=uri.slice(comma+1);
  }
  if(encoded) {
    if(encoded.length%4!==0 || !/^[A-Za-z0-9+/]*={0,2}$/.test(encoded)) throw new Error("Invalid Base64");
    raw=Buffer.from(encoded,"base64");
  } else if(uri) {
    const u=new URL(uri,"https://api.ailoot.ai");
    if(u.protocol!=="https:" || u.username || u.password) throw new Error("Invalid returned URL");
    const owned=u.origin==="https://api.ailoot.ai" && u.pathname.startsWith("/v1/media/assets/") && u.pathname.endsWith("/content");
    const response=await fetch(u,{headers:owned?{Authorization:"Bearer "+key}:{},redirect:"manual"});
    if(!response.ok) throw new Error("Image content download failed: "+response.status);
    raw=Buffer.from(await response.arrayBuffer());
  } else throw new Error("Image has neither bytes nor URL");
  if(!raw.length) throw new Error("Empty image result");
  const ext=raw.subarray(0,4).equals(Buffer.from([137,80,78,71]))?"png":raw[0]===255&&raw[1]===216?"jpg":raw.toString("ascii",0,4)==="RIFF"&&raw.toString("ascii",8,12)==="WEBP"?"webp":raw.toString("utf8").trimStart().startsWith("<svg")||raw.toString("utf8").trimStart().startsWith("<?xml")?"svg":"bin";
  writeFileSync(`image-${index}.${ext}`,raw);
}
console.log("Every returned image saved; sdk-result.json retains complete metadata");
```

### Terima dan simpan hasil

#### Ailoot · 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}`

##### Simpan semua hasil yang selesai

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

Simpan setiap item data. Dekodekan setiap b64\_json atau ambil data dari setiap URL bertanda tangan yang dikembalikan. Pilih ekstensi nama file berdasarkan MIME/bytes aktual.

##### Jika respons asli perlu diperiksa

Jika hasil pembuatan atau penyuntingan gambar perlu diperiksa, simpan operation\_id/X-Client-Request-ID asli dan informasi hasil yang dikembalikan. Pulihkan hasil milik Anda yang sudah ada melalui pustaka media menggunakan nilai task\_id atau asset\_id aktual. Jangan mengirim ulang permintaan pembuatan/penyuntingan atau membuat URL polling dari operation\_id.

Kolom respons

| Kolom | Jenis |
| --- | --- |
| Kolom`created` | Jenisinteger |
| Kolom`data[].url` | Jenisstring |
| Kolom`data[].b64_json` | Jenisbase64 string |
| 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. |
| Respons`server_error` | KondisiRespons yang dikembalikan menyatakan bahwa operasi atau hasil perlu diperiksa | Langkah berikutnyaSimpan ID operasi/tugas asli yang dikembalikan, header permintaan, dan respons; lanjutkan pembacaan yang didukung untuk operasi asli tersebut. Jangan kirim ulang permintaan pembuatan. |

### Alias

#### Alias model

**Ailoot** [`gpt-image-2.5-sunburst`](https://ailoot.ai/models/id/#m=gpt-image-2.5-sunburst&route=Core&caller=gpt-image-2.5-sunburst&fmt=images), [`gpt-image`](https://ailoot.ai/models/id/#m=gpt-image-2.5-sunburst&route=Core&caller=gpt-image&fmt=images), [`gpt-image-2.5`](https://ailoot.ai/models/id/#m=gpt-image-2.5-sunburst&route=Core&caller=gpt-image-2.5&fmt=images), [`gpt-image-2.5-latest`](https://ailoot.ai/models/id/#m=gpt-image-2.5-sunburst&route=Core&caller=gpt-image-2.5-latest&fmt=images), [`gpt-image-latest`](https://ailoot.ai/models/id/#m=gpt-image-2.5-sunburst&route=Core&caller=gpt-image-latest&fmt=images)

#### Alias jalur metode

Gunakan jalur metode yang ditampilkan di atas.

#### ID pemanggil terkait

[`gpt-image-2.5-sunburst`](https://ailoot.ai/models/id/#m=gpt-image-2.5-sunburst&route=Core&caller=gpt-image-2.5-sunburst&fmt=images), [`gpt-image`](https://ailoot.ai/models/id/#m=gpt-image-2.5-sunburst&route=Core&caller=gpt-image&fmt=images), [`gpt-image-2.5`](https://ailoot.ai/models/id/#m=gpt-image-2.5-sunburst&route=Core&caller=gpt-image-2.5&fmt=images), [`gpt-image-2.5-latest`](https://ailoot.ai/models/id/#m=gpt-image-2.5-sunburst&route=Core&caller=gpt-image-2.5-latest&fmt=images), [`gpt-image-latest`](https://ailoot.ai/models/id/#m=gpt-image-2.5-sunburst&route=Core&caller=gpt-image-latest&fmt=images)

**Ailoot · Gambar** `POST /v1/images/generations` `gpt-image-2.5`

[`gpt-image-2.5`](https://ailoot.ai/models/id/#m=gpt-image-2.5-sunburst&route=Core&caller=gpt-image-2.5&fmt=images)

OpenAI /`gpt-image-2.5`

ID model

- `gpt-image-2.5-sunburst`
- `gpt-image`
- `gpt-image-2.5`
- `gpt-image-2.5-latest`
- `gpt-image-latest`

### Mulai

GPT Image 2.5 Sunburst membuat gambar dari instruksi teks. Mendukung ukuran khusus, tingkat kualitas yang diperluas, dan latar transparan; produsen juga menekankan ketepatan penyuntingan.

Masukan yang diterima

Teks

Hasil

Gambar

### Tersedia di Ailoot · masukan & metode

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

Masukan

`text`

Keluaran

`image`

Format keluaran

Berkas gambar

| Kolom | Jenis | Persyaratan | Nilai & batasan | Bawaan |
| --- | --- | --- | --- | --- |
| Kolom`model` | Jenis`string` | PersyaratanWajib | Nilai & batasan gpt-image-2.5 | Bawaan— |
| Kolom`prompt` | Jenis`string` | PersyaratanWajib | Nilai & batasan Panjang minimum: 1 | Bawaan— |
| Kolom`n` | Jenis`integer` | PersyaratanOpsional | Nilai & batasan Minimum: 1 | Bawaan1 |
| Kolom`response_format` | Jenis`string` | PersyaratanOpsional | Nilai & batasan url, b64\_json | Bawaan— |
| Kolom`stream` | Jenis`boolean` | PersyaratanOpsional | Nilai & batasan | Bawaanfalse |
| Kolom`size` | Jenis`string` | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
| Kolom`quality` | Jenis`string` | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
| Kolom`background` | Jenis`string` | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
| Kolom`output_format` | Jenis`string` | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
| Kolom`output_compression` | Jenis`integer` | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
| Kolom`moderation` | Jenis`string` | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
| Kolom`input_fidelity` | Jenis`string` | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
| Kolom`style` | Jenis`string` | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
| Kolom`partial_images` | Jenis`integer` | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |

Kombinasi bahan masukan

**Teks ke gambar** · Wajib: prompt

Parameter metode dan siklus hidup

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

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

Struktur metode dan ID bersifat eksak; kemampuan pemasok terpisah dari penerimaan permintaan.

### Paket

#### Tarif metode Ailoot

Masukan teks

US$0,005 */ 1K*

Masukan, gambar

US$0,008 */ 1K tokens*

Keluaran, gambar

US$0,03 */ 1K tokens*

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 · Gambar

curlPython SDKNode.js SDK

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
export AILOOT_API_KEY
export AILOOT_API_KEY
: "${AILOOT_PROMPT_FILE:?Set your actual UTF-8 image brief}"
export AILOOT_PROMPT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "gpt-image-2.5", "prompt": ""}')
f=Path(os.environ["AILOOT_PROMPT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 brief")
p['prompt']=f.read_text(encoding="utf-8")
if not p['prompt'].strip():raise SystemExit("Brief must contain text")
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
```

```python
from openai import OpenAI
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")

f=Path(os.environ["AILOOT_PROMPT_FILE"])
if not f.is_file():raise SystemExit("Set your actual UTF-8 image brief file")
request={'model': 'gpt-image-2.5', 'prompt': ''}
request["prompt"]=f.read_text(encoding="utf-8")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
result=client.images.generate(**request)
Path("sdk-result.txt").write_text(str(result),encoding="utf-8")
save_images([{"b64_json":getattr(item,"b64_json",None),"url":getattr(item,"url",None)} for item in result.data])
```

```js
import OpenAI from "openai";
import { readFileSync, writeFileSync } from "node:fs";
const key=process.env.AILOOT_API_KEY;
if(!key) throw new Error("Set your actual Ailoot API key");
const client=new OpenAI({baseURL:"https://api.ailoot.ai/v1",apiKey:key,maxRetries:0});
const request={"model": "gpt-image-2.5", "prompt": ""};
if(!process.env.AILOOT_PROMPT_FILE)throw new Error("Set your actual UTF-8 image brief file");
request.prompt=readFileSync(process.env.AILOOT_PROMPT_FILE,"utf8");
const result=await client.images.generate(request);
writeFileSync("sdk-result.json",JSON.stringify(result,null,2));
if(!result.data?.length) throw new Error("No completed images");
for(let index=0;index<result.data.length;index++) {
  const item=result.data[index];let encoded=item.b64_json,uri=item.url||"",raw;
  if(!encoded && uri.startsWith("data:image/")) {
    const comma=uri.indexOf(",");if(comma<0 || !uri.slice(0,comma).includes(";base64")) throw new Error("Unsupported image data URI");
    encoded=uri.slice(comma+1);
  }
  if(encoded) {
    if(encoded.length%4!==0 || !/^[A-Za-z0-9+/]*={0,2}$/.test(encoded)) throw new Error("Invalid Base64");
    raw=Buffer.from(encoded,"base64");
  } else if(uri) {
    const u=new URL(uri,"https://api.ailoot.ai");
    if(u.protocol!=="https:" || u.username || u.password) throw new Error("Invalid returned URL");
    const owned=u.origin==="https://api.ailoot.ai" && u.pathname.startsWith("/v1/media/assets/") && u.pathname.endsWith("/content");
    const response=await fetch(u,{headers:owned?{Authorization:"Bearer "+key}:{},redirect:"manual"});
    if(!response.ok) throw new Error("Image content download failed: "+response.status);
    raw=Buffer.from(await response.arrayBuffer());
  } else throw new Error("Image has neither bytes nor URL");
  if(!raw.length) throw new Error("Empty image result");
  const ext=raw.subarray(0,4).equals(Buffer.from([137,80,78,71]))?"png":raw[0]===255&&raw[1]===216?"jpg":raw.toString("ascii",0,4)==="RIFF"&&raw.toString("ascii",8,12)==="WEBP"?"webp":raw.toString("utf8").trimStart().startsWith("<svg")||raw.toString("utf8").trimStart().startsWith("<?xml")?"svg":"bin";
  writeFileSync(`image-${index}.${ext}`,raw);
}
console.log("Every returned image saved; sdk-result.json retains complete metadata");
```

### Terima dan simpan hasil

#### Ailoot · 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}`

##### Simpan semua hasil yang selesai

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

Simpan setiap item data. Dekodekan setiap b64\_json atau ambil data dari setiap URL bertanda tangan yang dikembalikan. Pilih ekstensi nama file berdasarkan MIME/bytes aktual.

##### Jika respons asli perlu diperiksa

Jika hasil pembuatan atau penyuntingan gambar perlu diperiksa, simpan operation\_id/X-Client-Request-ID asli dan informasi hasil yang dikembalikan. Pulihkan hasil milik Anda yang sudah ada melalui pustaka media menggunakan nilai task\_id atau asset\_id aktual. Jangan mengirim ulang permintaan pembuatan/penyuntingan atau membuat URL polling dari operation\_id.

Kolom respons

| Kolom | Jenis |
| --- | --- |
| Kolom`created` | Jenisinteger |
| Kolom`data[].url` | Jenisstring |
| Kolom`data[].b64_json` | Jenisbase64 string |
| 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. |
| Respons`server_error` | KondisiRespons yang dikembalikan menyatakan bahwa operasi atau hasil perlu diperiksa | Langkah berikutnyaSimpan ID operasi/tugas asli yang dikembalikan, header permintaan, dan respons; lanjutkan pembacaan yang didukung untuk operasi asli tersebut. Jangan kirim ulang permintaan pembuatan. |

### Alias

#### Alias model

**Ailoot** [`gpt-image-2.5-sunburst`](https://ailoot.ai/models/id/#m=gpt-image-2.5-sunburst&route=Core&caller=gpt-image-2.5-sunburst&fmt=images), [`gpt-image`](https://ailoot.ai/models/id/#m=gpt-image-2.5-sunburst&route=Core&caller=gpt-image&fmt=images), [`gpt-image-2.5`](https://ailoot.ai/models/id/#m=gpt-image-2.5-sunburst&route=Core&caller=gpt-image-2.5&fmt=images), [`gpt-image-2.5-latest`](https://ailoot.ai/models/id/#m=gpt-image-2.5-sunburst&route=Core&caller=gpt-image-2.5-latest&fmt=images), [`gpt-image-latest`](https://ailoot.ai/models/id/#m=gpt-image-2.5-sunburst&route=Core&caller=gpt-image-latest&fmt=images)

#### Alias jalur metode

Gunakan jalur metode yang ditampilkan di atas.

#### ID pemanggil terkait

[`gpt-image-2.5-sunburst`](https://ailoot.ai/models/id/#m=gpt-image-2.5-sunburst&route=Core&caller=gpt-image-2.5-sunburst&fmt=images), [`gpt-image`](https://ailoot.ai/models/id/#m=gpt-image-2.5-sunburst&route=Core&caller=gpt-image&fmt=images), [`gpt-image-2.5`](https://ailoot.ai/models/id/#m=gpt-image-2.5-sunburst&route=Core&caller=gpt-image-2.5&fmt=images), [`gpt-image-2.5-latest`](https://ailoot.ai/models/id/#m=gpt-image-2.5-sunburst&route=Core&caller=gpt-image-2.5-latest&fmt=images), [`gpt-image-latest`](https://ailoot.ai/models/id/#m=gpt-image-2.5-sunburst&route=Core&caller=gpt-image-latest&fmt=images)

**Ailoot · Gambar** `POST /v1/images/generations` `gpt-image-2.5-latest`

[`gpt-image-2.5-latest`](https://ailoot.ai/models/id/#m=gpt-image-2.5-sunburst&route=Core&caller=gpt-image-2.5-latest&fmt=images)

OpenAI /`gpt-image-2.5-latest`

ID model

- `gpt-image-2.5-sunburst`
- `gpt-image`
- `gpt-image-2.5`
- `gpt-image-2.5-latest`
- `gpt-image-latest`

### Mulai

GPT Image 2.5 Sunburst membuat gambar dari instruksi teks. Mendukung ukuran khusus, tingkat kualitas yang diperluas, dan latar transparan; produsen juga menekankan ketepatan penyuntingan.

Masukan yang diterima

Teks

Hasil

Gambar

### Tersedia di Ailoot · masukan & metode

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

Masukan

`text`

Keluaran

`image`

Format keluaran

Berkas gambar

| Kolom | Jenis | Persyaratan | Nilai & batasan | Bawaan |
| --- | --- | --- | --- | --- |
| Kolom`model` | Jenis`string` | PersyaratanWajib | Nilai & batasan gpt-image-2.5-latest | Bawaan— |
| Kolom`prompt` | Jenis`string` | PersyaratanWajib | Nilai & batasan Panjang minimum: 1 | Bawaan— |
| Kolom`n` | Jenis`integer` | PersyaratanOpsional | Nilai & batasan Minimum: 1 | Bawaan1 |
| Kolom`response_format` | Jenis`string` | PersyaratanOpsional | Nilai & batasan url, b64\_json | Bawaan— |
| Kolom`stream` | Jenis`boolean` | PersyaratanOpsional | Nilai & batasan | Bawaanfalse |
| Kolom`size` | Jenis`string` | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
| Kolom`quality` | Jenis`string` | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
| Kolom`background` | Jenis`string` | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
| Kolom`output_format` | Jenis`string` | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
| Kolom`output_compression` | Jenis`integer` | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
| Kolom`moderation` | Jenis`string` | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
| Kolom`input_fidelity` | Jenis`string` | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
| Kolom`style` | Jenis`string` | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
| Kolom`partial_images` | Jenis`integer` | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |

Kombinasi bahan masukan

**Teks ke gambar** · Wajib: prompt

Parameter metode dan siklus hidup

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

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

Struktur metode dan ID bersifat eksak; kemampuan pemasok terpisah dari penerimaan permintaan.

### Paket

#### Tarif metode Ailoot

Masukan teks

US$0,005 */ 1K*

Masukan, gambar

US$0,008 */ 1K tokens*

Keluaran, gambar

US$0,03 */ 1K tokens*

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 · Gambar

curlPython SDKNode.js SDK

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
export AILOOT_API_KEY
export AILOOT_API_KEY
: "${AILOOT_PROMPT_FILE:?Set your actual UTF-8 image brief}"
export AILOOT_PROMPT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "gpt-image-2.5-latest", "prompt": ""}')
f=Path(os.environ["AILOOT_PROMPT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 brief")
p['prompt']=f.read_text(encoding="utf-8")
if not p['prompt'].strip():raise SystemExit("Brief must contain text")
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
```

```python
from openai import OpenAI
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")

f=Path(os.environ["AILOOT_PROMPT_FILE"])
if not f.is_file():raise SystemExit("Set your actual UTF-8 image brief file")
request={'model': 'gpt-image-2.5-latest', 'prompt': ''}
request["prompt"]=f.read_text(encoding="utf-8")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
result=client.images.generate(**request)
Path("sdk-result.txt").write_text(str(result),encoding="utf-8")
save_images([{"b64_json":getattr(item,"b64_json",None),"url":getattr(item,"url",None)} for item in result.data])
```

```js
import OpenAI from "openai";
import { readFileSync, writeFileSync } from "node:fs";
const key=process.env.AILOOT_API_KEY;
if(!key) throw new Error("Set your actual Ailoot API key");
const client=new OpenAI({baseURL:"https://api.ailoot.ai/v1",apiKey:key,maxRetries:0});
const request={"model": "gpt-image-2.5-latest", "prompt": ""};
if(!process.env.AILOOT_PROMPT_FILE)throw new Error("Set your actual UTF-8 image brief file");
request.prompt=readFileSync(process.env.AILOOT_PROMPT_FILE,"utf8");
const result=await client.images.generate(request);
writeFileSync("sdk-result.json",JSON.stringify(result,null,2));
if(!result.data?.length) throw new Error("No completed images");
for(let index=0;index<result.data.length;index++) {
  const item=result.data[index];let encoded=item.b64_json,uri=item.url||"",raw;
  if(!encoded && uri.startsWith("data:image/")) {
    const comma=uri.indexOf(",");if(comma<0 || !uri.slice(0,comma).includes(";base64")) throw new Error("Unsupported image data URI");
    encoded=uri.slice(comma+1);
  }
  if(encoded) {
    if(encoded.length%4!==0 || !/^[A-Za-z0-9+/]*={0,2}$/.test(encoded)) throw new Error("Invalid Base64");
    raw=Buffer.from(encoded,"base64");
  } else if(uri) {
    const u=new URL(uri,"https://api.ailoot.ai");
    if(u.protocol!=="https:" || u.username || u.password) throw new Error("Invalid returned URL");
    const owned=u.origin==="https://api.ailoot.ai" && u.pathname.startsWith("/v1/media/assets/") && u.pathname.endsWith("/content");
    const response=await fetch(u,{headers:owned?{Authorization:"Bearer "+key}:{},redirect:"manual"});
    if(!response.ok) throw new Error("Image content download failed: "+response.status);
    raw=Buffer.from(await response.arrayBuffer());
  } else throw new Error("Image has neither bytes nor URL");
  if(!raw.length) throw new Error("Empty image result");
  const ext=raw.subarray(0,4).equals(Buffer.from([137,80,78,71]))?"png":raw[0]===255&&raw[1]===216?"jpg":raw.toString("ascii",0,4)==="RIFF"&&raw.toString("ascii",8,12)==="WEBP"?"webp":raw.toString("utf8").trimStart().startsWith("<svg")||raw.toString("utf8").trimStart().startsWith("<?xml")?"svg":"bin";
  writeFileSync(`image-${index}.${ext}`,raw);
}
console.log("Every returned image saved; sdk-result.json retains complete metadata");
```

### Terima dan simpan hasil

#### Ailoot · 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}`

##### Simpan semua hasil yang selesai

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

Simpan setiap item data. Dekodekan setiap b64\_json atau ambil data dari setiap URL bertanda tangan yang dikembalikan. Pilih ekstensi nama file berdasarkan MIME/bytes aktual.

##### Jika respons asli perlu diperiksa

Jika hasil pembuatan atau penyuntingan gambar perlu diperiksa, simpan operation\_id/X-Client-Request-ID asli dan informasi hasil yang dikembalikan. Pulihkan hasil milik Anda yang sudah ada melalui pustaka media menggunakan nilai task\_id atau asset\_id aktual. Jangan mengirim ulang permintaan pembuatan/penyuntingan atau membuat URL polling dari operation\_id.

Kolom respons

| Kolom | Jenis |
| --- | --- |
| Kolom`created` | Jenisinteger |
| Kolom`data[].url` | Jenisstring |
| Kolom`data[].b64_json` | Jenisbase64 string |
| 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. |
| Respons`server_error` | KondisiRespons yang dikembalikan menyatakan bahwa operasi atau hasil perlu diperiksa | Langkah berikutnyaSimpan ID operasi/tugas asli yang dikembalikan, header permintaan, dan respons; lanjutkan pembacaan yang didukung untuk operasi asli tersebut. Jangan kirim ulang permintaan pembuatan. |

### Alias

#### Alias model

**Ailoot** [`gpt-image-2.5-sunburst`](https://ailoot.ai/models/id/#m=gpt-image-2.5-sunburst&route=Core&caller=gpt-image-2.5-sunburst&fmt=images), [`gpt-image`](https://ailoot.ai/models/id/#m=gpt-image-2.5-sunburst&route=Core&caller=gpt-image&fmt=images), [`gpt-image-2.5`](https://ailoot.ai/models/id/#m=gpt-image-2.5-sunburst&route=Core&caller=gpt-image-2.5&fmt=images), [`gpt-image-2.5-latest`](https://ailoot.ai/models/id/#m=gpt-image-2.5-sunburst&route=Core&caller=gpt-image-2.5-latest&fmt=images), [`gpt-image-latest`](https://ailoot.ai/models/id/#m=gpt-image-2.5-sunburst&route=Core&caller=gpt-image-latest&fmt=images)

#### Alias jalur metode

Gunakan jalur metode yang ditampilkan di atas.

#### ID pemanggil terkait

[`gpt-image-2.5-sunburst`](https://ailoot.ai/models/id/#m=gpt-image-2.5-sunburst&route=Core&caller=gpt-image-2.5-sunburst&fmt=images), [`gpt-image`](https://ailoot.ai/models/id/#m=gpt-image-2.5-sunburst&route=Core&caller=gpt-image&fmt=images), [`gpt-image-2.5`](https://ailoot.ai/models/id/#m=gpt-image-2.5-sunburst&route=Core&caller=gpt-image-2.5&fmt=images), [`gpt-image-2.5-latest`](https://ailoot.ai/models/id/#m=gpt-image-2.5-sunburst&route=Core&caller=gpt-image-2.5-latest&fmt=images), [`gpt-image-latest`](https://ailoot.ai/models/id/#m=gpt-image-2.5-sunburst&route=Core&caller=gpt-image-latest&fmt=images)

**Ailoot · Gambar** `POST /v1/images/generations` `gpt-image-latest`

[`gpt-image-latest`](https://ailoot.ai/models/id/#m=gpt-image-2.5-sunburst&route=Core&caller=gpt-image-latest&fmt=images)

OpenAI /`gpt-image-latest`

ID model

- `gpt-image-2.5-sunburst`
- `gpt-image`
- `gpt-image-2.5`
- `gpt-image-2.5-latest`
- `gpt-image-latest`

### Mulai

GPT Image 2.5 Sunburst membuat gambar dari instruksi teks. Mendukung ukuran khusus, tingkat kualitas yang diperluas, dan latar transparan; produsen juga menekankan ketepatan penyuntingan.

Masukan yang diterima

Teks

Hasil

Gambar

### Tersedia di Ailoot · masukan & metode

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

Masukan

`text`

Keluaran

`image`

Format keluaran

Berkas gambar

| Kolom | Jenis | Persyaratan | Nilai & batasan | Bawaan |
| --- | --- | --- | --- | --- |
| Kolom`model` | Jenis`string` | PersyaratanWajib | Nilai & batasan gpt-image-latest | Bawaan— |
| Kolom`prompt` | Jenis`string` | PersyaratanWajib | Nilai & batasan Panjang minimum: 1 | Bawaan— |
| Kolom`n` | Jenis`integer` | PersyaratanOpsional | Nilai & batasan Minimum: 1 | Bawaan1 |
| Kolom`response_format` | Jenis`string` | PersyaratanOpsional | Nilai & batasan url, b64\_json | Bawaan— |
| Kolom`stream` | Jenis`boolean` | PersyaratanOpsional | Nilai & batasan | Bawaanfalse |
| Kolom`size` | Jenis`string` | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
| Kolom`quality` | Jenis`string` | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
| Kolom`background` | Jenis`string` | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
| Kolom`output_format` | Jenis`string` | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
| Kolom`output_compression` | Jenis`integer` | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
| Kolom`moderation` | Jenis`string` | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
| Kolom`input_fidelity` | Jenis`string` | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
| Kolom`style` | Jenis`string` | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |
| Kolom`partial_images` | Jenis`integer` | PersyaratanOpsional | Nilai & batasan Bergantung pada model | Bawaan— |

Kombinasi bahan masukan

**Teks ke gambar** · Wajib: prompt

Parameter metode dan siklus hidup

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

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

Struktur metode dan ID bersifat eksak; kemampuan pemasok terpisah dari penerimaan permintaan.

### Paket

#### Tarif metode Ailoot

Masukan teks

US$0,005 */ 1K*

Masukan, gambar

US$0,008 */ 1K tokens*

Keluaran, gambar

US$0,03 */ 1K tokens*

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 · Gambar

curlPython SDKNode.js SDK

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
export AILOOT_API_KEY
export AILOOT_API_KEY
: "${AILOOT_PROMPT_FILE:?Set your actual UTF-8 image brief}"
export AILOOT_PROMPT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "gpt-image-latest", "prompt": ""}')
f=Path(os.environ["AILOOT_PROMPT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 brief")
p['prompt']=f.read_text(encoding="utf-8")
if not p['prompt'].strip():raise SystemExit("Brief must contain text")
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
```

```python
from openai import OpenAI
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")

f=Path(os.environ["AILOOT_PROMPT_FILE"])
if not f.is_file():raise SystemExit("Set your actual UTF-8 image brief file")
request={'model': 'gpt-image-latest', 'prompt': ''}
request["prompt"]=f.read_text(encoding="utf-8")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
result=client.images.generate(**request)
Path("sdk-result.txt").write_text(str(result),encoding="utf-8")
save_images([{"b64_json":getattr(item,"b64_json",None),"url":getattr(item,"url",None)} for item in result.data])
```

```js
import OpenAI from "openai";
import { readFileSync, writeFileSync } from "node:fs";
const key=process.env.AILOOT_API_KEY;
if(!key) throw new Error("Set your actual Ailoot API key");
const client=new OpenAI({baseURL:"https://api.ailoot.ai/v1",apiKey:key,maxRetries:0});
const request={"model": "gpt-image-latest", "prompt": ""};
if(!process.env.AILOOT_PROMPT_FILE)throw new Error("Set your actual UTF-8 image brief file");
request.prompt=readFileSync(process.env.AILOOT_PROMPT_FILE,"utf8");
const result=await client.images.generate(request);
writeFileSync("sdk-result.json",JSON.stringify(result,null,2));
if(!result.data?.length) throw new Error("No completed images");
for(let index=0;index<result.data.length;index++) {
  const item=result.data[index];let encoded=item.b64_json,uri=item.url||"",raw;
  if(!encoded && uri.startsWith("data:image/")) {
    const comma=uri.indexOf(",");if(comma<0 || !uri.slice(0,comma).includes(";base64")) throw new Error("Unsupported image data URI");
    encoded=uri.slice(comma+1);
  }
  if(encoded) {
    if(encoded.length%4!==0 || !/^[A-Za-z0-9+/]*={0,2}$/.test(encoded)) throw new Error("Invalid Base64");
    raw=Buffer.from(encoded,"base64");
  } else if(uri) {
    const u=new URL(uri,"https://api.ailoot.ai");
    if(u.protocol!=="https:" || u.username || u.password) throw new Error("Invalid returned URL");
    const owned=u.origin==="https://api.ailoot.ai" && u.pathname.startsWith("/v1/media/assets/") && u.pathname.endsWith("/content");
    const response=await fetch(u,{headers:owned?{Authorization:"Bearer "+key}:{},redirect:"manual"});
    if(!response.ok) throw new Error("Image content download failed: "+response.status);
    raw=Buffer.from(await response.arrayBuffer());
  } else throw new Error("Image has neither bytes nor URL");
  if(!raw.length) throw new Error("Empty image result");
  const ext=raw.subarray(0,4).equals(Buffer.from([137,80,78,71]))?"png":raw[0]===255&&raw[1]===216?"jpg":raw.toString("ascii",0,4)==="RIFF"&&raw.toString("ascii",8,12)==="WEBP"?"webp":raw.toString("utf8").trimStart().startsWith("<svg")||raw.toString("utf8").trimStart().startsWith("<?xml")?"svg":"bin";
  writeFileSync(`image-${index}.${ext}`,raw);
}
console.log("Every returned image saved; sdk-result.json retains complete metadata");
```

### Terima dan simpan hasil

#### Ailoot · 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}`

##### Simpan semua hasil yang selesai

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

Simpan setiap item data. Dekodekan setiap b64\_json atau ambil data dari setiap URL bertanda tangan yang dikembalikan. Pilih ekstensi nama file berdasarkan MIME/bytes aktual.

##### Jika respons asli perlu diperiksa

Jika hasil pembuatan atau penyuntingan gambar perlu diperiksa, simpan operation\_id/X-Client-Request-ID asli dan informasi hasil yang dikembalikan. Pulihkan hasil milik Anda yang sudah ada melalui pustaka media menggunakan nilai task\_id atau asset\_id aktual. Jangan mengirim ulang permintaan pembuatan/penyuntingan atau membuat URL polling dari operation\_id.

Kolom respons

| Kolom | Jenis |
| --- | --- |
| Kolom`created` | Jenisinteger |
| Kolom`data[].url` | Jenisstring |
| Kolom`data[].b64_json` | Jenisbase64 string |
| 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. |
| Respons`server_error` | KondisiRespons yang dikembalikan menyatakan bahwa operasi atau hasil perlu diperiksa | Langkah berikutnyaSimpan ID operasi/tugas asli yang dikembalikan, header permintaan, dan respons; lanjutkan pembacaan yang didukung untuk operasi asli tersebut. Jangan kirim ulang permintaan pembuatan. |

### Alias

#### Alias model

**Ailoot** [`gpt-image-2.5-sunburst`](https://ailoot.ai/models/id/#m=gpt-image-2.5-sunburst&route=Core&caller=gpt-image-2.5-sunburst&fmt=images), [`gpt-image`](https://ailoot.ai/models/id/#m=gpt-image-2.5-sunburst&route=Core&caller=gpt-image&fmt=images), [`gpt-image-2.5`](https://ailoot.ai/models/id/#m=gpt-image-2.5-sunburst&route=Core&caller=gpt-image-2.5&fmt=images), [`gpt-image-2.5-latest`](https://ailoot.ai/models/id/#m=gpt-image-2.5-sunburst&route=Core&caller=gpt-image-2.5-latest&fmt=images), [`gpt-image-latest`](https://ailoot.ai/models/id/#m=gpt-image-2.5-sunburst&route=Core&caller=gpt-image-latest&fmt=images)

#### Alias jalur metode

Gunakan jalur metode yang ditampilkan di atas.

#### ID pemanggil terkait

[`gpt-image-2.5-sunburst`](https://ailoot.ai/models/id/#m=gpt-image-2.5-sunburst&route=Core&caller=gpt-image-2.5-sunburst&fmt=images), [`gpt-image`](https://ailoot.ai/models/id/#m=gpt-image-2.5-sunburst&route=Core&caller=gpt-image&fmt=images), [`gpt-image-2.5`](https://ailoot.ai/models/id/#m=gpt-image-2.5-sunburst&route=Core&caller=gpt-image-2.5&fmt=images), [`gpt-image-2.5-latest`](https://ailoot.ai/models/id/#m=gpt-image-2.5-sunburst&route=Core&caller=gpt-image-2.5-latest&fmt=images), [`gpt-image-latest`](https://ailoot.ai/models/id/#m=gpt-image-2.5-sunburst&route=Core&caller=gpt-image-latest&fmt=images)

FAQ · GPT Image 2.5 Sunburst

Input dan hasil apa yang tersedia?

`POST /v1/images/generations` · `gpt-image-2.5-sunburst`: `text` → `image` `POST /v1/images/generations` · `gpt-image`: `text` → `image` `POST /v1/images/generations` · `gpt-image-2.5`: `text` → `image` `POST /v1/images/generations` · `gpt-image-2.5-latest`: `text` → `image` `POST /v1/images/generations` · `gpt-image-latest`: `text` → `image`

Kolom apa yang digunakan permintaan?

`POST /v1/images/generations` · `gpt-image-2.5-sunburst`: `model`, `prompt`, `n`, `response_format`, `stream` `POST /v1/images/generations` · `gpt-image`: `model`, `prompt`, `n`, `response_format`, `stream` `POST /v1/images/generations` · `gpt-image-2.5`: `model`, `prompt`, `n`, `response_format`, `stream` `POST /v1/images/generations` · `gpt-image-2.5-latest`: `model`, `prompt`, `n`, `response_format`, `stream` `POST /v1/images/generations` · `gpt-image-latest`: `model`, `prompt`, `n`, `response_format`, `stream`

Batasan apa yang berlaku?

`POST /v1/images/generations` · `gpt-image-2.5-sunburst`: `n.minimum`: `1` `POST /v1/images/generations` · `gpt-image`: `n.minimum`: `1` `POST /v1/images/generations` · `gpt-image-2.5`: `n.minimum`: `1` `POST /v1/images/generations` · `gpt-image-2.5-latest`: `n.minimum`: `1` `POST /v1/images/generations` · `gpt-image-latest`: `n.minimum`: `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.
