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.agentapiai.com/v1untuk format kompatibel OpenAI (OpenAI SDK, Codex, Cursor, Cline, OpenCode, dan alat sejenis);https://api.agentapiai.comtanpa/v1untuk format Anthropic (Claude Code, Anthropic SDK) dan format native Gemini. Tanpa/v1, permintaan dari klien kompatibel OpenAI akan gagal - 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)
Akun baru mulai dengan saldo $0 — isi saldo sebelum permintaan pertama. Isi saldo mulai $5. Jika permintaan mengembalikan 402 (400 untuk format OpenAI) dengan pesan "wallet balance is insufficient", artinya saldo Anda kosong — base URL dan key sudah benar. Isi saldo lalu coba lagi.
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:
curl https://api.agentapiai.com/v1/models \
-H "Authorization: Bearer sk-teamo-xxxxxx"
Model yang saat ini tersedia (contoh):
| Penyedia | ID model |
|---|---|
| Anthropic | claude-opus-5-5, claude-sonnet-5-5, claude-haiku-5-5, 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.1-sol, gpt-6.1-terra, 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.5-sunburst, gpt-image-2.5-flare, gpt-image-2 |
gemini-4-argon, gemini-3.8-flash, gemini-3.7-flash, gemini-3.6-flash, gemini-3.5-flash, gemini-3.5-flash-lite, gemini-3.1-pro-preview, gemini-3-pro-image, gemini-3.1-flash-image, gemini-nano-banana-2.1 |
|
| DeepSeek | deepseek-flash (DeepSeek V4.1 Flash), deepseek-flash-free (tarif lebih murah, tetap berbayar), deepseek-v4-flash-vision-exp, deepseek-v4-pro, deepseek-v4-flash, deepseek-v4-flash-free (tarif lebih murah, tetap berbayar) |
| GLM | glm-5.3-flash, glm-5.3-flash-free (tarif lebih murah, tetap berbayar), glm-5.3, glm-5.2 |
| Grok | grok-4.7, grok-4.6 |
| Lainnya | kimi-k3.1-pro, kimi-k3, qwen3.8-max, qwen3.8-flash, qwen3.7-max, qwen3.7-flash, MiniMax-M3, minimax-m3.1-flash, doubao-seed-2.1-pro, doubao-seed-2.1-lite, doubao-seed-2.0-lite |
Daftar model lengkap beserta harga terkini ada di direktori model.
3. Format native Anthropic
Endpoint: POST /v1/messages
3.1 Permintaan dasar
curl https://api.agentapiai.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:
{
"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:
curl https://api.agentapiai.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
from anthropic import Anthropic
client = Anthropic(
api_key="sk-teamo-xxxxxx",
base_url="https://api.agentapiai.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
curl https://api.agentapiai.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:
{
"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
from openai import OpenAI
client = OpenAI(
api_key="sk-teamo-xxxxxx",
base_url="https://api.agentapiai.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:
curl https://api.agentapiai.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
from openai import OpenAI
client = OpenAI(
api_key="sk-teamo-xxxxxx",
base_url="https://api.agentapiai.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:
"service_tier": "fast"
Contoh Python:
from openai import OpenAI
client = OpenAI(
api_key="sk-teamo-xxxxxx",
base_url="https://api.agentapiai.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:
import OpenAI from "openai";
const client = new OpenAI({
apiKey: "sk-teamo-xxxxxx",
baseURL: "https://api.agentapiai.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:
"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
curl https://api.agentapiai.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:
{
"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:
curl "https://api.agentapiai.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:
export GOOGLE_GEMINI_BASE_URL="https://api.agentapiai.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.agentapiai.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
curl https://api.agentapiai.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:
{
"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:
curl https://api.agentapiai.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.
Sebagian besar alat cukup diarahkan Base URL dan API Key-nya ke TeamoRouter tanpa mengubah alatnya. Codex memakai file konfigurasi (lihat di bawah).
Claude Code (protokol Anthropic):
export ANTHROPIC_BASE_URL="https://api.agentapiai.com"
export ANTHROPIC_AUTH_TOKEN="sk-teamo-xxxxxx"
export ANTHROPIC_API_KEY=""
Gunakan ANTHROPIC_AUTH_TOKEN dan kosongkan ANTHROPIC_API_KEY: jika ANTHROPIC_API_KEY diisi, Claude Code bertanya apakah key itu dipakai, defaultnya "No", dan menekan Enter membuka login resmi Anthropic. Langkah lengkap: Claude Code.
Alat dengan protokol OpenAI (Chat Completions / Responses API):
export OPENAI_BASE_URL="https://api.agentapiai.com/v1"
export OPENAI_API_KEY="sk-teamo-xxxxxx"
Codex tidak membaca dua variabel ini. Atur TeamoRouter di ~/.codex/config.toml — lihat Codex CLI.
Gemini CLI:
export GOOGLE_GEMINI_BASE_URL="https://api.agentapiai.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.
Pembacaan cache dan penulisan cache sama-sama 0 untuk permintaan Claude?
Cache Claude harus diaktifkan secara eksplisit oleh pemanggil. Dengan protokol native Anthropic (/v1/messages), tambahkan "cache_control": {"type": "ephemeral"} di akhir konten yang ingin dipakai ulang, biasanya pada blok system terakhir, tool terakhir, dan pesan terbaru. Tanpa itu, tidak ada yang di-cache dan pembacaan maupun penulisan cache sama-sama 0. Memanggil Claude melalui format yang kompatibel dengan OpenAI tidak mengaktifkan cache secara otomatis, dan konten yang lebih pendek dari panjang minimum yang dapat di-cache oleh model juga tidak di-cache.
curl https://api.agentapiai.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,
"system": [
{"type": "text", "text": "System prompt yang panjang dan tetap", "cache_control": {"type": "ephemeral"}}
],
"messages": [
{"role": "user", "content": [
{"type": "text", "text": "Perkenalkan dirimu dalam satu kalimat", "cache_control": {"type": "ephemeral"}}
]}
]
}'
Setelah diaktifkan, cache_creation_input_tokens pada usage yang dikembalikan adalah penulisan cache dan cache_read_input_tokens adalah pembacaan cache. Cache dicocokkan berdasarkan prefiks: semua konten sebelum penanda cache_control (system, tools, pesan sebelumnya) harus tetap sama di setiap permintaan. Mengubah bagian mana pun akan membatalkan cache setelahnya.
Error model not available / model tidak tersedia?
Respons 400 model_not_available berarti nama model itu tidak ada di katalog kami. Mencoba ulang tidak akan membantu; ganti dengan ID dari katalog. Nama lama yang sering dipakai:
| Yang Anda tulis | Ganti dengan |
|---|---|
deepseek-v4-pro-free |
deepseek-v4-pro atau deepseek-v4-flash-free |
deepseek-chat |
deepseek-flash atau deepseek-v4-pro |
deepseek-v4.1-flash |
deepseek-flash |
deepseek-v4.1-flash-free |
deepseek-flash-free |
deepseek-v4.1-flash-1017 |
deepseek-flash-1017 |
kimi-k3.1-pro[1M] |
kimi-k3.1-pro |
claude-opus-5.5, claude-opus-5-5[1m] |
claude-opus-5-5 |
claude-sonnet-5.5 |
claude-sonnet-5-5 |
claude-sonnet-4-5, claude-sonnet-4-5-20250929 |
claude-sonnet-4-6 atau claude-sonnet-5-5 |
gpt-4o |
gpt-5.5 |
gpt-4o-mini, gpt-3.5-turbo |
gpt-5.4-mini |
gemini-2.5-flash |
gemini-3.5-flash |
- ID model Claude memakai tanda hubung:
claude-opus-5-5, bukanclaude-opus-5.5. kimi-k3.1-prosudah memiliki konteks 1M. Untuk sementara, jangan tambahkan[1M]pada namanya.- Untuk model yang tidak ada di tabel, ambil daftar terkini dengan
GET /v1/modelsatau buka direktori model. Periksa ejaannya (-dan.) dan pastikan endpoint sesuai dengan model (misalnya,/v1/responsestidak mendukung Claude maupun Gemini).
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.
Sering kena 429, atau menjalankan pekerjaan massal?
Model berbayar dibatasi jumlah permintaan per menit (RPM) per akun, bukan jumlah koneksi bersamaan. Jika melebihi batas, API mengembalikan 429; tunggu sesuai header retry-after lalu coba lagi. Jika sering kena 429 atau perlu menjalankan batch besar, lihat halaman bulk API: hubungi tim sales untuk menaikkan batas per menit akun Anda, lengkap dengan contoh kode untuk menjalankan batch dengan konkurensi sendiri.
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.