Panduan

API Pertamamu: Contoh Kode Python, Node.js, dan cURL

openai compatibleapi pythonapi nodejscontoh kode

23 Oktober 2026 · 6 menit baca · Panglima Router

API Pertamamu: Contoh Kode Python, Node.js, dan cURL

"OpenAI-compatible" artinya satu hal yang praktis: kamu tidak perlu belajar API baru. Endpoint Panglima Router — https://api.panglimarouter.xyz — mengikuti format OpenAI di dua endpoint utama: /v1/models untuk melihat daftar model, dan /v1/chat/completions untuk mengirim chat. Library OpenAI yang sudah kamu pakai bisa dipakai ulang; cukup arahkan baseURL ke server Panglima Router dan pakai API key-mu.

Artikel ini kumpulan contoh siap copy-paste dalam tiga bahasa, dari request paling sederhana sampai streaming dan penanganan error. Prasyaratnya satu: kamu sudah punya API key (caranya ada di panduan Cara Memakai Panglima Router di blog ini).

Konsep dasarnya dalam 30 detik

Setiap request ke API terdiri dari tiga bagian:

  1. Header otorisasi — Authorization: Bearer PR-KEY-KAMU, tempat API key-mu ditaruh.
  2. Nama model — ID lengkap yang disalin dari halaman Model lewat tombol Salin ID.
  3. Messages — array berisi pesan dengan role: system (instruksi perilaku), user (inputmu), assistant (riwayat jawaban).

Response-nya mengembalikan choices[0].message.content berisi jawaban, plus usage berisi hitungan token. Pola ini identik dengan OpenAI — kalau kamu pernah memakainya, tidak ada yang asing.

cURL: request paling minimal

Mulai dari terminal untuk memastikan key-mu jalan sebelum menulis kode:

curl https://api.panglimarouter.xyz/v1/chat/completions \
  -H "Authorization: Bearer PR-KEY-KAMU" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "MODEL_ID",
    "messages": [{"role": "user", "content": "Jelaskan AI router dalam satu kalimat."}]
  }'

Kalau ini mengembalikan JSON dengan choices, key dan koneksimu beres. Kalau 401, key-nya yang bermasalah — cek ulang salinanmu.

Melihat daftar model via cURL

curl https://api.panglimarouter.xyz/v1/models \
  -H "Authorization: Bearer PR-KEY-KAMU"

Response-nya daftar ID model yang bisa kamu pakai di parameter model. Berguna untuk skrip yang perlu memilih model secara dinamis.

Python: dengan library openai resmi

Install dulu kalau belum ada:

pip install openai

Lalu:

from openai import OpenAI

client = OpenAI(
    base_url="https://api.panglimarouter.xyz/v1",
    api_key="PR-KEY-KAMU",
)

res = client.chat.completions.create(
    model="MODEL_ID",
    messages=[{"role": "user", "content": "Halo!"}],
)
print(res.choices[0].message.content)

Perhatikan: base_url menunjuk ke Panglima Router, bukan api.openai.com. Itu satu-satunya perbedaan dari kode OpenAI biasa.

Python dengan system prompt dan parameter

from openai import OpenAI
import os

client = OpenAI(
    base_url="https://api.panglimarouter.xyz/v1",
    api_key=os.environ["PANGLIMA_API_KEY"],
)

res = client.chat.completions.create(
    model="MODEL_ID",
    messages=[
        {"role": "system", "content": "Kamu asisten yang menjawab singkat dan padat."},
        {"role": "user", "content": "Apa beda router AI dengan API model langsung?"},
    ],
    temperature=0.7,
    max_tokens=300,
)
print(res.choices[0].message.content)
print("Token terpakai:", res.usage.total_tokens)

Key dibaca dari environment variable — jangan pernah hardcode di kode. temperature mengontrol kreativitas (0 = deterministik, makin tinggi makin variatif), max_tokens membatasi panjang jawaban.

Python dengan streaming

Streaming didukung via stream: true, sama seperti OpenAI. Cocok untuk UI chat yang menampilkan jawaban kata per kata:

from openai import OpenAI
import os

client = OpenAI(
    base_url="https://api.panglimarouter.xyz/v1",
    api_key=os.environ["PANGLIMA_API_KEY"],
)

stream = client.chat.completions.create(
    model="MODEL_ID",
    messages=[{"role": "user", "content": "Ceritakan tentang AI router."}],
    stream=True,
)

for chunk in stream:
    delta = chunk.choices[0].delta.content
    if delta:
        print(delta, end="", flush=True)

Python dengan penanganan error

Untuk kode yang jalan di production, tangkap error yang mungkin muncul:

from openai import OpenAI, APIError, RateLimitError
import os, time

client = OpenAI(
    base_url="https://api.panglimarouter.xyz/v1",
    api_key=os.environ["PANGLIMA_API_KEY"],
)

def tanya(prompt, coba_lagi=3):
    for percobaan in range(coba_lagi):
        try:
            res = client.chat.completions.create(
                model="MODEL_ID",
                messages=[{"role": "user", "content": prompt}],
            )
            return res.choices[0].message.content
        except RateLimitError:
            # Kena rate limit: tunggu makin lama tiap percobaan
            time.sleep(2 ** percobaan)
        except APIError as e:
            print(f"API error: {e}")
            break
    return None

Pola backoff eksponensial (2 ** percobaan detik) untuk RateLimitError adalah praktik standar — rate limit di Panglima Router wajar per menitnya, dan retry dengan jeda menanganinya dengan anggun.

Node.js: dengan library openai resmi

npm install openai
import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api.panglimarouter.xyz/v1",
  apiKey: "PR-KEY-KAMU",
});

const res = await client.chat.completions.create({
  model: "MODEL_ID",
  messages: [{ role: "user", content: "Halo!" }],
});
console.log(res.choices[0].message.content);

Node.js dengan streaming dan error handling

import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api.panglimarouter.xyz/v1",
  apiKey: process.env.PANGLIMA_API_KEY,
});

try {
  const stream = await client.chat.completions.create({
    model: "MODEL_ID",
    messages: [{ role: "user", content: "Jelaskan AI router singkat." }],
    temperature: 0.7,
    max_tokens: 300,
    stream: true,
  });

  for await (const chunk of stream) {
    const delta = chunk.choices[0]?.delta?.content;
    if (delta) process.stdout.write(delta);
  }
} catch (err) {
  if (err.status === 429) {
    console.error("Kena rate limit — tunggu sebentar lalu ulangi.");
  } else {
    console.error("API error:", err.message);
  }
}

Percakapan multi-turn: membawa riwayat chat

Chatbot butuh ingatan. Polanya: setiap jawaban assistant dimasukkan kembali ke array messages sebelum request berikutnya. API sendiri tidak menyimpan riwayat — kamulah yang membawanya.

from openai import OpenAI
import os

client = OpenAI(
    base_url="https://api.panglimarouter.xyz/v1",
    api_key=os.environ["PANGLIMA_API_KEY"],
)

messages = [
    {"role": "system", "content": "Kamu asisten yang ramah dan singkat."},
]

while True:
    user_input = input("Kamu: ")
    if user_input.lower() in ("keluar", "exit"):
        break
    messages.append({"role": "user", "content": user_input})

    res = client.chat.completions.create(
        model="MODEL_ID",
        messages=messages,
    )
    reply = res.choices[0].message.content
    print("AI:", reply)
    messages.append({"role": "assistant", "content": reply})

Untuk percakapan panjang, perhatikan context window model yang kamu pakai — riwayat yang kepanjangan perlu diringkas atau dipotong dari depan. Cek kapasitas tiap model di halaman Model.

Satu tempat untuk nama model

Jangan sebar nama model hardcode di banyak file. Taruh di satu variabel konfigurasi:

MODEL = "MODEL_ID"  # ganti di sini kalau pindah model
const MODEL = "MODEL_ID"; // ganti di sini kalau pindah model

Kebiasaan kecil ini menghemat banyak waktu nanti — saat kamu menemukan model yang lebih cocok (panduan memilihnya di Memilih Model AI untuk Project), gantinya satu baris, bukan berburu ke seluruh codebase.

Catatan penting

Nama model memakai ID lengkap. Salin persis dari halaman Model lewat tombol Salin ID — ID yang tidak lengkap atau salah ketik mengembalikan 404.

Rate limit per menit wajar. Kalau aplikasimu mengirim banyak request beruntun — misalnya batch processing — siapkan retry dengan jeda seperti contoh di atas. Jangan menembak request sekaligus tanpa jeda.

Streaming didukung penuh. stream: true bekerja seperti di OpenAI, format SSE yang sama. Tidak ada parameter khusus Panglima Router yang perlu dipelajari.

Key tampil sekali, jaga baik-baik. Kalau key bocor ke log atau repo, rotate dari menu bot — key lama langsung mati. Praktik terbaiknya: satu key per project, simpan di environment variable, rotate segera kalau bocor.

Langkah berikutnya

Contoh-contoh di atas cukup untuk membuat API pertamamu jalan hari ini. Dari sini, arah pengembangan yang masuk akal:

Pertanyaan yang Sering Muncul

Apakah library openai versi lama bisa dipakai?

Umumnya bisa, selama library-nya mendukung parameter base_url/baseURL custom. Itu fitur standar yang sudah ada lama di library resmi. Kalau library-mu sangat lawas dan tidak mendukung base URL custom, upgrade ke versi terbaru — gratis dan cepat.

Format response-nya persis sama dengan OpenAI?

Untuk endpoint chat completions, ya: choices[0].message.content untuk jawaban dan usage untuk token. Kode parsing yang kamu tulis untuk OpenAI bisa dipakai ulang tanpa perubahan.

Bisakah aku pakai endpoint ini dari frontend (browser)?

Bisa secara teknis, tapi jangan taruh API key di kode frontend — siapa pun bisa mengintipnya dari DevTools dan memakai kuotamu. Pola yang benar: frontend memanggil backend-mu sendiri, backend yang memegang key dan meneruskan request ke Panglima Router.

Apa yang terjadi kalau paketku habis di tengah jalan?

Request akan ditolak. Cek sisa masa aktif dari menu bot dan perpanjang paket sebelum habis kalau aplikasimu production. Paket terpanjang adalah Pro (30 hari).

Di mana dokumentasi endpoint yang lebih lengkap?

Contoh di artikel ini mencakup 90% kebutuhan umum. Untuk referensi endpoint, buka Dokumentasi. Kalau mentok, tanya di grup diskusi.


Itu dia — tiga bahasa, satu pola. Ambil key-mu di @panglimarouter_bot, copy salah satu contoh di atas, ganti key-nya, dan API pertamamu jalan dalam hitungan menit.

Baca juga

Mulai sekarang

Siap routing AI pertamamu?

Mulai dari Rp5.000. Bayar QRIS atau USDC, langsung dapat API key.

Channel pengumuman · Grup diskusi