Skip to content

WhatsApp templates

Outside the 24-hour window WhatsApp only accepts templates: pre-approved message shapes with variable slots. Meta reviews each one.

Terminal window
curl -X POST https://api.neike.dev/api/templates/submit \
-H "x-neike-api-key: whk_live_…" \
-H "Content-Type: application/json" \
-d '{
"channel_id": "nk_dvzobn7m4h4y",
"template_data": {
"name": "order_ready",
"language": "en",
"category": "UTILITY",
"components": [
{ "type": "BODY", "text": "Hi {{1}}, your order {{2}} is ready." }
]
}
}'

template_data is passed through to Meta in their own format, so anything their template API accepts works here. Names are lowercase with underscores, and category is UTILITY, MARKETING or AUTHENTICATION — picking the wrong one is the most common rejection reason.

Approval is asynchronous. Status changes arrive on your webhook, and templates are listed with their current state:

Terminal window
curl -X POST https://api.neike.dev/api/templates/list \
-H "x-neike-api-key: whk_live_…" \
-H "Content-Type: application/json" \
-d '{ "channel_id": "nk_dvzobn7m4h4y" }'

Sending a template needs your WABA’s message template namespace. You get it when the channel is connected — it is part of the payload the embedded signup returns, and it is shown on the channel in the console.

Terminal window
curl -X DELETE https://api.neike.dev/api/templates/delete \
-H "x-neike-api-key: whk_live_…" \
-H "Content-Type: application/json" \
-d '{ "channel_id": "nk_dvzobn7m4h4y", "name": "order_ready" }'

Deleting is permanent on Meta’s side and the name cannot be reused immediately.