Lewati ke konten
kenari.

Autentikasi & key

Setiap request ke API kenari diautentikasi dengan satu API key yang diawali kn-. Satu key berlaku untuk semua model, semua provider, dan kedua API (gaya OpenAI maupun gaya Anthropic).

API key dibuat di dashboard pada halaman API keys. Key diawali kn- dan hanya ditampilkan sekali saat dibuat. Setelah itu yang tersimpan hanya hash SHA-256-nya, jadi nilai aslinya tidak bisa dilihat lagi. Salin dan simpan di tempat aman begitu key pertama kali muncul.

Tidak perlu key terpisah per model atau per provider. Satu key kn- cukup untuk seluruh katalog dan untuk kedua format API.

Di terminal, jalankan npx @kenarihq/cli login untuk membuka halaman persetujuan di browser dan menyimpan key baru secara otomatis, tanpa perlu menyalin dan menempelkannya. Lihat CLI kenari.

Kirim key lewat header Authorization dengan skema Bearer:

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

API /v1 bisa dipanggil langsung dari JavaScript di browser. kenari mengirim header CORS pada rute /v1, jadi fetch dari halaman web berjalan tanpa proxy sendiri. Kamu juga bisa mengarahkan alat browser yang menerima URL API kustom ke https://kenari.id/v1.

const res = await fetch("https://kenari.id/v1/chat/completions", {
method: "POST",
headers: {
Authorization: "Bearer kn-...",
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "step-3-7-flash",
messages: [{ role: "user", content: "Halo" }],
}),
});
const data = await res.json();
console.log(data.choices[0].message.content);

Server menerima request preflight OPTIONS pada /v1 dengan header apa pun, jadi authorization, content-type, x-api-key, dan header Anthropic semuanya lolos. Kredensial (cookie) tidak diizinkan. /v1 hanya mengautentikasi lewat header Authorization: Bearer kn-... atau x-api-key.

API dashboard di bawah /api tetap tertutup untuk request lintas origin. Hanya /v1 yang terbuka untuk browser.

Endpoint berikut menolak request tanpa key yang valid:

EndpointButuh key
POST /v1/chat/completionsYa
POST /v1/messagesYa
POST /v1/images/generationsYa
GET /v1/account/quotaYa
GET /v1/modelsTidak

GET /v1/models bersifat publik dan bisa dipanggil tanpa key. Kalau dipanggil dengan admin key, response menyertakan field internal tambahan.

GET /v1/account/quota juga menolak key yang dibagikan dengan HTTP 403 (shared_key_not_allowed).

Lihat Chat completions, Messages, dan Images untuk detail tiap endpoint.

Kalau key tidak ada atau salah, server membalas HTTP 401. Body-nya berupa teks biasa, bukan JSON, karena request ditolak sebelum mencapai lapisan API. Untuk format error pada kesalahan lain, lihat Errors.

Di dashboard kamu bisa membuat, melihat, dan mencabut beberapa key sekaligus. Beri label tiap key agar mudah dibedakan, misalnya satu key per aplikasi, supaya satu key bisa dicabut tanpa mengganggu yang lain.

Pencabutan key langsung berlaku. Request berikutnya yang memakai key yang sudah dicabut akan ditolak dengan HTTP 401.

Status akun dicek pada setiap request. Akun yang ditangguhkan (suspended) membuat semua key miliknya berhenti bekerja seketika di semua tempat, terlepas dari apakah key itu sendiri masih aktif.

Key kn- di halaman ini milik kenari dan dipakai untuk autentikasi ke gateway. Ini berbeda dari BYOK, yaitu key provider milikmu sendiri (misalnya key OpenAI atau Anthropic) yang kamu tautkan agar kenari memakainya untuk request kamu. Lihat BYOK.