Docs menuErrors
API documentationBahasa Indonesia

Error codes and how to fix them.

Every failed answer has an HTTP status and a code. API v2 always writes { "error": { "type", "code", "message", "param", "doc_url", "request_id" } }; doc_url points to that code on this page. The message text is in Indonesian, like the app.

General rules

  • 4xx: fix the request first. Sending it again unchanged gives the same result, except 429 and 409 request_in_progress.
  • 429: wait for the Retry-After header (seconds), then retry.
  • 5xx or a dropped connection: retry with growing pauses and the same Idempotency-Key, so nothing is sent twice.
  • Quote the request_id (also in the Request-Id header) when you contact Klik Flow support.

Codes

type groups the codes: authentication_error, permission_error, invalid_request_error, not_found_error, conflict_error, rate_limit_error, channel_error and api_error.

CodeHTTPMeaning and fix
missing_keyauthentication_error401API key not sent. Send the key in the header Authorization: Bearer kf_live_… or kf_test_….
key_invalidauthentication_error401Unknown API key. The key has a typo or is not an API key. Create a key in Settings › API & Webhook (Pengaturan › API & Webhook).
key_revokedauthentication_error401API key revoked. The key was revoked, or the grace period after it was replaced has ended. Use the new key.
key_expiredauthentication_error401API key expired. The key's lifetime has ended. Create a new key.
member_inactiveauthentication_error401Key creator is no longer a member. The key's creator is no longer a member of this business. The owner needs to create a new key.
ip_not_allowedpermission_error403Server IP not in the key's list. Add your server's IP to the key's IP list, or clear the list.
plan_no_apipermission_error403Plan does not include the API for live keys. Live keys need a plan with the API feature. Test keys work on every plan.
tenant_blockedpermission_error403Business access suspended. This business's access is suspended. Contact Klik Flow support.
rate_limitedrate_limit_error429Too many requests per minute. Wait for the time in the Retry-After header (seconds), then retry.
internal_errorapi_error500Problem at Klik Flow. Something went wrong at Klik Flow. Retry with the same Idempotency-Key; mention the request_id if it happens again.
scope_missingpermission_error403Key lacks this permission. This key does not have the permission for this action. Create a key with the permission listed in the reference.
permission_missingpermission_error403Key creator's role lacks this permission. The key creator's role does not have this permission. The owner can add it in Settings › Roles & access (Pengaturan › Role & hak akses).
invalid_jsoninvalid_request_error400Body is not valid JSON. Send a JSON body with the header Content-Type: application/json.
idempotency_key_invalidinvalid_request_error400Invalid Idempotency-Key. An Idempotency-Key is 1–255 characters without spaces, for example a UUID.
idempotency_conflictconflict_error409Idempotency-Key used for different content. This Idempotency-Key was already used for another request. Use a new key for a new request.
request_in_progressconflict_error409The same request is still being processed. A request with the same Idempotency-Key is still being processed. Try again in a few seconds.
invalid_requestinvalid_request_error422Invalid field. The field in param is invalid. Check its type and value in the reference.
invalid_phoneinvalid_request_error422Invalid destination number. Use 8–15 digits with the country code, for example 6281234567890.
message_too_longinvalid_request_error422Message too long. At most 4,000 characters for text and captions.
media_too_largeinvalid_request_error413File too large. Make the file smaller, within the limit for its type.
test_number_requiredpermission_error403Test keys send only to test numbers. Test keys send only to test numbers. Add the number in Settings › API & Webhook › Test numbers (Pengaturan › API & Webhook › Nomor uji).
channel_not_allowedpermission_error403Channel not allowed for this key. This key is limited to other channels, or its creator's role may not use this channel.
channel_unavailablechannel_error409No usable WhatsApp number. No connected WhatsApp number may be used by this key. Connect one in Channel, or fill in from.
channel_pausedpermission_error403Channel paused. The channel is paused because it exceeds the plan's quota. The owner can unpause it in Channel.
window_closedchannel_error409Outside the 24-hour window. More than 24 hours have passed since the customer last wrote. Send type: template.
contact_blockedchannel_error422Contact blocked or unsubscribed. The contact is blocked or has unsubscribed, so it is not sent messages.
daily_limitrate_limit_error429Daily message limit reached. The daily message limit was reached. Wait for the time in Retry-After, or upgrade the plan.
send_failedchannel_error502Message failed to send. The message was created but failed to send. See message, then retry with the same Idempotency-Key.
not_foundnot_found_error404Not found. The id does not exist or is outside what the key's creator can see.
template_not_foundnot_found_error404Template not found or not approved. The template does not exist or is not approved yet. Check its name and language with GET /api/v2/templates.
template_valuesinvalid_request_error422Template variables incomplete. Fill in every template variable named in message.
template_not_supportedinvalid_request_error422Template type not supported yet. This template type cannot be sent through the API yet.
otp_code_invalidinvalid_request_error422Invalid OTP code. Set otp.code to 1–15 letters, digits, or - characters.
new_chat_limitrate_limit_error429Limit of chats to new numbers reached. This key has reached today's limit of chats to new numbers.
channel_refusedchannel_error502WhatsApp refused the message. WhatsApp refused the message. The reason is in message.
cursor_invalidinvalid_request_error400Invalid cursor. Use next_cursor from the previous response as it is.
live_key_requiredpermission_error403Live key required. Managing webhooks needs a live key, because webhooks receive real events. Test keys can still read and send to test numbers.
webhook_limitinvalid_request_error422Webhook limit reached. At most 5 webhooks per business. Delete a webhook you no longer use first.
console_test_onlypermission_error403The Try it console takes test keys only. The Try it console (Coba) in the docs accepts only test keys (kf_test_…). Call the API with a live key from your server.

Send WhatsApp from your system with the Klik Flow API.

Mulai dengan paket Free. Ajak tim setelah ruang kerja siap.