Skip to content

Errors

HTTP status codes, top-level reasons, and per-channel failures on POST /v1/send.

3 min read

Every Kirisan API response is JSON. Successful calls include "status": true. Failures include "status": false and a human-readable "reason" when the whole request failed before channel delivery.

HTTP status codes

StatusWhen it happens
200Request parsed — check "status" in the body (send may return 200 with "status": false and channel details)
400Invalid JSON, missing fields, or validation error
401Missing or invalid Bearer token
403Bearer token valid but a channel key does not belong to your account
503Service temporarily unavailable

POST /v1/send usually returns HTTP 200 even when delivery fails — read "status" and "channels".

Top-level reason

These appear on the response root when the request never reached delivery, or when every channel failed in a blocking way:

Reason (examples)Meaning
missing api token / invalid api tokenFix Authorization: Bearer … — see Authentication
invalid JSONBody is not valid JSON
No channels configuredkeys is empty — include at least one channel token
content requiredNo content object with at least one channel
no sendable channels: content requires a matching keyYou set content.whatsapp but omitted keys.whatsapp, or similar
Invalid schedule: the time is in the past.context.timing.schedule must be a future Unix timestamp
whatsapp key does not belong to this accountChannel token belongs to another user (403)

Validation errors from message bodies are also returned as top-level "reason" before send — for example email inline messages are not supported on /v1/send or waba message type must be text, interactive, image, video, or document.

Per-channel errors (channels)

On POST /v1/send, each channel you attempted has its own object under "channels":

{
  "status": false,
  "channels": {
    "whatsapp": {
      "status": false,
      "reason": "template is not approved for sending",
      "processing_time": "142ms"
    },
    "email": {
      "status": true,
      "processing_time": "891ms"
    }
  }
}
FieldMeaning
statustrue if that channel delivered (or was scheduled)
reasonPresent when status is false — quota, missing target, template inactive, provider error, etc.
detailExtra provider payload on some channels (WhatsApp, Telegram, WABA)
processing_timeHow long the provider call took
scheduledtrue when the message was queued for context.timing.schedule
fallbacktrue when this channel sent as part of a fallback tier

When one channel fails and another succeeds (for example WhatsApp fails, email fallback succeeds), top-level "status" may still be true if any channel delivered.

Template errors on send

When content.<channel>.template points to a dashboard template that cannot send:

ReasonMeaning
template is not approved for sendingTemplate is still pending review or was rejected
template is inactiveTemplate exists but is turned off in the dashboard
WhatsApp template not foundWrong ID, wrong channel, or template belongs to another account

Create templates under Channel → channel → Templates and confirm they are Approved and Active before referencing their ID on send.

Last updated: July 2, 2026
Was this page helpful?