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
403withcode: "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
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
{
"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:
Hi {{1}}, your order {{2}} has shipped.sent with "variables": ["Rahul", "A-1042"] is delivered as:
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:
{
"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-templateendpoint is deprecated. It fills variables the same way but takes a list only.
Example
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
{
"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
{
"success": false,
"message": "Template not found"
}