Base URL adalah bagian termudah dalam meninggalkan penyedia layanan; jalur kegagalan adalah tempat di mana migrasi sering kali bermasalah. Untuk bermigrasi dari OpenAI ke TokenLab, Anda mengubah dua nilai pada klien SDK OpenAI Anda: base_url dan api_key. Sisa panduan ini membahas apa saja yang perlu dipastikan seputar perubahan tersebut. Itu berarti ID model yang Anda kirim, harganya saat ini, streaming, pemanggilan tool, penanganan error, timeout, dan penagihan. Fakta di bawah ini berasal dari dokumentasi TokenLab dan API model langsung, masing-masing dengan tanggal pengamatan yang tercantum.
Poin Penting
- Perubahan intinya ada pada dua nilai: base URL TokenLab
https://api.tokenlab.sh/v1dan API key TokenLab (diawali dengansk-). - TokenLab mendokumentasikan dukungan SDK OpenAI untuk Chat Completions dan Responses. Parameter opsional, opsi tool, dan field khusus Responses tetap bergantung pada model yang dipilih.
- Baca harga model Anda dari API langsung sebelum memutuskan apa pun. Pada 2026-10-03,
gpt-5.5terdaftar dengan harga $1,50 untuk input dan $9,00 untuk output per 1 juta token. - Jalankan daftar periksa (checklist) di akhir sebelum Anda memindahkan traffic produksi. Sebagian besar kejutan terjadi pada penanganan error, timeout, dan penagihan, bukan pada jalur yang lancar.
Perubahan Dua Nilai untuk Migrasi dari OpenAI ke TokenLab
Mulailah dengan kuncinya. Sesuai Quickstart (diamati 2026-10-03), Anda membuat akun, membuat API key, dan segera menyimpan nilai lengkapnya. Kunci tersebut hanya ditampilkan sekali, dan awalan dalam daftar kunci tidak dapat mengautentikasi permintaan. Periksa saldo Anda sebelum melakukan panggilan pertama, karena permintaan akan ditagih sesuai harga model yang dipilih saat ini.
Kemudian ubah kliennya. Panduan migrasi (diamati 2026-10-03) menjelaskan resepnya sebagai berikut: atur base_url / baseURL ke https://api.tokenlab.sh/v1, ganti kuncinya, dan pilih ID model dari GET /v1/models.
Sebagai contoh, bayangkan sebuah layanan yang memiliki string gpt-5.5 dalam konfigurasinya. Setelah perubahan dua nilai tersebut, string yang sama adalah permintaan yang valid, namun kita tetap harus memastikan ID-nya terlebih dahulu. GET /v1/models dan GET /v1/models/{model} adalah endpoint penemuan publik dan berfungsi tanpa kunci.
Python
import os
from openai import OpenAI
# Sebelumnya: client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])
client = OpenAI(
api_key=os.environ["TOKENLAB_API_KEY"],
base_url="https://api.tokenlab.sh/v1",
timeout=30.0,
max_retries=0,
)
response = client.chat.completions.create(
model="gpt-5.5",
messages=[{"role": "user", "content": "Hello, world!"}],
)
print(response.choices[0].message.content)
Node.js
import OpenAI from 'openai';
// Sebelumnya: new OpenAI({ apiKey: process.env.OPENAI_API_KEY })
const client = new OpenAI({
apiKey: process.env.TOKENLAB_API_KEY,
baseURL: 'https://api.tokenlab.sh/v1',
timeout: 30_000,
maxRetries: 0,
});
const completion = await client.chat.completions.create({
model: 'gpt-5.5',
messages: [{ role: 'user', content: 'Hello' }],
});
console.log(completion.choices[0].message.content);
cURL
curl https://api.tokenlab.sh/v1/chat/completions \
-H "Authorization: Bearer $TOKENLAB_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"gpt-5.5","messages":[{"role":"user","content":"Say hello"}]}'
Pengaturan timeout dan retry pada dua sampel pertama mencerminkan contoh Quickstart (diamati 2026-10-03), yang menggunakan timeout 30 detik dan nol retry SDK. Kami menjaga retry tetap nol selama pengujian agar permintaan yang gagal terlihat alih-alih dicoba ulang secara diam-diam.
Teruskan base URL secara eksplisit dalam konfigurasi klien. Panduan SDK (diamati 2026-10-03) merekomendasikan hal ini daripada mengandalkan alias variabel lingkungan yang lebih lama. Simpan kunci di server dan di manajer rahasia (secret manager), jangan pernah di kode sisi klien.
Pilih ID Model dan Baca Harganya
Migrasi tidak boleh mengasumsikan ID model atau harga. Keduanya ada di API model. Kami membaca https://api.tokenlab.sh/v1/models/gpt-5.5 dan https://api.tokenlab.sh/v1/models/laguna-s-2.1 pada 2026-10-03. Harga untuk keduanya terakhir diperbarui pada 2026-10-02T16:53:30.068Z.
| Field | gpt-5.5 |
laguna-s-2.1 |
|---|---|---|
| Tahap siklus hidup | active | active |
| Token input / output maks | 1.000.000 / 128.000 | 1.048.576 / 131.072 |
| Format permintaan yang diterima | openai_chat_completions, openai_responses |
openai_chat_completions |
| Kapabilitas yang terdaftar | coding, json-mode, prompt-cache, reasoning, tool-use, vision | tool-use |
| Input, USD per 1M token | 1,5 | 0,1 |
| Output, USD per 1M token | 9 | 0,2 |
| Cache read, USD per 1M token | 0,15 | 0,01 |
Sumber: gpt-5.5 dan laguna-s-2.1, keduanya diamati 2026-10-03.
Untuk mengubah tarif tersebut menjadi angka, berikut adalah estimasi dengan perhitungannya. Ambil pekerjaan dengan 1 juta token input dan 100 ribu token output, tanpa cache hit.
gpt-5.5: 1 × $1,50 + 0,1 × $9,00 = $1,50 + $0,90 = $2,40.laguna-s-2.1: 1 × $0,10 + 0,1 × $0,20 = $0,10 + $0,02 = $0,12.
Ini adalah estimasi dari tarif per-token yang terdaftar. Biaya akhir Anda adalah catatan Penggunaan (Usage). Tokenisasi berbeda-beda menurut model, sehingga teks yang sama menghasilkan jumlah token yang berbeda pada model yang berbeda.
Kami tidak mengklaim penghematan di sini. Untuk membandingkan dengan apa yang Anda bayar hari ini, letakkan tarif TokenLab di samping faktur OpenAI Anda sendiri, atau halaman harga OpenAI, pada hari Anda beralih. Harga berubah, dan panduan penagihan (diamati 2026-10-03) menyarankan untuk tidak melakukan hard-code pada tabel harga yang disalin. Panduan tersebut mengarahkan ke GET /v1/models/:model/pricing untuk nilai saat ini.
ID model lainnya mengikuti pola yang sama. Contoh dalam dokumentasi menggunakan gpt-5.6-terra dan gpt-5.6-luna untuk Chat Completions, serta claude-sonnet-5 dan gemini-3.5-flash pada rute mereka sendiri. Baca format yang diterima oleh masing-masing model sebelum Anda mengarahkan traffic ke sana. Untuk perbandingan yang lebih luas, lihat direktori model, perbandingan OpenRouter vs TokenLab, dan peringkat model. Tim gambar dan video dapat memulai dengan API model gambar AI terbaik 2026 dan API model video AI terbaik 2026. Untuk tugas coding, lihat model AI terbaik untuk coding.
Apa yang Harus Diperiksa Selanjutnya Saat Anda Bermigrasi dari OpenAI ke TokenLab
TokenLab mendokumentasikan SDK OpenAI agar berfungsi dengan Chat Completions dan Responses. Itu adalah kompatibilitas dengan format permintaan dan respons, bukan janji bahwa setiap model berperilaku sama. Panduan format API (diamati 2026-10-03) menyatakan bahwa parameter opsional bergantung pada model. Panduan tersebut juga menyatakan bahwa model tidak serta-merta menerima keempat format API, dan tokenlab.accepted_request_formats menunjukkan format mana yang diterima. Perlakukan setiap area di bawah ini sebagai sesuatu yang perlu diuji dengan traffic nyata Anda.
Streaming
stream: true mengirimkan delta pesan parsial sebagai server-sent events. Atur stream_options dengan include_usage: true untuk menerima penggunaan token dalam potongan stream, sebagaimana didokumentasikan dalam referensi Create Chat Completion (diamati 2026-10-03).
stream = client.chat.completions.create(
model="gpt-5.5",
messages=[{"role": "user", "content": "Count to five."}],
stream=True,
stream_options={"include_usage": True},
)
for chunk in stream:
if chunk.choices:
print(chunk.choices[0].delta.content or "", end="")
Dua perilaku yang perlu direncanakan. Jika stream terputus setelah output tiba, jangan perlakukan itu sebagai respons lengkap. Panduan penanganan error (diamati 2026-10-03) memperingatkan bahwa mengulanginya mungkin menghasilkan output yang berbeda atau tagihan kedua. Dan streaming bisa selesai sebelum penagihan, jadi ID penagihan mungkin tidak ada.
Pemanggilan Tool
Referensi Chat Completions mencantumkan tools, tool_choice, dan parallel_tool_calls. Disebutkan bahwa panggilan paralel berfungsi "bila didukung oleh model yang dipilih." Pemanggilan fungsi didokumentasikan sebagai "didukung oleh model yang dipilih," jadi periksa daftar kapabilitas. Dalam tabel di atas, baik gpt-5.5 maupun laguna-s-2.1 mencantumkan tool-use, tetapi hanya gpt-5.5 yang mencantumkan json-mode dan vision. Kirim skema tool nyata Anda, bukan contoh mainan, dan periksa apakah argumen yang dikembalikan dapat diurai (parse).
Jika Anda berencana memanggil model Claude, perhatikan aturan dalam panduan migrasi. Panggilan tool Claude, blok pemikiran (thinking blocks), dan field pesan Anthropic berada di /v1/messages, dan Chat Completions tidak menjamin ketersediaannya.
Bentuk Error
Chat Completions dan Responses mengembalikan objek error bergaya OpenAI. Sesuai panduan penanganan error, hanya message dan type yang selalu ada. Field seperti code, param, retryable, dan retry_after muncul jika relevan. Lakukan percabangan berdasarkan status HTTP dan code, bukan pada teks pesan, dan buat parser Anda toleran terhadap field yang hilang. Anthropic Messages dan Gemini memiliki format error mereka sendiri, jadi satu parser tidak akan mencakup setiap rute.
| Status | Kode | Artinya |
|---|---|---|
| 401 | invalid_api_key |
Kunci hilang, tidak valid, tidak aktif, atau dicabut |
| 401 | expired_api_key |
Kunci telah kedaluwarsa |
| 402 | insufficient_balance |
Saldo akun tidak dapat menutupi permintaan |
| 402 | quota_exceeded |
Batas penggunaan kunci itu sendiri telah tercapai |
| 403 | model_not_allowed |
Kunci ini tidak dapat menggunakan model yang diminta |
| 429 | rate_limit_exceeded |
Terlalu banyak permintaan; tunggu Retry-After |
Sumber: Autentikasi dan penanganan error, diamati 2026-10-03.
Tabel ini mengoreksi asumsi umum. Saldo kosong adalah 402, bukan 401. Jika kode Anda saat ini memperlakukan setiap 4xx sebagai kunci yang buruk, perbarui kode tersebut.
Timeout dan Retry
Panduan migrasi menyatakan bahwa kode retry, timeout, dan streaming yang ada biasanya dapat tetap digunakan. Tinjau kode tersebut terhadap aturan retry yang didokumentasikan.
- Jangan ulangi respons 400, 401, 402, 403, 404, atau 413 tanpa perubahan.
- Retry 429 setelah penundaan yang disediakan server.
- Retry 500–504 hanya jika
retryablebernilaitrue, dan patuhiretry_after. 503 all_channels_faileddapat kembali denganretryable: false. Dalam kasus tersebut, operasi tidak memiliki pasokan di tingkat pengiriman yang dipilih, jadi mengulanginya tidak akan membantu.
Simpan Request ID dari header respons bersama dengan model dan ID pekerjaan Anda sendiri. Itu adalah apa yang Anda perlukan untuk investigasi.
Penagihan
Satu saldo berfungsi di seluruh model, tanpa langganan atau pengeluaran minimum, sesuai panduan penagihan. Setiap permintaan yang selesai ditagih satu kali, untuk opsi pengiriman yang menghasilkannya. Opsinya adalah TokenLab Verified, Official, dan Auto, di mana Auto mencoba Verified terlebih dahulu, kemudian Official. Tetapkan batas pengeluaran pada setiap API key jika Anda menginginkan penghentian paksa. Saat batas tercapai, permintaan dengan kunci tersebut akan mengembalikan 402.
Respons non-streaming yang kompatibel dengan OpenAI menyertakan billing_transaction_id saat penagihan selesai sebelum respons dikirim. ID ini juga mungkin muncul di header X-Billing-Transaction-ID. Simpan ID tersebut, dan lakukan rekonsiliasi terhadap halaman Penggunaan (Usage) alih-alih perhitungan token Anda sendiri.
Daftar Periksa Verifikasi Setelah Anda Bermigrasi dari OpenAI ke TokenLab
Jalankan langkah-langkah ini secara berurutan dengan kunci staging sebelum traffic produksi berpindah. Setiap baris merujuk pada perilaku yang didokumentasikan di atas.
| Langkah | Apa yang dijalankan | Apa yang seharusnya Anda lihat |
|---|---|---|
| 1. Penemuan model | GET /v1/models/gpt-5.5 (tidak perlu kunci) |
Siklus hidup active dan format yang diterima yang ingin Anda gunakan |
| 2. Permintaan terautentikasi | Sampel Python atau cURL di atas | Jawaban tidak kosong; permintaan muncul di tampilan Requests dengan model, status, dan penggunaan |
| 3. Field penggunaan | Baca usage pada respons non-streaming |
prompt_tokens, completion_tokens, total_tokens |
| 4. Streaming | stream: true dengan include_usage: true |
Potongan SSE, lalu penggunaan; stream yang terputus ditangani sebagai tidak lengkap |
| 5. Pemanggilan tool | tools dan tool_choice nyata Anda |
Argumen terurai dan cocok dengan skema Anda |
| 6. Vision atau JSON mode | Hanya jika model mencantumkan vision atau json-mode |
Output yang diharapkan; lewati pengujian jika kapabilitas tidak terdaftar |
| 7. Kunci buruk | Permintaan dengan kunci yang dihapus atau salah | 401 invalid_api_key |
| 8. Tidak ada saldo atau batas kunci | Gunakan kunci dengan batas rendah atau ruang kerja kosong | 402 insufficient_balance atau quota_exceeded |
| 9. Pembatasan model | Batasi daftar model kunci, lalu minta model lain | 403 model_not_allowed |
| 10. Timeout dan retry | Paksa timeout di staging | Kode Anda melakukan retry hanya sesuai retryable dan retry_after |
| 11. Penagihan | Bandingkan billing_transaction_id dan Penggunaan dengan estimasi Anda |
Biaya cocok dengan harga model saat ini dan token yang tercatat |
Setelah tabel lulus verifikasi, ubah konfigurasi produksi Anda dan lakukan deploy. Biarkan kunci OpenAI lama tetap aktif sampai Penggunaan (Usage) mengonfirmasi bahwa jalur baru sudah stabil.
Pertanyaan yang Sering Diajukan
Apakah saya perlu mengubah nama model saya saat beralih dari OpenAI?
Tidak harus, tetapi pastikan masing-masing model. ID model TokenLab adalah string yang tepat, jadi periksa dengan GET /v1/models atau GET /v1/models/{model}. Pada 2026-10-03, API langsung mencantumkan gpt-5.5 sebagai aktif. Jika permintaan mengembalikan model_not_found, ID tersebut tidak diketahui atau tidak tersedia. Baca daftar model dan gunakan ID saat ini.
Apakah streaming dan pemanggilan tool akan berperilaku persis seperti API OpenAI?
TokenLab mendokumentasikan streaming melalui SSE dan pemanggilan fungsi melalui format permintaan yang kompatibel dengan OpenAI. Dokumentasi juga menyatakan bahwa opsi yang didukung bergantung pada model yang dipilih. Oleh karena itu, kami memperlakukan hasilnya sebagai kompatibel, bukan identik. Uji streaming, tools, tool_choice, dan response_format apa pun yang Anda gunakan dengan model spesifik yang ingin Anda jalankan.
Kode status apa yang saya dapatkan saat saldo saya habis?
Anda mendapatkan HTTP 402 dengan kode insufficient_balance. Kunci yang mencapai batas pengeluarannya sendiri juga mengembalikan 402, dengan quota_exceeded. Kunci yang hilang, tidak valid, atau dicabut mengembalikan 401. Jangan ulangi permintaan apa pun dari status ini tanpa perubahan. Isi ulang saldo, naikkan batas kunci, atau ganti kuncinya.
Bisakah saya memanggil model Claude atau Gemini dari klien OpenAI yang sama?
Katalog model mencantumkan claude-sonnet-5 dan gemini-3.5-flash dengan openai_chat_completions di antara format permintaannya. Oleh karena itu, obrolan dasar dapat melalui klien yang sama. Field khusus Claude seperti blok pemikiran dan penggunaan tool Claude berada di /v1/messages. Field asli Gemini tetap berada di rute /v1beta. Gunakan satu format API per percakapan.
Mulai Membangun di TokenLab
Buat kunci di TokenLab, atur base URL ke https://api.tokenlab.sh/v1, dan jalankan permintaan Quickstart sebelum menyentuh produksi.
Sumber
Harga diamati pada 2026-10-03
- TokenLab Docs: QuickstartDiamati pada 2026-10-03
- TokenLab Docs: AuthenticationDiamati pada 2026-10-03
- TokenLab Docs: Migration GuidesDiamati pada 2026-10-03
- TokenLab Docs: SDKs & LibrariesDiamati pada 2026-10-03
- TokenLab Docs: API formatsDiamati pada 2026-10-03
- TokenLab Docs: Handle API errorsDiamati pada 2026-10-03
- TokenLab Docs: Billing and pricingDiamati pada 2026-10-03
- TokenLab Docs: Create Chat CompletionDiamati pada 2026-10-03



