WhatsApp templates
Outside the 24-hour window WhatsApp only accepts templates: pre-approved message shapes with variable slots. Meta reviews each one.
Submit for approval
Section titled “Submit for approval”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:
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" }'The namespace
Section titled “The namespace”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.
Delete
Section titled “Delete”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.