Documentation / Complete
Create, list and sync templates
POST /v1/templates
Building with AI? Connect it to your account over MCP: it checks your setup, creates webhooks and templates with your confirmation and writes the code for you. See how →
You can now manage templates from Connect: GET /v1/templates (list by number/status/category), POST /v1/templates (create — the pre-checker runs BEFORE Meta: a blocking issue means we never call Meta, so you don't burn the slow reject cycle), POST /v1/templates/precheck (validate a draft live), GET /v1/templates/catalog + POST /v1/templates/seed (adopt industry templates written to Meta's rules; approval is Meta's decision), POST /v1/templates/bulk (apply them to many numbers), POST /v1/templates/sync and DELETE /v1/templates/:id. A template is born PENDING; subscribe to template.status_changed to be notified when Meta approves or rejects it, with a human-readable reason. Status is refreshed every few minutes (not in real time), and Meta itself can take from minutes to hours to review a template — the event arrives, with that delay. Use the per-connection Refresh button in the panel for an on-demand check.
curl -X POST https://api.waiaconnect.com/v1/templates \
-H "Authorization: Bearer wc_live_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"connectionId":"conn_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX","name":"order_confirmation","language":"es","category":"UTILITY","body":{"text":"Hola {{1}}, tu pedido {{2}} está listo.","examples":["María","#A-1042"]}}'
# Pre-checked before Meta. On success the template is PENDING; subscribe to
# template.status_changed to hear when Meta approves or rejects it.Languages: language takes Meta's code exactly: he (Hebrew), ar, fa, ur, en_US, pt_BR, es_AR… (111; Meta's list). There is no plain pt: it's pt_BR or pt_PT. A code Meta doesn't accept comes back before Meta with TPL_LANGUAGE_INVALID and a hint to the list. In Hebrew, Arabic, Persian and Urdu the preview is drawn right to left (dir: "rtl").
The #1 rejection cause is a {{n}} variable with no example — give each one an example (the pre-checker generates them).
Categories: UTILITY (transactional, cheapest) · MARKETING (promos, more per message) · AUTHENTICATION (codes). Marking a transactional message as MARKETING makes you overpay.
Edit: PATCH /v1/templates/:id, where Meta allows it — approved, rejected or paused; an approved one keeps its category and can be edited once every 24 h (10 every 30 days). Deleting an approved one locks its name for 30 days.