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
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." }]
  }'
Python (paket openai)
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
Node.js (fetch)
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

KodecodeArtinya
400model_requiredField model tidak diisi.
401invalid_api_keyKey tidak ada, salah, atau sesi tidak valid.
401key_revokedKey sudah dicabut dari dashboard.
402insufficient_balanceSaldo kredit kurang dari estimasi biaya. Top-up dulu.
402price_not_configuredHarga model belum diatur admin.
403key_inactiveKey dinonaktifkan.
403model_not_allowedModel tidak ada di daftar yang dijual. Pakai model dari tabel di atas.
429daily_limit_exceededLimit token harian key ini tercapai.
500upstream_not_configuredGateway belum dikonfigurasi (urusan admin).
500internal_errorKesalahan internal; coba lagi sebentar lagi.
502upstream_errorUpstream mengembalikan error (pesan asli disembunyikan).

Semua error berbentuk { "error": { "message", "type": "request_error", "code" } }, seperti OpenAI.