Lewati ke konten
kenari.

Penagihan & Rupiah

kenari menagih pemakaian dalam Rupiah dari saldo prabayar. Ada dua cara bayar, tergantung siapa pemilik key yang melayani request: pool key kenari, atau key milikmu sendiri.

  1. Metered (default): request jalan di pool key provider milik kenari. Token dihitung, lalu dipotong dari saldo Rupiah kamu.
  2. BYOK: request dilayani key milikmu sendiri. Gratis, dan pemakaian tetap tercatat dengan biaya nol. Lihat BYOK.

Top up via QRIS mulai Rp 1.000, tanpa kartu kredit luar negeri. Saldo masuk begitu pembayaran lunas.

Request berbayar tanpa saldo yang cukup mengembalikan HTTP 402. Pesannya menyertakan saldo yang tersedia dan batas atas reservasi request tersebut (estimasi input + max_tokens dikali tarif output, skenario terburuk), sehingga langsung terlihat apakah solusinya menurunkan max_tokens atau top up:

{
"error": {
"code": "insufficient_balance",
"message": "insufficient balance: available Rp 19,589; this request reserves up to Rp 21,500 worst-case (input estimate + max_tokens x output rate). Lower max_tokens or top up at https://kenari.id/pay"
}
}

Pengisian saldo dan pembayaran langganan berlangsung di halaman pembayaran khusus. Setiap tagihan memiliki tautan sendiri, sehingga halaman dapat dibuka kembali selama tagihan masih berlaku dan status pembayaran diperbarui otomatis.

Selain QRIS, saldo dan langganan dapat dibayar lewat kripto (BTC, ETH, USDT, dan lainnya). Tagihan diterbitkan dalam dolar AS memakai kurs platform pada saat tagihan dibuat, lalu saldo Rupiah atau paket langganan aktif sesuai nominal yang dipilih. Minimum pembayaran kripto setara USD 1. Biaya pemrosesan jaringan ditanggung pembayar saat membayar tagihan. Pembayaran diproses oleh OxaPay. Saldo masuk otomatis setelah jaringan mengonfirmasi pembayaran (umumnya beberapa menit).

Secara internal, saldo dan harga disimpan dalam micro-Rupiah, yaitu Rupiah dikali 1.000.000. Dashboard dan halaman harga menampilkan Rupiah biasa, jadi kamu tidak perlu menghitung konversi ini sendiri.

Harga ditetapkan dalam micro-Rupiah per 1 juta token, dengan empat dimensi:

DimensiKeterangan
inputtoken prompt yang dikirim
outputtoken yang dihasilkan model
cache-readtoken yang dibaca dari cache
cache-writetoken yang ditulis ke cache

Biaya dihitung per dimensi:

biaya = token * rate / 1.000.000

Cache-write ditagih dengan tarifnya sendiri kalau disetel. Kalau tidak disetel, cache-write memakai tarif input.

Lihat harga aktif di Model & harga, atau ambil langsung dari GET /v1/models.

Kadang model tidak menghasilkan apa-apa: filter konten menahan jawaban, upstream membalas kosong, atau koneksi putus sebelum satu token keluar. Kalau itu terjadi, kamu tidak ditagih.

Aturannya sederhana. Kalau sebuah request selesai tanpa satu pun token output, biayanya Rp 0, walau prompt-nya sudah diproses. Ini berlaku di semua cara bayar: saldo metered, kuota langganan, dan jatah gratis paket. Request tetap muncul di riwayat pemakaian dengan biaya nol, jadi kamu tahu request itu terjadi tanpa saldo yang berkurang.

Singkatnya, kamu bayar untuk jawaban yang sampai, bukan untuk percobaan yang gagal.

Model dengan akhiran :free, misalnya step-3-7-flash:free, ditagih Rp 0. Sebagai gantinya ada batas jumlah request per akun per menit. Detail batas dan daftar model gratis ada di Model & harga.

Selain batas per menit, model :free juga punya jatah request per hari, bertingkat tiga menurut status akun:

TingkatBerlaku untuk
Soloakun baru, belum pernah top up hingga ambang tertentu
Payerakun yang sudah top up saldo hingga ambang tersebut
Langgananakun dengan paket aktif. Sebagian paket punya kuota harian sendiri, beda dari nilai bawaan

Nilai kuota, RPM, dan ambang top up yang berlaku saat ini ada di halaman harga (juga lewat GET /api/public/pricing), karena operator dapat menyetel angkanya kapan saja. Halaman Langganan juga menampilkan nilai itu. Habis kuota harian mengembalikan HTTP 429 dengan header Retry-After dan kode alasan free_quota_daily.

Paket langganan memberi kuota jendela untuk model tertentu: 5 jam, mingguan, atau bulanan. Selama kuota jendela masih ada, request memakai kuota itu, bukan saldo.

Saat kuota jendela habis dan tidak ada PAYG yang aktif, request mengembalikan HTTP 429:

{
"error": {
"code": "plan_limit_reached",
"message": "plan limit reached"
}
}

Atur dan ganti paket di dashboard.

Penolakan itu berlaku untuk seluruh endpoint, bukan cuma chat. Paket biasanya mencakup model chat saja, sementara embeddings, gambar, audio, video, rerank, dan pembacaan dokumen selalu dibayar dari saldo. Begitu kuota paket habis dan opsi lanjut pakai saldo dimatikan, endpoint-endpoint itu ikut HTTP 429, bukan diam-diam memotong saldo. Selama kuota paket masih ada, semuanya jalan seperti biasa dan tetap dibayar dari saldo.

Lihat Error & status untuk rincian 402 insufficient_balance dan 429 plan_limit_reached.