SendKuy API
API Reference

Create a template

Try it — POST /templates

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 templates: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: templates: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.

channel is required on POST and prohibited on PATCH. subject is accepted on email only, and refused by name elsewhere rather than stored where nothing will ever read it.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST https://app.sendkuy.com/api/v1/templates \  -H "Authorization: Bearer sk_live_YOUR_API_KEY" \  -H "Content-Type: application/json" \  -d '{  "channel": "whatsapp",  "name": "Order shipped",  "body": "Your order is on its way."}'
{  "data": {    "object": "template",    "id": "tpl_9cBe3A1H-SLhW5fONWZ32wb-IIio5Ts3",    "channel": "email",    "name": "string",    "subject": "string",    "body": "string",    "status": "active",    "read_only": true,    "created_at": "2019-08-24T14:15:22Z",    "updated_at": "2019-08-24T14:15:22Z"  }}