Templates are sent by name: POST /v1/messages with type: "template" and template: { name, language, components }. The template must be approved in Meta; components carries its variables. If it is yours and not approved we return 422 TEMPLATE_NOT_APPROVED before calling Meta; if we haven't synced it yet, we let it through.
curl -X POST https://api.waiaconnect.com/v1/messages \
-H "Authorization: Bearer wc_live_YOUR_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"connectionId":"conn_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX","to":"5493511234567","type":"template","template":{"name":"hello_world","language":"es","components":[]}}'
# The template must already be APPROVED in Meta. `components` carries its variables.Where the name comes from: GET /v1/templates (each row's name + language), or the Templates section of the panel. It is the name in Meta, not the title you typed on screen, and it only works if that row is APPROVED.
Outside the 24h service window, Meta requires an approved template (error 131047 if you send free text).
The 24-hour window: you can only write freely within 24h of the customer's last message. After that you need an approved template. That's why templates exist.