Langsung ke konten
Search documentation titles, headings, and guides
API v1Updated 2026-09-21

SDK & Alat

Pakai SDK resmi OpenAI dan Anthropic tanpa perubahan — cukup arahkan ke gateway zrouter dengan API key Anda.

zrouter adalah gateway drop-in: Anda tetap memakai SDK resmi OpenAI dan Anthropic, dan satu-satunya perubahan adalah base URL dan API key. Key zr_<public-id>_<secret> mengautentikasi klien kompatibel OpenAI maupun Anthropic.

Mulai cepat drop-in#

curl -X POST "https://api.zrouter.dev/v1/chat/completions" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "<public-name>",
    "messages": [{"role": "user", "content": "Say hello!"}]
  }'

Streaming#

Streaming berjalan dengan SDK yang sama — setel stream lalu iterasi. Anda hanya ditagih untuk token yang benar-benar terkirim. Lihat Streaming & SSE untuk protokol di baliknya.

from openai import OpenAI

client = OpenAI(
    api_key="YOUR_API_KEY",
    base_url="https://api.zrouter.dev/v1",
)

stream = client.chat.completions.create(
    model="<public-name>",
    messages=[{"role": "user", "content": "Say hello!"}],
    stream=True,
)

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

Buku resep#

Resep salin-tempel untuk tugas yang paling umum. Setiap resep berdiri sendiri; ikuti tautan untuk penjelasan lengkap soal streaming dan penanganan error.

Chat minimal#

from openai import OpenAI

client = OpenAI(api_key="YOUR_API_KEY", base_url="https://api.zrouter.dev/v1")

response = client.chat.completions.create(
    model="<public-name>",
    messages=[{"role": "user", "content": "Halo!"}],
)
print(response.choices[0].message.content)

Streaming minimal#

Set stream lalu iterasi. Lihat Streaming & SSE untuk protokol wire dan contoh SDK dengan pelacakan usage.

from openai import OpenAI

client = OpenAI(api_key="YOUR_API_KEY", base_url="https://api.zrouter.dev/v1")

stream = client.chat.completions.create(
    model="<public-name>",
    messages=[{"role": "user", "content": "Halo!"}],
    stream=True,
)
for chunk in stream:
    if chunk.choices and chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="")

Penanganan error dengan retry#

Retry hanya kegagalan 429 dan 5xx yang terjadi sebelum byte pertama, dengan exponential backoff dan jitter, maksimum 3 percobaan. Jangan pernah retry 402 (isi ulang saldo Anda). Lihat Penanganan Error.

import random, time
from openai import OpenAI, APIStatusError

client = OpenAI(api_key="YOUR_API_KEY", base_url="https://api.zrouter.dev/v1")
RETRYABLE = {429, 500, 502, 503}

def chat(prompt: str, model: str = "<public-name>") -> str:
    for attempt in range(3):
        try:
            resp = client.chat.completions.create(
                model=model,
                messages=[{"role": "user", "content": prompt}],
            )
            return resp.choices[0].message.content or ""
        except APIStatusError as err:
            if err.status_code == 402:
                raise  # saldo tidak cukup — jangan pernah retry
            if err.status_code in RETRYABLE and attempt < 2:
                time.sleep(min(2 ** attempt, 8) + random.random())
                continue
            raise

Daftar model tersedia#

Tampilkan model yang bisa diakses key Anda beserta nama publiknya — pakai nama itu sebagai argumen model di mana pun. Harga terkini ada di halaman pricing dan Katalog Model publik.

from openai import OpenAI

client = OpenAI(api_key="YOUR_API_KEY", base_url="https://api.zrouter.dev/v1")

for model in client.models.list():
    print(model.id)