SendKuy API
API Reference

Send up to 500 independent messages in one call

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.

Try it — POST /messages/batch

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:write
AuthorizationBearer <token>

Authorization: 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:write

Header Parameters

Idempotency-Key?string

Any unique string, one per logical request. Retrying with the same key returns the first answer instead of doing the work twice, and answers with Idempotent-Replay: true.

Lengthlength <= 255

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Up to 500 independent messages in one call. Only the outer shape is validated up front; each element is checked as it runs, so one bad number does not throw away the 499 that were fine.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST https://app.sendkuy.com/api/v1/messages/batch \  -H "Authorization: Bearer sk_live_YOUR_API_KEY" \  -H "Content-Type: application/json" \  -d '{  "messages": [    {      "channel": "whatsapp",      "to": "+6281234567890",      "body": "Your order is on its way."    },    {      "channel": "email",      "to": "andi@example.com",      "subject": "Your order",      "body": "<p>Your order is on its way.</p>"    }  ]}'
{  "data": [    {      "index": 0,      "id": "msg_9cBe3A1H-SLhW5fONWZ32wb-IIio5Ts3",      "error": {        "type": "authentication_error",        "code": "missing_api_key",        "message": "string",        "param": "string"      }    }  ]}