BigRadarDocs
TemplatesSend text template
API Reference
POST/api/public/v1/messages

Send text template

An approved template with no media header — body placeholders only.

The simplest template send. Supply the template name, the language it was approved in, and one value per {{n}} placeholder in its body. If the template was approved with a text header that itself contains a placeholder, add headerParams too. For an image, video or document header, see Send media template.

Body parameters

FieldTypeRequiredDescription
tostringRequiredRecipient number in international format, digits only — 919876543210, not +91 98765 43210.
typestringRequiredMust be template.
template.namestringRequiredExact approved template name, from Settings → WhatsApp templates.
template.languagestringRequiredThe locale the template was approved in, e.g. en, en_US, hi. Must match exactly — WhatsApp looks up a template by name and language, so the wrong code fails even when the name is right.
template.bodyParamsstring[]optionalValues for the body's {{1}}, {{2}}... placeholders, in order.
template.headerParamsstring[]optionalValues for {{1}} in a TEXT header. Only needed when the header actually has a placeholder — a static text header takes nothing.
template.buttonParamsobject[]optionalValues for buttons that carry one — see Buttons below.

Example request

A template approved as Hi {{1}}, your order {{2}} is confirmed.

cURL — body placeholders
bash
curl -X POST 'https://api.bigradar.io/api/public/v1/messages' \ -H 'Authorization: Bearer YOUR_API_KEY' \ -H 'Content-Type: application/json' \ -d '{ "to": "919876543210", "type": "template", "template": { "name": "order_confirmation", "language": "en", "bodyParams": ["Mohit", "#4521"] } }'

Text header

A text header with its own {{1}} takes a separate array — headerParams — because header and body placeholders are numbered independently. Both restart at {{1}}.

cURL — text header
bash
curl -X POST 'https://api.bigradar.io/api/public/v1/messages' \ -H 'Authorization: Bearer YOUR_API_KEY' \ -H 'Content-Type: application/json' \ -d '{ "to": "919876543210", "type": "template", "template": { "name": "appointment_reminder", "language": "en", "headerParams": ["Tuesday"], "bodyParams": ["Mohit", "4:30 PM"] } }'

Buttons

index counts every button in the approved template from 0, including the static ones you send nothing for. A dynamic URL button takes only the segment that replaces {{1}}, never the whole link.

FieldTypeRequiredDescription
URL (dynamic)textRequiredApproved as https://shop.com/order/{{1}}. Send only the part that replaces {{1}} — not the whole link.
COPY_CODEcouponCodeRequiredThe coupon code the customer copies, e.g. SAVE20.
QUICK_REPLYpayloadoptionalOptional. Omit it and the payload you receive back is the button's own text.
URL (static) · PHONE_NUMBERoptionalNothing to send. The value is baked into the approved template, and a parameter here is rejected.
cURL — dynamic URL + quick reply
bash
curl -X POST 'https://api.bigradar.io/api/public/v1/messages' \ -H 'Authorization: Bearer YOUR_API_KEY' \ -H 'Content-Type: application/json' \ -d '{ "to": "919876543210", "type": "template", "template": { "name": "order_confirmation", "language": "en", "bodyParams": ["Mohit", "#4521"], "buttonParams": [ { "index": 0, "text": "4521" }, { "index": 1, "payload": "track_order" } ] } }'

Response · 200

200 OK
json
{ "success": true, "message": "Template message sent successfully", "data": { "message_id": "wamid.HBgM...", "conversation_id": "a1b2c3d4-...", "to": "919876543210", "status": "queued", "timestamp": "2026-06-25T12:30:45Z" } }

Errors

CodeStatusMeans
template_not_found404No template with that name on this workspace. Check spelling and case.
template_not_approved409The template exists but Meta has not approved it yet.
missing_template_params400Fewer values than the template has placeholders. The message names the count.
whatsapp_not_connected409No WhatsApp Business account is connected. Connect one in the dashboard.
unexpected_header_param400You sent header fields for a template that has no header.
invalid_button_param400An index with no button at it, or a button that takes no value.