Skip to main content
Esc
Browse docs

Templates API

Use the Slovio Templates API to list and create WhatsApp and RCS templates, send a template to one number, check its delivery status and start an RCS broadcast.

4 min readUpdated

The Templates API lets you list and create WhatsApp and RCS templates, send an approved template to one person, and check whether it was delivered. All endpoints live under https://api.slovio.ai/v1/public/api and need the x-access-key and Authorization: Bearer headers from API overview.

List WhatsApp templates

http
GET https://api.slovio.ai/v1/public/api/templates/?channelId={channelId}
json
{
  "statusCode": "10000",
  "status": 200,
  "message": "success",
  "data": [
    {
      "_id": "66f4c0a1b2c3d40012ef9901",
      "channelId": "66e1a7b9c0d1e20012ab3344",
      "name": "order_shipped",
      "language": "en",
      "category": "UTILITY",
      "status": "APPROVED",
      "components": [
        { "type": "BODY", "text": "Hi {{1}}, your order {{2}} has shipped." }
      ]
    }
  ]
}

Errors: Channel not found, or Channel is not a WhatsApp channel if the channel ID belongs to another channel type.

Create a WhatsApp template

http
POST https://api.slovio.ai/v1/public/api/templates/?channelId={channelId}
json
{
  "name": "order_shipped",
  "language": "en",
  "category": "UTILITY",
  "components": [
    {
      "type": "BODY",
      "text": "Hi {{1}}, your order {{2}} has shipped.",
      "example": { "body_text": [["Rohit", "4471"]] }
    }
  ]
}

category is MARKETING, UTILITY or AUTHENTICATION. components follow Meta's template format. The template is submitted to Meta for approval. The response returns the saved template in data. If Meta refuses it, you get Template not created.

Send a WhatsApp template

http
POST https://api.slovio.ai/v1/public/api/send-template?channelId={channelId}
json
{
  "contactNumber": "+919876543210",
  "templateName": "order_shipped",
  "templateId": "TEMPLATE_ID",
  "templateLanguage": "en",
  "parameters": ["Rohit", "4471"]
}
  • Give either contactNumber or contactId, not both.
  • Media headers: mediaType (image, video or document) with mediaLink.
  • Also supported: couponCode, cards (carousel) and websiteButtonData.

Response:

json
{
  "statusCode": "10000",
  "status": 200,
  "message": "success",
  "data": {
    "wamId": "wamid.HBgMOTE5ODc2NTQzMjEwFQIAERgSQjM2RkY0QjA3RUE3QTk0QUIzAA==",
    "recipientNumber": "919876543210"
  }
}

Interactive messages (inside the 24-hour window)

Set "sendType": "interactive" with interactiveType (button, list, location_request_message or cta_url), plus bodyText and buttons, sections (up to 10 rows in total) or ctaText and ctaUrl.

Check delivery status

http
GET https://api.slovio.ai/v1/public/api/message/{wamId}/status
json
{
  "statusCode": "10000",
  "status": 200,
  "message": "success",
  "data": {
    "wamId": "wamid.HBgMOTE5ODc2NTQzMjEwFQIAERgSQjM2RkY0QjA3RUE3QTk0QUIzAA==",
    "status": "delivered",
    "sentAt": "2026-10-03T06:20:01.000Z",
    "deliveredAt": "2026-10-03T06:20:03.000Z",
    "readAt": null,
    "failedAt": null,
    "error": null
  }
}

Times are null until that step happens. An unknown wamId, or one from another account, returns 400 Message not found. To get updates without polling, use webhooks.

RCS templates

http
GET  https://api.slovio.ai/v1/public/api/rcs/templates/
POST https://api.slovio.ai/v1/public/api/rcs/templates/

Send an RCS template

http
POST https://api.slovio.ai/v1/public/api/rcs/send-template?channelId={channelId}
json
{ "contactNumber": "+919876543210", "templateId": "RCS_TEMPLATE_ID", "parameters": ["Rohit"] }

Response:

json
{
  "statusCode": "10000",
  "status": 200,
  "message": "success",
  "data": { "messageId": "MESSAGE_ID" }
}

Errors include Channel is not a RCS channel, Insufficient balance, Template does not exist and Contact not found.

RCS broadcast

http
POST https://api.slovio.ai/v1/public/api/rcs/broadcast

Required: channelId, name (up to 50 characters), templateId, importedContacts, isScheduled, optInMessage, and either contacts or bulkUploadJobId. Optional: scheduleTime and fallback.

The response is HTTP 200 with "message": "Broadcast created successfully" and the broadcast in data. Your plan must include broadcasts as well as API access. This endpoint is limited to 30 requests per minute.

Limits

WhatsApp and RCS template sends share the per-key message limit: 600 per minute by default. See Errors and rate limits.

Common questions

Where do I get the channelId?

It is the ID of your connected WhatsApp or RCS channel in Slovio. Use the ID of the channel you want to send from.

Can I send a template that is still pending approval?

No. WhatsApp templates must be approved by Meta before they can start a conversation. Check status in the template list.

How do I know if my template message was delivered?

Call GET /v1/public/api/message/{wamId}/status with the wamId from the send response, or subscribe to whatsapp webhook events.

Why did my RCS send return "Insufficient balance"?

Every send is charged from your wallet. Recharge it and send again.

Can I send an RCS broadcast faster than 30 per minute?

No. The 30 per minute limit applies to creating broadcasts, not to messages. One broadcast can reach your whole list.

Stuck, or is something here out of date? Tell the team — we reply within a working day.