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.

Komputer saya:
  1. 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. 2. Buat API key

    1. Buka Dashboard → API Keys.
    2. Klik Create key, beri nama (misalnya "Laptop"), lalu buat.
    3. 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. 3. Pilih aplikasi yang Anda pakai

  4. 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:

    PowerShell
    $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
    Berhasil 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.

Format OpenAI (Cursor, OpenCode, Continue, Python)
https://ai.databyte.co.id/v1
Format Anthropic (Claude Code, Anthropic SDK)
https://ai.databyte.co.id/anthropic
Contoh nama model
MiniMax-M3MiniMax-M3.1-Flashdatabyte-m1deepseek-v4.1-flashmimo-v2.6-flash

Tulis nama model seperti di atas, tanpa awalan provider/.

Memotong jatah request paket Anda. Saldo tidak terpakai.

Format OpenAI (Cursor, OpenCode, Continue, Python)
https://ai.databyte.co.id/gateway/v1
Format Anthropic (Claude Code, Anthropic SDK)
https://ai.databyte.co.id/gateway
Contoh nama model
anthropic/claude-sonnet-5.5minimax/minimax-m3deepseek/deepseek-v4.1-flash

Format 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

  1. Untuk format Anthropic (Claude Code), tulis alamat tanpa /v1 di belakang. Claude Code menambahkan /v1/messages sendiri.
  2. Nama model berawalan provider (misalnya minimax/minimax-m3) selalu memotong saldo AI Gateway, walaupun dikirim ke alamat /v1. Untuk memakai jatah paket, tulis MiniMax-M3.
  3. Satu API key bisa dipakai untuk dua cara bayar. Yang menentukan potongan adalah alamat dan nama model, bukan kuncinya.
Claude Code

Claude Code

Agen coding dari Anthropic yang berjalan di terminal. Sekitar 5 menit. Panduan lengkap dan cara bayar Claude pakai QRIS.

Komputer:
Bayar pakai:
  1. 1. Buka terminal

    Buka PowerShell (tombol Windows → ketik "PowerShell" → Enter). Jangan pakai CMD.

  2. 2. Pasang Claude Code

    Jalankan installer resmi (tidak perlu Node.js, tidak perlu hak administrator):

    PowerShell
    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. 3. Sambungkan ke DataByte

    Tempel perintah ini di terminal lalu tekan Enter. Perintah ini membuat file %USERPROFILE%\.claude\settings.json berisi pengaturan yang benar. Kalau file itu sudah ada, isi lamanya disimpan dulu sebagai .bak.

    PowerShell · tulis file otomatis
    $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:

    %USERPROFILE%\.claude\settings.json
    {
      "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. 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. 5. Pastikan sudah tersambung

    Di dalam Claude Code ketik /status lalu Enter. Di tab Status, baris Anthropic base URL harus berisi https://ai.databyte.co.id/anthropic dan 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):

VS Code · settings.json
{
  "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

OpenCode

Agen coding open source di terminal. Bisa dipakai dengan paket maupun saldo AI Gateway.

Komputer:
Bayar pakai:
  1. 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.

    PowerShell
    npm install -g opencode-ai

    Muncul "running scripts is disabled"? Lihat Masalah umum.

    Tutup dan buka lagi terminal, lalu cek dengan opencode --version.

  2. 2. Sambungkan ke DataByte

    Tempel perintah ini di terminal lalu tekan Enter. Perintah ini membuat file %USERPROFILE%\.config\opencode\opencode.json berisi pengaturan yang benar. Kalau file itu sudah ada, isi lamanya disimpan dulu sebagai .bak.

    PowerShell · tulis file otomatis
    $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:

    %USERPROFILE%\.config\opencode\opencode.json
    {
      "$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. 3. Jalankan

    Masuk ke folder proyek, lalu ketik opencode. Ganti model kapan saja dengan perintah /models.

Cursor

Cursor

Editor kode dengan AI. Diatur lewat menu, tanpa file konfigurasi.

Komputer:
Bayar pakai:
  1. 1. Buka pengaturan model

    Buka Cursor Settings (ikon roda gigi di kanan atas, atau Ctrl + Shift + J), lalu pilih menu Models.

  2. 2. Isi API key dan alamat

    Di bagian API Keys, isi OpenAI API Key, aktifkan juga Override OpenAI Base URL, lalu isi:

    OpenAI API Key
    sk-db-xxxx
    Override OpenAI Base URL
    https://ai.databyte.co.id/v1
  3. 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-m1
  4. 4. 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.
Continue.dev

VS Code (Continue)

Continue adalah ekstensi gratis untuk VS Code dan JetBrains (IntelliJ, PyCharm, dll.).

Komputer:
Bayar pakai:
  1. 1. Pasang ekstensi Continue

    Di VS Code buka menu Extensions (Ctrl + Shift + X, di Mac Cmd + Shift + X), cari "Continue", lalu klik Install.

  2. 2. Sambungkan ke DataByte

    Tempel perintah ini di terminal lalu tekan Enter. Perintah ini membuat file %USERPROFILE%\.continue\config.yaml berisi pengaturan yang benar. Kalau file itu sudah ada, isi lamanya disimpan dulu sebagai .bak.

    PowerShell · tulis file otomatis
    $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:

    %USERPROFILE%\.continue\config.yaml
    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

    Simpan dengan Ctrl + S. Nama file harus tetap persis seperti di atas, bukan .txt.

  3. 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

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.

Komputer:
Bayar pakai:
  1. 1. Pasang Hermes

    Buka PowerShell (tombol Windows → ketik "PowerShell" → Enter). Jangan pakai CMD.

    PowerShell
    iex (irm https://hermes-agent.nousresearch.com/install.ps1)

    Setelah selesai, tutup lalu buka lagi terminal.

  2. 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:

    %LOCALAPPDATA%\hermes\config.yaml
    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. 3. Jalankan

    Ketik hermes di terminal. Ingin bot Telegram tanpa memasang apa pun? Pakai Bot Telegram yang dijalankan DataByte.

TypingMind

TypingMind

Aplikasi chat di browser untuk API yang kompatibel OpenAI.

Bayar pakai:
  1. 1. Tambah model baru

    Settings → Models → Add Custom Model, lalu pilih OpenAI Chat Completions API.

  2. 2. Isi kolomnya

    Endpoint
    https://ai.databyte.co.id/v1/chat/completions
    Model ID
    MiniMax-M3
    Header Authorization
    Bearer sk-db-xxxx
9router

9router

Router API untuk banyak penyedia AI sekaligus.

Bayar pakai:

Di menu Providers dashboard 9router, buat provider baru bertipe OpenAI Compatible dengan:

Base URL
https://ai.databyte.co.id/v1
API Key
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. 1. Buka menu Agents di dashboard

  2. 2. Ambil Telegram User ID Anda

    Kirim pesan apa saja ke @userinfobot, lalu salin angka "Id" yang dibalas.

  3. 3. Buat bot dan salin Bot Token

    Buka @BotFather, kirim /newbot, ikuti pertanyaannya, lalu salin token yang diberikan.

  4. 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):

PowerShell
$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:

PowerShell
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 model provider/model dikirim dengan header plan. Samakan alamat dengan cara bayar Anda.
  • Di Claude Code: alamat ANTHROPIC_BASE_URL tidak 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.

PowerShell
$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.

Format OpenAI
Authorization: Bearer sk-db-xxxx
Format Anthropic
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. 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. 2. Pilih model dari katalog

    GET /gateway/v1/models memberi tahu jenis tiap model lewat output_modality dan pilihan yang didukungnya lewat media_capabilities.

  3. 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. 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. 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 lewat GET /gateway/v1/generations/{id} selama file masih ada.

Daftar endpoint

Spesifikasi 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.

POST · Request Based Plan · OpenAI
https://ai.databyte.co.id/v1/chat/completions
POST · Request Based Plan · Anthropic
https://ai.databyte.co.id/anthropic/v1/messages
POST · AI Gateway · OpenAI
https://ai.databyte.co.id/gateway/v1/chat/completions
POST · AI Gateway · Anthropic
https://ai.databyte.co.id/gateway/v1/messages

Parameter body

modelteks · wajib

Request 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 · wajib

Isi percakapan: [{"role": "system" | "user" | "assistant", "content": "..."}].

temperatureangka · opsional

0 sampai 2. Default 0.7.

max_tokensangka · opsional

Batas panjang jawaban (token). Default 2048.

streamboolean · opsional

true untuk menerima jawaban bertahap (Server-Sent Events). Default false.

enable_mcpboolean · opsional

Aktifkan 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.

Komputer:
Bayar pakai:

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

halo.py · OpenAI SDK
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)
Di Windows, perintah Python adalah py (dari installer python.org). Kalau muncul "py is not recognized", pasang Python dari python.org dan centang "Add python.exe to PATH" saat instalasi.

JavaScript / Node.js

Pasang dengan npm install openai, simpan sebagai halo.mjs, lalu jalankan node halo.mjs

halo.mjs · OpenAI SDK
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

Anthropic SDK
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.

PowerShell · OpenAI
$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
PowerShell · Anthropic
$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.

JSON
{
  "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.

Body permintaan (format OpenAI)
{
  "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.

gethttps://ai.databyte.co.id/gateway/v1/models

Model media yang aktif sekarang

Memuat katalog…

Ambil daftarnya dari terminal

PowerShell
$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 5

Baca 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.

posthttps://ai.databyte.co.id/gateway/v1/images/generations

Endpoint 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 · wajib

ID model gambar dari katalog.

promptteks · wajib

Deskripsi gambar yang diinginkan.

Maksimal 8,000 karakter

nbilangan bulat · opsional

Jumlah gambar.

1 sampai 4 · Default: 1

aspect_ratioteks · opsional

Rasio lebar:tinggi, misalnya 1:1, 16:9, 9:16.

Dukungan dan pilihannya bergantung model

resolutionteks · opsional

Tingkat resolusi (1K, 2K, 4K). Tanpa daftar dari model, maksimal 2K.

Dukungan dan pilihannya bergantung model

sizeteks · opsional

Ukuran piksel LEBARxTINGGI, misalnya 1024x1024. Pakai ini atau resolution.

Dukungan dan pilihannya bergantung model

qualityteks · opsional

Tingkat kualitas, diteruskan ke model apa adanya.

Maksimal 32 karakter

output_formatteks · opsional

Format file hasil.

Pilihan: png, jpeg, webp

response_formatteks · opsional

url: tautan unduh yang berlaku 1 jam. b64_json: isi gambar langsung di jawaban.

Pilihan: url, b64_json · Default: url

input_referencesarray · opsional

Gambar 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

Komputer:
PowerShell
$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)"
gambar.py · OpenAI SDK
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")
gambar.mjs · Node.js 18+
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

200 · JSON
{
  "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[].url adalah tautan unduh yang berlaku 1 jam. Unduh tanpa header Authorization, lalu simpan filenya di tempat Anda.
  • Dengan response_format: "b64_json", isi gambar ada di data[].b64_json. Bentuk ini juga dipakai kalau tautan gagal dibuat, jadi periksa kedua kolom.
  • Biaya ada di usage.cost_usd dan header x-databyte-cost-usd. id dipakai 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.

Body permintaan
{
  "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
400missing_prompt

prompt kosong.

400prompt_too_long

prompt melebihi batas karakter.

400invalid_n

n harus bilangan bulat 1 sampai 4.

400invalid_input_references

input_references salah bentuk atau terlalu banyak.

400invalid_parameter

Nilai parameter salah bentuk. Pesan error menyebut parameternya.

400unsupported_parameter

Nilai tidak didukung model ini. Pesan error memuat pilihan yang didukung.

429media_rate_limited

Batas jumlah gambar, suara, atau video per rentang waktu tercapai. Tunggu sesuai header Retry-After.

429rate_limit_exceeded

Model sedang sibuk. Saldo tidak dipotong; coba lagi beberapa detik kemudian (tanpa header Retry-After).

400upstream_invalid_request

Model menolak isi request. Saldo tidak dipotong.

502upstream_no_output

Model tidak mengembalikan hasil. Saldo tidak dipotong.

504upstream_timeout

Model tidak menjawab tepat waktu. Saldo tidak dipotong.

502upstream_error

Model sedang bermasalah. Saldo tidak dipotong.

500generation_failed

Gagal 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.

posthttps://ai.databyte.co.id/gateway/v1/audio/speech

Endpoint 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 · wajib

ID model suara dari katalog.

inputteks · wajib

Teks yang dibacakan. Ekspresi diatur dengan tag di dalam teks, misalnya [whispers] atau [excited] (bergantung model).

Maksimal 10,000 karakter

voiceteks · opsional

Nama voice. Kalau kosong, dipakai voice pertama milik model.

Dukungan dan pilihannya bergantung model

response_formatteks · opsional

Format audio. pcm = audio mentah tanpa header.

Pilihan: mp3, pcm · Default: mp3

speedangka · opsional

Kecepatan bicara. Tidak semua model menerimanya; model yang tidak mendukung menjawab 400.

0.25 sampai 4 · Dukungan dan pilihannya bergantung model

instructionsteks · opsional

Arahan gaya bicara. Tidak semua model memakainya.

Maksimal 1,000 karakter · Dukungan dan pilihannya bergantung model

Contoh

Komputer:
PowerShell
$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"
suara.py · OpenAI SDK
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")
suara.mjs · Node.js 18+
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-id berisi ID hasil (tts_…). Biaya akhirnya dibaca beberapa detik kemudian lewat GET /gateway/v1/generations/{id}.
  • Teks dihitung per karakter. Satu request maksimal sepanjang batas input di 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
400missing_input

input kosong.

400input_too_long

input melebihi batas karakter. Pecah teks menjadi beberapa request.

400invalid_parameter

Nilai parameter salah bentuk. Pesan error menyebut parameternya.

400unsupported_parameter

Nilai tidak didukung model ini. Pesan error memuat pilihan yang didukung.

429media_rate_limited

Batas jumlah gambar, suara, atau video per rentang waktu tercapai. Tunggu sesuai header Retry-After.

429rate_limit_exceeded

Model sedang sibuk. Saldo tidak dipotong; coba lagi beberapa detik kemudian (tanpa header Retry-After).

400upstream_invalid_request

Model menolak isi request. Saldo tidak dipotong.

502upstream_output_too_large

Hasil dari model melebihi batas ukuran. Perpendek input.

504upstream_timeout

Model tidak menjawab tepat waktu. Saldo tidak dipotong.

502upstream_error

Model 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.

posthttps://ai.databyte.co.id/gateway/v1/audio/transcriptions

Endpoint 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 · wajib

File audio, maksimal 25 MB: mp3, mp4, mpeg, mpga, m4a, wav, webm, ogg, flac.

modelteks · wajib

ID model transkripsi dari katalog.

languageteks · opsional

Kode bahasa rekaman, misalnya id atau en. Membantu akurasi.

response_formatteks · opsional

Diteruskan ke model. Bentuk jawaban DataByte tetap { id, text, usage }.

Pilihan: json, verbose_json · Default: json

Contoh

Komputer:
PowerShell · curl.exe
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"
transkrip.py · OpenAI SDK
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 · wajib

ID model transkripsi dari katalog.

input_audioobjek · wajib

{"data": "<base64>", "format": "mp3"} atau {"url": "https://...", "format": "mp3"}. Untuk file besar pakai multipart.

languageteks · opsional

Kode bahasa rekaman, misalnya id atau en.

response_formatteks · opsional

Diteruskan ke model. Bentuk jawaban DataByte tetap { id, text, usage }.

Pilihan: json, verbose_json · Default: json

Body permintaan
{
  "model": "ID_MODEL_TRANSKRIPSI",
  "input_audio": {
    "url": "https://example.com/rekaman.mp3",
    "format": "mp3"
  },
  "language": "id"
}

Respons

200 · JSON
{
  "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
400invalid_multipart

Body multipart/form-data rusak.

400missing_file

Field file tidak ada atau kosong.

400missing_audio

input_audio tidak ada atau kosong.

400invalid_audio

input_audio.data bukan base64 yang valid.

400invalid_audio_url

input_audio.url bukan URL http(s) yang valid.

400unsupported_format

Format audio tidak didukung.

413file_too_large

File audio lebih dari 25 MB.

400audio_too_long

Rekaman terlalu panjang. Potong menjadi beberapa file.

400invalid_parameter

Nilai parameter salah bentuk. Pesan error menyebut parameternya.

400unsupported_parameter

Nilai tidak didukung model ini. Pesan error memuat pilihan yang didukung.

429media_rate_limited

Batas jumlah gambar, suara, atau video per rentang waktu tercapai. Tunggu sesuai header Retry-After.

429rate_limit_exceeded

Model sedang sibuk. Saldo tidak dipotong; coba lagi beberapa detik kemudian (tanpa header Retry-After).

400upstream_invalid_request

Model menolak isi request. Saldo tidak dipotong.

504upstream_timeout

Model tidak menjawab tepat waktu. Saldo tidak dipotong.

502upstream_error

Model 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…
Komputer:
  1. 1. Kirim pekerjaan

    posthttps://ai.databyte.co.id/gateway/v1/videos
    PowerShell
    $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
    202 · JSON
    {
      "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. 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.

    PowerShell
    $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. 3. Unduh hasilnya

    Saat completed, unduh dari kolom url tanpa header Authorization. Atau minta server mengalihkan langsung ke filenya:

    gethttps://ai.databyte.co.id/gateway/v1/videos/{id}/content

    Mengalihkan (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 · wajib

ID model video dari katalog.

promptteks · opsional

Deskripsi video. Wajib, kecuali video dibuat dari frame_images.

Maksimal 4,000 karakter

durationangka · opsional

Durasi dalam detik. Kalau kosong: durasi terpendek milik model, atau 5 detik. Tanpa daftar dari model, maksimal 60 detik.

Dukungan dan pilihannya bergantung model

resolutionteks · opsional

Resolusi, misalnya 720p atau 1080p.

Dukungan dan pilihannya bergantung model

aspect_ratioteks · opsional

Rasio lebar:tinggi, misalnya 16:9 atau 9:16.

Dukungan dan pilihannya bergantung model

sizeteks · opsional

Ukuran piksel LEBARxTINGGI, misalnya 1280x720.

Dukungan dan pilihannya bergantung model

generate_audioboolean · opsional

true untuk membuat video dengan suara, kalau model mendukung.

Dukungan dan pilihannya bergantung model

seedbilangan bulat · opsional

Angka acuan agar hasil lebih mudah diulang.

frame_imagesarray · opsional

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

Bahan acuan: [{"type": "image_url" | "audio_url" | "video_url", "<type>": {"url": "..."}}].

Maksimal 10 item

Contoh lengkap: kirim, pantau, unduh

video.py · requests
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 ditagih

Yang 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
400missing_required_parameter

Parameter wajib tidak diisi.

400invalid_parameter

Nilai parameter salah bentuk. Pesan error menyebut parameternya.

400unsupported_parameter

Nilai tidak didukung model ini. Pesan error memuat pilihan yang didukung.

403video_requires_topup

Video hanya untuk akun yang sudah pernah top-up.

429media_rate_limited

Batas jumlah gambar, suara, atau video per rentang waktu tercapai. Tunggu sesuai header Retry-After.

429rate_limit_exceeded

Model sedang sibuk. Saldo tidak dipotong; coba lagi beberapa detik kemudian (tanpa header Retry-After).

400upstream_rejected

Model video menolak request. Saldo tidak dipotong.

502upstream_error

Model 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.

gethttps://ai.databyte.co.id/gateway/v1/generations
modalityteks · query · opsional

Saring per jenis.

Pilihan: image, video, speech, transcription

limitbilangan bulat · query · opsional

Jumlah per halaman.

1 sampai 100 · Default: 20

cursorteks · query · opsional

Isi dengan next_cursor dari halaman sebelumnya.

Maksimal 128 karakter

Komputer:
PowerShell
$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, url

Satu hasil

gethttps://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.

200 · JSON
{
  "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

id

ID hasil. Awalan menunjukkan jenisnya: img_, tts_, stt_, vid_.

object

Selalu "media.generation".

status

Status saat ini. completed, failed, cancelled, dan expired sudah final. (pending, processing, completed, failed, cancelled, expired)

model

ID model yang dipakai.

modality

Jenis hasil. (image, speech, transcription, video)

created

Waktu dibuat (detik Unix).

url

Tautan unduh file pertama, berlaku 1 jam. null kalau belum selesai atau tidak ada file.

urls

Tautan unduh semua file hasil.

prompt

Prompt atau potongan awal teks yang dikirim.

unit_type

Satuan tagihan. (image, second, char, minute)

units

Jumlah satuan yang ditagih.

hold_usd

Saldo yang masih ditahan (USD) selama belum final; null setelah final.

cost_usd

Biaya akhir (USD); null kalau belum ditagih.

cost_idr

Biaya akhir dalam Rupiah.

is_estimated

true kalau biaya memakai perkiraan karena biaya pasti belum tersedia.

error

Terisi kalau gagal: { message, code }. null kalau berhasil.

completed_at

Waktu selesai (detik Unix).

expires_at

Waktu 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.

402 · JSON
{
  "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/generations sebelum 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)

401missing_api_key

Header Authorization tidak ada.

401invalid_api_key

API key salah atau sudah dihapus.

401api_key_expired

API key sudah kedaluwarsa.

401invalid_token

Token sesi dashboard tidak valid. Pakai API key.

401unauthenticated

Kredensial tidak dikenali.

402insufficient_balance

Saldo tidak cukup untuk request ini. Top up dulu.

402key_spend_limit_exceeded

Batas belanja API key ini sudah tercapai.

403forbidden_product_scope

API key ini tidak diizinkan memakai AI Gateway.

403user_inactive

Akun tidak aktif.

403model_not_allowed

API key ini dibatasi ke model lain.

403model_disabled_by_user

Model dimatikan di Dashboard > Model Access.

403model_not_allowed_for_key

API key ini dibatasi ke model lain.

429api_key_request_limit_exceeded

Jatah request API key ini habis untuk periode berjalan.

429api_key_token_limit_exceeded

Jatah token API key ini habis untuk periode berjalan.

429api_key_rpm_exceeded

Batas request per menit API key tercapai. Tunggu sesuai header Retry-After.

503gateway_maintenance

AI Gateway sedang dalam pemeliharaan.

500internal_error

Kesalahan di sisi DataByte. Untuk media, cek GET /generations sebelum mengulang.

Error lain

400model_required

Parameter model tidak diisi.

400model_not_active

Model tidak ditemukan atau sedang tidak aktif. Cek katalog.

400modality_not_enabled

Jenis model ini (misalnya video) belum dibuka di AI Gateway.

400model_modality_mismatch

Model dipanggil di endpoint yang salah. Pesan error menyebut endpoint yang benar.

400use_media_endpoint

Model gambar, suara, atau video dipanggil lewat chat. Pakai endpoint medianya.

400model_pricing_unavailable

Model belum siap dipakai. Hubungi support.

400provider_not_supported

Model belum mendukung endpoint ini.

400invalid_parameter

Nilai parameter salah bentuk. Pesan error menyebut parameternya.

400unsupported_parameter

Nilai tidak didukung model ini. Pesan error memuat pilihan yang didukung.

400missing_required_parameter

Parameter wajib tidak diisi.

400missing_prompt

prompt kosong.

400prompt_too_long

prompt melebihi batas karakter.

400invalid_n

n harus bilangan bulat 1 sampai 4.

400invalid_input_references

input_references salah bentuk atau terlalu banyak.

400missing_input

input kosong.

400input_too_long

input melebihi batas karakter. Pecah teks menjadi beberapa request.

400invalid_multipart

Body multipart/form-data rusak.

400missing_file

Field file tidak ada atau kosong.

400missing_audio

input_audio tidak ada atau kosong.

400invalid_audio

input_audio.data bukan base64 yang valid.

400invalid_audio_url

input_audio.url bukan URL http(s) yang valid.

400unsupported_format

Format audio tidak didukung.

400audio_too_long

Rekaman terlalu panjang. Potong menjadi beberapa file.

413file_too_large

File audio lebih dari 25 MB.

429media_rate_limited

Batas jumlah gambar, suara, atau video per rentang waktu tercapai. Tunggu sesuai header Retry-After.

429rate_limit_exceeded

Model sedang sibuk. Saldo tidak dipotong; coba lagi beberapa detik kemudian (tanpa header Retry-After).

403video_requires_topup

Video hanya untuk akun yang sudah pernah top-up.

400upstream_invalid_request

Model menolak isi request. Saldo tidak dipotong.

400upstream_rejected

Model video menolak request. Saldo tidak dipotong.

502upstream_no_output

Model tidak mengembalikan hasil. Saldo tidak dipotong.

502upstream_output_too_large

Hasil dari model melebihi batas ukuran. Perpendek input.

502upstream_error

Model sedang bermasalah. Saldo tidak dipotong.

504upstream_timeout

Model tidak menjawab tepat waktu. Saldo tidak dipotong.

500generation_failed

Gagal memproses hasil. Cek GET /generations sebelum mengulang.

404generation_not_found

ID tidak ada, atau milik akun lain.

409generation_not_completed

Video belum selesai. Pantau statusnya dulu.

410content_expired

File sudah dihapus karena melewati masa simpan.

404content_unavailable

File hasil tidak tersedia.

404content_not_found

Nomor file (index) tidak ada.

200delivery_failed

Muncul 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. 1. Pasang DataByte MCP (butuh Node.js)

    npm install -g @databytesolutionid/databyte-mcp
  2. 2. Tambahkan ke konfigurasi MCP aplikasi Anda

    JSON
    {
      "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.