Panduan Integrasi API TeamoRouter

TeamoRouter mendukung berbagai format API yang kompatibel, termasuk OpenAI, Google Gemini, dan Anthropic. Arahkan base URL SDK resmi ke TeamoRouter dan biarkan kode aplikasi Anda tidak berubah. Anda dapat memanggil Claude / Gemini / GPT dan keluarga model lainnya melalui satu gateway.

  • Base URL: https://api.teamorouter.com
  • Autentikasi: API Key (sk-teamo-...)
  • Protokol: format native Anthropic (/v1/messages), format kompatibel OpenAI (/v1/chat/completions), OpenAI Responses API (/v1/responses, khusus model GPT), format native Gemini (/v1beta/models/{model}:generateContent), dan pembuatan gambar (/v1/images)

Ganti sk-teamo-xxxxxx dengan key Anda sendiri. Jaga kerahasiaan key dan jangan pernah meng-commit-nya ke repositori kode.


1. Autentikasi

Pilih format yang kompatibel sesuai model yang Anda gunakan:

Setiap format menggunakan header autentikasi yang berbeda. Pilih header sesuai protokol:

Protokol Header
Anthropic x-api-key: sk-teamo-xxxxxx + anthropic-version: 2023-06-01
OpenAI Authorization: Bearer sk-teamo-xxxxxx
Gemini Authorization: Bearer sk-teamo-xxxxxx

2. Model yang tersedia

Ambil daftar model lengkap secara real time dengan GET /v1/models:

bash
curl https://api.teamorouter.com/v1/models \
  -H "Authorization: Bearer sk-teamo-xxxxxx"

Model yang saat ini tersedia (contoh):

Penyedia ID model
Anthropic claude-fable-5-1, claude-opus-5, claude-fable-5, claude-sonnet-5, claude-opus-4-8, claude-opus-4-7, claude-opus-4-6, claude-sonnet-4-6, claude-haiku-4-5
OpenAI gpt-6-astra,gpt-6-sol,gpt-6-luna,gpt-5.6-sol,gpt-5.6-terra,gpt-5.6-luna,gpt-5.5,gpt-5.4,gpt-5.4-mini,gpt-image-2
Google gemini-3.8-flash, gemini-3.7-flash, gemini-3.6-flash, gemini-3.5-flash-lite,gemini-3.1-pro-preview, gemini-3.5-flash, gemini-3.1-flash-lite-preview
DeepSeek deepseek-flash (DeepSeek V4.1 Flash), deepseek-flash-free (gratis), deepseek-v4-flash-vision-exp, deepseek-v4-pro, deepseek-v4-flash, deepseek-v4-flash-free (gratis)
GLM glm-5.3-flash, glm-5.3-flash-free (gratis), glm-5.3, glm-5.2
Grok grok-4.6

3. Format native Anthropic

Endpoint: POST /v1/messages

3.1 Permintaan dasar

bash
curl https://api.teamorouter.com/v1/messages \
  -H "x-api-key: sk-teamo-xxxxxx" \
  -H "anthropic-version: 2023-06-01" \
  -H "content-type: application/json" \
  -d '{
    "model": "claude-fable-5-1",
    "max_tokens": 1024,
    "messages": [
      {"role": "user", "content": "Introduce yourself in one sentence"}
    ]
  }'

Contoh respons:

json
{
  "id": "msg_01KxDE...",
  "type": "message",
  "role": "assistant",
  "model": "claude-fable-5-1",
  "content": [{"type": "text", "text": "I am Claude..."}],
  "stop_reason": "end_turn",
  "usage": {"input_tokens": 159, "output_tokens": 34}
}

3.2 Streaming dengan SSE

Tambahkan "stream": true. Respons berupa text/event-stream:

bash
curl https://api.teamorouter.com/v1/messages \
  -H "x-api-key: sk-teamo-xxxxxx" \
  -H "anthropic-version: 2023-06-01" \
  -H "content-type: application/json" \
  -d '{
    "model": "claude-fable-5-1",
    "max_tokens": 1024,
    "stream": true,
    "messages": [{"role": "user", "content": "Write a short poem"}]
  }'

Urutan event: message_start -> content_block_start -> beberapa event content_block_delta -> content_block_stop -> message_delta -> message_stop.

3.3 Python SDK dengan anthropic

python
from anthropic import Anthropic

client = Anthropic(
    api_key="sk-teamo-xxxxxx",
    base_url="https://api.teamorouter.com",
)

resp = client.messages.create(
    model="claude-fable-5-1",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Hello"}],
)
print(resp.content[0].text)

4. Format kompatibel OpenAI

Endpoint: POST /v1/chat/completions (Chat Completions) dan POST /v1/responses (Responses API, khusus model GPT)

4.1 Permintaan Chat Completions dasar

bash
curl https://api.teamorouter.com/v1/chat/completions \
  -H "Authorization: Bearer sk-teamo-xxxxxx" \
  -H "content-type: application/json" \
  -d '{
    "model": "gpt-5.6-sol",
    "max_tokens": 1024,
    "messages": [{"role": "user", "content": "Hello"}]
  }'

Respons mengikuti struktur standar OpenAI chat.completion:

json
{
  "object": "chat.completion",
  "model": "gpt-5.6-sol",
  "choices": [
    {"index": 0, "message": {"role": "assistant", "content": "Hello!"}, "finish_reason": "stop"}
  ],
  "usage": {"prompt_tokens": 214, "completion_tokens": 3, "total_tokens": 217}
}

4.2 Python SDK dengan openai

python
from openai import OpenAI

client = OpenAI(
    api_key="sk-teamo-xxxxxx",
    base_url="https://api.teamorouter.com/v1",
)

resp = client.chat.completions.create(
    model="gpt-5.6-sol",
    messages=[{"role": "user", "content": "Hello"}],
)
print(resp.choices[0].message.content)

4.3 Streaming

Tambahkan "stream": true. TeamoRouter mengembalikan chunk SSE standar OpenAI dalam format data: {...} dan diakhiri dengan data: [DONE].

4.4 Permintaan Responses API dasar

Jika aplikasi Anda sudah menggunakan OpenAI Responses API, panggil /v1/responses secara langsung:

bash
curl https://api.teamorouter.com/v1/responses \
  -H "Authorization: Bearer sk-teamo-xxxxxx" \
  -H "content-type: application/json" \
  -d '{
    "model": "gpt-5.6-sol",
    "input": "Introduce TeamoRouter in one sentence"
  }'

/v1/responses hanya mendukung model GPT. Permintaan untuk Claude / Gemini mengembalikan 400. Gunakan /v1/messages untuk Claude dan format native Gemini untuk Gemini.

4.5 Python SDK dengan openai Responses

python
from openai import OpenAI

client = OpenAI(
    api_key="sk-teamo-xxxxxx",
    base_url="https://api.teamorouter.com/v1",
)

resp = client.responses.create(
    model="gpt-5.6-sol",
    input="Introduce TeamoRouter in one sentence",
)
print(resp.output_text)

4.6 Streaming Responses API

Tambahkan "stream": true untuk menerima event streaming standar OpenAI Responses API.

4.7 Fast mode

Endpoint kompatibel OpenAI milik TeamoRouter mendukung Fast mode (sebelumnya Priority processing). Tambahkan ini ke permintaan Chat Completions atau Responses API Anda:

json
"service_tier": "fast"

Contoh Python:

python
from openai import OpenAI

client = OpenAI(
    api_key="sk-teamo-xxxxxx",
    base_url="https://api.teamorouter.com/v1",
)

resp = client.responses.create(
    model="gpt-5.6-sol",
    input="Analyze this requirement for me",
    service_tier="fast",
)
print(resp.output_text)

Contoh JavaScript:

javascript
import OpenAI from "openai";

const client = new OpenAI({
  apiKey: "sk-teamo-xxxxxx",
  baseURL: "https://api.teamorouter.com/v1",
});

const resp = await client.responses.create({
  model: "gpt-5.6-sol",
  input: "Analyze this requirement for me",
  service_tier: "fast",
});
console.log(resp.output_text);

Nilai lama masih berfungsi:

json
"service_tier": "priority"

fast adalah nilai yang direkomendasikan saat ini; nilai lama priority masih berfungsi dan berperilaku identik. Keduanya berlaku untuk semua model seri GPT yang mendukung Fast mode. Dengan Fast mode aktif, gpt-5.6-sol berjalan hingga 2.5x lebih cepat daripada Standard. Fast mode ditagih dengan tarif 2x tarif standar. Untuk GPT-5.6 dan model sebelumnya, field service_tier pada objek respons mungkin masih mengembalikan "priority" — ini memang diharapkan.


5. Format native Gemini

Endpoint: POST /v1beta/models/{model}:generateContent

5.1 Permintaan dasar

bash
curl https://api.teamorouter.com/v1beta/models/gemini-3.5-flash:generateContent \
  -H "Authorization: Bearer sk-teamo-xxxxxx" \
  -H "content-type: application/json" \
  -d '{
    "contents": [
      {"role": "user", "parts": [{"text": "Introduce yourself in one sentence"}]}
    ]
  }'

Contoh respons:

json
{
  "candidates": [
    {
      "content": {"role": "model", "parts": [{"text": "I am Gemini..."}]},
      "finishReason": "STOP"
    }
  ],
  "usageMetadata": {"promptTokenCount": 12, "candidatesTokenCount": 22, "totalTokenCount": 34}
}

5.2 Streaming dengan SSE

Gunakan streamGenerateContent dan tambahkan alt=sse:

bash
curl "https://api.teamorouter.com/v1beta/models/gemini-3.5-flash:streamGenerateContent?alt=sse" \
  -H "Authorization: Bearer sk-teamo-xxxxxx" \
  -H "content-type: application/json" \
  -d '{
    "contents": [
      {"role": "user", "parts": [{"text": "Write a short poem"}]}
    ]
  }'

5.3 Variabel lingkungan

Jika alat atau SDK Anda mendukung Base URL Gemini kustom, konfigurasikan seperti ini:

bash
export GOOGLE_GEMINI_BASE_URL="https://api.teamorouter.com"
export GEMINI_API_KEY="sk-teamo-xxxxxx"
export GEMINI_API_KEY_AUTH_MECHANISM="bearer"

SDK Gemini yang berbeda mungkin menggunakan nama field yang berbeda untuk endpoint kustom. Nama yang umum meliputi base_url, baseURL, apiEndpoint, atau variabel lingkungan. Aturan intinya: arahkan Base URL ke https://api.teamorouter.com dan gunakan API Key TeamoRouter Anda.


6. Pembuatan gambar (GPT Image 2)

Model gambar gpt-image-2 menggunakan endpoint /v1/images yang terpisah dan melakukan autentikasi dengan Authorization: Bearer.

6.1 Membuat gambar

Endpoint: POST /v1/images/generations

bash
curl https://api.teamorouter.com/v1/images/generations \
  -H "Authorization: Bearer sk-teamo-xxxxxx" \
  -H "content-type: application/json" \
  -d '{
    "model": "gpt-image-2",
    "prompt": "An orange cat typing on a keyboard, illustration style"
  }'

Contoh respons. data[0].b64_json adalah gambar berenkode Base64:

json
{
  "created": 1752345600,
  "data": [
    {"b64_json": "iVBORw0KGgo..."}
  ]
}

Setel timeout ke 300 detik. Model pembuat gambar bisa membutuhkan waktu respons lebih lama, dan timeout yang lebih singkat dapat gagal.

6.2 Mengedit gambar

Endpoint: POST /v1/images/edits

Unggah gambar sumber sebagai multipart/form-data dan sertakan instruksi edit:

bash
curl https://api.teamorouter.com/v1/images/edits \
  -H "Authorization: Bearer sk-teamo-xxxxxx" \
  -F model="gpt-image-2" \
  -F image="@photo.png" \
  -F prompt="Replace the background with a starry sky"

Endpoint ini kompatibel dengan OpenAI Images API.


7. Menghubungkan alat agen

Claude Code menggunakan protokol Anthropic, Codex menggunakan protokol OpenAI, dan Gemini CLI menggunakan protokol Gemini.

Cukup arahkan variabel lingkungan Base URL dan API Key ke TeamoRouter. Anda tidak perlu memodifikasi alat itu sendiri.

Claude Code (protokol Anthropic):

bash
export ANTHROPIC_BASE_URL="https://api.teamorouter.com"
export ANTHROPIC_API_KEY="sk-teamo-xxxxxx"

Alat dengan protokol OpenAI (Chat Completions / Responses API):

bash
export OPENAI_BASE_URL="https://api.teamorouter.com/v1"
export OPENAI_API_KEY="sk-teamo-xxxxxx"

Gemini CLI:

bash
export GOOGLE_GEMINI_BASE_URL="https://api.teamorouter.com"
export GEMINI_API_KEY="sk-teamo-xxxxxx"
export GEMINI_API_KEY_AUTH_MECHANISM="bearer"

8. FAQ

Mendapat 401 / autentikasi gagal?

Pertama, verifikasi pemetaan protokol ke header: Anthropic menggunakan x-api-key; OpenAI / Gemini menggunakan Authorization: Bearer; endpoint native Gemini juga menerima x-goog-api-key. Lalu pastikan key lengkap, diawali sk-teamo-, tanpa spasi berlebih, dan belum dihapus di dasbor. Periksa juga format base_url: SDK OpenAI memerlukan /v1; SDK Anthropic tidak.

Memanggil Claude melalui format OpenAI menghasilkan error, biaya lebih tinggi, atau performa lebih buruk?

Gunakan protokol native Anthropic (/v1/messages) untuk model Claude sebisa mungkin. Claude Code dan alat agen lainnya harus dikonfigurasi dengan protokol Anthropic. Memanggil Claude melalui format yang kompatibel dengan OpenAI dapat menghilangkan prompt cache, thinking, dan kemampuan lainnya, sehingga biaya naik dan kualitas turun. Cara ini hanya cocok untuk skenario chat sederhana. /v1/responses tidak mendukung Claude / Gemini dan mengembalikan 400.

Model tidak tersedia?

Gunakan GET /v1/models untuk mengambil daftar model real time terlebih dahulu. Periksa ejaan ID model, gunakan huruf kecil, dan perhatikan perbedaan - dan .. Pastikan juga endpoint sesuai dengan model.

Timeout atau token pertama lambat?

Model besar seperti Opus / Fable bisa membutuhkan beberapa detik hingga puluhan detik untuk token pertama saat melakukan reasoning. Ini tidak berarti permintaan gagal. Di produksi, setel "stream": true agar latensi terasa lebih baik dan tingkatkan timeout baca klien. Server mendukung respons hingga 600 detik.

Keamanan key:

Simpan key di variabel lingkungan atau secret manager. Jangan menanamkannya langsung di kode, meng-commit-nya ke Git, atau menyertakannya dalam frontend / klien publik. Jika Anda curiga key bocor, segera hapus di dasbor dan buat penggantinya.

Siap? Tiga langkah untuk memulaiMasuk ke konsol · isi saldo · buat API key
DiscordDapatkan bantuan komunitas secara instan