not_found adalah kode error HTTP 404 pada Se-Hari API. Tidak ada data dengan id tersebut yang bisa Anda akses. Perhatikan kalimat itu: data milik akun lain juga dijawab 404, bukan 403. Menjawab 403 akan mengonfirmasi bahwa id tersebut ada — dan itu informasi yang tidak berhak diketahui pemanggil.
#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.
{
"error": {
"code": "not_found",
"message": "Contoh pesan untuk not_found.",
"docs_url": "https://se-hari.com/docs/error/not-found",
"request_id": "req_a1b2c3d4e5f6",
"details": {}
}
}#Kapan ini muncul
Kebijakan menjawab 404 untuk data milik orang lain punya konsekuensi praktis yang perlu diingat saat menelusuri masalah: kode ini tidak membuktikan datanya tidak ada. Kalau sebuah id jelas-jelas terlihat di dashboard Anda tapi API menjawab 404, pertanyaan pertamanya bukan tentang id itu, melainkan tentang key mana yang sedang dipakai.
#Kenapa ini terjadi
- Id salah ketik atau tertukar antar entitas (id notulen dipakai sebagai id rekaman)
- Data sudah dihapus
- Key yang dipakai milik akun yang berbeda dari pemilik data
- Id yang bukan UUID sama sekali — ini juga dijawab 404, bukan 400
#Cara memperbaikinya
Ambil id dari respons endpoint daftar alih-alih menyalinnya dari tempat lain. Kalau Anda yakin id-nya benar, jalankan GET /me dengan key yang sama dan pastikan akunnya memang pemilik data itu.
#Yang memicu error
# id notulen dipakai di endpoint rekaman
curl "https://se-hari.com/api/v1/recordings/<id-notulen>/download-url" \
-H "Authorization: Bearer $SEHARI_API_KEY"#Yang seharusnya
# Ambil id rekaman dari daftar rekaman
curl "https://se-hari.com/api/v1/recordings?limit=5" \
-H "Authorization: Bearer $SEHARI_API_KEY" | jq '.data[].id'#Aman diulang?
Percuma tanpa perubahan. Id-nya harus diperbaiki, atau key-nya diganti dengan milik akun yang benar. Kalau data baru saja dibuat lewat request lain yang belum selesai, tunggu selesainya alih-alih mengulang membabi buta.
#Jangan tertukar dengan
Bedanya dengan gone (410) penting: 404 berarti tidak ada atau bukan milik Anda, sedangkan 410 berarti pernah ada dan kini benar-benar hilang secara permanen. Untuk rekaman yang lewat masa simpan, kami menjawab 410 supaya Anda tahu tidak ada gunanya mencoba lagi. Id yang bentuknya bukan UUID juga dijawab 404, bukan 400 — pemeriksaan kepemilikan tidak membedakan keduanya.
#Mencegahnya terulang
Ambil id dari respons API, bukan dari tempat lain. Menyalin id dari URL dashboard, dari pesan Slack, atau dari catatan manual adalah sumber kesalahan yang berulang, terutama karena beberapa entitas Se-Hari punya id yang bentuknya identik. Dalam workflow, alirkan id dari langkah sebelumnya alih-alih menyimpannya di konfigurasi — id yang di-hardcode akan tetap menunjuk data yang sama lama setelah data itu tidak relevan.
#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.
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 === 'not_found') {
// Ambil id dari respons endpoint daftar alih-alih menyalinnya dari tempat lain. Kalau Anda…
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
- Semua kode error — daftar lengkap
- Autentikasi — scope dan siklus hidup API key
- Referensi API — error apa saja yang mungkin muncul di tiap endpoint