Panduan Pemasangan DataByte AI
Sambungkan DataByte AI ke Claude Code, Cursor, OpenCode, VS Code, atau kode Anda sendiri. Ikuti langkah di bawah dari atas ke bawah. Semua contoh di halaman ini otomatis menyesuaikan pilihan Anda.
1. Pilih cara bayar
Request Based Plan
Paket bulanan
Bayar per bulan, dapat jatah request harian dan bulanan. Tagihan tidak berubah walaupun dipakai banyak.
Cocok untuk ngoding tiap hari dan untuk Claude Code.
Lihat paket →AI Gateway
Isi saldo, bayar per pemakaian
Tanpa biaya bulanan. Saldo terpotong sesuai panjang pertanyaan dan jawaban (token). Banyak pilihan model: Claude, DeepSeek, MiniMax, dan lainnya.
Cocok untuk pemakaian sesekali atau butuh model tertentu.
Lihat model & isi saldo →Masih ragu? Pilih saja salah satu: pilihan ini hanya mengubah contoh di halaman ini, dan bisa diganti kapan saja. Permintaan ke API baru berhasil setelah paket aktif atau saldo terisi.
2. Buat API key
- Buka Dashboard → API Keys.
- Klik Create key, beri nama (misalnya "Laptop"), lalu buat.
- Salin kuncinya (diawali
sk-db-). Kunci hanya ditampilkan satu kali, jadi simpan di tempat aman.
Contoh di halaman ini langsung terisi kunci Anda, jadi tidak perlu mengganti sk-db-xxxx satu per satu. Kunci hanya ada di tab browser ini: tidak disimpan, tidak dikirim, dan hilang saat halaman ditutup.
3. Pilih aplikasi yang Anda pakai
Claude CodeAgen coding di terminal
OpenCodeAgen coding di terminal, open source
CursorEditor kode dengan AI
VS CodeLewat ekstensi gratis Continue
Hermes AgentAgen AI di komputer Anda
TypingMindAplikasi chat di browserBot TelegramTanpa coding, dijalankan DataByteKode sendiriPython, JavaScript, terminalAda error? Lihat Masalah umum & solusi.
4. Opsional: tes API key dari terminal
Buka PowerShell: tekan tombol Windows, ketik "PowerShell", lalu tekan Enter. Tidak perlu "Run as administrator". Jangan pakai Command Prompt (CMD), karena perintah di halaman ini ditulis untuk PowerShell.
Lalu tempel perintah ini dan tekan Enter:
$body = @{ model = "MiniMax-M3"; messages = @(@{ role = "user"; content = "Halo! Balas dengan satu kalimat saja." }) } | ConvertTo-Json -Depth 5 $res = Invoke-RestMethod -Method Post -Uri "https://ai.databyte.co.id/v1/chat/completions" -Headers @{ Authorization = "Bearer sk-db-xxxx" } -ContentType "application/json; charset=utf-8" -Body $body $res.choices[0].message.contentBerhasil kalau muncul satu kalimat balasan dari AI. Tes ini memakai 1 request dari jatah paket (atau sedikit saldo untuk AI Gateway).
Alamat API & nama model
Ringkasan untuk semua aplikasi. Kartu yang ditandai adalah pilihan Anda saat ini; klik kartu lain untuk berpindah.
https://ai.databyte.co.id/v1https://ai.databyte.co.id/anthropicMiniMax-M3MiniMax-M3.1-Flashdatabyte-m1deepseek-v4.1-flashmimo-v2.6-flashTulis nama model seperti di atas, tanpa awalan provider/.
Memotong jatah request paket Anda. Saldo tidak terpakai.
https://ai.databyte.co.id/gateway/v1https://ai.databyte.co.id/gatewayanthropic/claude-sonnet-5.5minimax/minimax-m3deepseek/deepseek-v4.1-flashFormat provider/model. Daftar lengkap ada di tab AI Gateway di dashboard.
Memotong saldo USD sesuai jumlah token. Tanpa biaya bulanan.
Tiga aturan yang paling sering terlewat
- Untuk format Anthropic (Claude Code), tulis alamat tanpa /v1 di belakang. Claude Code menambahkan /v1/messages sendiri.
- Nama model berawalan provider (misalnya
minimax/minimax-m3) selalu memotong saldo AI Gateway, walaupun dikirim ke alamat /v1. Untuk memakai jatah paket, tulisMiniMax-M3. - Satu API key bisa dipakai untuk dua cara bayar. Yang menentukan potongan adalah alamat dan nama model, bukan kuncinya.
Claude Code
Agen coding dari Anthropic yang berjalan di terminal. Sekitar 5 menit. Panduan lengkap dan cara bayar Claude pakai QRIS.
1. Buka terminal
Buka PowerShell (tombol Windows → ketik "PowerShell" → Enter). Jangan pakai CMD.
2. Pasang Claude Code
Jalankan installer resmi (tidak perlu Node.js, tidak perlu hak administrator):
irm https://claude.ai/install.ps1 | iex
Setelah selesai, tutup terminal lalu buka lagi, kemudian cek dengan
claude --version. Kalau muncul nomor versi, berarti berhasil.Opsional: pasang Git for Windows kalau proyek Anda memakai Git. Tanpa Git, Claude Code tetap jalan dan memakai PowerShell untuk menjalankan perintah.
3. Sambungkan ke DataByte
Tempel perintah ini di terminal lalu tekan Enter. Perintah ini membuat file
%USERPROFILE%\.claude\settings.jsonberisi pengaturan yang benar. Kalau file itu sudah ada, isi lamanya disimpan dulu sebagai.bak.$f = "$env:USERPROFILE\.claude\settings.json" New-Item -ItemType Directory -Force (Split-Path $f) | Out-Null if (Test-Path $f) { Copy-Item $f "$f.bak" -Force } $isi = @' { "env": { "ANTHROPIC_BASE_URL": "https://ai.databyte.co.id/anthropic", "ANTHROPIC_AUTH_TOKEN": "sk-db-xxxx", "ANTHROPIC_MODEL": "MiniMax-M3", "ANTHROPIC_DEFAULT_OPUS_MODEL": "MiniMax-M3", "ANTHROPIC_DEFAULT_SONNET_MODEL": "MiniMax-M3", "ANTHROPIC_DEFAULT_HAIKU_MODEL": "MiniMax-M3" } } '@ [IO.File]::WriteAllText($f, $isi) Write-Host "Tersimpan: $f"Lebih suka mengisi file sendiri?
1. Buka file-nya di editor teks dengan perintah ini:
New-Item -ItemType Directory -Force (Split-Path "$env:USERPROFILE\.claude\settings.json") | Out-Null; notepad "$env:USERPROFILE\.claude\settings.json"
Kalau Notepad bertanya "create a new file?", pilih Yes.
2. Salin isi JSON ini, tempel ke editor, lalu simpan:
{ "env": { "ANTHROPIC_BASE_URL": "https://ai.databyte.co.id/anthropic", "ANTHROPIC_AUTH_TOKEN": "sk-db-xxxx", "ANTHROPIC_MODEL": "MiniMax-M3", "ANTHROPIC_DEFAULT_OPUS_MODEL": "MiniMax-M3", "ANTHROPIC_DEFAULT_SONNET_MODEL": "MiniMax-M3", "ANTHROPIC_DEFAULT_HAIKU_MODEL": "MiniMax-M3" } }Simpan dengan Ctrl + S. Nama file harus tetap persis seperti di atas, bukan .txt.
Alamat ANTHROPIC_BASE_URL sengaja tanpa /v1 di belakang: Claude Code menambahkannya sendiri.4. Jalankan di folder proyek
Buka folder proyek di File Explorer, klik kanan di area kosong → "Open in Terminal". Atau pindah folder dengan
cd "C:\Users\NamaAnda\Documents\proyek-saya".Lalu ketik:
claude
Kalau ditanya "Do you trust the files in this folder?", pilih Yes. Kalau muncul pilihan tema warna, pilih salah satu dan tekan Enter.
5. Pastikan sudah tersambung
Di dalam Claude Code ketik
/statuslalu Enter. Di tab Status, baris Anthropic base URL harus berisihttps://ai.databyte.co.id/anthropicdan baris Auth token menyebut ANTHROPIC_AUTH_TOKEN. Tutup menu dengan Esc, lalu coba minta sesuatu, misalnya "jelaskan isi folder ini".Muncul layar "Select login method" atau diminta login akun Anthropic? Lihat Masalah umum → "Claude Code masih meminta login".
Memakai ekstensi Claude Code di VS Code?
Ekstensi VS Code memeriksa login dari pengaturan VS Code sendiri, bukan dari settings.json di atas. Di VS Code tekan Ctrl + Shift + P, ketik Preferences: Open User Settings (JSON), lalu tambahkan baris ini di dalam kurung kurawal paling luar (beri koma di akhir baris sebelumnya kalau perlu):
{
"claudeCode.environmentVariables": [
{
"name": "ANTHROPIC_BASE_URL",
"value": "https://ai.databyte.co.id/anthropic"
},
{
"name": "ANTHROPIC_AUTH_TOKEN",
"value": "sk-db-xxxx"
},
{
"name": "ANTHROPIC_MODEL",
"value": "MiniMax-M3"
}
]
}OpenCode
Agen coding open source di terminal. Bisa dipakai dengan paket maupun saldo AI Gateway.
1. Pasang OpenCode
Buka PowerShell (tombol Windows → ketik "PowerShell" → Enter). Jangan pakai CMD.
Butuh Node.js versi LTS. Cek dengan
node -v. Belum ada? Unduh dari nodejs.org, pasang dengan pilihan bawaan, lalu buka PowerShell baru.npm install -g opencode-ai
Muncul "running scripts is disabled"? Lihat Masalah umum.
Tutup dan buka lagi terminal, lalu cek dengan
opencode --version.2. Sambungkan ke DataByte
Tempel perintah ini di terminal lalu tekan Enter. Perintah ini membuat file
%USERPROFILE%\.config\opencode\opencode.jsonberisi pengaturan yang benar. Kalau file itu sudah ada, isi lamanya disimpan dulu sebagai.bak.$f = "$env:USERPROFILE\.config\opencode\opencode.json" New-Item -ItemType Directory -Force (Split-Path $f) | Out-Null if (Test-Path $f) { Copy-Item $f "$f.bak" -Force } $isi = @' { "$schema": "https://opencode.ai/config.json", "provider": { "databyte": { "npm": "@ai-sdk/openai-compatible", "name": "DataByte (Request Based Plan)", "options": { "baseURL": "https://ai.databyte.co.id/v1", "apiKey": "sk-db-xxxx" }, "models": { "MiniMax-M3": { "id": "MiniMax-M3", "name": "MiniMax M3 (DataByte Plan)", "modalities": { "input": [ "text", "image" ], "output": [ "text" ] } }, "MiniMax-M3.1-Flash": { "id": "MiniMax-M3.1-Flash", "name": "MiniMax M3.1 Flash (DataByte Plan)", "modalities": { "input": [ "text", "image" ], "output": [ "text" ] } }, "databyte-m1": { "id": "databyte-m1", "name": "DataByte M1 (DataByte Plan)", "modalities": { "input": [ "text", "image" ], "output": [ "text" ] } } } } }, "model": "databyte/MiniMax-M3" } '@ [IO.File]::WriteAllText($f, $isi) Write-Host "Tersimpan: $f"Lebih suka mengisi file sendiri?
1. Buka file-nya di editor teks dengan perintah ini:
New-Item -ItemType Directory -Force (Split-Path "$env:USERPROFILE\.config\opencode\opencode.json") | Out-Null; notepad "$env:USERPROFILE\.config\opencode\opencode.json"
Kalau Notepad bertanya "create a new file?", pilih Yes.
2. Salin isi JSON ini, tempel ke editor, lalu simpan:
{ "$schema": "https://opencode.ai/config.json", "provider": { "databyte": { "npm": "@ai-sdk/openai-compatible", "name": "DataByte (Request Based Plan)", "options": { "baseURL": "https://ai.databyte.co.id/v1", "apiKey": "sk-db-xxxx" }, "models": { "MiniMax-M3": { "id": "MiniMax-M3", "name": "MiniMax M3 (DataByte Plan)", "modalities": { "input": [ "text", "image" ], "output": [ "text" ] } }, "MiniMax-M3.1-Flash": { "id": "MiniMax-M3.1-Flash", "name": "MiniMax M3.1 Flash (DataByte Plan)", "modalities": { "input": [ "text", "image" ], "output": [ "text" ] } }, "databyte-m1": { "id": "databyte-m1", "name": "DataByte M1 (DataByte Plan)", "modalities": { "input": [ "text", "image" ], "output": [ "text" ] } } } } }, "model": "databyte/MiniMax-M3" }Simpan dengan Ctrl + S. Nama file harus tetap persis seperti di atas, bukan .txt.
Bagian modalities memberi tahu OpenCode bahwa model bisa membaca gambar. Tanpa bagian itu, OpenCode menolak lampiran gambar.
3. Jalankan
Masuk ke folder proyek, lalu ketik
opencode. Ganti model kapan saja dengan perintah/models.
Cursor
Editor kode dengan AI. Diatur lewat menu, tanpa file konfigurasi.
1. Buka pengaturan model
Buka Cursor Settings (ikon roda gigi di kanan atas, atau Ctrl + Shift + J), lalu pilih menu Models.
2. Isi API key dan alamat
Di bagian API Keys, isi OpenAI API Key, aktifkan juga Override OpenAI Base URL, lalu isi:
sk-db-xxxx
https://ai.databyte.co.id/v1
3. Tambahkan nama model
Masih di menu Models, klik tombol tambah model (+ Add Custom Model) lalu ketik nama model persis seperti ini, satu per satu:
MiniMax-M3MiniMax-M3.1-Flashdatabyte-m14. Pilih model dan mulai
Buka panel chat (Ctrl + L), pilih model yang baru ditambahkan di daftar model, lalu kirim pesan.
Batasan dari Cursor
- API key sendiri hanya dipakai untuk chat. Tab (autocomplete) tetap memakai model bawaan Cursor.
- Tidak semua paket Cursor mengizinkan API key sendiri (misalnya paket Plus). Cek paket Cursor Anda kalau kolomnya tidak muncul.
- Mengganti Base URL juga mengarahkan model OpenAI bawaan Cursor ke DataByte. Matikan lagi kalau ingin kembali ke model bawaan.
VS Code (Continue)
Continue adalah ekstensi gratis untuk VS Code dan JetBrains (IntelliJ, PyCharm, dll.).
1. Pasang ekstensi Continue
Di VS Code buka menu Extensions (Ctrl + Shift + X, di Mac Cmd + Shift + X), cari "Continue", lalu klik Install.
2. Sambungkan ke DataByte
Tempel perintah ini di terminal lalu tekan Enter. Perintah ini membuat file
%USERPROFILE%\.continue\config.yamlberisi pengaturan yang benar. Kalau file itu sudah ada, isi lamanya disimpan dulu sebagai.bak.$f = "$env:USERPROFILE\.continue\config.yaml" New-Item -ItemType Directory -Force (Split-Path $f) | Out-Null if (Test-Path $f) { Copy-Item $f "$f.bak" -Force } $isi = @' name: DataByte version: 1.0.0 schema: v1 models: - name: MiniMax M3 (DataByte Plan) provider: openai model: MiniMax-M3 apiBase: https://ai.databyte.co.id/v1 apiKey: sk-db-xxxx roles: - chat - edit - apply - name: MiniMax M3.1 Flash (DataByte Plan) provider: openai model: MiniMax-M3.1-Flash apiBase: https://ai.databyte.co.id/v1 apiKey: sk-db-xxxx roles: - chat - edit - apply - name: DataByte M1 (DataByte Plan) provider: openai model: databyte-m1 apiBase: https://ai.databyte.co.id/v1 apiKey: sk-db-xxxx roles: - chat - edit - apply '@ [IO.File]::WriteAllText($f, $isi) Write-Host "Tersimpan: $f"Lebih suka mengisi file sendiri?
1. Buka file-nya di editor teks dengan perintah ini:
New-Item -ItemType Directory -Force (Split-Path "$env:USERPROFILE\.continue\config.yaml") | Out-Null; notepad "$env:USERPROFILE\.continue\config.yaml"
Kalau Notepad bertanya "create a new file?", pilih Yes.
2. Salin isi YAML ini, tempel ke editor, lalu simpan:
name: DataByte version: 1.0.0 schema: v1 models: - name: MiniMax M3 (DataByte Plan) provider: openai model: MiniMax-M3 apiBase: https://ai.databyte.co.id/v1 apiKey: sk-db-xxxx roles: - chat - edit - apply - name: MiniMax M3.1 Flash (DataByte Plan) provider: openai model: MiniMax-M3.1-Flash apiBase: https://ai.databyte.co.id/v1 apiKey: sk-db-xxxx roles: - chat - edit - apply - name: DataByte M1 (DataByte Plan) provider: openai model: databyte-m1 apiBase: https://ai.databyte.co.id/v1 apiKey: sk-db-xxxx roles: - chat - edit - applySimpan dengan Ctrl + S. Nama file harus tetap persis seperti di atas, bukan .txt.
3. Pilih model
Buka panel Continue (ikon Continue di sisi kiri VS Code), lalu pilih model DataByte di daftar model di bawah kotak chat.

Hermes Agent: cara install dan pengaturan
Agen AI otonom dari NousResearch yang Anda jalankan di komputer sendiri. Ingin jalan 24/7 tanpa install sendiri? Lihat Hermes Agent 24/7 di VPS.
1. Pasang Hermes
Buka PowerShell (tombol Windows → ketik "PowerShell" → Enter). Jangan pakai CMD.
iex (irm https://hermes-agent.nousresearch.com/install.ps1)
Setelah selesai, tutup lalu buka lagi terminal.
2. Arahkan model ke DataByte
Buka file pengaturan Hermes:
New-Item -ItemType Directory -Force (Split-Path "$env:LOCALAPPDATA\hermes\config.yaml") | Out-Null; notepad "$env:LOCALAPPDATA\hermes\config.yaml"
Ganti seluruh bagian
model:di file itu dengan isi di bawah (bagian lain biarkan apa adanya), lalu simpan:model: default: databyte-m1 provider: custom base_url: https://ai.databyte.co.id/v1 api_key: sk-db-xxxx
Tidak nyaman mengedit file? Jalankan
hermes model, pilih "Custom endpoint", lalu isi alamat, API key, dan nama model yang sama seperti di atas.3. Jalankan
Ketik
hermesdi terminal. Ingin bot Telegram tanpa memasang apa pun? Pakai Bot Telegram yang dijalankan DataByte.

TypingMind
Aplikasi chat di browser untuk API yang kompatibel OpenAI.
1. Tambah model baru
Settings → Models → Add Custom Model, lalu pilih OpenAI Chat Completions API.
2. Isi kolomnya
https://ai.databyte.co.id/v1/chat/completions
MiniMax-M3
Bearer sk-db-xxxx

9router
Router API untuk banyak penyedia AI sekaligus.
Di menu Providers dashboard 9router, buat provider baru bertipe OpenAI Compatible dengan:
https://ai.databyte.co.id/v1
sk-db-xxxx
Bot Telegram (Managed AI Agents)
Tanpa coding dan tanpa server sendiri: DataByte menjalankan agen AI (Hermes) di Telegram untuk Anda, 24 jam.
1. Buka menu Agents di dashboard
2. Ambil Telegram User ID Anda
Kirim pesan apa saja ke @userinfobot, lalu salin angka "Id" yang dibalas.
3. Buat bot dan salin Bot Token
Buka @BotFather, kirim /newbot, ikuti pertanyaannya, lalu salin token yang diberikan.
4. Pilih model, isi kepribadian bot, lalu klik Deploy Agent
Masalah umum & solusi
Cari pesan yang muncul di layar Anda, lalu klik untuk melihat penyebab dan cara memperbaikinya.
Saat memasang
"claude is not recognized" / "command not found: claude"
Terminal belum tahu lokasi program yang baru dipasang. Tutup semua jendela terminal, buka lagi, lalu ketik claude --version.
Masih gagal? Installer Windows menaruh program di folder %USERPROFILE%\.local\bin, dan folder itu harus terdaftar di PATH. Jalankan perintah ini sekali, lalu tutup dan buka lagi PowerShell (kalau memakai terminal di dalam VS Code, tutup VS Code sepenuhnya):
$bin = "$env:USERPROFILE\.local\bin"
$p = [Environment]::GetEnvironmentVariable('PATH', 'User')
if (($p -split ';') -notcontains $bin) { [Environment]::SetEnvironmentVariable('PATH', "$p;$bin", 'User') }
Write-Host "Selesai. Tutup lalu buka lagi PowerShell.""irm is not recognized" atau "The token '&&' is not a valid statement separator"
Perintahnya dijalankan di jendela yang salah. "irm is not recognized" berarti Anda di Command Prompt (CMD): buka PowerShell lalu ulangi. Error "&&" berarti perintah untuk CMD ditempel di PowerShell: pakai perintah PowerShell dari halaman ini.
"A parameter cannot be found that matches parameter name 'fsSL'" atau error curl lain di PowerShell
Di Windows PowerShell, curl bukan program curl asli, jadi perintah curl untuk macOS/Linux tidak jalan. Pilih tab Windows pada kotak kode dan pakai versi PowerShell-nya.
"Claude Code does not support 32-bit Windows"
Anda membuka "Windows PowerShell (x86)". Tutup, lalu buka "Windows PowerShell" atau "Terminal" yang biasa (tanpa x86).
"… cannot be loaded because running scripts is disabled on this system"
Windows memblokir skrip PowerShell secara bawaan, termasuk perintah dari npm (misalnya opencode). Izinkan skrip untuk akun Anda saja dengan perintah ini, jawab Y, lalu buka PowerShell baru:
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
File tersimpan sebagai settings.json.txt
Notepad menambahkan .txt kalau "Save as type" masih "Text Documents", dan Windows menyembunyikan akhiran itu. Aplikasi lalu tidak menemukan file-nya.
Cara paling aman: pakai perintah "tulis otomatis" di panduan aplikasi Anda, jadi tidak perlu Notepad. Kalau sudah terlanjur, buka File Explorer → View → Show → File name extensions, lalu ubah nama file dan hapus ".txt" di belakangnya.
Muncul peringatan saat menempel banyak baris di terminal
Itu normal. Windows Terminal dan beberapa terminal lain menanyakan dulu sebelum menempel teks yang lebih dari satu baris. Pilih "Paste anyway" (Tempel saja).
Pesan error dari API
401 · "Invalid API key" / "Invalid API key format. Expected: sk-db-..."
- Masih tertulis sk-db-xxxx: ganti dengan kunci asli Anda (atau tempel kunci di langkah 2 panduan, lalu salin ulang contohnya).
- Ada spasi, baris baru, atau tanda kutip yang ikut tersalin di awal/akhir kunci.
- Kunci sudah dihapus, dijeda, atau kedaluwarsa. Cek di Dashboard → API Keys.
402 · "Insufficient balance" (saldo tidak cukup)
Permintaan ke AI Gateway butuh saldo. Isi saldo dulu, atau pakai model Request Based Plan (tanpa awalan provider/) kalau Anda punya paket aktif.
Isi saldo →403 · "API Key ini dibatasi untuk cakupan …"
Kunci lama bisa dibatasi hanya untuk paket atau hanya untuk AI Gateway. Buat kunci baru di Dashboard → API Keys: kunci baru berlaku untuk keduanya.
429 · batas tercapai / kuota habis
Jatah request paket untuk hari/minggu/bulan ini sudah habis, atau terlalu banyak permintaan dalam waktu singkat. Cek sisa jatah di dashboard, tunggu jatah direset, atau sementara pakai AI Gateway.
"Model … not found" / "There's an issue with the selected model"
- Nama model salah ketik. Salin dari bagian Alamat API & nama model.
- Model paket (misalnya
MiniMax-M3) dikirim ke alamat AI Gateway, atau modelprovider/modeldikirim dengan header plan. Samakan alamat dengan cara bayar Anda. - Di Claude Code: alamat
ANTHROPIC_BASE_URLtidak boleh diakhiri /v1.
404 · "Not Found"
Alamat (base URL) salah. Yang paling sering: /v1 tertulis dua kali (misalnya …/v1/v1/…) karena aplikasinya sudah menambahkan /v1 sendiri. Bandingkan dengan alamat di bagian Alamat API & nama model.
Claude Code
Claude Code masih meminta login akun Anthropic
Claude Code belum membaca file pengaturan. Periksa:
- File ada di
%USERPROFILE%\.claude\settings.json(bukan di folder proyek), dan namanya bukan settings.json.txt. - Isinya JSON yang utuh: semua tanda kutip, koma, dan kurung kurawal ikut tersalin.
- Claude Code dibuka ulang setelah file disimpan.
Setelah itu jalankan /status di Claude Code: alamat DataByte harus terlihat di baris Anthropic base URL.
Semua sudah benar tapi instalasi baru tetap menampilkan "Select login method"? Ini masalah yang diketahui di Claude Code (#13827). Tutup Claude Code, lalu jalankan perintah ini untuk menandai layar perkenalan sudah selesai. File lama dicadangkan dulu sebagai .claude.json.bak.
$f = "$env:USERPROFILE\.claude.json"
try {
if (Test-Path $f) { Copy-Item $f "$f.bak" -Force; $j = [IO.File]::ReadAllText($f) | ConvertFrom-Json -ErrorAction Stop } else { $j = New-Object PSObject }
$j | Add-Member -NotePropertyName hasCompletedOnboarding -NotePropertyValue $true -Force -ErrorAction Stop
[IO.File]::WriteAllText($f, ($j | ConvertTo-Json -Depth 100))
Write-Host "Selesai. Buka ulang Claude Code."
} catch { Write-Host "Gagal, file tidak diubah: $_" }Claude Code dengan AI Gateway hanya mengobrol, tidak mengubah file
Untuk saat ini jalur format Anthropic di AI Gateway belum meneruskan tool (membaca/mengubah file dan menjalankan perintah). Untuk Claude Code, pakai Request Based Plan. Kalau ingin memakai saldo AI Gateway untuk ngoding, pakai OpenCode, Cursor, atau Continue: ketiganya memakai format OpenAI yang sudah mendukung tool.
API key & header
Setiap permintaan butuh API key DataByte (diawali sk-db-). Kirim lewat salah satu header berikut, sesuai format aplikasinya.
Authorization: Bearer sk-db-xxxx
x-api-key: sk-db-xxxx
Jaga kerahasiaan API key
Jangan taruh API key di kode yang diunggah ke GitHub atau di aplikasi yang berjalan di browser. Kalau bocor, hapus kuncinya di Dashboard → API Keys lalu buat yang baru.
Peta API & alur kerja
Semua endpoint yang bisa dipanggil dengan API key, dan urutan langkah dari kunci sampai hasil.
1. Siapkan API key dan saldo
Satu API key berlaku untuk semua endpoint. Teks bisa memakai jatah paket atau saldo; gambar, suara, dan video selalu memakai saldo AI Gateway.
2. Pilih model dari katalog
GET /gateway/v1/modelsmemberi tahu jenis tiap model lewatoutput_modalitydan pilihan yang didukungnya lewatmedia_capabilities.3. Kirim request ke endpoint sesuai jenis model
Teks ke chat/completions atau messages, gambar ke images/generations, suara ke audio/speech, video ke videos. Model yang dikirim ke endpoint yang salah dijawab 400 beserta nama endpoint yang benar.
4. Saldo ditahan dulu, ditagih setelah hasil jadi
Untuk media, sebagian saldo ditahan sebelum model dipanggil. Setelah hasil jadi, biaya akhirnya ditagih dan sisa tahanan dilepas. Request yang gagal tidak ditagih.
5. Simpan hasilnya di tempat Anda
Tautan unduh berlaku 1 jam, dan file dihapus dari penyimpanan kami pada waktu
expires_at. Tautan baru bisa diminta lewatGET /gateway/v1/generations/{id}selama file masih ada.
Daftar endpoint
/v1/chat/completionsChat (format OpenAI) · Request Based PlanTekspost/anthropic/v1/messagesMessages (format Anthropic) · Request Based PlanTeksget/gateway/v1/modelsDaftar modelKatalogpost/gateway/v1/chat/completionsChat (format OpenAI)Tekspost/gateway/v1/messagesMessages (format Anthropic)Tekspost/gateway/v1/images/generationsBuat atau edit gambarGambarpost/gateway/v1/audio/speechTeks menjadi suara (TTS)Suarapost/gateway/v1/audio/transcriptionsSuara menjadi teks (STT)Transkripsipost/gateway/v1/videosBuat video (asinkron)Videoget/gateway/v1/videos/{id}Status videoVideoget/gateway/v1/videos/{id}/contentUnduh videoVideoget/gateway/v1/generationsRiwayat hasil mediaRiwayatget/gateway/v1/generations/{id}Detail satu hasilRiwayatSpesifikasi OpenAPI
Daftar di atas, parameter, dan kode error di halaman ini dibuat dari satu file spesifikasi: https://ai.databyte.co.id/openapi.json. File itu bisa diimpor ke Postman atau dipakai untuk membuat SDK. Isinya hanya endpoint publik dan tidak memuat harga.
Endpoint & parameter
Kompatibel dengan format OpenAI Chat Completions dan Anthropic Messages.
https://ai.databyte.co.id/v1/chat/completionshttps://ai.databyte.co.id/anthropic/v1/messageshttps://ai.databyte.co.id/gateway/v1/chat/completionshttps://ai.databyte.co.id/gateway/v1/messagesParameter body
modelteks · wajibRequest Based Plan: MiniMax-M3, MiniMax-M3.1-Flash, databyte-m1, deepseek-v4.1-flash, mimo-v2.6-flash. AI Gateway: format provider/model, misalnya anthropic/claude-sonnet-5.5, minimax/minimax-m3, deepseek/deepseek-v4.1-flash.
messagesarray · wajibIsi percakapan: [{"role": "system" | "user" | "assistant", "content": "..."}].
temperatureangka · opsional0 sampai 2. Default 0.7.
max_tokensangka · opsionalBatas panjang jawaban (token). Default 2048.
streamboolean · opsionaltrue untuk menerima jawaban bertahap (Server-Sent Events). Default false.
enable_mcpboolean · opsionalAktifkan tool bawaan (web_search, understand_image). Default false.
Memilih potongan lewat header (opsional)
x-databyte-billing: gateway memaksa pemakaian saldo AI Gateway di alamat /v1.
x-databyte-billing: plan memaksa pemakaian jatah Request Based Plan. Permintaan ditolak kalau modelnya bukan model paket.
Contoh kode
Pakai library resmi OpenAI atau Anthropic: cukup ganti alamat (base URL) dan API key.
Python
1. Pasang library-nya sekali saja:
py -m pip install openai
2. Simpan kode ini sebagai halo.py, lalu jalankan dengan py halo.py
from openai import OpenAI
client = OpenAI(
base_url="https://ai.databyte.co.id/v1",
api_key="sk-db-xxxx",
)
response = client.chat.completions.create(
model="MiniMax-M3",
messages=[{"role": "user", "content": "Tuliskan fungsi binary search di Python"}],
)
print(response.choices[0].message.content)JavaScript / Node.js
Pasang dengan npm install openai, simpan sebagai halo.mjs, lalu jalankan node halo.mjs
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://ai.databyte.co.id/v1",
apiKey: "sk-db-xxxx",
});
const response = await client.chat.completions.create({
model: "MiniMax-M3",
messages: [{ role: "user", content: "Halo dari DataByte!" }],
});
console.log(response.choices[0].message.content);Python · format Anthropic
Pasang dengan py -m pip install anthropic
from anthropic import Anthropic
client = Anthropic(
base_url="https://ai.databyte.co.id/anthropic", # tanpa /v1
api_key="sk-db-xxxx",
)
message = client.messages.create(
model="MiniMax-M3",
max_tokens=1024,
messages=[{"role": "user", "content": "Halo dari DataByte!"}],
)
print("".join(block.text for block in message.content if block.type == "text"))Langsung dari terminal
Versi Windows memakai PowerShell (Invoke-RestMethod), karena contoh curl untuk macOS/Linux tidak jalan di PowerShell maupun CMD.
$body = @{ model = "MiniMax-M3"; messages = @(@{ role = "user"; content = "Halo! Balas dengan satu kalimat saja." }) } | ConvertTo-Json -Depth 5
$res = Invoke-RestMethod -Method Post -Uri "https://ai.databyte.co.id/v1/chat/completions" -Headers @{ Authorization = "Bearer sk-db-xxxx" } -ContentType "application/json; charset=utf-8" -Body $body
$res.choices[0].message.content$body = @{ model = "MiniMax-M3"; max_tokens = 1024; messages = @(@{ role = "user"; content = "Halo! Balas dengan satu kalimat saja." }) } | ConvertTo-Json -Depth 5
$res = Invoke-RestMethod -Method Post -Uri "https://ai.databyte.co.id/anthropic/v1/messages" -Headers @{ "x-api-key" = "sk-db-xxxx"; "anthropic-version" = "2023-06-01" } -ContentType "application/json; charset=utf-8" -Body $body
$res.content | Where-Object { $_.type -eq "text" } | ForEach-Object { $_.text }Contoh respons
Bentuk jawaban format OpenAI. Teks balasan ada di choices[0].message.content.
{
"id": "chatcmpl-db-abc123",
"object": "chat.completion",
"created": 1715000000,
"model": "MiniMax-M3",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "Halo! Ada yang bisa saya bantu untuk koding hari ini?"
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 12,
"completion_tokens": 15,
"total_tokens": 27
}
}Research Mode
Tambahkan "thinking": true agar model memeriksa jawabannya bertahap sebelum membalas.
{
"model": "databyte-m1",
"messages": [
{
"role": "user",
"content": "Analisis arsitektur sistem berikut..."
}
],
"max_tokens": 4096,
"thinking": true
}Katalog model media
Katalog model AI Gateway yang aktif. Untuk model media, output_modality menunjukkan endpoint yang dipakai dan media_capabilities berisi pilihan yang didukung (voice, resolusi, rasio, durasi). Tidak butuh API key.
https://ai.databyte.co.id/gateway/v1/modelsModel media yang aktif sekarang
Memuat katalog…
Ambil daftarnya dari terminal
$res = Invoke-RestMethod -Uri "https://ai.databyte.co.id/gateway/v1/models"
$res.data | Where-Object { $_.output_modality -ne "text" } | Select-Object id, output_modality, media_capabilities | ConvertTo-Json -Depth 5Baca katalog saat aplikasi Anda mulai, jangan menanam ID model di kode: model bisa bertambah atau diganti.
Buat gambar
Membuat gambar dari teks. Dengan input_references, gambar yang dikirim dipakai sebagai acuan (edit). Jawaban datang setelah gambar selesai; ini bisa butuh sampai 3 menit.
https://ai.databyte.co.id/gateway/v1/images/generationsEndpoint ini selalu memotong saldo AI Gateway, bukan jatah paket. API key-nya sama dengan yang dipakai untuk teks.
google/gemini-nano-banana-2.1Memuat katalog…Parameter body (JSON)
modelteks · wajibID model gambar dari katalog.
promptteks · wajibDeskripsi gambar yang diinginkan.
Maksimal 8,000 karakter
nbilangan bulat · opsionalJumlah gambar.
1 sampai 4 · Default: 1
aspect_ratioteks · opsionalRasio lebar:tinggi, misalnya 1:1, 16:9, 9:16.
Dukungan dan pilihannya bergantung model
resolutionteks · opsionalTingkat resolusi (1K, 2K, 4K). Tanpa daftar dari model, maksimal 2K.
Dukungan dan pilihannya bergantung model
sizeteks · opsionalUkuran piksel LEBARxTINGGI, misalnya 1024x1024. Pakai ini atau resolution.
Dukungan dan pilihannya bergantung model
qualityteks · opsionalTingkat kualitas, diteruskan ke model apa adanya.
Maksimal 32 karakter
output_formatteks · opsionalFormat file hasil.
Pilihan: png, jpeg, webp
response_formatteks · opsionalurl: tautan unduh yang berlaku 1 jam. b64_json: isi gambar langsung di jawaban.
Pilihan: url, b64_json · Default: url
input_referencesarray · opsionalGambar acuan untuk edit: [{"type": "image_url", "image_url": {"url": "..."}}]. URL harus https:// atau data:image/...;base64,... Hanya untuk model yang menerima input gambar.
Maksimal 4 item
Contoh
$body = @'
{"model":"google/gemini-nano-banana-2.1","prompt":"Kucing oranye memakai kacamata bulat, ilustrasi datar, latar biru muda","n":1,"aspect_ratio":"1:1"}
'@
$res = Invoke-RestMethod -TimeoutSec 600 -Method Post -Uri "https://ai.databyte.co.id/gateway/v1/images/generations" -Headers @{ Authorization = "Bearer sk-db-xxxx" } -ContentType "application/json; charset=utf-8" -Body ([Text.Encoding]::UTF8.GetBytes($body))
Invoke-WebRequest -UseBasicParsing -Uri $res.data[0].url -OutFile gambar.png
Write-Host "Tersimpan: gambar.png, biaya USD $($res.usage.cost_usd)"from urllib.request import urlretrieve
from openai import OpenAI
client = OpenAI(
base_url="https://ai.databyte.co.id/gateway/v1",
api_key="sk-db-xxxx",
timeout=300, # gambar bisa butuh 1-3 menit
max_retries=0, # request yang putus tetap ditagih: jangan diulang otomatis
)
result = client.images.generate(
model="google/gemini-nano-banana-2.1",
prompt="Kucing oranye memakai kacamata bulat, ilustrasi datar, latar biru muda",
n=1,
extra_body={"aspect_ratio": "1:1"}, # parameter di luar standar OpenAI
)
urlretrieve(result.data[0].url, "gambar.png")
print("Tersimpan: gambar.png")import { writeFile } from "node:fs/promises";
const res = await fetch("https://ai.databyte.co.id/gateway/v1/images/generations", {
method: "POST",
headers: {
Authorization: "Bearer sk-db-xxxx",
"Content-Type": "application/json",
},
body: JSON.stringify({"model":"google/gemini-nano-banana-2.1","prompt":"Kucing oranye memakai kacamata bulat, ilustrasi datar, latar biru muda","n":1,"aspect_ratio":"1:1"}),
});
const json = await res.json();
if (!res.ok) throw new Error(`${json.error.code}: ${json.error.message}`);
const file = await fetch(json.data[0].url); // tanpa header Authorization
await writeFile("gambar.png", Buffer.from(await file.arrayBuffer()));
console.log("Tersimpan: gambar.png, biaya USD", json.usage.cost_usd);Respons
{
"id": "img_1f0c9c1e-7a52-4d0e-9a55-2b7d7f0f3c11",
"created": 1715000000,
"data": [
{
"url": "https://…/0.png?…"
}
],
"usage": {
"images": 1,
"cost_usd": 0.01,
"cost_idr": 170
}
}Angka biaya di contoh hanya ilustrasi, bukan harga. Harga tiap model ada di dashboard.
data[].urladalah tautan unduh yang berlaku 1 jam. Unduh tanpa header Authorization, lalu simpan filenya di tempat Anda.- Dengan
response_format: "b64_json", isi gambar ada didata[].b64_json. Bentuk ini juga dipakai kalau tautan gagal dibuat, jadi periksa kedua kolom. - Biaya ada di
usage.cost_usddan headerx-databyte-cost-usd.iddipakai untuk mengambil ulang hasil lewat riwayat.
Edit gambar dengan gambar acuan
Endpoint-nya sama. Tambahkan input_references berisi gambar yang ingin diubah atau dijadikan acuan gaya. Hanya untuk model yang menerima input gambar.
{
"model": "google/gemini-nano-banana-2.1",
"prompt": "Ganti latar menjadi pantai saat matahari terbenam",
"input_references": [
{
"type": "image_url",
"image_url": {
"url": "https://example.com/foto-produk.png"
}
}
]
}Error khusus endpoint ini (13)klik untuk membuka
missing_promptprompt kosong.
prompt_too_longprompt melebihi batas karakter.
invalid_nn harus bilangan bulat 1 sampai 4.
invalid_input_referencesinput_references salah bentuk atau terlalu banyak.
invalid_parameterNilai parameter salah bentuk. Pesan error menyebut parameternya.
unsupported_parameterNilai tidak didukung model ini. Pesan error memuat pilihan yang didukung.
media_rate_limitedBatas jumlah gambar, suara, atau video per rentang waktu tercapai. Tunggu sesuai header Retry-After.
rate_limit_exceededModel sedang sibuk. Saldo tidak dipotong; coba lagi beberapa detik kemudian (tanpa header Retry-After).
upstream_invalid_requestModel menolak isi request. Saldo tidak dipotong.
upstream_no_outputModel tidak mengembalikan hasil. Saldo tidak dipotong.
upstream_timeoutModel tidak menjawab tepat waktu. Saldo tidak dipotong.
upstream_errorModel sedang bermasalah. Saldo tidak dipotong.
generation_failedGagal memproses hasil. Cek GET /generations sebelum mengulang.
Error umum (API key, saldo, batas request) ada di Error, batas & percobaan ulang.
Teks menjadi suara (TTS)
Mengubah teks menjadi suara. Jawaban sukses adalah file audio itu sendiri (bukan JSON). Biaya dihitung setelah audio dikirim; baca lewat GET /generations/{id} memakai ID di header. Endpoint yang sama juga ada di /v1/audio/speech, dengan tagihan yang sama.
https://ai.databyte.co.id/gateway/v1/audio/speechEndpoint ini selalu memotong saldo AI Gateway, bukan jatah paket. API key-nya sama dengan yang dipakai untuk teks.
elevenlabs/eleven-v4-turboMemuat katalog…Parameter body (JSON)
modelteks · wajibID model suara dari katalog.
inputteks · wajibTeks yang dibacakan. Ekspresi diatur dengan tag di dalam teks, misalnya [whispers] atau [excited] (bergantung model).
Maksimal 10,000 karakter
voiceteks · opsionalNama voice. Kalau kosong, dipakai voice pertama milik model.
Dukungan dan pilihannya bergantung model
response_formatteks · opsionalFormat audio. pcm = audio mentah tanpa header.
Pilihan: mp3, pcm · Default: mp3
speedangka · opsionalKecepatan bicara. Tidak semua model menerimanya; model yang tidak mendukung menjawab 400.
0.25 sampai 4 · Dukungan dan pilihannya bergantung model
instructionsteks · opsionalArahan gaya bicara. Tidak semua model memakainya.
Maksimal 1,000 karakter · Dukungan dan pilihannya bergantung model
Contoh
$body = @'
{"model":"elevenlabs/eleven-v4-turbo","voice":"sarah","input":"Halo! Ini suara yang dibuat lewat DataByte AI Gateway.","response_format":"mp3"}
'@
Invoke-WebRequest -UseBasicParsing -OutFile halo.mp3 -TimeoutSec 600 -Method Post -Uri "https://ai.databyte.co.id/gateway/v1/audio/speech" -Headers @{ Authorization = "Bearer sk-db-xxxx" } -ContentType "application/json; charset=utf-8" -Body ([Text.Encoding]::UTF8.GetBytes($body))
Write-Host "Tersimpan: halo.mp3"from openai import OpenAI
client = OpenAI(
base_url="https://ai.databyte.co.id/gateway/v1",
api_key="sk-db-xxxx",
timeout=300,
max_retries=0, # request yang putus tetap ditagih: jangan diulang otomatis
)
speech = client.audio.speech.create(
model="elevenlabs/eleven-v4-turbo",
voice="sarah",
input="Halo! Ini suara yang dibuat lewat DataByte AI Gateway.",
response_format="mp3",
)
speech.write_to_file("halo.mp3")
print("Tersimpan: halo.mp3")import { writeFile } from "node:fs/promises";
const res = await fetch("https://ai.databyte.co.id/gateway/v1/audio/speech", {
method: "POST",
headers: {
Authorization: "Bearer sk-db-xxxx",
"Content-Type": "application/json",
},
body: JSON.stringify({"model":"elevenlabs/eleven-v4-turbo","voice":"sarah","input":"Halo! Ini suara yang dibuat lewat DataByte AI Gateway.","response_format":"mp3"}),
});
if (!res.ok) {
const { error } = await res.json(); // saat gagal, isinya JSON, bukan audio
throw new Error(`${error.code}: ${error.message}`);
}
await writeFile("halo.mp3", Buffer.from(await res.arrayBuffer()));
console.log("Tersimpan: halo.mp3, ID:", res.headers.get("x-databyte-generation-id"));Respons
- Saat berhasil, body adalah file audio (
Content-Type: audio/mpeg), bukan JSON. Saat gagal, body adalah JSON error. Periksa status HTTP sebelum menyimpan file. - Header
x-databyte-generation-idberisi ID hasil (tts_…). Biaya akhirnya dibaca beberapa detik kemudian lewatGET /gateway/v1/generations/{id}. - Teks dihitung per karakter. Satu request maksimal sepanjang batas
inputdi atas; teks yang lebih panjang dipecah per paragraf lalu file audionya disambung.
Mengatur ekspresi
Tulis tag di dalam teks, tepat sebelum bagian yang ingin diubah: [whispers], [slowly], [shouting], [excited]. Contoh: "[whispers] Ini rahasia. [excited] Tapi kabarnya bagus!". Dukungan tag bergantung model, jadi dengarkan hasilnya dulu.
Error khusus endpoint ini (10)klik untuk membuka
missing_inputinput kosong.
input_too_longinput melebihi batas karakter. Pecah teks menjadi beberapa request.
invalid_parameterNilai parameter salah bentuk. Pesan error menyebut parameternya.
unsupported_parameterNilai tidak didukung model ini. Pesan error memuat pilihan yang didukung.
media_rate_limitedBatas jumlah gambar, suara, atau video per rentang waktu tercapai. Tunggu sesuai header Retry-After.
rate_limit_exceededModel sedang sibuk. Saldo tidak dipotong; coba lagi beberapa detik kemudian (tanpa header Retry-After).
upstream_invalid_requestModel menolak isi request. Saldo tidak dipotong.
upstream_output_too_largeHasil dari model melebihi batas ukuran. Perpendek input.
upstream_timeoutModel tidak menjawab tepat waktu. Saldo tidak dipotong.
upstream_errorModel sedang bermasalah. Saldo tidak dipotong.
Error umum (API key, saldo, batas request) ada di Error, batas & percobaan ulang.
Suara menjadi teks (STT)
Menulis ulang isi rekaman menjadi teks. Kirim file lewat multipart/form-data (seperti OpenAI), atau JSON berisi input_audio (base64 atau URL). Rekaman panjang bisa butuh lebih dari 5 menit. Endpoint yang sama juga ada di /v1/audio/transcriptions, dengan tagihan yang sama.
https://ai.databyte.co.id/gateway/v1/audio/transcriptionsEndpoint ini selalu memotong saldo AI Gateway, bukan jatah paket. API key-nya sama dengan yang dipakai untuk teks.
ID_MODEL_TRANSKRIPSIMemuat katalog…Parameter (multipart/form-data)
filefile · wajibFile audio, maksimal 25 MB: mp3, mp4, mpeg, mpga, m4a, wav, webm, ogg, flac.
modelteks · wajibID model transkripsi dari katalog.
languageteks · opsionalKode bahasa rekaman, misalnya id atau en. Membantu akurasi.
response_formatteks · opsionalDiteruskan ke model. Bentuk jawaban DataByte tetap { id, text, usage }.
Pilihan: json, verbose_json · Default: json
Contoh
curl.exe https://ai.databyte.co.id/gateway/v1/audio/transcriptions ` -H "Authorization: Bearer sk-db-xxxx" ` -F "[email protected]" ` -F "model=ID_MODEL_TRANSKRIPSI" ` -F "language=id"
from openai import OpenAI
client = OpenAI(
base_url="https://ai.databyte.co.id/gateway/v1",
api_key="sk-db-xxxx",
timeout=900,
max_retries=0, # request yang putus tetap ditagih: jangan diulang otomatis
)
with open("rekaman.mp3", "rb") as audio:
result = client.audio.transcriptions.create(
model="ID_MODEL_TRANSKRIPSI",
file=audio,
language="id",
)
print(result.text)Alternatif: body JSON
Kalau rekaman sudah ada di URL publik, atau klien Anda tidak bisa mengirim multipart, kirim JSON dengan input_audio.
modelteks · wajibID model transkripsi dari katalog.
input_audioobjek · wajib{"data": "<base64>", "format": "mp3"} atau {"url": "https://...", "format": "mp3"}. Untuk file besar pakai multipart.
languageteks · opsionalKode bahasa rekaman, misalnya id atau en.
response_formatteks · opsionalDiteruskan ke model. Bentuk jawaban DataByte tetap { id, text, usage }.
Pilihan: json, verbose_json · Default: json
{
"model": "ID_MODEL_TRANSKRIPSI",
"input_audio": {
"url": "https://example.com/rekaman.mp3",
"format": "mp3"
},
"language": "id"
}Respons
{
"id": "stt_6a1d3d0a-2f6b-4a57-8d1e-0c1a9a4c7b22",
"text": "Selamat pagi, rapat hari ini dimulai pukul sembilan.",
"usage": {
"seconds": 42.5,
"cost_usd": 0.01,
"cost_idr": 170
}
}Angka biaya di contoh hanya ilustrasi, bukan harga. Harga tiap model ada di dashboard.
Error khusus endpoint ini (15)klik untuk membuka
invalid_multipartBody multipart/form-data rusak.
missing_fileField file tidak ada atau kosong.
missing_audioinput_audio tidak ada atau kosong.
invalid_audioinput_audio.data bukan base64 yang valid.
invalid_audio_urlinput_audio.url bukan URL http(s) yang valid.
unsupported_formatFormat audio tidak didukung.
file_too_largeFile audio lebih dari 25 MB.
audio_too_longRekaman terlalu panjang. Potong menjadi beberapa file.
invalid_parameterNilai parameter salah bentuk. Pesan error menyebut parameternya.
unsupported_parameterNilai tidak didukung model ini. Pesan error memuat pilihan yang didukung.
media_rate_limitedBatas jumlah gambar, suara, atau video per rentang waktu tercapai. Tunggu sesuai header Retry-After.
rate_limit_exceededModel sedang sibuk. Saldo tidak dipotong; coba lagi beberapa detik kemudian (tanpa header Retry-After).
upstream_invalid_requestModel menolak isi request. Saldo tidak dipotong.
upstream_timeoutModel tidak menjawab tepat waktu. Saldo tidak dipotong.
upstream_errorModel sedang bermasalah. Saldo tidak dipotong.
Error umum (API key, saldo, batas request) ada di Error, batas & percobaan ulang.
Buat video
Mengirim pekerjaan video. Jawabannya 202 berisi ID; videonya dibuat di belakang layar selama beberapa menit. Pantau lewat GET /videos/{id}. Saldo ditahan saat pekerjaan dikirim dan baru ditagih saat video selesai; pekerjaan yang gagal tidak ditagih. Video hanya untuk akun yang sudah pernah top-up, dan saldo bonus tidak bisa dipakai.
ID_MODEL_VIDEOMemuat katalog…1. Kirim pekerjaan
posthttps://ai.databyte.co.id/gateway/v1/videos$body = @' {"model":"ID_MODEL_VIDEO","prompt":"Drone terbang pelan di atas sawah terasering saat matahari terbit","duration":5,"aspect_ratio":"16:9"} '@ $job = Invoke-RestMethod -TimeoutSec 600 -Method Post -Uri "https://ai.databyte.co.id/gateway/v1/videos" -Headers @{ Authorization = "Bearer sk-db-xxxx" } -ContentType "application/json; charset=utf-8" -Body ([Text.Encoding]::UTF8.GetBytes($body)) $job{ "id": "vid_3b9f0a52-8c1d-4c0e-b0a7-5d2e9f6a1c33", "object": "video.generation", "status": "pending", "model": "ID_MODEL_VIDEO", "created": 1715000000, "hold_usd": 0.5, "polling_url": "/gateway/v1/videos/vid_3b9f0a52-8c1d-4c0e-b0a7-5d2e9f6a1c33" }2. Pantau status sampai final
gethttps://ai.databyte.co.id/gateway/v1/videos/{id}Status dan hasil satu pekerjaan video milik Anda. Panggil tiap 10-15 detik sampai status final. Saat completed, url berisi tautan unduh yang berlaku 1 jam.
$video = Invoke-RestMethod -Uri "https://ai.databyte.co.id/gateway/v1/videos/$($job.id)" -Headers @{ Authorization = "Bearer sk-db-xxxx" } $video.status if ($video.status -eq "completed") { Invoke-WebRequest -UseBasicParsing -Uri $video.url -OutFile video.mp4 }Urutan status:
pending→processing→completed. Status gagal:failed,cancelled,expired(tidak ditagih, saldo yang ditahan dilepas).3. Unduh hasilnya
Saat
completed, unduh dari kolomurltanpa header Authorization. Atau minta server mengalihkan langsung ke filenya:gethttps://ai.databyte.co.id/gateway/v1/videos/{id}/contentMengalihkan (302) ke tautan unduh file video. Klien yang ikut mengirim header Authorization ke alamat tujuan akan ditolak di sana; untuk klien seperti itu ambil url dari GET /videos/{id}.
Parameter body (JSON)
modelteks · wajibID model video dari katalog.
promptteks · opsionalDeskripsi video. Wajib, kecuali video dibuat dari frame_images.
Maksimal 4,000 karakter
durationangka · opsionalDurasi dalam detik. Kalau kosong: durasi terpendek milik model, atau 5 detik. Tanpa daftar dari model, maksimal 60 detik.
Dukungan dan pilihannya bergantung model
resolutionteks · opsionalResolusi, misalnya 720p atau 1080p.
Dukungan dan pilihannya bergantung model
aspect_ratioteks · opsionalRasio lebar:tinggi, misalnya 16:9 atau 9:16.
Dukungan dan pilihannya bergantung model
sizeteks · opsionalUkuran piksel LEBARxTINGGI, misalnya 1280x720.
Dukungan dan pilihannya bergantung model
generate_audioboolean · opsionaltrue untuk membuat video dengan suara, kalau model mendukung.
Dukungan dan pilihannya bergantung model
seedbilangan bulat · opsionalAngka acuan agar hasil lebih mudah diulang.
frame_imagesarray · opsionalGambar awal/akhir video: [{"type": "image_url", "frame_type": "first_frame" | "last_frame", "image_url": {"url": "..."}}].
Maksimal 2 item · Dukungan dan pilihannya bergantung model
input_referencesarray · opsionalBahan acuan: [{"type": "image_url" | "audio_url" | "video_url", "<type>": {"url": "..."}}].
Maksimal 10 item
Contoh lengkap: kirim, pantau, unduh
import time
import requests # pip install requests
API = "https://ai.databyte.co.id/gateway/v1"
HEADERS = {"Authorization": "Bearer sk-db-xxxx"}
# 1. Kirim pekerjaan. Jawabannya 202 berisi ID, videonya belum jadi.
job = requests.post(
f"{API}/videos",
headers=HEADERS,
timeout=90,
json={"model": "ID_MODEL_VIDEO", "prompt": "Drone terbang pelan di atas sawah terasering saat matahari terbit", "duration": 5, "aspect_ratio": "16:9"},
)
job.raise_for_status()
video_id = job.json()["id"]
# 2. Tanya statusnya tiap 10 detik sampai selesai (bisa beberapa menit).
while True:
status = requests.get(f"{API}/videos/{video_id}", headers=HEADERS, timeout=30)
status.raise_for_status()
video = status.json()
if video["status"] in ("completed", "failed", "cancelled", "expired"):
break
time.sleep(10)
# 3. Unduh hasilnya. Tautan berlaku 1 jam dan dibuka tanpa header Authorization.
if video["status"] == "completed":
with open("video.mp4", "wb") as f:
f.write(requests.get(video["url"], timeout=300).content)
print("Tersimpan: video.mp4, biaya USD", video["cost_usd"])
else:
print("Gagal:", video["status"], video.get("error")) # tidak ditagihYang tidak didukung
callback_url dan melanjutkan video sebelumnya (previous_job_id) ditolak dengan 400. Pantau status lewat langkah 2.
Error khusus endpoint ini (8)klik untuk membuka
missing_required_parameterParameter wajib tidak diisi.
invalid_parameterNilai parameter salah bentuk. Pesan error menyebut parameternya.
unsupported_parameterNilai tidak didukung model ini. Pesan error memuat pilihan yang didukung.
video_requires_topupVideo hanya untuk akun yang sudah pernah top-up.
media_rate_limitedBatas jumlah gambar, suara, atau video per rentang waktu tercapai. Tunggu sesuai header Retry-After.
rate_limit_exceededModel sedang sibuk. Saldo tidak dipotong; coba lagi beberapa detik kemudian (tanpa header Retry-After).
upstream_rejectedModel video menolak request. Saldo tidak dipotong.
upstream_errorModel sedang bermasalah. Saldo tidak dipotong.
Error umum (API key, saldo, batas request) ada di Error, batas & percobaan ulang.
Riwayat, biaya & unduh ulang
Daftar hasil gambar, suara, transkripsi, dan video milik Anda, terbaru dulu. Berisi status, biaya, dan tautan unduh.
https://ai.databyte.co.id/gateway/v1/generationsmodalityteks · query · opsionalSaring per jenis.
Pilihan: image, video, speech, transcription
limitbilangan bulat · query · opsionalJumlah per halaman.
1 sampai 100 · Default: 20
cursorteks · query · opsionalIsi dengan next_cursor dari halaman sebelumnya.
Maksimal 128 karakter
$res = Invoke-RestMethod -Uri "https://ai.databyte.co.id/gateway/v1/generations?modality=image&limit=5" -Headers @{ Authorization = "Bearer sk-db-xxxx" }
$res.data | Select-Object id, status, model, units, cost_usd, urlSatu hasil
https://ai.databyte.co.id/gateway/v1/generations/{id}Detail satu hasil milik Anda, jenis apa pun. Dipakai untuk membaca biaya suara (TTS) dan untuk mengambil ulang tautan unduh yang sudah kedaluwarsa.
{
"id": "tts_9d2c7e44-1b0a-4f3e-8a6d-7c5b4a3e2f10",
"object": "media.generation",
"status": "completed",
"model": "elevenlabs/eleven-v4-turbo",
"modality": "speech",
"created": 1715000000,
"url": "https://…/0.mp3?…",
"urls": [
"https://…/0.mp3?…"
],
"prompt": "Halo! Ini suara yang dibuat lewat DataByte AI Gateway.",
"unit_type": "char",
"units": 54,
"hold_usd": null,
"cost_usd": 0.01,
"cost_idr": 170,
"is_estimated": false,
"error": null,
"completed_at": 1715000004,
"expires_at": 1715604800
}Angka biaya di contoh hanya ilustrasi, bukan harga. Harga tiap model ada di dashboard.
Isi objek generation
idID hasil. Awalan menunjukkan jenisnya: img_, tts_, stt_, vid_.
objectSelalu "media.generation".
statusStatus saat ini. completed, failed, cancelled, dan expired sudah final. (pending, processing, completed, failed, cancelled, expired)
modelID model yang dipakai.
modalityJenis hasil. (image, speech, transcription, video)
createdWaktu dibuat (detik Unix).
urlTautan unduh file pertama, berlaku 1 jam. null kalau belum selesai atau tidak ada file.
urlsTautan unduh semua file hasil.
promptPrompt atau potongan awal teks yang dikirim.
unit_typeSatuan tagihan. (image, second, char, minute)
unitsJumlah satuan yang ditagih.
hold_usdSaldo yang masih ditahan (USD) selama belum final; null setelah final.
cost_usdBiaya akhir (USD); null kalau belum ditagih.
cost_idrBiaya akhir dalam Rupiah.
is_estimatedtrue kalau biaya memakai perkiraan karena biaya pasti belum tersedia.
errorTerisi kalau gagal: { message, code }. null kalau berhasil.
completed_atWaktu selesai (detik Unix).
expires_atWaktu file dihapus dari penyimpanan (detik Unix). Unduh sebelum waktu ini.
Error, batas & percobaan ulang
Semua endpoint menjawab error dengan bentuk yang sama. Tulis logika aplikasi berdasarkan status HTTP dan code, bukan teks message.
{
"error": {
"message": "Saldo akun Anda tidak mencukupi untuk melakukan request ini.",
"type": "insufficient_quota",
"code": "insufficient_balance"
}
}Kapan boleh mengulang
- 429: kalau ada header
Retry-After, tunggu sebanyak detik itu lalu ulangi; kalau tidak ada, tunggu beberapa detik. Ada batas jumlah gambar, suara, dan video per rentang waktu untuk tiap akun. - 502, 503, 504: ulangi dengan jeda yang makin panjang (misalnya 2, 4, 8 detik), paling banyak 3 kali.
- 400, 401, 402, 403, 404: jangan diulang apa adanya. Perbaiki request, kunci, atau saldo dulu.
- 500: hasil mungkin sudah dibuat. Cek riwayat dulu, baru ulangi kalau memang tidak ada.
- Pasang batas waktu klien 5 menit untuk gambar dan suara, 15 menit untuk transkripsi, dan matikan percobaan ulang otomatis milik SDK. Kalau koneksi Anda putus di tengah jalan, hasil tetap dibuat dan ditagih. Cek
GET /gateway/v1/generationssebelum mengirim ulang, supaya tidak membayar dua kali.
Kode yang layak diulang: api_key_rpm_exceeded, gateway_maintenance, media_rate_limited, rate_limit_exceeded, upstream_no_output, upstream_error, upstream_timeout.
Error umum (semua endpoint)
missing_api_keyHeader Authorization tidak ada.
invalid_api_keyAPI key salah atau sudah dihapus.
api_key_expiredAPI key sudah kedaluwarsa.
invalid_tokenToken sesi dashboard tidak valid. Pakai API key.
unauthenticatedKredensial tidak dikenali.
insufficient_balanceSaldo tidak cukup untuk request ini. Top up dulu.
key_spend_limit_exceededBatas belanja API key ini sudah tercapai.
forbidden_product_scopeAPI key ini tidak diizinkan memakai AI Gateway.
user_inactiveAkun tidak aktif.
model_not_allowedAPI key ini dibatasi ke model lain.
model_disabled_by_userModel dimatikan di Dashboard > Model Access.
model_not_allowed_for_keyAPI key ini dibatasi ke model lain.
api_key_request_limit_exceededJatah request API key ini habis untuk periode berjalan.
api_key_token_limit_exceededJatah token API key ini habis untuk periode berjalan.
api_key_rpm_exceededBatas request per menit API key tercapai. Tunggu sesuai header Retry-After.
gateway_maintenanceAI Gateway sedang dalam pemeliharaan.
internal_errorKesalahan di sisi DataByte. Untuk media, cek GET /generations sebelum mengulang.
Error lain
model_requiredParameter model tidak diisi.
model_not_activeModel tidak ditemukan atau sedang tidak aktif. Cek katalog.
modality_not_enabledJenis model ini (misalnya video) belum dibuka di AI Gateway.
model_modality_mismatchModel dipanggil di endpoint yang salah. Pesan error menyebut endpoint yang benar.
use_media_endpointModel gambar, suara, atau video dipanggil lewat chat. Pakai endpoint medianya.
model_pricing_unavailableModel belum siap dipakai. Hubungi support.
provider_not_supportedModel belum mendukung endpoint ini.
invalid_parameterNilai parameter salah bentuk. Pesan error menyebut parameternya.
unsupported_parameterNilai tidak didukung model ini. Pesan error memuat pilihan yang didukung.
missing_required_parameterParameter wajib tidak diisi.
missing_promptprompt kosong.
prompt_too_longprompt melebihi batas karakter.
invalid_nn harus bilangan bulat 1 sampai 4.
invalid_input_referencesinput_references salah bentuk atau terlalu banyak.
missing_inputinput kosong.
input_too_longinput melebihi batas karakter. Pecah teks menjadi beberapa request.
invalid_multipartBody multipart/form-data rusak.
missing_fileField file tidak ada atau kosong.
missing_audioinput_audio tidak ada atau kosong.
invalid_audioinput_audio.data bukan base64 yang valid.
invalid_audio_urlinput_audio.url bukan URL http(s) yang valid.
unsupported_formatFormat audio tidak didukung.
audio_too_longRekaman terlalu panjang. Potong menjadi beberapa file.
file_too_largeFile audio lebih dari 25 MB.
media_rate_limitedBatas jumlah gambar, suara, atau video per rentang waktu tercapai. Tunggu sesuai header Retry-After.
rate_limit_exceededModel sedang sibuk. Saldo tidak dipotong; coba lagi beberapa detik kemudian (tanpa header Retry-After).
video_requires_topupVideo hanya untuk akun yang sudah pernah top-up.
upstream_invalid_requestModel menolak isi request. Saldo tidak dipotong.
upstream_rejectedModel video menolak request. Saldo tidak dipotong.
upstream_no_outputModel tidak mengembalikan hasil. Saldo tidak dipotong.
upstream_output_too_largeHasil dari model melebihi batas ukuran. Perpendek input.
upstream_errorModel sedang bermasalah. Saldo tidak dipotong.
upstream_timeoutModel tidak menjawab tepat waktu. Saldo tidak dipotong.
generation_failedGagal memproses hasil. Cek GET /generations sebelum mengulang.
generation_not_foundID tidak ada, atau milik akun lain.
generation_not_completedVideo belum selesai. Pantau statusnya dulu.
content_expiredFile sudah dihapus karena melewati masa simpan.
content_unavailableFile hasil tidak tersedia.
content_not_foundNomor file (index) tidak ada.
delivery_failedMuncul di generation.error: hasil sudah dibuat tetapi gagal disimpan. Hubungi support dengan ID-nya.
Untuk masalah saat memasang aplikasi (Claude Code, Cursor, dan lainnya), lihat Masalah umum & solusi.
MCP Server
Tambahkan tool web_search dan understand_image ke Cursor, Claude Code, atau OpenCode lewat DataByte MCP Server.
1. Pasang DataByte MCP (butuh Node.js)
npm install -g @databytesolutionid/databyte-mcp
2. Tambahkan ke konfigurasi MCP aplikasi Anda
{ "mcpServers": { "databyte": { "command": "databyte-mcp", "args": [ "--api-key", "sk-db-xxxx" ] } } }
Instal aplikasi dashboard (PWA)
Pasang dashboard DataByte seperti aplikasi biasa di komputer atau HP.
Instal lewat browser
Kalau browser Anda mendukung, klik tombol ini.
Chrome / Edge / Brave
Klik ikon Install di ujung kanan kolom alamat, lalu Install.
iPhone (Safari)
Tombol Share (kotak dengan panah ke atas) → Add to Home Screen.
Android (Chrome)
Menu titik tiga di kanan atas → Install app / Tambahkan ke Layar Utama.