se-hari.com se-hari.com

insufficient_credits — Kredit tidak cukup

HTTP 403. Operasi ini membutuhkan lebih banyak kredit daripada yang tersisa di akun Anda. Tidak ada yang dikerjakan dan tidak ada yang terpotong —…

2 menit baca Diperbarui 15 Agustus 2026 Lihat sebagai Markdown

insufficient_credits adalah kode error HTTP 403 pada Se-Hari API. Operasi ini membutuhkan lebih banyak kredit daripada yang tersisa di akun Anda. Tidak ada yang dikerjakan dan tidak ada yang terpotong — pemeriksaan terjadi sebelum eksekusi.

#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": "insufficient_credits",
    "message": "Contoh pesan untuk insufficient_credits.",
    "docs_url": "https://se-hari.com/docs/error/insufficient-credits",
    "request_id": "req_a1b2c3d4e5f6",
    "details": {
      "required": 4,
      "available": 2
    }
  }
}

#Kapan ini muncul

Ini bukan kegagalan teknis, melainkan kondisi bisnis yang normal — dan workflow yang memperlakukannya sebagai bug akan berperilaku buruk. Retry otomatis tidak akan pernah menyelesaikannya, karena tidak ada yang berubah di antara dua percobaan kecuali kuota rate limit Anda yang menipis. Yang dibutuhkan adalah manusia yang melakukan top up.

#Kenapa ini terjadi

  • Saldo memang habis
  • Kredit hangus sebelum sempat dipakai; kredit punya masa berlaku dan dipotong dari yang paling cepat hangus lebih dulu
  • Proses lain memakai kredit di antara estimasi dan eksekusi Anda
  • Meeting dengan rekaman membutuhkan lebih banyak kredit daripada tanpa rekaman

#Cara memperbaikinya

Panggil POST /credits/estimate sebelum operasi yang memakai kredit, dan tangani kode ini sebagai kondisi normal dalam workflow — bukan sebagai kegagalan yang perlu di-retry. Retry tanpa top up akan menghasilkan error yang sama persis, berulang kali, sampai kuota rate limit Anda habis juga.

#Yang memicu error

bash
# Langsung membuat tanpa memeriksa
curl -X POST "https://se-hari.com/api/v1/meetings" \
  -H "Authorization: Bearer $SEHARI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"title":"Rapat","date":"2026-09-01","start_time":"09:00","pricing_tier_id":"..."}'

#Yang seharusnya

bash
# Periksa dulu
curl -X POST "https://se-hari.com/api/v1/credits/estimate" \
  -H "Authorization: Bearer $SEHARI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"type":"meeting","pricing_tier_id":"...","with_recording":true}'
# {"credits_required":4,"credits_available":2,"sufficient":false,...}

#Aman diulang?

Percuma sampai ada top up. Ini kondisi bisnis, bukan gangguan teknis. Retry otomatis akan gagal identik setiap kali sambil menghabiskan kuota rate limit Anda. Hentikan antrean dan beri tahu manusia.

#Jangan tertukar dengan

Jangan tertukar dengan credit_cap_exceeded. Kode ini berarti saldo akun Anda memang habis; kode itu berarti saldo masih ada tapi API key yang dipakai sudah menyentuh batas harian yang Anda pasang sendiri. Yang pertama butuh top up, yang kedua cukup menaikkan angka di dashboard.

#Mencegahnya terulang

Rancang workflow Anda supaya berhenti dengan anggun. Pola yang baik: periksa saldo di awal pekerjaan besar, kirim notifikasi ketika saldo di bawah ambang tertentu, dan pada saat menemui kode ini, hentikan sisa antrean alih-alih mencoba satu per satu sampai semuanya gagal. Event webhook credit.low ada justru untuk memberi tahu Anda sebelum titik ini tercapai.

#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 === 'insufficient_credits') {
		// Panggil `POST /credits/estimate` sebelum operasi yang memakai kredit, dan tangani kode…
		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 insufficient_credits di Se-Hari API?

HTTP 403. Operasi ini membutuhkan lebih banyak kredit daripada yang tersisa di akun Anda. Tidak ada yang dikerjakan dan tidak ada yang terpotong — pemeriksaan terjadi sebelum eksekusi.

Apakah aman mengulang request yang gagal dengan insufficient_credits?

Percuma sampai ada top up. Ini kondisi bisnis, bukan gangguan teknis. Retry otomatis akan gagal identik setiap kali sambil menghabiskan kuota rate limit Anda. Hentikan antrean dan beri tahu manusia.

Bagaimana cara memperbaiki insufficient_credits?

Panggil `POST /credits/estimate` sebelum operasi yang memakai kredit, dan tangani kode ini sebagai kondisi normal dalam workflow — bukan sebagai kegagalan yang perlu di-retry. Retry tanpa top up akan menghasilkan error yang sama persis, berulang kali, sampai kuota rate limit Anda habis juga.

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