401 dari Claude selalu disebabkan oleh salah satu dari lima hal: header yang salah, jenis kunci yang salah untuk endpoint, variabel lingkungan yang salah format, kunci yang dicabut, atau base URL yang salah untuk kunci tersebut. Jalankan diagnosis di bawah ini dan Anda akan menemukan penyebabnya dalam waktu kurang dari satu menit.
Error
{
"type": "error",
"error": {
"type": "authentication_error",
"message": "invalid x-api-key"
}
}Ringkasan penyebab dan perbaikan
| Penyebab | Perbaikan |
|---|---|
| Header salah untuk endpoint tersebut | API native Anthropic memerlukan x-api-key + anthropic-version; endpoint yang kompatibel dengan OpenAI memerlukan Authorization: Bearer. |
| Ketidakcocokan kunci/endpoint | Kunci sk-ant-… hanya berfungsi pada api.anthropic.com; kunci gateway (misalnya sk-kn-…) hanya berfungsi pada URL gateway-nya sendiri. |
| Spasi atau tanda kutip terselip dalam variabel lingkungan | Ekspor ulang tanpa tanda kutip/baris baru; cetak len(key) untuk mendeteksi \n di akhir akibat salin-tempel. |
| Kunci dicabut atau workspace dinonaktifkan | Buat kunci baru di konsol dan rotasikan kunci tersebut di pengelola secret Anda. |
Reproduksi dengan curl mentah (mengeluarkan SDK Anda dari persamaan)
Jika curl berfungsi tetapi aplikasi Anda tidak, bug berada pada pengelolaan environment, bukan pada kunci:
# Native Anthropic wire (works on api.anthropic.com and Kunavo /v1/messages)
curl -s https://api.kunavo.com/v1/messages \
-H "x-api-key: $KUNAVO_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{"model":"claude-sonnet-5","max_tokens":16,"messages":[{"role":"user","content":"ping"}]}'
# OpenAI-compatible wire (Bearer header instead)
curl -s https://api.kunavo.com/v1/chat/completions \
-H "Authorization: Bearer $KUNAVO_API_KEY" \
-H "content-type: application/json" \
-d '{"model":"claude-sonnet-5","max_tokens":16,"messages":[{"role":"user","content":"ping"}]}'
# Check the key isn't carrying whitespace
python3 -c "import os; k=os.environ['KUNAVO_API_KEY']; print(repr(k[:12]), len(k))"Cocokkan awalan kunci dengan base URL
sk-ant-… → api.anthropic.com. sk-kn-… → api.kunavo.com/v1. Mengirim kunci gateway ke Anthropic (atau sebaliknya) selalu menghasilkan 401 — pesan kesalahan tidak pernah menyebut "wrong host", sehingga penyebab ini mudah terlewat.
Rotasikan kunci jika pernah masuk ke repositori atau log
Jika kunci sudah benar tetapi tetap ditolak, anggap kunci telah dicabut (pemindai otomatis dengan cepat mencabut kunci yang bocor). Buat kunci baru dan simpan di pengelola secret, bukan di file .env yang dapat ter-commit.
Jika Anda melakukan panggilan melalui Kunavo
Kunci Kunavo (sk-kn-…) dapat diautentikasi melalui kedua header di setiap endpoint — Authorization: Bearer seperti yang dikirim SDK OpenAI, atau x-api-key seperti yang digunakan SDK Anthropic — jadi SDK mana pun yang Anda gunakan, hanya base URL yang berubah. Kunci dibuat dan dicabut secara instan di dashboard. Setelah kunci berhasil diautentikasi, tarif yang dikenakan tercantum di Daftar harga Claude API Anthropic.
Pertanyaan umum
Mengapa kunci saya berfungsi di curl tetapi tidak di aplikasi?
Hampir selalu karena pengelolaan environment: baris baru di akhir akibat salin-tempel, tanda kutip ikut tersimpan dalam nilainya, variabel tidak diekspor ke proses, atau environment yang berbeda dimuat di production. Cetak repr dan panjang kunci di dalam proses yang gagal.
Bisakah saya menggunakan kunci Anthropic Console pada gateway yang kompatibel dengan OpenAI?
Tidak. Setiap layanan hanya mengautentikasi kuncinya sendiri: kunci sk-ant adalah milik api.anthropic.com, sedangkan kunci gateway adalah milik gateway. Dapatkan kunci dari base URL yang sedang Anda panggil.
Detail semantik error lainnya tersedia di referensi error; mendapatkan kunci hanya perlu satu menit melalui pendaftaran dan panduan autentikasi.