Semua tulisan

Coba dulu pakai model :free

Tim kenari7 menit baca
Coba dulu pakai model :free

Kamu baru bikin key kn- dan belum tahu key itu hidup atau nggak. Yang dibutuhkan sekarang cuma satu jawaban balik dari server, dan itu bisa didapat dengan saldo Rp 0.

Coba dulu pakai akhiran :free, versi gratis dari id yang sama, ditagih Rp 0, dengan batas pemakaian per akun yang angkanya diatur operator.

Tulisan ini buat kamu yang baru mulai, bukan panduan setup Claude Code atau n8n. Begitu id-nya kamu pegang, arahkan alatnya lewat Arahkan editor kamu ke kenari atau Arahkan n8n ke kenari, dan kalau key provider-mu sudah ada, langsung ke BYOK lewat kenari.

Apa arti :free

Satu model bisa punya dua id sekaligus: yang tanpa akhiran itu versi berbayar dan langsung memotong saldo, sedangkan yang berakhiran :free adalah versi gratisnya, ditagih Rp 0.

Contoh pasangan yang ada di katalog saat dicek:

step-3-7-flash        → PAYG, potong saldo
step-3-7-flash:free   → Rp 0, ada batas

Keduanya muncul di GET /v1/models, dan yang kedua ditandai lewat field pricing.free yang bernilai true.

Cuma jalur ini bersifat best-effort, dan docs kami terus terang soal itu: kapasitasnya terbatas, jadi kecepatan dan availability-nya nggak dijamin setara dengan model berbayar, dan :free bukan pilihan yang tepat di belakang SLA produksi.

Selain id per model, tiap akun dapat rute read-only bernama kenari-free yang menunjuk ke model gratis, nggak berbayar, dan terbatas per akun. Rute itu berfungsi sebagai fallback dan nggak bisa diedit atau dihapus, jadi kamu tinggal kirim kenari-free sebagai nilai model dan kenari yang memilih id gratisnya.

Batas yang bisa diverifikasi

Dua hal sengaja nggak kami kunci di tulisan ini: jumlah model gratisnya, dan angka RPM sebagai janji tetap. Katalognya bergerak terus, dan kuota bisa diubah operator kapan saja.

Yang docs katakan, dan bisa dicek:

  • :free ditagih Rp 0.
  • Ada batas request per menit, per akun, berlaku untuk semua model :free.
  • Ada jatah harian dengan tiga tingkat: Solo (akun baru, belum menembus ambang top-up), Payer (sudah top up melewati ambang), Subscription (punya paket aktif; sebagian paket membawa kuota hariannya sendiri).
  • Nilai kuota, RPM, dan ambang top-up ada di halaman harga dan GET /api/public/pricing, karena operator bisa mengubahnya kapan saja.
  • Habis kuota harian: HTTP 429, header Retry-After, alasan free_quota_daily. Habis RPM: 429 free_quota_rpm.
  • Reset kuota harian yang docs sebut: 00:00 UTC.

Snapshot waktu tulisan ini dibuat (20 Agustus 2026, dari GET /api/public/pricing): rpm 5, daily 50, next.rpm 10, next.daily 1000, plan.rpm 15, plan.daily 0, threshold_idr 10000. Nilai daily: 0 pada plan berarti nggak ada plafon harian di paket Subscription default, sementara Solo saat ini daily 50. Angka segitu bisa berubah besok, jadi baca ulang endpoint-nya dan jangan kutip paragraf ini sebagai kontrak.

Satu lagi, jangan repot menghitung “berapa model gratis yang ada”, karena satu-satunya sumber yang valid adalah response GET /v1/models. Kami sendiri pernah kena: llms.txt menyebut angka yang beda dari katalog di hari yang sama.

Cara pilih id dari GET /v1/models

Katalog model

Endpoint ini publik, jadi nggak perlu key:

curl https://kenari.id/v1/models

Tiap entri membawa id, owned_by, endpoints, dan pricing.free, kadang plus tool_call dan reasoning. Tanpa query, GET /v1/models cuma mengembalikan model chat seperti OpenRouter, sementara embedding dan rerank pakai ?modality=.

Cara pilih yang aman:

  1. Cari id yang berakhiran :free, atau yang pricing.free === true.
  2. Cek endpoints memuat chat kalau klienmu chat completions.
  3. Kalau alatmu agent (n8n AI Agent, tool call): cek tool_call: true. step-3-7-flash:free memilikinya saat kami cek.
  4. Salin id-nya persis, karena salah ketik hasilnya model_not_found.

Angka waktu kami cek bikin urutan itu lebih masuk akal. Dari 70 entri di katalog, 61 model chat. Sembilan sisanya text-to-speech, gambar, musik, dan transkripsi, dan id-nya sendiri sama sekali nggak memberi sinyal soal itu, jadi langkah 2 yang menahan kamu mengirim model musik ke /chat/completions.

Langkah 3 lebih licik. Dari 61 model chat tadi, 59 bisa tool call dan cuma 2 yang nggak. Dua-duanya kebetulan justru model :free, jadi satu-satunya tempat langkah itu menggigit adalah jalur gratis, persis jalur yang dipakai orang buat mencoba pertama kali.

Waktu kami cek ada 16 id :free di katalog. Empat di antaranya: step-3-7-flash:free, glm-4-7-flash:free, mimo-v2-5:free, hy3:free. Itu contoh, bukan daftar tetap.

Buat prosedur yang harus jalan di akun Rp 0, ambil id :free yang masih ada di response GET /v1/models milikmu.

Filter kasar:

curl -s https://kenari.id/v1/models \
  | python3 -c "import sys,json; d=json.load(sys.stdin);
[print(m['id']) for m in d['data'] if m.get('id','').endswith(':free') or (m.get('pricing') or {}).get('free')]"

Jangan di-hardcode daftar itu di kodemu, cukup panggil lagi endpoint-nya tiap kali kamu butuh.

Beda :free, PAYG, BYOK

Tiga jalur ini beda di siapa yang menanggung tagihannya, dan itu satu-satunya yang berubah dari sisi klien.

:free PAYG BYOK
Key yang memanggil model pool kenari pool kenari key provider-mu
Potong saldo kenari tidak ya, per token tidak (token)
Yang kamu butuh kn- saja kn- + saldo kn- + key di /byok
Batas RPM + kuota harian (operator) saldo; 402 kalau kurang batas provider-mu
Kapan tes, coba, beban kecil model katalog, bayar Rupiah kuota provider sudah ada

Harga per token PAYG ada di GET /v1/models dalam micro-Rupiah per 1 juta token, dan kami sengaja nggak menulis angkanya di sini soalnya berubah terus. Cara mengisi Saldo dibahas di Bayar token pakai QRIS.

Di BYOK, token yang lewat key-mu sendiri ditagih Rp 0 di kenari tapi analytics-nya tetap tercatat, dan itu bukan jalur :free. Detailnya ada di BYOK lewat kenari.

Key kn- sama saja di ketiga jalur, dan yang berubah cuma isi field model, atau ada tidaknya key BYOK yang terpasang.

Satu curl, tanpa saldo

Masuk ke dashboard, buka API keys, klik Buat key, salin kn-..., lalu jalankan:

curl https://kenari.id/v1/chat/completions \
  -H "Authorization: Bearer kn-..." \
  -H "Content-Type: application/json" \
  -d '{
    "model": "step-3-7-flash:free",
    "messages": [{"role": "user", "content": "Halo!"}]
  }'

Kalau choices[0].message.content ada isinya, request-nya berhasil. Kalau yang balik kode error, biasanya ini:

  • 401: key salah atau kepotong waktu disalin. Body 401 itu teks polos, bukan JSON.
  • model_not_found: id-nya salah. Ambil lagi dari GET /v1/models.
  • 402 insufficient_balance: kamu ternyata nggak sedang di :free. Ganti id, atau isi saldo.
  • 429: baca Retry-After. Alasannya free_quota_rpm atau free_quota_daily.

Buat klien OpenAI-compat, base URL-nya https://kenari.id/v1, sementara Claude Code memakai protokol Anthropic dengan base URL https://kenari.id tanpa /v1. Kalau bentuknya salah, yang balik biasanya 405.