Ketuk ••• di pojok kanan atas ↗

Buka di Google Chrome

Browser aplikasi media sosial (TikTok / Facebook / IG) membatasi login otomatis Google. Buka di Google Chrome agar akun Anda langsung terhubung dengan lancar.

Buka dengan Google Chrome
Dokumentasi Resmi OpenAI-Compatible REST API

Panduan Integrasi API Gateway AI Studio

Integrasikan kecerdasan buatan terkemuka ke aplikasi Anda dengan standar OpenAI REST API: dari percakapan LLM (Gemini 3.1 Flash, Gemini 3.7 Flash, Gemini 3.8 Flash), sesi obrolan terkelola hemat kuota, analisis multimodal vision (gambar PNG/JPG/WEBP), hingga pembuatan visual foto (Banana Pro, ChatGpt V2), hingga 30 karakter Studio Voice TTS, hingga generator Video AI (Omni Flash).

Buka Studio AI Login Dapatkan API Key
1. Arsitektur & Autentikasi API
REST API

API Gateway AiStudio.ID mengimplementasikan standar REST OpenAI secara penuh. Anda dapat langsung menggunakan SDK resmi OpenAI (Python, TypeScript, LangChain, LlamaIndex, Cursor, VS Code) cukup dengan mengganti baseURL dan mengisi apiKey.

Base URL: https://aistudio.id/v1

Metode Autentikasi API Key:

Header / Parameter Contoh Nilai Keterangan
Authorization Bearer API_KEY_MILIKMU Standar Resmi OpenAI
X-API-Key API_KEY_MILIKMU Header alternatif untuk request langsung
?api_key= ?api_key=API_KEY_MILIKMU Query parameter URL untuk pengujian cepat

Endpoint Utility Akun & Model:

Method & Endpoint Deskripsi Autentikasi
GET /v1/models Mengambil daftar lengkap model AI aktif yang siap digunakan Publik / Opsional Bearer Key
GET /v1/balance Mengecek sisa saldo koin akun (total, gratis, & berbayar) Wajib Bearer Key
GET /v1/dashboard/billing/credit_grants Kompatibilitas cek koin untuk aplikasi client seperti NextChat & Chatbox Wajib Bearer Key
2. Lineup Model AI Aktif & Tarif

Daftar model yang sedang aktif dan siap dipanggil melalui API Gateway:

Penghitungan Token & Ongkos Koin LLM Chat:
Tarif model Chat / LLM dihitung secara proporsional per 1 Juta (1.000.000) token gabungan (input prompt + output completion). Jika percakapan Anda hanya memakai sedikit token, sistem menghitung biayanya secara adil dan presisi tinggi (hingga 0,00001 Koin), dengan tampilan dibulatkan maksimal 2 desimal (,00) agar ringkas.
Contoh: Model dengan tarif 100 Koin / 1M Token, jika request Anda menghabiskan 1.250 token, biayanya hanya 0,13 Koin.
Model Identifier Kategori Nama Model Tarif Pemotongan Aksi
gemini-3-1-flash Chat / LLM Gemini 3.1 Flash Non-Streaming & No AI Agent 50 Koin / 1M Token
gemini-3.7-flash Chat / LLM Gemini 3.7 Flash 100 Koin / 1M Token
gemini-3.8-flash Chat / LLM Gemini 3.8 Flash 150 Koin / 1M Token
tts-1 Voice TTS Google Studio TTS 1 Koin / 1.000 Karakter (Proporsional)
tts-multi Voice TTS Studio Voice Multi-Speaker (Podcast & Dialog) 1 Koin / 1.000 Karakter (Proporsional)
banana-pro Image Studio Banana Pro 5 Koin / 1x Gambar
gpt_imagev2 Image Studio ChatGpt V2 8 Koin / 1x Gambar
google-omni Video AI Omni Flash 20 Koin / 1x Video
image-upscale Media Image SuperScale HD/4K 1 Koin / 1x Gambar
video-upscale Media Video SuperScale 1K/2K/4K 5 Koin / 1x Video
video-merge Media Video Merge Instan (~0.5s) 5 Koin / 1x Video
video-antidup Media Video Anti-Duplikasi AI Bypass 5 Koin / 1x Video
watermark-cleaner Media Pembersih Watermark Video AI (Google) 1 Koin / 1x Video
1. LLM Teks Standar & Realtime Streaming
POST /v1/chat/completions

Gunakan endpoint ini untuk percakapan teks, penalaran (reasoning), pembuatan artikel, analisis kode, dan respons streaming karakter demi karakter. Mendukung 2 moda keluaran:

  • Realtime Streaming (SSE): Set "stream": true pada request body. Gateway akan mengalirkan token respons kata per kata secara instan tanpa menunggu kalimat selesai melalui protokol standar Server-Sent Events (SSE).
  • Respon Penuh (Non-Streaming): Set "stream": false (default). Gateway menunggu hingga kalimat tuntas dan mengembalikan satu objek JSON utuh.
  • Di Studio Playground: Anda dapat menyalakan/mematikan streaming cukup dengan menekan tombol "Stream: ON / OFF" pada toolbar atas obrolan.
Model: gemini-3-1-flash Streaming: SSE (stream: true) Format: JSON / text/event-stream
Penting: Batasan Model gemini-3-1-flash (Non-Streaming & Tanpa AI Agent)
Model gemini-3-1-flash dirancang khusus untuk inferensi percakapan teks satu arah (single-turn non-streaming). Model ini TIDAK MENDUKUNG mode streaming (Server-Sent Events) dan TIDAK MENDUKUNG AI Agent / Tool Calling / Function Calling.
Jika integrasi aplikasi Anda mewajibkan streaming realtime atau arsitektur AI Agent (seperti LangChain, CrewAI, AutoGen, Cursor, dll), silakan gunakan model gemini-3.7-flash atau gemini-3.8-flash.
Contoh 1: Request Standar (Non-Streaming - stream: false)
{
  "model": "gemini-3-1-flash",
  "messages": [
    {
      "role": "system",
      "content": "Anda adalah asisten AI profesional dan ahli rekayasa perangkat lunak."
    },
    {
      "role": "user",
      "content": "Jelaskan konsep microservices secara singkat!"
    }
  ],
  "temperature": 0.7,
  "stream": false
}
Response Non-Streaming (JSON Lengkap)
{
  "id": "chatcmpl-a9f82d1c7e90",
  "object": "chat.completion",
  "created": 1724567890,
  "model": "gemini-3-1-flash",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "Microservices adalah pendekatan arsitektur di mana aplikasi dibangun sebagai kumpulan modul layanan kecil yang independen..."
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 28,
    "completion_tokens": 120,
    "total_tokens": 148
  }
}
Contoh 2: Request Realtime Streaming (stream: true)
{
  "model": "gemini-3-1-flash",
  "messages": [
    {
      "role": "user",
      "content": "Tuliskan 3 tips produktivitas kerja sehari-hari!"
    }
  ],
  "stream": true
}
Response Aliran Realtime (Server-Sent Events / SSE Chunks)
data: {"id":"chatcmpl-09370f0f5173","object":"chat.completion.chunk","created":1789288684,"model":"gemini-3.7-flash","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}

data: {"id":"chatcmpl-09370f0f5173","object":"chat.completion.chunk","created":1789288684,"model":"gemini-3.7-flash","choices":[{"index":0,"delta":{"content":"Berikut "},"finish_reason":null}]}

data: {"id":"chatcmpl-09370f0f5173","object":"chat.completion.chunk","created":1789288684,"model":"gemini-3.7-flash","choices":[{"index":0,"delta":{"content":"3 tips "},"finish_reason":null}]}

data: {"id":"chatcmpl-09370f0f5173","object":"chat.completion.chunk","created":1789288684,"model":"gemini-3.7-flash","choices":[{"index":0,"delta":{"content":"produktivitas..."},"finish_reason":null}]}

data: [DONE]
2. LLM Multimodal Vision (Teks + Analisis Gambar)
POST /v1/chat/completions

Kirimkan gambar untuk dianalisis, dideskripsikan, atau diekstrak datanya (OCR) melalui struktur konten array OpenAI Vision standard. Catatan: Chat multimodal hanya mendukung format Base64 Data URL (bukan tautan URL HTTP/HTTPS).

Ketentuan Format Gambar Multimodal (Wajib Base64):
  • Hanya Format Base64 Data URL: Gambar wajib dikirimkan dalam bentuk Base64 Data URL (contoh: data:image/jpeg;base64,... atau data:image/png;base64,...).
  • URL Gambar Publik (HTTP / HTTPS) Tidak Didukung: Gateway tidak menerima tautan langsung berupa URL online (seperti https://domain.com/foto.jpg). Pastikan file gambar dikonversi menjadi Base64 di aplikasi klien / frontend terlebih dahulu.
  • Tipe File yang Didukung: PNG, JPG/JPEG, WEBP, dan GIF.
Payload Request Multimodal Vision (Format Base64 Data URL)
{
  "model": "gemini-3-1-flash",
  "messages": [
    {
      "role": "user",
      "content": [
        {
          "type": "text",
          "text": "Analisa gambar berikut dan jelaskan grafik penjualan yang ada di dalamnya secara detail."
        },
        {
          "type": "image_url",
          "image_url": {
            "url": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAP//////////////////////////////////////////////////////////////////////////////////////wgALCAABAAEBAREA/8QAFBABAAAAAAAAAAAAAAAAAAAAAP/aAAgBAQABPxA="
          }
        }
      ]
    }
  ],
  "temperature": 0.5
}
3. Sesi Obrolan Terkelola (Server-Side Session Memory)
POST /v1/chat/completions GET /v1/chat/sessions

Fitur unggulan AI Studio untuk menghemat kuota dan memangkas ukuran data payload jaringan. Klien TIDAK PERLU mengirimkan seluruh riwayat percakapan lama saat melanjutkan obrolan. Cukup sertakan session_id dan kirim 1 pesan giliran terbaru.

Keunggulan Efisiensi Sistem Sesi Obrolan:
  • Hemat Bandwidth 95%+: Percakapan ke-50 hanya mengirim 1 objek pesan baru, bukan riwayat panjang yang berat.
  • Rekonstruksi Otomatis di Server: AI Gateway otomatis mengambil riwayat percakapan dari database, merekonstruksi konteks lengkap, dan menyematkan header sesi ke provider upstream.
  • Mendukung Header Alternatif: Parameter session_id dapat dikirim melalui body JSON atau HTTP header X-Session-Id.
  • Kompatibel Realtime SSE: Mendukung streaming dengan penandaan awal meta event type: "meta" berisi ID sesi aktif.
Parameter: session_id Header: X-Session-Id Manajemen Sesi: /v1/chat/sessions
Langkah 1: Inisialisasi Sesi & Pesan Pertama
{
  "model": "gemini-3-1-flash",
  "session_id": "conv_client_001",
  "system_prompt": "Anda adalah konsultan bisnis profesional.",
  "messages": [
    {
      "role": "user",
      "content": "Halo! Perusahaan saya bernama PT Maju Makmur berbasis di Surabaya."
    }
  ]
}
Langkah 2: Melanjutkan Percakapan (CUKUP Kirim 1 Pesan Terbaru!)
{
  "model": "gemini-3-1-flash",
  "session_id": "conv_client_001",
  "messages": [
    {
      "role": "user",
      "content": "Sebutkan nama perusahaan saya dan di kota mana saya berbasis?"
    }
  ]
}
Format Alternatif Ultra-Ringkas (Single Message String)
{
  "model": "gemini-3-1-flash",
  "session_id": "conv_client_001",
  "message": "Apa rekomendasi strategi ekspansi bisnis untuk perusahaan saya?"
}
Endpoint REST: Mengelola Daftar & Riwayat Sesi (/v1/chat/sessions)
# 1. Mendapatkan daftar seluruh sesi obrolan Anda:
curl -X GET "https://aistudio.id/v1/chat/sessions" \
  -H "Authorization: Bearer API_KEY_MILIKMU"

# 2. Mengambil riwayat pesan lengkap dari sebuah sesi:
curl -X GET "https://aistudio.id/v1/chat/sessions?session_id=conv_client_001" \
  -H "Authorization: Bearer API_KEY_MILIKMU"

# 3. Menghapus sesi obrolan beserta seluruh riwayat pesannya:
curl -X DELETE "https://aistudio.id/v1/chat/sessions?session_id=conv_client_001" \
  -H "Authorization: Bearer API_KEY_MILIKMU"
4. Text-to-Image (Pembuatan Gambar dari Teks)
POST /v1/images/generations

Hasilkan visual, ilustrasi produk, poster promosi, dan karya seni digital berkualitas photorealistic dari deskripsi teks.

Model: banana-pro Rasio: 1:1, 16:9, 9:16, 4:3, 3:4 Format: URL / Base64
Payload Request Text-to-Image
{
  "model": "banana-pro",
  "prompt": "Modern coffee shop interior with wooden minimalist aesthetics, warm sunlight through large window, plants, highly detailed 8k photography",
  "size": "1024x1024",
  "aspect_ratio": "16:9",
  "response_format": "url",
  "n": 1
}
Contoh Response (JSON)
{
  "success": true,
  "created": 1724567920,
  "model": "banana-pro",
  "data": [
    {
      "url": "https://aistudio.id/uploads/ai_gallery/images/img_1724567920_ab12cd.png",
      "revised_prompt": "Modern coffee shop interior with wooden minimalist aesthetics..."
    }
  ]
}
5. Image-to-Image & Multi-Reference (Gambar ke Gambar)
POST /v1/images/generations

Modifikasi gambar yang sudah ada atau gabungkan 1 hingga 3 foto referensi (karakter, objek, wajah, atau gaya visual) dengan menyertakan referensi gambar (wajib Base64 Data URL: data:image/jpeg;base64,... atau data:image/png;base64,...) beserta prompt instruksi.

Ketentuan Format Foto Acuan Image-to-Image (Wajib Base64):
Foto referensi pada parameter image_references (atau image / image_inputs) wajib menggunakan format Base64 Data URL (contoh: data:image/jpeg;base64,/9j/4AAQ...). Input berupa tautan URL web langsung (http:// atau https://) tidak didukung dan akan ditolak oleh gateway.
Payload Request Image-to-Image (1 s/d 3 Foto Referensi Wajib Base64)
{
  "model": "banana-pro",
  "prompt": "Ganti kostum karakter dari foto acuan menjadi pakaian Cyberpunk dan latar belakang kota Tokyo masa depan malam hari",
  "image_references": [
    "data:image/jpeg;base64,/9j/4AAQSkZJRg...",
    "data:image/jpeg;base64,/9j/4AAQSkZJRg..."
  ],
  "aspect_ratio": "1:1",
  "response_format": "url"
}

Catatan: Anda juga dapat menggunakan format single string "image": "data:image/png;base64,..." atau array "image_inputs": [...] hingga maksimal 3 foto acuan (semuanya wajib format Base64 Data URL).

6. ChatGpt V2 — ChatGPT Image Studio (DALL-E 3 & Estuary)
POST /v1/images/generations

ChatGpt V2 adalah model generator gambar AI generasi terbaru dengan engine visual DALL-E 3 & Estuary. Model ini memiliki keunggulan luar biasa dalam kepatuhan teks (*prompt adherence*), detail tipografi tulisan/logo di dalam gambar, pencahayaan fotorealistik, dan kemampuan Multi-Reference hingga 5 foto acuan untuk menjaga konsistensi karakter.

Model: gpt_imagev2 Tarif: 8 Koin / Gambar Engine: DALL-E 3 & Estuary Rasio: 1:1, 9:16, 16:9 Multi-Ref: Hingga 5 Foto Format: URL / Base64

Parameter Request (JSON)

Field Parameter Tipe Data Wajib? Deskripsi & Nilai yang Didukung
model String Wajib Identifier model: "gpt_imagev2" (bisa menggunakan alias: "Gpt_imagev2", "gpt-image-v2").
prompt String Wajib Deskripsi visual gambar yang ingin dibuat. Disarankan berbahasa Inggris untuk detail artistik maksimal.
aspect_ratio String Opsional Pilihan rasio aspek kanvas: "1:1" (Persegi/Default), "9:16" (Portrait/Shorts/TikTok), atau "16:9" (Landscape/YouTube/Banner).
size String Opsional Resolusi kanvas standar: "1024x1024" (1:1), "1024x1792" (9:16), atau "1792x1024" (16:9).
image_references Array of String Opsional Daftar 1 hingga 5 foto acuan berformat Base64 Data URL (data:image/jpeg;base64,... atau data:image/png;base64,...) untuk mode Image-to-Image konsistensi visual.
style String Opsional Preset gaya gambar visual: "photorealistic", "anime", "3d_render", "cyberpunk", atau "watercolor".
response_format String Opsional Format output gambar: "url" (default, tautan unduhan CDN siap pakai) atau "b64_json" (string mentah Base64).
n Integer Opsional Jumlah gambar yang di-generate (default: 1, maksimal 4).
Contoh 1: Text-to-Image (cURL Bash)
curl -X POST "https://aistudio.id/v1/images/generations" \
  -H "Authorization: Bearer aist-af675da7a8355c09d8d11ebdc517de15" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt_imagev2",
    "prompt": "Cyberpunk barista robot pouring glowing neon latte in a rainy Tokyo alley coffee shop, cinematic lighting, 8k photography, ultra detailed",
    "aspect_ratio": "9:16",
    "size": "1024x1792",
    "response_format": "url",
    "n": 1
  }'
Contoh 2: Image-to-Image Multi-Reference (Hingga 5 Foto Base64)
curl -X POST "https://aistudio.id/v1/images/generations" \
  -H "Authorization: Bearer aist-af675da7a8355c09d8d11ebdc517de15" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt_imagev2",
    "prompt": "Pertahankan wajah karakter dari foto referensi 1, padukan dengan pose dari referensi 2 dan warna kostum pada referensi 3. Beri latar belakang istana megah bersalju.",
    "aspect_ratio": "16:9",
    "image_references": [
      "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD...",
      "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD...",
      "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..."
    ],
    "response_format": "url"
  }'
Contoh 3: Integrasi Python (Library OpenAI Resmi)
from openai import OpenAI

client = OpenAI(
    api_key="aist-af675da7a8355c09d8d11ebdc517de15",
    base_url="https://aistudio.id/v1"
)

# Pemanggilan Generate Gambar Gpt_imagev2
response = client.images.generate(
    model="gpt_imagev2",
    prompt="Kucing putih bermahkota emas duduk di singgasana batu permata, gaya lukisan Renaissance, 8k",
    size="1024x1024",
    n=1
)

# Ambil URL hasil gambar yang telah tersimpan di server
image_url = response.data[0].url
print("URL Gambar AI:", image_url)
Contoh 4: Integrasi PHP Native cURL
<?php
$apiKey = 'aist-af675da7a8355c09d8d11ebdc517de15';
$endpoint = 'https://aistudio.id/v1/images/generations';

$payload = [
    'model'        => 'gpt_imagev2',
    'prompt'       => 'Pemandangan sawah terasering di Bali saat fajar matahari terbit, kabut pagi lembut, ultra-photorealistic',
    'aspect_ratio' => '16:9',
    'size'         => '1792x1024',
    'response_format' => 'url'
];

$ch = curl_init($endpoint);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($payload),
    CURLOPT_TIMEOUT        => 180, // Rekomendasi timeout 180s untuk proses render gambar
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer {$apiKey}",
        "Content-Type: application/json"
    ],
    CURLOPT_SSL_VERIFYPEER => false
]);

$response = curl_exec($ch);
curl_close($ch);

$result = json_decode($response, true);
if (!empty($result['data'][0]['url'])) {
    echo "Gambar Berhasil Dibuat: " . $result['data'][0]['url'] . PHP_EOL;
} else {
    echo "Gagal: " . ($result['error']['message'] ?? 'Unknown Error') . PHP_EOL;
}
?>
Rekomendasi Mode Asinkron (Async Job Tracking)
Karena proses render gambar AI ChatGPT berkualitas tinggi membutuhkan waktu berkisar 45–65 detik, untuk aplikasi web atau mobile production Anda disarankan menyertakan parameter "async": true agar request awal segera mengembalikan job_id tanpa risiko timeout koneksi (Cloudflare 100s / reverse proxy). Selanjutnya aplikasi Anda cukup melakukan polling ke endpoint /v1/images/status/{job_id} setiap 2.5–3 detik.
Langkah 1: Submit Job Asinkron (POST /v1/images/generations)
curl -X POST "https://aistudio.id/v1/images/generations" \
  -H "Authorization: Bearer aist-af675da7a8355c09d8d11ebdc517de15" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt_imagev2",
    "prompt": "Futuristic electric supercar on wet asphalt street, cinematic neon reflections, 8k",
    "aspect_ratio": "16:9",
    "async": true
  }'
Response Langsung Submit Asinkron (HTTP 200)
{
  "success": true,
  "ok": true,
  "job_id": "a1e7bbdaffc94ea6aefbe50be8b3023a",
  "status": "queued",
  "model": "gpt_imagev2",
  "poll_url": "https://aistudio.id/v1/images/status/a1e7bbdaffc94ea6aefbe50be8b3023a",
  "message": "Permintaan pembuatan gambar ChatGPT berhasil didaftarkan ke antrean."
}
Langkah 2: Pengecekan Status Job (GET /v1/images/status/{job_id})
curl -X GET "https://aistudio.id/v1/images/status/a1e7bbdaffc94ea6aefbe50be8b3023a" \
  -H "Authorization: Bearer aist-af675da7a8355c09d8d11ebdc517de15"
Response Status Saat Selesai (status: "done")
{
  "success": true,
  "status": "done",
  "job_id": "a1e7bbdaffc94ea6aefbe50be8b3023a",
  "model": "gpt_imagev2",
  "duration_s": 58.4,
  "data": [
    {
      "url": "https://aistudio.id/uploads/creations/images/img_gpt_1790532938_a1e7bb.png",
      "revised_prompt": "Futuristic electric supercar on wet asphalt street..."
    }
  ],
  "image_url": "https://aistudio.id/uploads/creations/images/img_gpt_1790532938_a1e7bb.png"
}
Monitoring Ketersediaan Server & Antrean (GET /v1/images/status)
curl -X GET "https://aistudio.id/v1/images/status" \
  -H "Authorization: Bearer aist-af675da7a8355c09d8d11ebdc517de15"
7. Studio Voice TTS (Text-to-Speech 24kHz)
POST /v1/audio/speech

Konversi naskah teks menjadi suara narasi manusia alami berkualitas studio 24kHz. Gateway menyediakan 30 karakter suara AI. Masukkan ID karakter suara pilihan Anda pada parameter voice (misal: Paijah, Tukiran, Dimas, Rudi).

Model: tts-1 Tarif: 1 Koin / 1.000 Karakter (Proporsional) Total 30 Suara (15 Wanita & 15 Pria) Format: WAV 24kHz PCM / JSON
ID Suara (voice) Gender Karakter / Gaya Tone Sampel Suara (Preview)
Paijah Perempuan Santai & Anggun
Kartini_Kore_Perempuan.wav
Sarah Perempuan Ceria & Energetik
Sarah_Aoede_Perempuan.wav
Ayu Perempuan Rapi & Formal
Ayu_Autonoe_Perempuan.wav
Sri Perempuan Keibuan & Adem
Sri_Callirrhoe_Perempuan.wav
Sumiati Perempuan Elegan & Jelas
Sumiati_Despina_Perempuan.wav
Nurhayati Perempuan Teratur & Informatif
Nurhayati_Erinome_Perempuan.wav
Sulastri Perempuan Lembut & Empatik
Sulastri_Gacrux_Perempuan.wav
Zainab Perempuan Ramah & Komunikatif
Zainab_Achernar_Perempuan.wav
Dewi Perempuan Imut & Ceria
Dewi_Laomedeia_Perempuan.wav
Fitri Perempuan Semangat & Cerah
Fitri_Leda_Perempuan.wav
Wulan Perempuan Halus & Puitis
Wulan_Pulcherrima_Perempuan.wav
Tukiran Perempuan Clear & Jelas
Tukiran_Puck_Laki-laki.wav
Laras Perempuan Tenang & Nyaman
Laras_Sulafat_Perempuan.wav
Intan Perempuan Lugas & PD
Intan_Vindemiatrix_Perempuan.wav
Siti Perempuan Segar & Asyik
Siti_Zephyr_Perempuan.wav
Rudi Laki-laki Tegas & Wibawa
Rudi_Achird_Laki-laki.wav
Ahmad Laki-laki Santai & Friendly
Ahmad_Algenib_Laki-laki.wav
Paimin Laki-laki Kalem & Santai
Paimin_Algieba_Laki-laki.wav
Slamet Laki-laki Bijak & Dalam
Slamet_Alnilam_Laki-laki.wav
Bambang Laki-laki Pro & Mantap
Bambang_Charon_Laki-laki.wav
Paijo Laki-laki Heboh & Seru
Paijo_Enceladus_Laki-laki.wav
Agus Laki-laki Semangat & Muda
Agus_Fenrir_Laki-laki.wav
Joko Laki-laki Berat & Maskulin
Joko_Iapetus_Laki-laki.wav
Herman Laki-laki Nge-bass & Mantap
Herman_Orus_Laki-laki.wav
Supardi Laki-laki Kebapakan & Adem
Supardi_Rasalgethi_Laki-laki.wav
Mulyadi Laki-laki Lantang & Seru
Mulyadi_Sadachbia_Laki-laki.wav
Dimas Laki-laki Gaul & Modern
Dimas_Sadaltager_Laki-laki.wav
Wahyu Laki-laki Formal & Penyiar
Wahyu_Schedar_Laki-laki.wav
Gilang Laki-laki Ramah & Asyik
Gilang_Umbriel_Laki-laki.wav
Budi Laki-laki Natural & Jelas
Budi_Zubenelgenubi_Laki-laki.wav

Preset Intonasi & Gaya Bicara (Parameter intonation)

Anda dapat mengatur nuansa emosi dan pembawaan suara AI dengan menambahkan parameter intonation. Anda bisa menggunakan 6 preset resmi di bawah atau menuliskan instruksi intonasi kustom Anda sendiri.

Preset Emosi Karakter Emosi Contoh Nilai Parameter intonation
Ceria & Energetik Penuh semangat, ceria, antusias "Ceria, penuh semangat, dan antusias"
Formal & Berita Wibawa, profesional, pembaca berita "Formal, wibawa, dan profesional seperti pembaca berita"
Bisikan & ASMR Berbisik lembut, misterius, dramatis "Berbisik lembut, misterius, dan dramatis seperti cerita fantasi/ASMR"
Santai & Hangat Casual, hangat, ramah, bersahabat "Santai, hangat, ramah, dan bersahabat"
Teatrikal & Drama Ekspresif, dramatis, emosi tinggi "Ekspresif, dramatis, dengan intonasi emosi tinggi"
Tenang & Meditasi Perlahan, halus, menenangkan "Tenang, perlahan, halus, dan menenangkan seperti instruktur meditasi"
Intonasi Kustom Bebas deskripsikan suasana apa pun "Bicara cepat penuh ketegangan", "Lembut mendongeng anak"
Payload Request Audio Speech dengan Intonasi & Karakter
{
  "model": "tts-1",
  "input": "Halo, selamat datang di platform AI Studio Indonesia.",
  "voice": "Paijah",
  "intonation": "Ceria, penuh semangat, dan antusias",
  "speed": 1.0,
  "response_format": "json"
}
8. Multi-Speaker TTS (Podcast & Dialog Percakapan)
POST /v1/audio/speech

Sintesis percakapan audio multi-karakter (podcast, drama, wawancara, dialog edukasi) berkualitas studio 24kHz Mono WAV dalam satu file audio utuh tanpa sambungan manual. Sistem secara otomatis mengenali nama pembicara pada setiap baris naskah dan membawakannya dengan karakter suara yang berbeda secara alami dan ekspresif.

Model: tts-multi Tarif: 1 Koin / 1.000 Karakter (Proporsional) Dukungan Multi-Karakter (2+ Pembicara) Format Output: WAV 24kHz / JSON
Format Naskah Dialog (Script)

Tuliskan naskah dengan mengawali setiap baris menggunakan Nama Pembicara diikuti tanda titik dua (:):

Andi: Halo Siti, selamat datang di studio podcast kita hari ini!
Siti: Halo Andi, terima kasih banyak sudah mengundang saya ke sini.
Andi: Topik obrolan kita kali ini adalah seputar kecerdasan buatan dalam konten digital.
Siti: Sangat menarik! Perkembangannya sekarang sangat pesat dan memudahkan kreator.
Parameter Request Payload (JSON)
Parameter Tipe Wajib? Keterangan
model string Opsional Gunakan tts-multi atau tts-1.
input string Wajib Naskah percakapan dialog dengan format Nama: Teks....
speakers array Opsional Pemetaan nama pembicara ke karakter suara pilihan:
Contoh: [{"speaker": "Andi", "voice": "Puck"}, {"speaker": "Siti", "voice": "Kore"}]
Jika tidak disertakan, sistem akan otomatis mendeteksi pembicara dan memetakan suara pria/wanita secara cerdas.
response_format string Opsional json (default, mengembalikan URL & Base64) atau wav (stream biner audio langsung).
Contoh Kode Integrasi API Multi-Speaker
curl -X POST "https://aistudio.id/v1/audio/speech" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "tts-multi",
    "input": "Andi: Halo Siti, selamat pagi!\nSiti: Pagi juga Andi! Senang bisa bertemu lagi.",
    "speakers": [
      {"speaker": "Andi", "voice": "Puck"},
      {"speaker": "Siti", "voice": "Kore"}
    ],
    "response_format": "json"
  }'
Contoh Respons Berhasil (JSON)
{
  "success": true,
  "audio_url": "https://aistudio.id/uploads/ai_gallery/audio/voice_1727548800_abc123.wav",
  "mime_type": "audio/wav",
  "speakers": {
    "Andi": "Puck",
    "Siti": "Kore"
  },
  "text": "Andi: Halo Siti, selamat pagi!\nSiti: Pagi juga Andi! Senang bisa bertemu lagi.",
  "duration_estimate": 4.5
}
9. Google Omni Video Engine
POST /v1/video/generations

Engine video serbaguna bertenaga Google Omni AI dengan durasi klip 10 Detik Tetap dan render cepat (~50–55 detik). Mendukung 3 mode operasi komprehensif: Text to Video (t2v), Start Frame (sfv), dan Multi-Foto Komposisi (i2v).

Model: google-omni Tarif: 20 Koin / video Durasi: 10.00 Detik Tetap Output: File Video MP4 (H.264) 3 Mode: t2v, sfv, i2v
Mode Nama Mode Input Media Parameter Wajib Estimasi Waktu
t2v Text to Video Tidak ada (naskah teks murni) prompt, ratio ~50 detik
sfv Start Frame to Video 1 Gambar Awal (media[0]) prompt, media, ratio ~55 detik
i2v Ingredients to Video 1–3 Foto Acuan (media[]) prompt, media, ratio ~55 detik
Contoh 1: Mode t2v (Text to Video Murni)
curl -X POST https://aistudio.id/v1/video/generations \
  -H "Authorization: Bearer API_KEY_MILIKMU" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "google-omni",
    "mode": "t2v",
    "prompt": "Sebuah kapal layar megah melintasi samudera luas saat kabut fajar terbelah sinar matahari keemasan",
    "ratio": 1
  }'
Contoh 2: Mode sfv (Start Frame to Video)
curl -X POST https://aistudio.id/v1/video/generations \
  -H "Authorization: Bearer API_KEY_MILIKMU" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "google-omni",
    "mode": "sfv",
    "prompt": "Mulai dari foto ini, kamera zoom dinamis mengikuti langkah karakter ke dalam ruangan bernuansa neon",
    "ratio": 1,
    "media": [
      "data:image/jpeg;base64,/9j/4AAQSkZJRg..."
    ]
  }'
Contoh 3: Mode i2v (Multi-Foto Komposisi 1–3 Foto)
curl -X POST https://aistudio.id/v1/video/generations \
  -H "Authorization: Bearer API_KEY_MILIKMU" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "google-omni",
    "mode": "i2v",
    "prompt": "Animasi dinamis mempertemukan kedua karakter dari foto acuan di jalanan Tokyo masa depan",
    "ratio": 1,
    "media": [
      "data:image/jpeg;base64,/9j/4AAQSkZJRg...",
      "data:image/jpeg;base64,/9j/4AAQSkZJRg..."
    ]
  }'
Polling Status & Download MP4 Google Omni
GET https://aistudio.id/v1/video/generations/4a48e371c9d24f5ba1e83b77d2c05e19
Header: Authorization: Bearer API_KEY_MILIKMU
Contoh Integrasi Lengkap Node.js (Submit, Polling & Download MP4)
const fs = require('fs');

const API_BASE = 'https://aistudio.id/v1';
const API_KEY = 'API_KEY_MILIKMU';

async function generateOmniVideo() {
  // 1. Submit Job Google Omni
  const submitRes = await fetch(`${API_BASE}/video/generations`, {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${API_KEY}`,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      model: 'google-omni',
      mode: 't2v',
      prompt: 'Sebuah kapal layar mengarungi lautan lepas saat matahari terbit',
      ratio: 1 // 1 = 16:9 Landscape, 2 = 9:16 Portrait
    })
  });
  const submitData = await submitRes.json();
  console.log('Tiket Job Omni:', submitData.job_id);

  // 2. Polling status setiap 3 detik hingga selesai
  let jobData;
  while (true) {
    const pollRes = await fetch(`${API_BASE}/video/generations/${submitData.job_id}`, {
      headers: { 'Authorization': `Bearer ${API_KEY}` }
    });
    jobData = await pollRes.json();
    console.log(`Status render: ${jobData.status}...`);

    if (jobData.status === 'done' || jobData.status === 'failed') break;
    await new Promise(r => setTimeout(r, 3000));
  }

  // 3. Download hasil video MP4 jika sukses
  if (jobData.status === 'done' && jobData.outputs && jobData.outputs.length > 0) {
    const downloadUrl = jobData.outputs[0].download_url;
    console.log('Mengunduh video dari:', downloadUrl);

    const vidRes = await fetch(downloadUrl, {
      headers: { 'Authorization': `Bearer ${API_KEY}` }
    });
    const buffer = Buffer.from(await vidRes.arrayBuffer());
    fs.writeFileSync('output_omni.mp4', buffer);
    console.log('✅ Video berhasil disimpan ke file output_omni.mp4');
  } else {
    console.error('❌ Render video gagal:', jobData.error || 'Unknown error');
  }
}

generateOmniVideo();
10. Image SuperScale (Perbesar & Pertajam Foto ke HD/4K)
POST /v1/media/upscale/image

Tingkatkan resolusi foto buram, artwork AI beresolusi rendah, atau gambar katalog e-commerce Anda hingga ketajaman Ultra HD 4K tanpa merusak tekstur visual alami. Ditenagai AI Neural Upscaling berkecepatan tinggi. File hasil tersimpan aman selama 7 Hari.

Model: image-upscale Tarif: 1.00 Koin / gambar Maks Ukuran: 5 MB Target Skala: 1k, 2k, 4k Format Output: PNG, JPG, WebP Masa Simpan: 7 Hari
Parameter (Form-Data) Tipe Keterangan
file file binary (wajib) File gambar sumber yang ingin diperbesar (Format: JPG, JPEG, PNG, WebP. Maksimal 5 MB).
target string (opsional) Pilihan target resolusi: "1k", "2k" (default), atau "4k" (Ultra HD).
format string (opsional) Format file keluaran: "png" (default, lossless), "jpg", atau "webp".
quality integer (opsional) Kualitas kompresi visual (1 - 100, default: 95).
cURL Request: Image SuperScale
curl -X POST "https://aistudio.id/v1/media/upscale/image" \
  -H "Authorization: Bearer API_KEY_MILIKMU" \
  -F "file=@/path/ke/foto_input.jpg" \
  -F "target=4k" \
  -F "format=png" \
  -F "quality=95"
Contoh Response Sukses (JSON)
{
  "success": true,
  "action": "v1_media_upscale_image",
  "model": "image-upscale",
  "media_type": "image",
  "media_url": "https://aistudio.id/uploads/creations/images/2026-10/media_1724567920_ab12cd.png",
  "download_url": "https://aistudio.id/uploads/creations/images/2026-10/media_1724567920_ab12cd.png",
  "coins_deducted": 1.00,
  "coins_remaining": 98,
  "execution_time_ms": 2340,
  "meta": {
    "target": "4k",
    "format": "png",
    "quality": 95
  }
}
11. Video SuperScale 1K/2K/4K (Penjernih Video)
POST /v1/media/upscale/video

Ubah video resolusi rendah (360p / 720p) menjadi tajam berkualitas jernih (1080p Full HD hingga 4K UHD) dengan filter visual unsharp sharpening dan framerate preserving. Kecepatan render otomatis dikunci ke mode fast untuk performa optimal. File hasil tersimpan aman selama 7 Hari.

Model: video-upscale Tarif: 5.00 Koin / video Maks Durasi: 15 Detik Maks Ukuran: 20 MB Output: File Video MP4 (H.264) Masa Simpan: 7 Hari
Parameter (Form-Data) Tipe Keterangan
file file binary (wajib) File video yang akan di-upscale (Format: MP4, MOV, WebM. Maksimal 20 MB dan durasi maks. 15 detik).
target string (opsional) Target resolusi video: "1k" (720p/1080p), "2k" (default, 1440p), atau "4k" (2160p Ultra HD).
speed string (opsional) Kecepatan render: "fast" (default & dioptimalkan untuk kecepatan pemrosesan cepat).
sharpen string (opsional) Intensitas penajaman visual: "none", "low", "medium" (default), atau "high".
cURL Request: Video SuperScale
curl -X POST "https://aistudio.id/v1/media/upscale/video" \
  -H "Authorization: Bearer API_KEY_MILIKMU" \
  -F "file=@/path/ke/video_720p.mp4" \
  -F "target=2k" \
  -F "speed=fast" \
  -F "sharpen=medium"
Contoh Response Sukses (JSON)
{
  "success": true,
  "action": "v1_media_upscale_video",
  "model": "video-upscale",
  "media_type": "video",
  "media_url": "https://aistudio.id/uploads/creations/videos/2026-10/media_1724567950_8f90ea.mp4",
  "download_url": "https://aistudio.id/uploads/creations/videos/2026-10/media_1724567950_8f90ea.mp4",
  "coins_deducted": 5.00,
  "coins_remaining": 93,
  "execution_time_ms": 14500,
  "meta": {
    "target": "2k",
    "speed": "fast",
    "sharpen": "medium"
  }
}
12. Video Merge Instan (~0.5s) (Penggabung Klip Video)
POST /v1/media/merge

Gabungkan 2 atau lebih potongan klip video berurutan secara instan tanpa re-encoding lambat melalui teknologi stream concat engine (~0.5 detik). File hasil otomatis di-index ulang (faststart) sehingga dapat langsung di-preview atau diputar di browser. File hasil tersimpan aman selama 7 Hari.

Model: video-merge Tarif: 5.00 Koin / video Kecepatan: ~0.5 Detik (Instan) Maks Klip: 10 Klip Maks Durasi: 5 Menit Maks Ukuran: 200 MB Output: File Video MP4 (H.264) Masa Simpan: 7 Hari
Parameter (Form-Data) Tipe Keterangan
videos[] array file binary (wajib) Daftar 2 hingga 10 file video (MP4, MOV. Total durasi maksimal 5 menit, total ukuran berkas maksimal 200 MB) yang akan digabungkan secara berurutan.
cURL Request: Video Merge Instan (Multipart Array)
curl -X POST "https://aistudio.id/v1/media/merge" \
  -H "Authorization: Bearer API_KEY_MILIKMU" \
  -F "videos[]=@klip_bagian_1.mp4" \
  -F "videos[]=@klip_bagian_2.mp4" \
  -F "videos[]=@klip_bagian_3.mp4"
Contoh Response Sukses (JSON)
{
  "success": true,
  "action": "v1_media_merge_video",
  "model": "video-merge",
  "media_type": "video",
  "media_url": "https://aistudio.id/uploads/creations/videos/2026-10/media_1724567990_merged.mp4",
  "download_url": "https://aistudio.id/uploads/creations/videos/2026-10/media_1724567990_merged.mp4",
  "coins_deducted": 5.00,
  "coins_remaining": 92,
  "execution_time_ms": 680,
  "meta": {
    "videos_count": 3,
    "merge_mode": "concat_instant"
  }
}
13. Video Anti-Duplikasi AI (Bypass Algorithm TikTok & Reels)
POST /v1/media/anti-duplicate

Bersihkan video dari deteksi kesamaan algoritma platform (Shadowban / Duplicate Content Penalty) di TikTok, Instagram Reels, dan YouTube Shorts. Memodifikasi hash perseptual visual (pHash), menyisipkan noise mikro tak kasat mata, pergeseran frekuensi audio akustik, serta menghapus seluruh jejak metadata asli. File hasil tersimpan aman selama 7 Hari.

Model: video-antidup Tarif: 5.00 Koin / video Mode Rekomendasi: Medium Output: File Video MP4 (H.264) Masa Simpan: 7 Hari
Parameter (Form-Data) Tipe Keterangan
file file binary (wajib) File video sumber (Format: MP4, MOV. Maksimal 50 MB).
mode string (opsional) Tingkat intensitas bypass: "light", "medium" (default & sangat disarankan), "heavy", atau "extreme".
strip_metadata integer (opsional) Hapus seluruh metadata EXIF / QuickTime jejak perangkat: 1 (default, aktif) atau 0.
noise integer (opsional) Sisipkan mikro-noise visual tak kasat mata untuk memecah signature pHash: 1 (default) atau 0.
mirror integer (opsional) Cerminkan video secara horizontal (flip): 1 atau 0 (default).
cut_head integer (opsional) Pangkas mikro 0.1 detik di awal klip untuk mengubah timestamp: 1 atau 0 (default).
cURL Request: Video Anti-Duplicate
curl -X POST "https://aistudio.id/v1/media/anti-duplicate" \
  -H "Authorization: Bearer API_KEY_MILIKMU" \
  -F "file=@/path/ke/video_sumber.mp4" \
  -F "mode=medium" \
  -F "strip_metadata=1" \
  -F "noise=1" \
  -F "mirror=0" \
  -F "cut_head=0"
Contoh Response Sukses (JSON)
{
  "success": true,
  "action": "v1_media_antidup_video",
  "model": "video-antidup",
  "media_type": "video",
  "media_url": "https://aistudio.id/uploads/creations/videos/2026-10/media_1724568010_antidup.mp4",
  "download_url": "https://aistudio.id/uploads/creations/videos/2026-10/media_1724568010_antidup.mp4",
  "coins_deducted": 5.00,
  "coins_remaining": 89,
  "execution_time_ms": 4210,
  "meta": {
    "mode": "medium",
    "strip_metadata": 1,
    "noise": 1,
    "mirror": 0,
    "cut_head": 0
  }
}
14. Upload Media Publik Sementara (Tersimpan 24 Jam)
POST /v1/media/upload

Gunakan endpoint ini untuk mengunggah gambar, dokumen PDF, file audio, atau video dari aplikasi frontend/klien. Server akan menyimpan file secara aman dan mengembalikan URL Publik yang aktif selama 24 jam sehingga dapat langsung dimasukkan ke dalam payload image_url atau image di API AI lainnya.

Endpoint: /v1/media/upload Masa Simpan: 24 Jam (Auto-Delete) Format: Multipart Form / JSON Base64
Keuntungan Endpoint Ini:
  • Tanpa Server Sendiri: Anda tidak perlu menyiapkan hosting / AWS S3 terpisah untuk menyimpan foto pengguna.
  • Pembersihan Otomatis: File otomatis dihapus setelah 24 jam sehingga hemat ruang penyimpanan.
  • Dukungan CORS Penuh: Dapat dipanggil langsung dari browser HTML menggunakan FormData.
Contoh A: Upload via JavaScript Browser (HTML & FormData)
// 1. Upload File Gambar dari input file HTML
const fileInput = document.querySelector('input[type="file"]');
const formData = new FormData();
formData.append('file', fileInput.files[0]);

const uploadRes = await fetch('https://aistudio.id/v1/media/upload', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer API_KEY_MILIKMU'
  },
  body: formData
});

const fileData = await uploadRes.json();
console.log('URL Publik Gambar:', fileData.url);

// 2. Kirim URL Publik tersebut langsung ke endpoint Vision / Chat
const chatRes = await fetch('https://aistudio.id/v1/chat/completions', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer API_KEY_MILIKMU'
  },
  body: JSON.stringify({
    model: 'gemini-3-1-flash',
    messages: [
      {
        role: 'user',
        content: [
          { type: 'text', text: 'Tolong analisa foto yang baru saya upload ini:' },
          { type: 'image_url', image_url: { url: fileData.url } }
        ]
      }
    ]
  })
});

const chatData = await chatRes.json();
console.log(chatData.choices[0].message.content);
Contoh B: Upload via cURL (Multipart Form-Data)
curl -X POST https://aistudio.id/v1/media/upload \
  -H "Authorization: Bearer API_KEY_MILIKMU" \
  -F "file=@/path/to/foto_produk.jpg"
Contoh Response Sukses (JSON)
{
  "success": true,
  "url": "https://aistudio.id/uploads/temp_media/media_1724567890_9a8b7c6d5e4f3a2b.jpg",
  "public_url": "https://aistudio.id/uploads/temp_media/media_1724567890_9a8b7c6d5e4f3a2b.jpg",
  "filename": "media_1724567890_9a8b7c6d5e4f3a2b.jpg",
  "original_name": "foto_produk.jpg",
  "mime_type": "image/jpeg",
  "size_bytes": 1048576,
  "created_at": "2026-08-26T11:20:00+07:00",
  "expires_at": "2026-08-27T11:20:00+07:00",
  "expires_in_seconds": 86400,
  "note": "Media publik tersimpan selama 24 jam dan siap digunakan langsung sebagai URL pada endpoint AI."
}
Contoh Integrasi Multi-Bahasa SDK

Contoh implementasi lengkap pemanggilan API Gateway menggunakan berbagai bahasa pemrograman populer:

Terminal (cURL - Streaming SSE)
# Gunakan flag -N / --no-buffer agar cURL langsung menampilkan stream kata demi kata
curl -N https://aistudio.id/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Accept: text/event-stream" \
  -H "Authorization: Bearer API_KEY_MILIKMU" \
  -d '{
    "model": "gemini-3-1-flash",
    "messages": [
      {"role": "user", "content": "Halo, buatkan puisi pendek tentang teknologi AI!"}
    ],
    "stream": true
  }'
Python (Official OpenAI SDK - Realtime Streaming)
from openai import OpenAI

client = OpenAI(
    base_url="https://aistudio.id/v1",
    api_key="API_KEY_MILIKMU"  # Ganti dengan API Key Anda
)

# 1. Contoh Mode Streaming (stream=True)
stream = client.chat.completions.create(
    model="gemini-3-1-flash",
    messages=[
        {"role": "system", "content": "Anda adalah asisten AI yang cerdas."},
        {"role": "user", "content": "Jelaskan cara kerja neural network secara singkat!"}
    ],
    stream=True  # <-- Cukup set stream=True
)

for chunk in stream:
    token = chunk.choices[0].delta.content or ""
    print(token, end="", flush=True)
Node.js / Next.js (Official OpenAI SDK Streaming)
import OpenAI from 'openai';

const openai = new OpenAI({
  baseURL: 'https://aistudio.id/v1',
  apiKey: process.env.AISTUDIO_API_KEY || 'API_KEY_MILIKMU',
});

async function run() {
  const stream = await openai.chat.completions.create({
    model: 'gemini-3-1-flash',
    messages: [{ role: 'user', content: 'Halo AI Studio!' }],
    stream: true, // <-- Streaming aktif
  });

  for await (const chunk of stream) {
    process.stdout.write(chunk.choices[0]?.delta?.content || '');
  }
}

run();
Browser JavaScript (HTML & fetch Streaming Reader)
// Konsumsi streaming respons token-demi-token langsung di browser
async function streamChat(promptText) {
  const apiKey = "API_KEY_MILIKMU"; // Ganti dengan API Key Anda

  const response = await fetch("https://aistudio.id/v1/chat/completions", {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      "Accept": "text/event-stream",
      "Authorization": `Bearer ${apiKey}`
    },
    body: JSON.stringify({
      model: "gemini-3-1-flash",
      messages: [{ role: "user", content: promptText }],
      stream: true // <-- Set true untuk SSE
    })
  });

  const reader = response.body.getReader();
  const decoder = new TextDecoder("utf-8");
  let buffer = "";

  while (true) {
    const { done, value } = await reader.read();
    if (done) break;

    buffer += decoder.decode(value, { stream: true });
    const lines = buffer.split("\n");
    buffer = lines.pop(); // simpan baris belum selesai

    for (const rawLine of lines) {
      const line = rawLine.trim();
      if (!line || line.startsWith(":") || line === "data: [DONE]") continue;
      if (line.startsWith("data: ")) {
        try {
          const json = JSON.parse(line.slice(6));
          const delta = json.choices?.[0]?.delta?.content || "";
          if (delta) {
            document.getElementById("outputChatBox").innerText += delta;
          }
        } catch (e) {}
      }
    }
  }
}
PHP (cURL Streaming Write Function)
<?php
$apiKey = "API_KEY_MILIKMU";
$ch = curl_init("https://aistudio.id/v1/chat/completions");

$payload = [
    "model" => "gemini-3-1-flash",
    "messages" => [
        ["role" => "user", "content" => "Halo dari PHP! Tuliskan tips coding rapi."]
    ],
    "stream" => true // <-- Mengaktifkan SSE
];

curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => json_encode($payload),
    CURLOPT_HTTPHEADER => [
        "Content-Type: application/json",
        "Accept: text/event-stream",
        "Authorization: Bearer " . $apiKey
    ],
    // Tampilkan chunk teks seketika saat tiba dari server
    CURLOPT_WRITEFUNCTION => function($ch, $chunk) {
        echo $chunk;
        flush();
        return strlen($chunk);
    }
]);

curl_exec($ch);
curl_close($ch);
?>
Penanganan Error & Kode Status HTTP

API Gateway mengembalikan status code HTTP standar beserta rincian objek error dalam format JSON:

Status Code Tipe Error Penyebab & Solusi
400 Bad Request invalid_request_error Parameter tidak lengkap atau model sedang dinonaktifkan oleh admin.
401 Unauthorized invalid_api_key API Key salah, belum diisi, atau telah dicabut.
402 Payment Required insufficient_quota Saldo koin tidak mencukupi atau kuota request harian telah habis. Silakan top up di menu Top Up Koin.
404 Not Found model_not_found Identifier model tidak ditemukan pada sistem.
500 Server Error server_error Terjadi gangguan internal pada server provider AI. Coba kembali beberapa saat lagi.