Send a WhatsApp template message

Compatibility reference for existing integrations. New integrations should use /api/ext/v3/messageTemplates/send for both single and multiple recipients.

This retained single-send query route accepts whatsappNumber or a supported target; a non-whitespace target takes precedence. Business-scoped identity targets depend on account support. Supply the required broadcast_name, select the approved WATI template with template_name, and supply its named parameter values in the body's parameters array as {name,value} entries. Use the names from the actual WATI template mapping; array position alone is not the binding contract. Use optional channel_number only as supported by this legacy operation.

Inspect the HTTP response and the legacy business result separately. Acceptance does not establish delivery. Retain correlation and message/campaign identifiers, and reconcile uncertain outcomes before resending. Neither a repeated request label nor a caller correlation ID is a general request-level idempotency guarantee.

The similarly named sendTemplateMessage/{whatsappNumber} action has different role support; do not assume scoped tokens work with both routes. See the template payload and V1 migration guide and token lifecycle guide.

Permissions

For API access tokens and OIDC tokens, satisfy at least one of: api, wati_integration:write, messagetemplate:write. API access tokens may satisfy a listed scope through the configured scope hierarchy; OIDC tokens are checked against their scope claims. Legacy JWT authentication does not use this scope check. Authentication, role, tenant, and applicable feature or plan checks still apply. For HTTP 403, check the credential type, applicable scopes, roles, and workspace access; 403 does not always mean a missing scope. Authentication/authorization failures do not guarantee a JSON response body.

Recent Requests
Log in to see full request history
TimeStatusUser Agent
Retrieving recent requests…
LoadingLoading…
Path Params
string
required

Your WATI workspace (tenant) ID. This required path segment identifies the WATI account for legacy v1 and v2 API requests.

Query Params
string

Recipient's WhatsApp number in international format without the leading +
(e.g., 85264318721 for +852 6431 8721). The number must be a valid WhatsApp user.
Optional when target is provided.

string

Polymorphic recipient identifier. Accepts a phone number, ContactId, or BSUID.
When provided, takes precedence over whatsappNumber. BSUID resolution depends on availability for your workspace.

Body Params

Approved WATI template selection and named parameter values: parameters contains name/value entries resolved through the template mapping. broadcast_name is required; channel_number is optional. Follow this legacy schema for channel routing; V3 uses recipients[].custom_params instead.

parameters
array of objects | null

Named WATI template values. Omitted, null or an empty list is valid only when the selected template has no mapped parameters; otherwise provide every required name with its non-empty value.

parameters
string
required
length ≥ 1
string
required
length ≥ 1
string | null

Optional sending-channel number. Omitted, null or an empty string uses the default workspace channel context. A supplied non-empty value must identify a supported account channel.

Headers
string
enum
Defaults to application/json

Generated from available response content types

Allowed:
string
enum
Defaults to application/json-patch+json

Generated from available request content types

Allowed:
Responses

400

Request was rejected. Common causes: template name not found or not approved, missing/extra parameters, daily marketing-broadcast limit reached, tenant in offline mode, or invalid WhatsApp number.

401

Missing or invalid bearer token.

403

The authenticated request is forbidden. Authorization failed. Check the Permissions section for the credential-specific scope rules, and check roles and workspace access. The response may have no body; do not require a JSON error envelope.

Language
Credentials
Bearer
LoadingLoading…
Response
Click Try It! to start a request and see the response here! Or choose an example:
text/plain
application/json
text/json