I. Ikhtisar
Situs ini menyediakan akses yang kompatibel dengan format OpenAI Chat Completions (/v1/chat/completions). Untuk kode yang sudah berjalan di SDK resmi OpenAI atau klien yang kompatibel dengan OpenAI, Anda cukup mengarahkan alamat permintaan ke gateway OpenAI situs kami, ganti api_key dengan kunci sk- dari situs ini, dan cara pemanggilan lainnya tetap sama.
Model seri GPT yang tersedia saat ini mengacu pada Model Marketplace (seperti gpt-5.5, gpt-5.6-sol, gpt-5.6-terra, gpt-5.6-luna, dll.), daftar lengkap dan harga satuan dapat diperiksa melalui GET /v1/models.
II. Alamat Antarmuka (API Endpoint)
| Metode | Path | Keterangan |
|---|---|---|
| POST | /v1/chat/completions | Penyelesaian obrolan (non-streaming / streaming), badan permintaan adalah payload OpenAI |
| GET | /v1/models | Daftar model dan harga satuan (tidak perlu autentikasi) |
Alamat gateway: https://www.relay-api.com. Untuk pemanggilan yang kompatibel dengan OpenAI, silakan kirim permintaan ke POST https://www.relay-api.com/v1, isi path sesuai dengan aslinya.
III. Cara Autentikasi
Authorization: Bearer sk-kunci_anda
Buat kunci yang diawali dengan sk- di "Pusat Pengguna → Kunci API". Menggunakan header autentikasi yang sama dengan OpenAI resmi, SDK akan secara otomatis menambahkan header Authorization.
IV. Memulai dengan Cepat
4.1 curl (Non-streaming)
curl -X POST https://www.relay-api.com/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-kunci_anda" \
-d '{
"model": "gpt-5.5",
"messages": [
{"role": "system", "content": "Anda adalah asisten yang membantu."},
{"role": "user", "content": "Perkenalkan diri Anda dalam tiga kalimat"}
],
"temperature": 0.7,
"max_tokens": 512
}'
4.2 OpenAI SDK (Python)
from openai import OpenAI
client = OpenAI(
base_url="https://www.relay-api.com/v1",
api_key="sk-kunci_anda",
)
resp = client.chat.completions.create(
model="gpt-5.5",
messages=[{"role": "user", "content": "Halo"}],
)
print(resp.choices[0].message.content)
Setelah mengatur base_url ke entri OpenAI pada tabel di atas dan mengganti api_key, metode pemanggilan lainnya benar-benar identik dengan SDK resmi.
V. Parameter Permintaan
| Field | Tipe | Wajib | Keterangan |
|---|---|---|---|
| model | string | Ya | Slug model, misal gpt-5.5 |
| messages | array | Ya | Daftar pesan, elemen berupa {role, content}; nilai role: system / user / assistant |
| temperature | number | Tidak | Suhu sampling, default 1.0 |
| top_p | number | Tidak | Sampling nukleus, default 1.0 |
| max_tokens | int | Tidak | Jumlah token output maksimum |
| stream | bool | Tidak | Apakah menggunakan streaming, default false |
| stop | string / array | Tidak | Urutan berhenti (stop sequence) |
| presence_penalty / frequency_penalty | number | Tidak | Penalti pengulangan, rentang -2~2 |
VI. Struktur Respons
{
"id": "chatcmpl-123456",
"object": "chat.completion",
"created": 1710000000,
"model": "gpt-5.5",
"choices": [
{
"index": 0,
"message": {"role": "assistant", "content": "Halo! Senang bertemu dengan Anda."},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 18,
"completion_tokens": 12,
"total_tokens": 30
}
}
| Field | Keterangan |
|---|---|
| id | ID unik untuk penyelesaian ini |
| choices[].message | Balasan asisten, content berisi teks |
| choices[].finish_reason | Alasan selesai: stop / length / content_filter |
| usage.prompt_tokens | Jumlah token input (dasar penagihan) |
| usage.completion_tokens | Jumlah token output (dasar penagihan) |
| usage.total_tokens | Total jumlah token |
VII. Output Streaming
Setelah menambahkan "stream": true ke badan permintaan, sistem akan mengembalikan aliran SSE, setiap baris data: adalah sebuah chunk:
data: {"id": "chatcmpl-123456", "object": "chat.completion.chunk", "choices": [{"index": 0, "delta": {"role": "assistant"}, "finish_reason": null}]}
data: {"id": "chatcmpl-123456", "object": "chat.completion.chunk", "choices": [{"index": 0, "delta": {"content": "Halo"}, "finish_reason": null}]}
data: {"id": "chatcmpl-123456", "object": "chat.completion.chunk", "choices": [{"index": 0, "delta": {}, "finish_reason": "stop"}]}
data: [DONE]
Klien dapat menggabungkan choices[0].delta.content dari setiap chunk untuk mendapatkan balasan lengkap; menerima [DONE] berarti aliran berakhir. OpenAI SDK akan menangani peristiwa ini secara otomatis setelah mengirim stream=True.
VIII. Kode Kesalahan Umum
| Kode Status HTTP | Makna | Saran Penanganan |
|---|---|---|
| 400 | Parameter permintaan tidak valid (model tidak ada, messages kosong, dll.) | Periksa field badan permintaan |
| 401 | Kunci API tidak valid atau hilang | Periksa header Authorization dan format kunci |
| 403 | Kunci dinonaktifkan, saldo tidak cukup, atau kunci tidak diotorisasi untuk model/rute ini | Lakukan pengisian ulang atau periksa otorisasi kunci |
| 404 | Path atau model tidak ditemukan | Konfirmasi base_url dan nama model |
| 429 | Pemicu limit (Rate limit) | Coba lagi dengan algoritma exponential backoff |
| 500 | Kesalahan internal server | Coba lagi nanti, jika tetap异常 hubungi layanan pelanggan |
Badan respons kesalahan diseragamkan dengan struktur {"code": kode_status, "message": "Keterangan kesalahan", "data": null}.
IX. Penjelasan Kompatibilitas
- Mendukung OpenAI SDK (Python / Node.js, dll.) melalui kustomisasi
base_url. - Mendukung berbagai klien yang kompatibel dengan OpenAI (LobeChat, ChatBox, NextChat, One API, dll.) dengan mengonfigurasi alamat antarmuka kustom.
- Nama model mengacu pada slug yang dikembalikan oleh
GET /v1/models.
Penjelasan Base URL: Situs ini menerima /v1beta/models/... dan /v1beta/v1beta/models/... (serta /v1/... dan /v1/v1/...), jadi apakah klien menambahkan /v1, /v1beta sendiri atau tidak, tidak akan mempengaruhi pemanggilan: Base URL dapat diisi dengan root domain atau alamat yang menyertakan /v1beta. ID model dapat dicari dan disalin di "ID Model" di sudut kanan atas halaman "Token" di konsol.
