Send status
The send_status event notifies your server when a POST /v1/send with context.behaviour.mode: "async" finishes — success or failure. It is an account-wide webhook (channel API in the dashboard): not tied to a device, and it covers any channel mix in that one request (email only, Telegram only, WABA + email, and so on).
Set up in the dashboard
- Open Webhooks → Webhook → Add webhook.
- Choose channel API.
- Check the Send Status event.
- Save your HTTPS URL, then run a test on Webhooks → Test until status is Active.
This webhook is optional. mode: async works without it — Kirisan still records the result in your account logs. Use send_status only if your own server needs a completion notification. See the Send API.
When Kirisan POSTs
After an async send finishes (channel cascade completes), Kirisan sends one POST to each of your active send_status endpoints. The X-Kirisan-Event header is send_status. The X-Kirisan-Device header may be empty because this event is not device-bound.
Example payload
{
"event": "send_status",
"id": 98765,
"request_id": 12345,
"status": "sent",
"channels": {
"email": {
"status": true,
"id": 98766,
"processing_time": "891ms"
},
"whatsapp": {
"status": false,
"id": 98765,
"reason": "Device disconnected",
"processing_time": "89ms"
}
},
"timestamp": 1735689600,
"production": true
} | Field | Meaning |
|---|---|
event | Always send_status |
id | Primary send.id (integer — first sent channel, else first row) |
request_id | send_log.id returned when the send was queued |
status | sent if at least one channel succeeded; failed if all failed or the request was blocked |
channels | Per-channel result map — same shape as a sync POST /v1/send response (includes per-channel id = send.id) |
timestamp | Unix seconds |
production | false on Webhooks → Test; true for live traffic |
Match request_id to your queued response to correlate the result with the original request.
Related
- Webhooks overview — channels and delivery contract
- Verification — signing secret and headers
- Send API —
behaviour.modeand thequeuedresponse