se-hari.com se-hari.com

idempotency_key_reused — Idempotency-Key dipakai untuk isi yang berbeda

HTTP 409. Anda mengirim `Idempotency-Key` yang sudah pernah dipakai, tapi dengan body yang berbeda. Kami menolaknya alih-alih menebak mana yang Anda…

2 menit baca Diperbarui 15 Agustus 2026 Lihat sebagai Markdown

idempotency_key_reused adalah kode error HTTP 409 pada Se-Hari API. Anda mengirim Idempotency-Key yang sudah pernah dipakai, tapi dengan body yang berbeda. Kami menolaknya alih-alih menebak mana yang Anda maksud.

#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": "idempotency_key_reused",
    "message": "Contoh pesan untuk idempotency_key_reused.",
    "docs_url": "https://se-hari.com/docs/error/idempotency-key-reused",
    "request_id": "req_a1b2c3d4e5f6",
    "details": {}
  }
}

#Kapan ini muncul

Kode ini melindungi Anda dari kesalahan yang tidak akan pernah Anda sadari tanpanya. Kalau kami menerima key yang sama untuk body berbeda dan mengembalikan hasil yang pertama, workflow Anda akan menganggap item kedua sudah dikerjakan padahal tidak — dan hasilnya adalah pekerjaan yang hilang tanpa satu pun error.

#Kenapa ini terjadi

  • Key idempotensi tetap dipakai untuk request yang isinya berubah-ubah
  • Key dibangun dari waktu dengan presisi kasar sehingga dua request berbeda mendapat key yang sama
  • Loop memakai satu key untuk semua item

#Cara memperbaikinya

Bangun key dari identitas pekerjaannya, bukan dari waktu. Pola yang aman: {id-workflow}-{id-eksekusi}-{indeks-item}. Kalau Anda memang ingin mengerjakan sesuatu yang baru, pakai key yang baru.

#Yang memicu error

bash
# Key tetap untuk body yang berbeda-beda
for id in rec1 rec2 rec3; do
  curl -X POST "https://se-hari.com/api/v1/notes" \
    -H "Idempotency-Key: batch-harian" \
    -H "Authorization: Bearer $SEHARI_API_KEY" \
    -H "Content-Type: application/json" \
    -d "{\"recording_id\": \"$id\"}"
done

#Yang seharusnya

bash
# Satu key per item
for id in rec1 rec2 rec3; do
  curl -X POST "https://se-hari.com/api/v1/notes" \
    -H "Idempotency-Key: batch-harian-$id" \
    -H "Authorization: Bearer $SEHARI_API_KEY" \
    -H "Content-Type: application/json" \
    -d "{\"recording_id\": \"$id\"}"
done

#Aman diulang?

Percuma tanpa perubahan. Pakai key idempotensi baru untuk pekerjaan yang memang baru, atau kirim body yang sama persis kalau maksud Anda memang mengulang yang lama.

#Jangan tertukar dengan

Kalau permintaan Anda diulang dengan key DAN body yang sama persis, kami tidak menolaknya — kami mengembalikan hasil yang pertama, dengan status yang sama seperti aslinya. Kode ini hanya muncul kalau body-nya berbeda. Konflik data yang tidak melibatkan header ini muncul sebagai conflict biasa.

#Mencegahnya terulang

Bangun key dari sesuatu yang berkorespondensi satu-satu dengan pekerjaannya. Di n8n, {{$workflow.id}}-{{$execution.id}}-{{$itemIndex}} memenuhi syarat itu dan tetap stabil ketika n8n mengulang eksekusi yang gagal. Yang harus dihindari adalah key berbasis waktu dengan presisi kasar (misalnya per menit) dan key konstan per workflow, karena keduanya bisa bertabrakan untuk pekerjaan yang berbeda.

#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 === 'idempotency_key_reused') {
		// Bangun key dari identitas pekerjaannya, bukan dari waktu. Pola yang aman…
		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 idempotency_key_reused di Se-Hari API?

HTTP 409. Anda mengirim `Idempotency-Key` yang sudah pernah dipakai, tapi dengan body yang berbeda. Kami menolaknya alih-alih menebak mana yang Anda maksud.

Apakah aman mengulang request yang gagal dengan idempotency_key_reused?

Percuma tanpa perubahan. Pakai key idempotensi baru untuk pekerjaan yang memang baru, atau kirim body yang sama persis kalau maksud Anda memang mengulang yang lama.

Bagaimana cara memperbaiki idempotency_key_reused?

Bangun key dari identitas pekerjaannya, bukan dari waktu. Pola yang aman: `{id-workflow}-{id-eksekusi}-{indeks-item}`. Kalau Anda memang ingin mengerjakan sesuatu yang baru, pakai key yang baru.

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