Tera Router
Gateway API

Chat Completions

Endpoint kompatibel OpenAI — POST /v1/chat/completions.

POST /v1/chat/completions menerima body persis seperti Chat Completions API milik OpenAI. Tidak ada field custom — cukup ganti model dan base URL.

Request

curl http://localhost:8080/v1/chat/completions \
  -H "Authorization: Bearer sk_tr_..." \
  -H "Content-Type: application/json" \
  -d '{
    "model": "openai/gpt-4o-mini",
    "messages": [
      { "role": "system", "content": "Jawab singkat." },
      { "role": "user", "content": "Apa itu LLM gateway?" }
    ],
    "stream": false
  }'

Respons yang kembali adalah format OpenAI standar, diperkaya dua header:

X-TeraRouter-Provider: openai
X-TeraRouter-Model: gpt-4o-mini

Streaming

Set stream: true untuk menerima SSE — chunk-nya format OpenAI standar:

curl http://localhost:8080/v1/chat/completions \
  -H "Authorization: Bearer sk_tr_..." \
  -H "Content-Type: application/json" \
  -d '{
    "model": "glm/glm-4.6",
    "messages": [{ "role": "user", "content": "Ceritakan lelucon" }],
    "stream": true
  }'

Detail perilaku SSE (heartbeat, deadline, cross-dialect) ada di halaman Streaming.

Via SDK OpenAI

import OpenAI from 'openai'

const client = new OpenAI({
  apiKey: 'sk_tr_...',
  baseURL: 'http://localhost:8080/v1',
})

const stream = await client.chat.completions.create({
  model: 'openai/gpt-4o-mini',
  messages: [{ role: 'user', content: 'Halo!' }],
  stream: true,
})

for await (const chunk of stream) {
  process.stdout.write(chunk.choices[0]?.delta?.content ?? '')
}

Memilih model

Nilai model tidak harus provider/model — kamu juga bisa memakai nama alias pool atau chain:<nama> supaya router yang memilih provider:

{ "model": "fast" }
{ "model": "chain:heavy-coding" }
{ "model": "anthropic/claude-sonnet-4(medium)" }

Penjelasan lengkap: Model & routing.

Di halaman ini