unsupported_media_type adalah kode error HTTP 415 pada Se-Hari API. Endpoint ini mengharapkan Content-Type tertentu dan menerima yang lain. Untuk seluruh endpoint JSON, nilainya harus application/json.
#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": "unsupported_media_type",
"message": "Contoh pesan untuk unsupported_media_type.",
"docs_url": "https://se-hari.com/docs/error/unsupported-media-type",
"request_id": "req_a1b2c3d4e5f6",
"details": {}
}
}#Kapan ini muncul
Kode ini menandai ketidakcocokan antara apa yang Anda katakan sedang dikirim dan apa yang endpoint bisa terima. Perhatikan bahwa kami mempercayai header Anda: mengirim JSON dengan Content-Type: text/plain akan ditolak meski isinya sempurna, karena header itulah yang menentukan cara body dibaca.
#Kenapa ini terjadi
- Header
Content-Typetidak dikirim sama sekali pada request dengan body - HTTP client default ke
application/x-www-form-urlencoded - Berkas audio dengan format yang tidak didukung pada alur unggah
#Cara memperbaikinya
Tambahkan -H "Content-Type: application/json" pada curl, atau setel json: true di klien Anda. Untuk unggah rekaman, pakai Content-Type yang kami sebutkan di respons presign — bukan tebakan Anda sendiri.
#Yang memicu error
curl -X POST "https://se-hari.com/api/v1/notes" \
-H "Authorization: Bearer $SEHARI_API_KEY" \
-d '{"recording_id":"c0ffee00-1111-2222-3333-444455556666"}'#Yang seharusnya
curl -X POST "https://se-hari.com/api/v1/notes" \
-H "Authorization: Bearer $SEHARI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"recording_id":"c0ffee00-1111-2222-3333-444455556666"}'#Aman diulang?
Percuma tanpa perubahan. Perbaiki header Content-Type lalu kirim ulang. Aman diulang tanpa risiko duplikasi.
#Jangan tertukar dengan
Bedakan dari malformed_json: kode itu berarti Content-Type Anda sudah benar tapi isinya bukan JSON yang sah. Kode ini berarti kami bahkan tidak mencoba mem-parse-nya, karena Anda menyatakan mengirim sesuatu yang tidak kami terima di endpoint tersebut.
#Mencegahnya terulang
Setel Content-Type secara eksplisit pada setiap request yang punya body. Banyak HTTP client memakai application/x-www-form-urlencoded sebagai bawaan, dan bawaan itu diam-diam benar untuk kebanyakan situs web sehingga jarang diperhatikan. Pada alur unggah rekaman, pakai nilai content_type yang kami kembalikan di respons presign — nilai itu bagian dari tanda tangan URL, jadi menggantinya akan membuat unggahan ditolak penyimpanan.
#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 === 'unsupported_media_type') {
// Tambahkan `-H "Content-Type: application/json"` pada curl, atau setel `json: true` di…
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