# Kode error API Klik Flow

Sumber: https://klikflow.id/docs/api/error

| Kode | HTTP | Jenis | Arti | Cara memperbaiki |
|---|---|---|---|---|
| `missing_key` | 401 | authentication_error | Kunci API belum dikirim | Kirim kunci di header `Authorization: Bearer kf_live_…` atau `kf_test_…`. |
| `key_invalid` | 401 | authentication_error | Kunci API tidak dikenal | Kunci salah ketik atau bukan Kunci API. Buat kunci di Pengaturan › API & Webhook. |
| `key_revoked` | 401 | authentication_error | Kunci API sudah dicabut | Kunci sudah dicabut atau masa tenggang setelah diganti sudah habis. Pakai kunci barunya. |
| `key_expired` | 401 | authentication_error | Kunci API kedaluwarsa | Masa berlaku kunci habis. Buat kunci baru. |
| `member_inactive` | 401 | authentication_error | Pembuat kunci bukan anggota lagi | Pembuat kunci tidak lagi anggota bisnis ini. Owner perlu membuat kunci baru. |
| `ip_not_allowed` | 403 | permission_error | IP server tidak ada di daftar kunci | Tambahkan IP server Anda di daftar IP kunci, atau kosongkan daftarnya. |
| `plan_no_api` | 403 | permission_error | Paket belum memuat API untuk kunci live | Kunci live butuh paket dengan fitur API. Kunci tes bisa dipakai di semua paket. |
| `tenant_blocked` | 403 | permission_error | Akses bisnis ditangguhkan | Akses bisnis ini sedang ditangguhkan. Hubungi dukungan Klik Flow. |
| `rate_limited` | 429 | rate_limit_error | Terlalu banyak permintaan per menit | Tunggu sesuai header `Retry-After` (detik), lalu kirim ulang. |
| `internal_error` | 500 | api_error | Gangguan di Klik Flow | Ada gangguan di Klik Flow. Kirim ulang dengan Idempotency-Key yang sama; sebutkan `request_id` bila terulang. |
| `scope_missing` | 403 | permission_error | Kunci tidak punya izin ini | Kunci ini tidak punya izin untuk aksi ini. Buat kunci dengan izin yang tertulis di referensi. |
| `permission_missing` | 403 | permission_error | Role pembuat kunci tidak punya izin ini | Role pembuat kunci tidak punya izin ini. Owner bisa menambahkannya di Pengaturan › Role & hak akses. |
| `invalid_json` | 400 | invalid_request_error | Body bukan JSON yang sah | Kirim body JSON dengan header `Content-Type: application/json`. |
| `idempotency_key_invalid` | 400 | invalid_request_error | Idempotency-Key tidak sah | Idempotency-Key 1–255 karakter tanpa spasi, misalnya UUID. |
| `idempotency_conflict` | 409 | conflict_error | Idempotency-Key dipakai untuk isi lain | Idempotency-Key ini sudah dipakai untuk permintaan lain. Pakai kunci baru untuk permintaan baru. |
| `request_in_progress` | 409 | conflict_error | Permintaan yang sama masih diproses | Permintaan dengan Idempotency-Key yang sama masih diproses. Coba lagi beberapa detik lagi. |
| `invalid_request` | 422 | invalid_request_error | Field tidak sah | Field di `param` tidak sah. Periksa tipe dan nilainya di referensi. |
| `invalid_phone` | 422 | invalid_request_error | Nomor tujuan tidak sah | Pakai 8–15 digit dengan kode negara, misalnya `6281234567890`. |
| `message_too_long` | 422 | invalid_request_error | Pesan terlalu panjang | Maksimal 4.000 karakter untuk teks dan keterangan. |
| `media_too_large` | 413 | invalid_request_error | File terlalu besar | Perkecil file sesuai batas jenisnya. |
| `test_number_required` | 403 | permission_error | Kunci tes hanya ke nomor uji | Kunci tes hanya mengirim ke nomor uji. Tambahkan nomornya di Pengaturan › API & Webhook › Nomor uji. |
| `channel_not_allowed` | 403 | permission_error | Saluran tidak boleh dipakai kunci ini | Kunci ini dibatasi ke saluran lain, atau role pembuatnya tidak boleh memakai saluran ini. |
| `channel_unavailable` | 409 | channel_error | Tidak ada nomor WhatsApp yang bisa dipakai | Tidak ada nomor WhatsApp tersambung yang boleh dipakai kunci ini. Sambungkan di Channel atau isi `from`. |
| `channel_paused` | 403 | permission_error | Saluran sedang dijeda | Saluran dijeda karena melebihi kuota paket. Owner bisa membuka jedanya di Channel. |
| `window_closed` | 409 | channel_error | Di luar jendela 24 jam | Di luar 24 jam sejak pelanggan terakhir menulis. Kirim `type: template`. |
| `contact_blocked` | 422 | channel_error | Kontak diblokir atau berhenti berlangganan | Kontak diblokir atau berhenti berlangganan, jadi tidak dikirimi pesan. |
| `daily_limit` | 429 | rate_limit_error | Batas pesan harian tercapai | Batas pesan harian tercapai. Tunggu sesuai `Retry-After`, atau naikkan paket. |
| `send_failed` | 502 | channel_error | Pesan gagal terkirim | Pesan dibuat tapi gagal terkirim. Lihat `message`, lalu kirim ulang dengan Idempotency-Key yang sama. |
| `not_found` | 404 | not_found_error | Tidak ditemukan | Id tidak ada atau di luar cakupan pembuat kunci. |
| `template_not_found` | 404 | not_found_error | Template tidak ditemukan atau belum disetujui | Template tidak ada atau belum disetujui. Periksa nama dan bahasanya di `GET /api/v2/templates`. |
| `template_values` | 422 | invalid_request_error | Variabel template belum lengkap | Isi semua variabel template yang disebut di `message`. |
| `template_not_supported` | 422 | invalid_request_error | Jenis template belum didukung | Jenis template ini belum bisa dikirim lewat API. |
| `otp_code_invalid` | 422 | invalid_request_error | Kode OTP tidak sah | Isi `otp.code` 1–15 huruf, angka, atau tanda `-`. |
| `new_chat_limit` | 429 | rate_limit_error | Batas chat ke nomor baru tercapai | Batas chat ke nomor baru hari ini tercapai untuk kunci ini. |
| `channel_refused` | 502 | channel_error | WhatsApp menolak pesan | WhatsApp menolak pesan. Alasannya ada di `message`. |
| `cursor_invalid` | 400 | invalid_request_error | Cursor tidak sah | Pakai `next_cursor` dari jawaban sebelumnya apa adanya. |
| `live_key_required` | 403 | permission_error | Butuh kunci live | Mengelola webhook butuh kunci live, karena webhook menerima event sungguhan. Kunci tes tetap bisa membaca dan mengirim ke nomor uji. |
| `webhook_limit` | 422 | invalid_request_error | Batas jumlah webhook tercapai | Maksimal 5 webhook per bisnis. Hapus webhook yang tidak dipakai lebih dulu. |
| `console_test_only` | 403 | permission_error | Konsol Coba hanya untuk kunci tes | Konsol Coba di docs hanya menerima kunci tes (kf_test_…). Panggil API dengan kunci live dari server Anda. |
