Skip to content
Splashify Pro
Docs

Send RCS Template Message

Available for accounts in India.

Send an approved RCS template to a customer. RCS templates are created and approved inside the Splashify Pro dashboard — each has a unique template_id (a UUID) that you reference here.

Note: RCS must be approved on your account and the template must be in the approved state.

Approval means the carrier has finished reviewing your RCS registration. While that review is still open your account shows as Processing, and this endpoint returns 403 with code: "rcs_kyc_not_approved". That is deliberate: an integration that starts working before the sender is approved keeps working right up until it does not, and the failure lands in production rather than in testing.

You can still send test messages from the dashboard during the review, and those are free. See RCS Templates.

Endpoint

POST

https://api.splashifypro.com/api/v1/public/rcs/send

This is the one RCS endpoint, and it sends approved templates only. There is no separate template URL to call, and no free-form option: a request without a template_id is rejected with 400 and code: "template_required".

Templates are how RCS traffic is meant to be sent. The carrier reviews and approves each one, which is what lets it be delivered as branded, verified messaging rather than being filtered.

Headers

Request body

json
{
  "to": "+919876543210",
  "template_id": "bbd644a9-502a-11f1-a6c3-7e338e7c5434",
  "variables": ["Rahul", "A-1042"]
}

Template variables

RCS templates use numbered variables: {{1}}, {{2}}, up to {{10}}. Older templates written with {#var1#} work the same way: {#var1#} is {{1}}. Nothing is filled in for you, so send a value for every variable the template uses.

variables can be sent in either of two forms:

A template with this message text:

text
Hi {{1}}, your order {{2}} has shipped.

sent with "variables": ["Rahul", "A-1042"] is delivered as:

text
Hi Rahul, your order A-1042 has shipped.

Variables are filled in the message text, card titles and descriptions, button labels, and at the end of a button link. A value in a link is encoded for a web address: A 1/2 becomes A%201%2F2 in the path, and after a ? it is encoded as a query value.

If a value is missing or makes a field too long, the request is refused with 400 and nothing is sent or charged:

json
{
  "success": false,
  "code": "missing_variables",
  "missing": ["{{2}}"],
  "message": "This template needs a value for {{2}}. Send them in 'variables'."
}

The older POST /api/v1/public/rcs/send-template endpoint is deprecated. It fills variables the same way but takes a list only.

Example

bash
curl -X POST https://api.splashifypro.com/api/v1/public/rcs/send \
  -H "Authorization: Basic YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "to": "+919876543210",
    "template_id": "bbd644a9-502a-11f1-a6c3-7e338e7c5434",
    "variables": {"1": "Rahul", "2": "A-1042"}
  }'

Successful response — 200 OK

json
{
  "success": true,
  "rcs_message_id": "a1b2c3d4-...",
  "message_id": "d58aeff7-a81c-47a7-9b67-f381e13f6c4e",
  "conversation_id": "ee64970d-0539-4eb0-859d-2147859a604d"
}

Opt-outs

Anyone you message can reply STOP to stop hearing from you. When they do, we record it, reply to confirm it, and refuse every later send to that number with 403 and code: "recipient_opted_out". Broadcasts skip them too, and you are not charged for a message that is not sent.

Treat that 403 as final rather than retrying it. The person can start receiving messages again themselves by replying START, and only they can.

You choose the words that count as STOP and START, and the replies we send back, in Settings → Opt management. Keep STOP in the list: the carrier requires it, and an agent that ignores it can lose its approval.

Errors

json
{
  "success": false,
  "message": "Template not found"
}