Chat Completions
Referensi endpoint POST /v1/chat/completions — parameter, streaming SSE, dan contoh curl + Python
Endpoint utama Hostlinku. Format request dan respons kompatibel dengan
OpenAI Chat Completions API, sehingga SDK
OpenAI resmi bisa dipakai hanya dengan mengganti base_url ke https://api.hostlinku.com/v1.
POST https://api.hostlinku.com/v1/chat/completions
Authorization: Bearer sk-isi-kunci-anda
Content-Type: application/jsonSetiap respons menyertakan header x-request-id (ID request Hostlinku) dan, pada respons sukses
non-streaming, header x-model (slug model yang dipakai gateway).
Parameter body
Contoh: request non-streaming (curl)
curl https://api.hostlinku.com/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-isi-kunci-anda" \
-d '{
"model": "gpt-5-4-mini",
"messages": [
{ "role": "system", "content": "Anda asisten yang ringkas." },
{ "role": "user", "content": "Jelaskan apa itu API gateway dalam dua kalimat." }
],
"temperature": 0.7,
"max_tokens": 256
}'Respons (dipotong):
{
"id": "chatcmpl-…",
"object": "chat.completion",
"created": 1770000000,
"model": "gpt-5-4-mini",
"choices": [
{
"index": 0,
"message": { "role": "assistant", "content": "API gateway adalah …" },
"finish_reason": "stop"
}
],
"usage": { "prompt_tokens": 30, "completion_tokens": 55, "total_tokens": 85 },
"hostlinku": {
"cost": 0.00021,
"latencyMs": 940,
"gateway": "…",
"upstreamRequestId": "…",
"usageSource": "upstream"
}
}Field tambahan hostlinku selalu ada pada respons sukses dari gateway:
Streaming (stream: true)
Dengan stream: true, gateway merespons dengan Content-Type: text/event-stream (SSE) dan
meneruskan chunk dari provider apa adanya, lalu menutup stream dengan data: [DONE]:
curl https://api.hostlinku.com/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-isi-kunci-anda" \
-d '{
"model": "gpt-5-4-mini",
"messages": [{ "role": "user", "content": "Hitung 1 sampai 5." }],
"stream": true
}'data: {"id":"chatcmpl-…","choices":[{"index":0,"delta":{"role":"assistant","content":""}}]}
data: {"id":"chatcmpl-…","choices":[{"index":0,"delta":{"content":"1"}}]}
data: {"id":"chatcmpl-…","choices":[{"index":0,"delta":{"content":", 2"}}]}
data: [DONE]Catatan penting:
- Jika terjadi kegagalan di tengah stream, gateway mengirim satu event error
(
data: {"error": { "code": …, "message": … }}) dan tidak mengirim[DONE]palsu — stream yang terputus tidak pernah terlihat seperti stream yang selesai normal. - Biaya tetap dihitung dari usage nyata setelah stream selesai; bila provider tidak mengirimkan usage, tagihan memakai estimasi yang sudah direservasi saat request masuk.
- Header
x-request-idjuga dikirim pada respons streaming untuk menghubungkan dengan log di console.
Contoh: Python (SDK resmi OpenAI)
Tidak ada perubahan kode selain base_url — SDK OpenAI bisa langsung dipakai:
from openai import OpenAI
client = OpenAI(
base_url="https://api.hostlinku.com/v1",
api_key="sk-isi-kunci-anda",
)
# Non-streaming
response = client.chat.completions.create(
model="gpt-5-4-mini",
messages=[
{"role": "system", "content": "Anda asisten yang ringkas."},
{"role": "user", "content": "Halo dari SDK OpenAI!"},
],
)
print(response.choices[0].message.content)
# Streaming
stream = client.chat.completions.create(
model="gpt-5-4-mini",
messages=[{"role": "user", "content": "Tulis satu paragraf pendek."}],
stream=True,
)
for chunk in stream:
delta = chunk.choices[0].delta.content
if delta:
print(delta, end="", flush=True)Error yang umum di endpoint ini
Format lengkap error envelope ada di Error.