Templates
Create, manage, and submit WhatsApp message templates for Meta approval. Approved templates are required for business-initiated messages and broadcasts.
/v1/templates Create template
Create a draft WhatsApp message template. Drafts can be edited freely until submitted to Meta for approval.
Parameters
name string required Template name. Alphanumeric characters and underscores only.
category string required One of: authentication, utility, marketing.
language string Language code, ISO 639-1 (e.g. "en") or WhatsApp locale (e.g. "en_US"). Defaults to "en".
inbox_id string Inbox (WhatsApp number) this template belongs to.
template_data object required Template content.
template_data.body string required Body text. Max 1024 characters. Variables as {{1}}, {{2}}, numbered sequentially from 1.
template_data.header object Header with type (text, image, video, document) and text or media_url.
template_data.footer string Footer text.
template_data.buttons array Up to 3 buttons of type quick_reply, url, or phone_number.
variables array Variable definitions with name, component ("HEADER", "BODY", "BUTTONS"), and optional button_index.
Request
curl -X POST https://api.boltly.online/v1/templates \
-H "X-API-Key: $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "order_update",
"category": "utility",
"language": "en",
"template_data": {
"body": "Hi {{1}}, your order {{2}} has shipped!"
},
"variables": [
{ "name": "1", "component": "BODY" },
{ "name": "2", "component": "BODY" }
]
}' Response
{
"data": {
"id": "9f2c1a3e-...",
"name": "order_update",
"channel": "whatsapp",
"category": "utility",
"language": "en",
"status": "draft",
"template_data": {
"body": "Hi {{1}}, your order {{2}} has shipped!"
},
"variables": [
{ "name": "1", "component": "BODY" },
{ "name": "2", "component": "BODY" }
],
"created_at": "2026-04-03T12:00:00Z",
"updated_at": "2026-04-03T12:00:00Z"
}
} /v1/templates List templates
Retrieve a paginated list of templates, filterable by status, category, language, and search term.
Parameters
status string Filter by status. One of: draft, pending, approved, rejected, paused, disabled.
category string Filter by category: authentication, utility, or marketing.
language string Filter by language code.
search string Search templates by name.
sort string Sort order. One of: latest, oldest, name-asc, name-desc.
page integer Page number. Defaults to 1.
per_page integer Results per page. Defaults to 25, max 100.
Request
curl "https://api.boltly.online/v1/templates?status=approved&category=utility" \
-H "X-API-Key: $API_KEY" Response
{
"data": [
{
"id": "9f2c1a3e-...",
"name": "order_update",
"channel": "whatsapp",
"category": "utility",
"language": "en",
"status": "approved",
"quality_rating": "GREEN",
"created_at": "2026-04-03T12:00:00Z",
"updated_at": "2026-04-05T09:30:00Z"
}
],
"meta": { "page": 1, "per_page": 25, "total": 12 }
} /v1/templates/{id}/submit Submit for approval
Submit a draft template to Meta for review. Status moves to pending, then approved or rejected once Meta completes review.
Parameters
id string required Template ID.
Request
curl -X POST https://api.boltly.online/v1/templates/9f2c1a3e-.../submit \
-H "X-API-Key: $API_KEY" Response
{
"data": {
"id": "9f2c1a3e-...",
"name": "order_update",
"status": "pending",
"external_id": "1234567890",
"updated_at": "2026-04-03T12:05:00Z"
}
} /v1/templates/sync Sync from Meta
Pull the latest template statuses, quality ratings, and rejection reasons from Meta into Boltly.
Parameters
inbox_id string Sync templates for a specific inbox. Defaults to all connected inboxes.
Request
curl -X POST https://api.boltly.online/v1/templates/sync \
-H "X-API-Key: $API_KEY" Response
{
"data": {
"synced": 12,
"updated": 3,
"statuses": {
"approved": 9,
"pending": 2,
"rejected": 1
}
}
}