Dokumentasi
Endpoint GunaRouter mengikuti format OpenAI, jadi SDK dan tool yang sudah kamu pakai bisa langsung diarahkan ke sini. Base URL produksi: https://router.gunastudio.biz.id/v1
Penting. API key hanya ditampilkan sekali saat dibuat. Simpan di variabel lingkungan atau secret manager, jangan di dalam kode yang di-commit.
Mulai cepat
Buat API key di dasbor, isi saldo, lalu kirim request pertama. Tiga contoh di bawah memakai model yang sama; pilih salah satu.
curl
curl https://router.gunastudio.biz.id/v1/chat/completions \
-H "Authorization: Bearer $GUNA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "glm-5.3-flash",
"messages": [
{"role": "system", "content": "Jawab singkat dalam bahasa Indonesia."},
{"role": "user", "content": "Apa itu API gateway?"}
]
}'
Python
from openai import OpenAI
client = OpenAI(
base_url="https://router.gunastudio.biz.id/v1",
api_key="GUNA_API_KEY", # simpan di variabel lingkungan, jangan di kode
)
res = client.chat.completions.create(
model="glm-5.3-flash",
messages=[{"role": "user", "content": "Apa itu API gateway?"}],
)
print(res.choices[0].message.content)
print("biaya (USD):", res.usage.cost)
Node.js
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://router.gunastudio.biz.id/v1",
apiKey: process.env.GUNA_API_KEY,
});
const res = await client.chat.completions.create({
model: "glm-5.3-flash",
messages: [{ role: "user", content: "Apa itu API gateway?" }],
});
console.log(res.choices[0].message.content);
Respons berisi usage.cost dalam USD untuk request tersebut, plus rincian token input, output, dan cache.
Base URL & autentikasi
Semua request memakai header Authorization: Bearer <API_KEY>. Tidak ada header tambahan yang wajib.
Base URL : https://router.gunastudio.biz.id/v1
Header : Authorization: Bearer GUNA_API_KEY
Format : JSON (application/json)
Key bisa dibatasi: limit kredit, periode reset, tanggal kedaluwarsa, dan daftar model yang diizinkan. Kalau key bocor, cabut lewat dasbor — key lain tetap jalan.
Endpoint
| Endpoint | Kegunaan |
|---|---|
| POST /chat/completions | Format OpenAI, dipakai hampir semua tool |
| POST /responses | Format OpenAI Responses API |
| POST /messages | Format Anthropic, untuk Claude Code dan SDK Anthropic |
| GET /models | Katalog model publik, tanpa API key |
| POST /embeddings | Ubah teks jadi vektor |
Contoh embeddings
curl https://router.gunastudio.biz.id/v1/embeddings \
-H "Authorization: Bearer $GUNA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "text-embedding-3-large", "input": "teks yang mau diubah jadi vektor"}'
Streaming
Tambahkan "stream": true untuk menerima potongan jawaban (server-sent events). SDK OpenAI menanganinya otomatis lewat stream=True.
curl -N https://router.gunastudio.biz.id/v1/chat/completions \
-H "Authorization: Bearer $GUNA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "glm-5.3-flash",
"stream": true,
"messages": [{"role": "user", "content": "Tulis 3 kalimat tentang kopi."}]
}'
Setiap potongan berformat data: {...} dan diakhiri data: [DONE]. Biaya akhir muncul di potongan terakhir yang membawa usage.
Function calling & structured output
Model bisa meminta pemanggilan fungsi yang kamu definisikan, atau dipaksa mengembalikan JSON sesuai skema.
curl https://router.gunastudio.biz.id/v1/chat/completions \
-H "Authorization: Bearer $GUNA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "glm-5.3-flash",
"messages": [{"role": "user", "content": "Cuaca di Bandung sekarang?"}],
"tools": [{
"type": "function",
"function": {
"name": "ambil_cuaca",
"description": "Ambil cuaca terkini untuk satu kota",
"parameters": {
"type": "object",
"properties": {"kota": {"type": "string"}},
"required": ["kota"]
}
}
}],
"tool_choice": "auto"
}'
Output JSON sesuai skema
curl https://router.gunastudio.biz.id/v1/chat/completions \
-H "Authorization: Bearer $GUNA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "glm-5.3-flash",
"messages": [{"role": "user", "content": "Ringkas: pesanan 2 kopi, total 40 ribu."}],
"response_format": {
"type": "json_schema",
"json_schema": {
"name": "ringkasan_pesanan",
"strict": true,
"schema": {
"type": "object",
"properties": {
"item": {"type": "string"},
"total": {"type": "number"}
},
"required": ["item", "total"],
"additionalProperties": false
}
}
}
}'
Tidak semua model mendukung json_schema ketat. Kalau model menolak, pakai {"type": "json_object"} dan jelaskan bentuk JSON-nya di prompt.
Vision (baca gambar)
Model dengan tanda bisa gambar di katalog bisa menerima gambar lewat URL maupun data URL base64. Saat ini ada 12 model yang mendukung.
curl https://router.gunastudio.biz.id/v1/chat/completions \
-H "Authorization: Bearer $GUNA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "glm-5.3-flash",
"messages": [{
"role": "user",
"content": [
{"type": "text", "text": "Apa isi gambar ini?"},
{"type": "image_url", "image_url": {"url": "https://contoh.com/struk.jpg"}}
]
}]
}'
Token gambar dihitung sebagai token input. Untuk gambar besar, perkecil dulu supaya biaya tetap rendah.
Error & rate limit
| Kode | Arti | Yang harus dilakukan |
|---|---|---|
| 400 | Request tidak valid | Cek field model dan messages |
| 401 | Key hilang, salah, atau dicabut | Buat key baru di dasbor |
| 402 | Saldo habis atau limit key tercapai | Isi saldo atau naikkan limit key |
| 403 | Key tidak diizinkan memakai model itu | Ubah daftar model yang diizinkan pada key |
| 404 | Model tidak ditemukan | Cek katalog; model mungkin dinonaktifkan |
| 429 | Rate limit per key terlampaui | Tunggu, atau kurangi laju request |
| 502 | Provider upstream bermasalah | Coba lagi; cek status layanan |
Kalau saldo tidak cukup, request dijawab 402 dan output panjang dipotong sesuai sisa kredit. Tidak ada tagihan yang melewati saldo.
Contoh per tool
Semua contoh memakai base URL produksi https://router.gunastudio.biz.id/v1. Ganti GUNA_API_KEY dengan key milikmu.
Cursor
Nama model : glm-5.3-flash
Base URL : https://router.gunastudio.biz.id/v1
API key : GUNA_API_KEY
Langkah: Settings → Models → OpenAI API Key, lalu aktifkan
"Override OpenAI Base URL" dan isi https://router.gunastudio.biz.id/v1
VS Code (Continue)
# Continue (VS Code) — ~/.continue/config.yaml
models:
- name: GunaRouter glm-5.3-flash
provider: openai
model: glm-5.3-flash
apiBase: https://router.gunastudio.biz.id/v1
apiKey: GUNA_API_KEY
OpenCode
// opencode.json
{
"provider": {
"gunarouter": {
"npm": "@ai-sdk/openai-compatible",
"name": "GunaRouter",
"options": {
"baseURL": "https://router.gunastudio.biz.id/v1",
"apiKey": "{env:GUNA_API_KEY}"
},
"models": {
"glm-5.3-flash": { "name": "glm-5.3-flash" }
}
}
}
}
Claude Code
export ANTHROPIC_BASE_URL="https://router.gunastudio.biz.id"
export ANTHROPIC_AUTH_TOKEN="GUNA_API_KEY"
export ANTHROPIC_MODEL="claude-haiku-5-5"
claude
n8n
Node: OpenAI (Message a Model)
Credential : OpenAI API
Base URL : https://router.gunastudio.biz.id/v1
API Key : GUNA_API_KEY
Model : glm-5.3-flash
Kalau node memakai field "Base URL" di credential, isi tanpa /v1
karena node menambahkan sendiri. Kalau memakai HTTP Request node,
pakai URL lengkap: https://router.gunastudio.biz.id/v1/chat/completions
Hermes
# ~/.hermes/config.yaml
providers:
gunarouter:
type: openai
base_url: https://router.gunastudio.biz.id/v1
api_key_env: GUNA_API_KEY
model:
provider: gunarouter
name: glm-5.3-flash
Pertanyaan teknis
Apakah prompt saya disimpan?
Tidak. Log hanya mencatat metadata: waktu, model, jumlah token, biaya, status, dan latensi.
Bagaimana kalau provider utama sedang gangguan?
Gateway memindahkan request ke endpoint cadangan secara otomatis untuk error koneksi, timeout, 429, dan 5xx. Error 400 diteruskan apa adanya karena itu kesalahan request.
Apakah ada batas laju request?
Ada, dihitung per key. Kalau kena batas, responsnya 429 dengan header retry-after.
Bisa dipakai untuk aplikasi produksi?
Bisa, dengan catatan ini layanan prabayar tanpa SLA korporat. Untuk kebutuhan SLA, hubungi admin lewat dasbor.
Model apa yang paling murah?
Saat ini glm-5.3-flash dengan Rp 1.420 per 1 juta token input. Harga selalu ikut halaman harga.