Read one message
Try it — GET /messages/{id}
Kept for this tab only — it disappears when you close it, and it is never sent anywhere except as the Authorization header on the call below.
Authorization
bearerAuth messages:readAuthorization: Bearer sk_live_.... Keys in the query string or the
request body are refused — a URL is logged by every proxy it passes,
and that is how customer keys leak.
A key carries scopes. A call outside them answers 403 with
insufficient_scope and names the scope it wanted.
In: header
Scope: messages:read
Path Parameters
The prefixed id of the object.
Response Body
application/json
application/json
application/json
application/json
application/json
curl -X GET https://app.sendkuy.com/api/v1/messages/msg_9cBe3A1H-SLhW5fONWZ32wb-IIio5Ts3 \ -H "Authorization: Bearer sk_live_YOUR_API_KEY"{ "data": { "object": "message", "id": "msg_9cBe3A1H-SLhW5fONWZ32wb-IIio5Ts3", "channel": "email", "status": "queued", "to": "+6281234567890", "body": "string", "subject": "string", "contact_id": "con_9cBe3A1H-SLhW5fONWZ32wb-IIio5Ts3", "campaign_id": "string", "scheduled_at": "2019-08-24T14:15:22Z", "sent_at": "2019-08-24T14:15:22Z", "error": "string", "created_at": "2019-08-24T14:15:22Z", "updated_at": "2019-08-24T14:15:22Z" }}Send up to 500 independent messages in one call POST
Not a repeat of POST /messages. Each element carries its own channel, recipient and body, and each one is answered on its own row: index, the id that was created, and error when that element failed. One mistyped number does not throw away the 499 that were fine. The rows carry ids, not message objects. Read a message back with GET /messages/{id} if you need its full state. Status is 200, not 201, because a batch that failed entirely still answers row by row.
Cancel a message that has not gone out yet POST
Only a message still queued or scheduled can be cancelled. One that has already left is refused with request_refused — there is nothing to call back.