Autentikasi
API key, header, dan permukaan mana yang memakainya.
Ringkasan
API pelanggan memakai satu API key berawalan sk-nusa-. Key yang sama berlaku untuk semua model yang aktif.
Ada satu aturan yang perlu kamu pegang: key ini hanya berlaku di path /v1/. Konsol punya cara masuknya sendiri, dan keduanya tidak bisa saling menggantikan.
Header
Kirim key sebagai bearer token. Header x-api-key juga diterima, untuk klien yang memang memakainya.
Authorization: Bearer sk-nusa-...
Content-Type: application/jsonContent-Type bukan bagian dari autentikasi, tapi request tanpa itu tidak bisa di-parse dan ditolak sebagai 400 invalid_request, bukan sebagai kesalahan key, yang sering menyesatkan saat menelusuri masalah.
Batas ukuran body adalah 30 MiB. Body yang melewatinya ditolak sebagai 413 request_too_large — bukan 400, supaya jelas bahwa yang salah adalah ukurannya, bukan bentuknya. Percakapan panjang dengan lampiran gambar paling cepat mendekati batas ini.
Key mana untuk apa
Dua permukaan, dua cara masuk, dan tidak ada jalur dari yang satu ke yang lain.
| Permukaan | Cara masuk | Contoh path |
|---|---|---|
| API pelanggan | API key sk-nusa-… | /v1/chat/completions · /v1/messages |
| Konsol (browser) | Cookie sesi | - |
Key hilang atau salah
Request tanpa key, atau dengan key yang tidak dikenali, dijawab dengan satu bentuk yang sama:
{
"error": {
"message": "Invalid API key.",
"type": "authentication_error",
"code": "invalid_api_key"
}
}Pesannya sengaja sama untuk semua kegagalan: key tidak ada, sudah dicabut, atau salah ketik. Membedakannya akan memberi tahu pemanggil key mana yang benar-benar ada, jadi tidak dilakukan.
Perhatikan bahwa GET /v1/models juga butuh key. Seluruh prefix /v1/ dijaga oleh satu pemeriksaan, jadi tidak ada rute di dalamnya yang bisa dipanggil tanpa key.
Mengelola key
Kelola key dari halaman API key di konsol.
- Dicabut, tidak dihapus. Request dan baris catatan transaksi merujuk key, jadi key yang dicabut tetap tersimpan sebagai jejak audit, tapi langsung berhenti mengautentikasi. Karena itu tidak ada tombol hapus.
- Bisa diganti nama. Nama hanya untukmu; tidak ikut ke autentikasi.
- Bisa dibatasi nilainya. Setiap key punya batas belanja sendiri, terpisah dari saldo dompet. Lihat Batas pengeluaran key.
Membuat key dilakukan di konsol, bukan lewat API key itu sendiri. Halaman API key yang menyimpannya, dan secret-nya ditampilkan di sana saat dibuat.
Troubleshooting
| Gejala | Penyebab | Solusi |
|---|---|---|
401 | Header tidak terkirim, atau nilainya tidak diawali Bearer . | cetak header yang benar-benar terkirim; banyak klien membuang header kosong tanpa memberi tahu |
401 | Key sudah dicabut. | buat key baru di halaman API key; key lama tidak bisa dihidupkan lagi |
401 di rute konsol | API key dikirim ke rute yang butuh cookie sesi. | masuk lewat halaman login; key tidak berlaku di sana |
400 | Content-Type tidak diset application/json, sehingga body-nya tidak bisa di-parse. | set header itu pada setiap request yang membawa body |