Dokumentasi API
Endpoint gaya OpenAI. Ganti base URL dan API key di kode yang sudah jalan — tidak perlu mengubah struktur request.
Base URL: https://api.pengagumku.id/v1
Autentikasi: setiap request memakai header Authorization: Bearer <key-situs>. Key dibuat di dashboard (menu API Key Saya) dan hanya ditampilkan sekali saat dibuat — simpan baik-baik, key yang hilang tidak bisa dilihat lagi (buat key baru).
Harga: 1 kredit per 1 juta token (1 kredit = Rp2.000). Saldo dalam kredit; top-up dibayar Rupiah lalu dikonversi otomatis.
1. Daftar Model
Tabel ini diambil langsung dari server setiap halaman dibuka, jadi tidak pernah basi. Hanya model yang dijual yang tampil.
Memuat model…
curl __BASE_URL__/models \
-H "Authorization: Bearer sk-kr-KEY_KAMU"
Responsnya format OpenAI: { "object": "list", "data": [...] }, masing-masing dengan id, name, context_window, dan max_output_tokens.
2. Chat Completions
POST __BASE_URL__/chat/completions — body sama seperti OpenAI: model, messages, dan opsional temperature, max_tokens, stream.
curl __BASE_URL__/chat/completions \
-H "Authorization: Bearer sk-kr-KEY_KAMU" \
-H "Content-Type: application/json" \
-d '{
"model": "muse-spark-1.3",
"messages": [{ "role": "user", "content": "Jelaskan fotosintesis dalam 2 kalimat." }]
}'
from openai import OpenAI
client = OpenAI(api_key="sk-kr-KEY_KAMU", base_url="__BASE_URL__")
resp = client.chat.completions.create(
model="muse-spark-1.3",
messages=[{"role": "user", "content": "Jelaskan fotosintesis dalam 2 kalimat."}],
)
print(resp.choices[0].message.content)
print(resp.usage) # prompt_tokens, completion_tokens, total_tokens
const res = await fetch("__BASE_URL__/chat/completions", {
method: "POST",
headers: {
"Authorization": "Bearer sk-kr-KEY_KAMU",
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "muse-spark-1.3",
messages: [{ role: "user", content: "Jelaskan fotosintesis dalam 2 kalimat." }],
}),
});
const data = await res.json();
console.log(data.choices[0].message.content);
console.log(data.usage);
3. Streaming
Kirim "stream": true untuk menerima jawaban per potongan (SSE), seperti OpenAI. Tagihan tetap memakai angka usage dari chunk akhir.
curl -N __BASE_URL__/chat/completions \
-H "Authorization: Bearer sk-kr-KEY_KAMU" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-v4-pro",
"messages": [{ "role": "user", "content": "Tulis puisi 4 baris tentang hujan." }],
"stream": true
}'
Setiap baris data: {...} berisi choices[0].delta.content; stream ditutup baris data: [DONE].
4. Harga & Contoh Hitung
Harga default: 1 kredit per 1 juta token untuk input dan output (admin bisa mengubah per model). 1 kredit = Rp2.000. Penagihan fraksional — tidak dibulatkan ke kredit utuh.
Contoh: request 500.000 token input + 250.000 token output pada harga 1 kredit/1M:
500.000 / 1.000.000 × 1 = 0,5 kredit (input) + 250.000 / 1.000.000 × 1 = 0,25 kredit (output) = 0,75 kredit = Rp1.500.
Saldo dicek sebelum request diteruskan (pra-cek estimasi). Bila saldo kurang dari estimasi, request ditolak 402 sebelum satu token pun dipakai.
5. Top-up Saldo
1. Masuk ke dashboard, isi nominal Rupiah, klik Buat QRIS.
2. Scan QRIS dengan e-wallet / m-banking apa saja (berlaku 15 menit).
3. Setelah pembayaran terdeteksi, saldo kredit bertambah otomatis (nominal Rupiah ÷ Rp2.000). Mis. Rp50.000 = 25 kredit.
6. Daftar Error
| Kode | code | Artinya |
|---|---|---|
| 400 | model_required | Field model tidak diisi. |
| 401 | invalid_api_key | Key tidak ada, salah, atau sesi tidak valid. |
| 401 | key_revoked | Key sudah dicabut dari dashboard. |
| 402 | insufficient_balance | Saldo kredit kurang dari estimasi biaya. Top-up dulu. |
| 402 | price_not_configured | Harga model belum diatur admin. |
| 403 | key_inactive | Key dinonaktifkan. |
| 403 | model_not_allowed | Model tidak ada di daftar yang dijual. Pakai model dari tabel di atas. |
| 429 | daily_limit_exceeded | Limit token harian key ini tercapai. |
| 500 | upstream_not_configured | Gateway belum dikonfigurasi (urusan admin). |
| 500 | internal_error | Kesalahan internal; coba lagi sebentar lagi. |
| 502 | upstream_error | Upstream mengembalikan error (pesan asli disembunyikan). |
Semua error berbentuk { "error": { "message", "type": "request_error", "code" } }, seperti OpenAI.