Lewati ke konten
kenari.

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

ParameterTipeWajibKeterangan
modalitystringTidakTampilkan 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 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.

FieldTipeKeterangan
idstringId yang dikirim sebagai model.
objectstringSelalu model.
owned_bystringVendor pembuat model, misalnya anthropic.
namestringNama tampilan. Setiap entri punya. Bila model tidak punya nama tampilan sendiri, name sama dengan id.
context_lengthintegerJendela konteks dalam token.
max_output_tokensintegerOutput 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=.
modalitiesobjectArray 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.
endpointsarrayAPI yang dilayani model: chat, images, videos, audio_speech, audio_transcription, music, embeddings, rerank, moderations, atau systemone.
protocolsarrayFormat 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=.
reasoningbooleanApakah model menghasilkan penalaran. Lihat Penalaran.
reasoning_optionsarrayTingkat yang diterima reasoning_effort untuk model ini, seperti low, medium, dan high.
reasoning_togglebooleanAda di entri daftar bawaan, tetapi tidak di entri ?modality=. true bila penalaran bisa dinyalakan atau dimatikan per request, false bila tidak bisa.
tool_callbooleanApakah model mendukung function calling. Lihat Function calling.
pricingobjectKartu harga. Lihat Harga di dalam daftar.
pricing_linesarraySatu entri per hal yang ditagih. Dihilangkan bila model tidak punya, seperti pada sebagian besar model :free.
sunset_atinteger atau nullWaktu, dalam detik sejak Unix epoch, saat kenari berencana berhenti melayani model. null bila tidak ada rencana.
modalitystringHanya 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.

FieldBerlaku untukKeterangan
voicestext to speechNama suara, huruf besar dan kecil dibedakan. Yang pertama menjadi bawaan bila request tidak punya voice.
formatstext to speechFormat audio yang bisa dikembalikan model, seperti mp3. Yang pertama menjadi bawaan bila request tidak punya response_format.
max_input_charstext to speechinput terpanjang yang diterima model, dalam karakter. Yang lebih panjang mengembalikan 400.
max_prompt_charsmusikprompt terpanjang, dalam karakter.
max_lyrics_charsmusiklyrics terpanjang, dalam karakter.
max_duration_secsmusikLagu terpanjang yang dibuat model, dalam detik. Hanya informasi, karena kamu tidak bisa meminta panjang tertentu.
video_durationsvideoPanjang klip yang bisa diminta, dalam detik.
video_resolutionsvideoResolusi yang bisa diminta, seperti 720p.
video_extensionsvideotrue 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.

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 pricingKeterangan
input, output, cache_read, cache_writeHarga per 1 juta token. null bila model tidak punya harga itu.
freetrue bila model tidak dikenai biaya. Harga yang masih tampil di model gratis adalah harga resmi versi berbayarnya, dan tidak ditagih.
currency, unitSelalu 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:

FieldKeterangan
endpointAPI yang menggunakan harga tersebut, seperti chat atau audio_speech.
billableYang ditagih: input, output, cache_read, cache_write, input_audio, output_audio, output_image, atau output_video.
unittoken_1m untuk 1 juta token, 1k_chars untuk 1.000 karakter, second, image, atau song (musik).
variantVarian tarif, seperti resolusi video 720p. null bila tidak ada.
micro_idrHarga dalam micro-Rupiah untuk satu unit.

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.

Model embedding, rerank, moderation, dan System One hanya muncul bila kamu memintanya dengan ?modality=.

modalityIsi daftarContoh idDipakai oleh
embeddingModel embeddingbge-m3, text-embedding-3-smallEmbeddings
rerankModel rerankbge-reranker-baseRerank
moderationModel moderasiid dari panggilan iniModerasi
systemoneModel System Onejev-1-13-freeSystem One
Terminal window
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 sebuah model memakai id yang sama dengan akhiran :free, tampil dengan pricing.free bernilai true, dan tidak dikenai biaya. Lihat Model gratis.

Terminal window
curl https://kenari.id/v1/models
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)
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);

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, dan upcoming_price, yaitu perubahan harga terjadwal berikutnya, atau null bila tidak ada.
  • Harga per token bernama price_in_micro_idr_per_1m, price_out_micro_idr_per_1m, price_cached_micro_idr_per_1m, dan price_cache_write_micro_idr_per_1m, sedangkan image_micro_idr_per_image adalah harga satu gambar. market_in_micro_idr_per_1m dan market_out_micro_idr_per_1m memuat harga pasar sebagai pembanding, hanya bila harga kenari lebih rendah.
  • subscriber_only bernilai true bila hanya akun dengan langganan aktif yang bisa memanggil model. Lihat Langganan.
  • Isinya semua model yang dijual, termasuk versi :free dan versi lama dalam satu keluarga. Model embedding, rerank, moderation, dan System One tidak ikut.
  • usd_idr_rate adalah kurs yang dipakai, dan free_tier menjelaskan 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.

StatusKodeKapan
400bad_requestmodality bukan embedding, rerank, moderation, atau systemone.

Error lainnya ada di Error.

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...