Model & harga
Daftar semua model yang bisa kamu panggil, lengkap dengan kemampuan dan harganya. Daftarnya publik, jadi kamu tidak butuh API key, dan isinya berubah dari waktu ke waktu, jadi baca dari endpoint ini dan jangan menuliskan id secara tetap di kodemu.
GET /v1/models
Request
Section titled “Request”| Parameter | Tipe | Wajib | Keterangan |
|---|---|---|---|
modality | string | Tidak | Tampilkan hanya model dari satu jenis khusus, bukan daftar bawaan. Salah satu dari embedding, rerank, moderation, atau systemone. Lihat Filter menurut modality. |
Tanpa modality, daftar memuat model chat, gambar, text to speech, transkripsi, musik, dan video. Model embedding, rerank, moderation, dan System One tidak ikut. endpoints pada tiap entri menunjukkan API yang dilayani, jadi tool yang hanya butuh model chat sebaiknya menyimpan entri yang endpoints-nya memuat chat. Model musik juga ada di daftar bawaan, dan tidak ada filter ?modality=music. Entri kenari/auto, jika tampil, tidak punya endpoints, karena model yang melayani request berbeda setiap kali. endpoints yang tidak ada berarti metadata belum tercatat, bukan berarti model tidak punya kemampuan itu, jadi contoh di bawah memperlakukannya sebagai daftar kosong.
Response
Section titled “Response”Response berupa daftar gaya OpenAI: {"object": "list", "data": [...]}. Ini satu entri:
{ "id": "step-3-7-flash", "object": "model", "owned_by": "stepfun", "name": "step-3-7-flash", "context_length": 262144, "max_output_tokens": 65536, "modalities": { "input": ["text", "image", "video"], "output": ["text"] }, "endpoints": ["chat"], "protocols": ["openai-chat", "openai-responses", "anthropic-messages"], "reasoning": true, "reasoning_options": ["low", "medium", "high"], "reasoning_toggle": false, "tool_call": true, "pricing": { "input": 4200000000, "output": 24000000000, "cache_read": 840000000, "cache_write": null, "free": false, "currency": "IDR", "unit": "micro_idr_per_1m_tokens" }, "pricing_lines": [ { "endpoint": "chat", "billable": "input", "unit": "token_1m", "variant": null, "micro_idr": 4200000000 }, { "endpoint": "chat", "billable": "output", "unit": "token_1m", "variant": null, "micro_idr": 24000000000 }, { "endpoint": "chat", "billable": "cache_read", "unit": "token_1m", "variant": null, "micro_idr": 840000000 } ], "sunset_at": null}Field yang nilainya tidak diketahui kenari dihilangkan, bukan diisi null. id, object, owned_by, name, dan sunset_at selalu ada. Field lainnya bergantung pada jenis entri, seperti ditunjukkan tabel di bawah.
| Field | Tipe | Keterangan |
|---|---|---|
id | string | Id yang dikirim sebagai model. |
object | string | Selalu model. |
owned_by | string | Vendor pembuat model, misalnya anthropic. |
name | string | Nama tampilan. Setiap entri punya. Bila model tidak punya nama tampilan sendiri, name sama dengan id. |
context_length | integer | Jendela konteks dalam token. |
max_output_tokens | integer | Output terpanjang yang bisa dihasilkan model dalam satu response, dalam token. Dihilangkan bila tidak diketahui, artinya belum ada yang tercatat, bukan berarti model tanpa batas. Tidak ada di entri ?modality=. |
modalities | object | Array input dan output. Nilainya text, image, pdf, file, audio, dan video. pdf berarti model membaca PDF sendiri. Semua model chat mencantumkan file, karena kenari membaca dokumen terlampir untuk model apa pun. Hanya engine native yang bergantung pada model yang membaca berkas sendiri. Lihat Gambar & berkas sebagai input. |
endpoints | array | API yang dilayani model: chat, images, videos, audio_speech, audio_transcription, music, embeddings, rerank, moderations, atau systemone. |
protocols | array | Format API yang bisa kamu pakai untuk memanggil model: openai-chat untuk Chat completions, openai-responses untuk Responses, dan anthropic-messages untuk Messages. Hanya ada di model chat dan kenari/auto, dan semuanya mencantumkan ketiganya. Dihilangkan di entri gambar, suara, video, musik, dan ?modality=. |
reasoning | boolean | Apakah model menghasilkan penalaran. Lihat Penalaran. |
reasoning_options | array | Tingkat yang diterima reasoning_effort untuk model ini, seperti low, medium, dan high. |
reasoning_toggle | boolean | Ada di entri daftar bawaan, tetapi tidak di entri ?modality=. true bila penalaran bisa dinyalakan atau dimatikan per request, false bila tidak bisa. |
tool_call | boolean | Apakah model mendukung function calling. Lihat Function calling. |
pricing | object | Kartu harga. Lihat Harga di dalam daftar. |
pricing_lines | array | Satu entri per hal yang ditagih. Dihilangkan bila model tidak punya, seperti pada sebagian besar model :free. |
sunset_at | integer atau null | Waktu, dalam detik sejak Unix epoch, saat kenari berencana berhenti melayani model. null bila tidak ada rencana. |
modality | string | Hanya ada di hasil ?modality=. Jenis modelnya. |
Sebagian besar field media di bawah dihilangkan bila tidak ada nilai yang tercatat untuk model. Field yang tidak ada berarti belum ada yang tercatat, bukan berarti model tanpa batas.
| Field | Berlaku untuk | Keterangan |
|---|---|---|
voices | text to speech | Nama suara, huruf besar dan kecil dibedakan. Yang pertama menjadi bawaan bila request tidak punya voice. |
formats | text to speech | Format audio yang bisa dikembalikan model, seperti mp3. Yang pertama menjadi bawaan bila request tidak punya response_format. |
max_input_chars | text to speech | input terpanjang yang diterima model, dalam karakter. Yang lebih panjang mengembalikan 400. |
max_prompt_chars | musik | prompt terpanjang, dalam karakter. |
max_lyrics_chars | musik | lyrics terpanjang, dalam karakter. |
max_duration_secs | musik | Lagu terpanjang yang dibuat model, dalam detik. Hanya informasi, karena kamu tidak bisa meminta panjang tertentu. |
video_durations | video | Panjang klip yang bisa diminta, dalam detik. |
video_resolutions | video | Resolusi yang bisa diminta, seperti 720p. |
video_extensions | video | true kalau model bisa memperpanjang klip lewat POST /v1/videos/extensions. Hanya ada saat bernilai true, dan tidak dicantumkan kalau tidak. |
Cara memakai nilai-nilai ini ada di Text to speech, Musik, dan Video.
Harga di dalam daftar
Section titled “Harga di dalam daftar”pricing dan pricing_lines memberi harga dalam micro-Rupiah, yaitu Rupiah dikali 1.000.000. Bagi dengan 1.000.000 untuk mendapat Rupiah. Pada contoh di atas, input bernilai 4200000000 berarti Rp 4.200 per 1 juta token.
Field pricing | Keterangan |
|---|---|
input, output, cache_read, cache_write | Harga per 1 juta token. null bila model tidak punya harga itu. |
free | true bila model tidak dikenai biaya. Harga yang masih tampil di model gratis adalah harga resmi versi berbayarnya, dan tidak ditagih. |
currency, unit | Selalu IDR dan micro_idr_per_1m_tokens. |
Model yang tidak ditagih per token, seperti model gambar, suara, dan video, menampilkan 0 pada input dan output. Baca harganya dari pricing_lines. Setiap baris punya field berikut:
| Field | Keterangan |
|---|---|
endpoint | API yang menggunakan harga tersebut, seperti chat atau audio_speech. |
billable | Yang ditagih: input, output, cache_read, cache_write, input_audio, output_audio, output_image, atau output_video. |
unit | token_1m untuk 1 juta token, 1k_chars untuk 1.000 karakter, second, image, atau song (musik). |
variant | Varian tarif, seperti resolusi video 720p. null bila tidak ada. |
micro_idr | Harga dalam micro-Rupiah untuk satu unit. |
Model yang dipensiunkan
Section titled “Model yang dipensiunkan”Model yang punya sunset_at tetap terdaftar dan dilayani sampai waktu itu. Setelah lewat, model keluar dari daftar dan request ke id-nya ditolak. Bila kamu menyimpan salinan daftar, periksa field ini supaya kamu bisa pindah ke model lain sebelum tanggalnya.
Filter menurut modality
Section titled “Filter menurut modality”Model embedding, rerank, moderation, dan System One hanya muncul bila kamu memintanya dengan ?modality=.
modality | Isi daftar | Contoh id | Dipakai oleh |
|---|---|---|---|
embedding | Model embedding | bge-m3, text-embedding-3-small | Embeddings |
rerank | Model rerank | bge-reranker-base | Rerank |
moderation | Model moderasi | id dari panggilan ini | Moderasi |
systemone | Model System One | jev-1-13-free | System One |
curl "https://kenari.id/v1/models?modality=embedding"Entrinya memuat id, object, owned_by, name, sunset_at, modality, dan pricing, serta endpoints, context_length, dan pricing_lines bila tercatat. Entri ini tidak punya reasoning_toggle, dan pricing hanya berisi input, free, currency, dan unit, dengan pricing.input memuat harga per 1 juta token. Nilai modality selain keempat itu, termasuk nilai kosong, mengembalikan 400.
{ "error": { "message": "unknown modality 'foo'. Accepted values: embedding, rerank, moderation, systemone.", "type": "bad_request", "param": null, "code": "bad_request" }}Versi gratis
Section titled “Versi gratis”Versi gratis sebuah model memakai id yang sama dengan akhiran :free, tampil dengan pricing.free bernilai true, dan tidak dikenai biaya. Lihat Model gratis.
Contoh
Section titled “Contoh”curl https://kenari.id/v1/modelsPython
Section titled “Python”import requests
models = requests.get("https://kenari.id/v1/models").json()["data"]chat_models = [m["id"] for m in models if "chat" in m.get("endpoints", [])]print(chat_models)JavaScript
Section titled “JavaScript”const response = await fetch("https://kenari.id/v1/models");const { data } = await response.json();const chatModels = data.filter((m) => (m.endpoints ?? []).includes("chat")).map((m) => m.id);console.log(chatModels);Daftar harga publik
Section titled “Daftar harga publik”GET /api/public/pricing adalah feed publik kedua, dibuat untuk halaman harga. Tidak butuh key dan mengembalikan {"items": [...], "usd_idr_rate": ..., "free_tier": {...}}.
- Setiap item punya
model,provider(vendor),free,subscriber_only,endpoints,pricing_lines,input_modalities,output_modalities,sunset_at, danupcoming_price, yaitu perubahan harga terjadwal berikutnya, ataunullbila tidak ada. - Harga per token bernama
price_in_micro_idr_per_1m,price_out_micro_idr_per_1m,price_cached_micro_idr_per_1m, danprice_cache_write_micro_idr_per_1m, sedangkanimage_micro_idr_per_imageadalah harga satu gambar.market_in_micro_idr_per_1mdanmarket_out_micro_idr_per_1mmemuat harga pasar sebagai pembanding, hanya bila harga kenari lebih rendah. subscriber_onlybernilaitruebila hanya akun dengan langganan aktif yang bisa memanggil model. Lihat Langganan.- Isinya semua model yang dijual, termasuk versi
:freedan versi lama dalam satu keluarga. Model embedding, rerank, moderation, dan System One tidak ikut. usd_idr_rateadalah kurs yang dipakai, danfree_tiermenjelaskan apa yang didapat akun gratis. Untuk batas tier gratis, baca Model gratis.
Untuk mengetahui apa yang bisa kamu panggil dan berapa harganya, pakai GET /v1/models.
| Status | Kode | Kapan |
|---|---|---|
| 400 | bad_request | modality bukan embedding, rerank, moderation, atau systemone. |
Error lainnya ada di Error.
Lihat juga
Section titled “Lihat juga”Tabel di bawah dimuat langsung dari GET /v1/models, jadi menampilkan harga yang ditagih hari ini. Harga token dalam Rupiah per 1 juta token. Model gambar, suara, video, dan model lain yang tidak dihargai per token punya tabelnya sendiri di bawahnya, masing-masing dengan satuannya. Untuk cara penagihan sebuah request, lihat Cara penagihan.
Harga model live
Memuat harga...
Model khusus
Model ini punya satu harga dengan satuannya sendiri, jadi kolom token di atas tidak berlaku untuknya.