se-hari.com se-hari.com

invalid_api_key — API key ditolak

HTTP 401. Header `Authorization` ada, tapi key di dalamnya tidak kami kenali, sudah dicabut, atau sudah lewat masa berlakunya. Ketiga kondisi itu sengaja…

2 menit baca Diperbarui 15 Agustus 2026 Lihat sebagai Markdown

invalid_api_key adalah kode error HTTP 401 pada Se-Hari API. Header Authorization ada, tapi key di dalamnya tidak kami kenali, sudah dicabut, atau sudah lewat masa berlakunya. Ketiga kondisi itu sengaja dijawab dengan pesan yang sama persis — membedakannya akan memberi tahu penyerang mana tebakan yang "hampir benar".

#Bentuk responsnya

Semua error Se-Hari memakai amplop yang sama. Yang perlu dicabang di kode Anda adalah code, bukan message — teks pesan bisa kami perbaiki sewaktu-waktu, sedangkan code adalah kontrak publik yang hanya berubah lewat versi API baru.

json
{
  "error": {
    "code": "invalid_api_key",
    "message": "Contoh pesan untuk invalid_api_key.",
    "docs_url": "https://se-hari.com/docs/error/invalid-api-key",
    "request_id": "req_a1b2c3d4e5f6",
    "details": {}
  }
}

#Kapan ini muncul

Kode ini tidak membedakan key yang salah, dicabut, dan kedaluwarsa — dan itu keputusan yang disengaja. Membedakannya akan memberi tahu penyerang bahwa sebuah tebakan sudah mendekati bentuk key yang sah, yang mempersempit ruang pencarian mereka secara signifikan. Konsekuensinya bagi Anda: pesan errornya tidak akan menunjukkan mana dari ketiganya yang terjadi, dan dashboard adalah tempat yang tepat untuk mencari tahu.

#Kenapa ini terjadi

  • Key tersalin sebagian. Panjangnya tetap: sh_live_ diikuti 43 karakter
  • Key sudah dicabut lewat dashboard
  • Key punya tanggal kedaluwarsa yang sudah lewat
  • Spasi atau baris baru ikut tersalin, biasanya dari copy-paste multi-baris
  • Key milik akun lain — misalnya key staging dipakai di produksi

#Cara memperbaikinya

Hitung panjang key Anda; kalau bukan 51 karakter, penyalinannya yang bermasalah. Kalau panjangnya benar, buka dashboard developer dan periksa statusnya — key yang dicabut tetap tampil di daftar dengan label "Dicabut" supaya Anda tahu ia pernah ada.

#Yang memicu error

bash
# Panjang tidak sesuai = key terpotong saat disalin
echo -n "$SEHARI_API_KEY" | wc -c
# 43   ← salah, harusnya 51

#Yang seharusnya

bash
echo -n "$SEHARI_API_KEY" | wc -c
# 51   ← benar

curl "https://se-hari.com/api/v1/me" -H "Authorization: Bearer $SEHARI_API_KEY"

#Aman diulang?

Percuma tanpa perubahan. Key yang ditolak akan ditolak lagi. Ganti key-nya dulu. Retry otomatis pada kode ini adalah pemborosan murni dan sering menjadi penyebab akun menyentuh 429 pada saat yang paling tidak tepat.

#Jangan tertukar dengan

Kode ini berarti kami tidak bisa memastikan siapa Anda. insufficient_scope berarti sebaliknya: kami tahu persis siapa Anda, tapi Anda tidak berhak melakukan operasi itu. Urutannya menentukan — pemeriksaan scope hanya berjalan setelah key berhasil dikenali, jadi 403 justru membuktikan key Anda sah.

#Mencegahnya terulang

Beri setiap integrasi API key sendiri. Dengan begitu, key yang dicabut hanya mematikan satu integrasi, dan Anda bisa langsung tahu integrasi mana yang bermasalah dari nama key-nya di log aktivitas. Key bersama yang dipakai lima sistem berarti setiap pencabutan adalah insiden, dan setiap error 401 butuh penyelidikan untuk tahu siapa yang terdampak.

#Menangani ini di kode

Cabangkan pada error.code, dan bedakan kegagalan yang layak diulang dari yang tidak. Mengulang kegagalan yang tidak akan pernah berhasil hanya menghabiskan kuota rate limit — dan menyembunyikan kegagalan yang sebenarnya butuh perhatian Anda.

javascript
const res = await fetch('https://se-hari.com/api/v1/me', {
	headers: { Authorization: `Bearer ${process.env.SEHARI_API_KEY}` }
});

if (!res.ok) {
	const { error } = await res.json();

	if (error.code === 'invalid_api_key') {
		// Hitung panjang key Anda; kalau bukan 51 karakter, penyalinannya yang bermasalah. Kalau…
		console.error(error.message, error.details);
	}

	// request_id adalah satu-satunya cara kami menemukan request ini di log.
	console.error(`request_id: ${error.request_id}`);
}

#Selanjutnya

Pertanyaan umum

Apa arti error invalid_api_key di Se-Hari API?

HTTP 401. Header `Authorization` ada, tapi key di dalamnya tidak kami kenali, sudah dicabut, atau sudah lewat masa berlakunya. Ketiga kondisi itu sengaja dijawab dengan pesan yang sama persis — membedakannya akan memberi tahu penyerang mana tebakan yang "hampir benar".

Apakah aman mengulang request yang gagal dengan invalid_api_key?

Percuma tanpa perubahan. Key yang ditolak akan ditolak lagi. Ganti key-nya dulu. Retry otomatis pada kode ini adalah pemborosan murni dan sering menjadi penyebab akun menyentuh 429 pada saat yang paling tidak tepat.

Bagaimana cara memperbaiki invalid_api_key?

Hitung panjang key Anda; kalau bukan 51 karakter, penyalinannya yang bermasalah. Kalau panjangnya benar, buka [dashboard developer](/dashboard/developer) dan periksa statusnya — key yang dicabut tetap tampil di daftar dengan label "Dicabut" supaya Anda tahu ia pernah ada.

Siap mencoba?

Buat API key gratis di dashboard — tidak ada biaya berlangganan, kredit terpakai hanya saat Anda benar-benar memproses rekaman atau membuat meeting.

Buat API Key