Send utility and authentication messages
Updated: Jul 31, 2026
Copy for LLM
To send a utility or authentication message with Direct Send, call the
POST /<WHATSAPP_BUSINESS_PHONE_NUMBER_ID>/messages endpoint and add the category field to the message body.Request syntax
POST /<WHATSAPP_BUSINESS_PHONE_NUMBER_ID>/messages
Example request
{ "messaging_product": "whatsapp", "recipient_type": "individual", "to": "<WHATSAPP_USER_PHONE_NUMBER>", "type": "text", "text": { "body": "<BODY_TEXT>" }, "category": "utility" }
To send an authentication message instead, set
"category": "authentication" (access restricted — see Supported values for the category field).If you call the endpoint without the
category field, the request follows normal Cloud API send-message behavior for free-form messages.Note. Direct Send uses the standard Cloud API recipient model: address messages withto(phone number) orrecipient(business-scoped user ID). Authentication-category messages can’t be sent to a business-scoped user ID — usetowith a phone number. See Business-scoped user IDs for availability and details.
Supported values for the category field
The
category field indicates the category of the message to send as a template.| Value | Description |
|---|---|
utility | Business-initiated message in the utility category. Charged at utility rates. |
authentication | Business-initiated message in the authentication category. Charged at authentication rates. Access restricted — contact your partner or client manager to get access. |
service(or omitted) | Service message that follows the existing service-message flow and is not part of Direct Send. The message fails with error 131047 if there’s no open service window. Omitting the category field is equivalent to sending category: "service" — both are treated as outside Direct Send and follow the existing Cloud API send behavior. |
Sending a message with an incorrect category value
If you send an unsupported value (for example,
marketing), the API returns a synchronous error:{ "error": { "message": "(#100) Param category must be one of {AUTHENTICATION, SERVICE, UTILITY} - got \"marketing\".", "type": "OAuthException", "code": 100, "fbtrace_id": "<FBTRACE_ID>" } }
Sending a message with an ineligible account
If your WhatsApp Business Account isn’t eligible for Direct Send, sending a message with a
category value returns a synchronous error 100:{ "error": { "message": "(#100) Invalid parameter", "type": "OAuthException", "code": 100, "error_data": { "messaging_product": "whatsapp", "details": "Parameter Invalid: The 'category' value requires Direct Send, which isn't enabled for this account. Use an approved message template instead." }, "fbtrace_id": "<FBTRACE_ID>" } }
You can check whether your account is eligible for Direct Send in WhatsApp Manager.
- Supported message types — text, CTA URL, reply, and mixed-button messages
- Business-named templates — control template attribution with
template_name - Configure message TTL
- Error codes