Skip to content

Service messages

Updated: May 21, 2026

Service messages are free-form messages that you can send to WhatsApp users during a customer service window. You send them using the Messages API (part of the Cloud API). Unlike template messages, service messages do not require pre-approval — you can compose and send them as needed in response to a WhatsApp user's message or call.

Service messages can only be sent via the Messages API. To message WhatsApp users outside of a customer service window, use template messages instead. See Marketing messages, Utility messages, or Authentication messages to learn about template-based messaging.

Customer service windows

When a WhatsApp user messages you or calls you, a 24-hour timer called a customer service window starts. If the user messages or calls you again before the timer expires, the timer resets to 24 hours.

While the window is open, you can send any of the service message types listed below to the user. When the window closes, you can only send pre-approved template messages.

As a reminder, you can only send messages to WhatsApp users who have opted in to receiving messages from you.

Known issue: In rare cases, you may receive a message from a WhatsApp user but be unable to respond within the customer service window.

Pricing

Service messages are billed under the SERVICE pricing category. See Pricing for details.

Message types

You can send the following types of service messages during an open customer service window.

Address messages allow you to easily request a delivery address from WhatsApp users.

WhatsApp address message asking the user to provide a delivery address, with a Provide address button

Audio messages display an audio icon and a link to an audio file. When the WhatsApp user taps the icon, the WhatsApp client loads and plays the audio file.

WhatsApp audio message with a music icon, download button, and audio playback timeline

Contacts messages allow you to send rich contact information directly to WhatsApp users, such as names, phone numbers, physical addresses, and email addresses.

WhatsApp contacts message for Barbara Johnson with Message and Save contact buttons

Document messages display a document icon, linked to a document that a WhatsApp user can tap to download.

WhatsApp document message showing a PDF file named lucky-shrub-invoice.pdf with a download icon and caption

Image messages display a single image and an optional caption.

WhatsApp image message showing a photo of a succulent being trimmed, with the caption The best succulent ever?

Interactive CTA URL button messages allow you to map any URL to a button, so you don't have to include lengthy or obscure raw URLs in the message body.

WhatsApp interactive CTA URL button message with a Lucky Shrub header image and a See Dates button

Interactive voice call messages allow you to trigger a WhatsApp call from users.

WhatsApp chat with the Spruce Business Account showing a welcome message and a Call on WhatsApp button

Interactive Flow messages allow you to send structured messages that are more natural or comfortable for your customers. For example, you can use WhatsApp Flows to book appointments, browse products, collect customer feedback, get new sales leads, or anything else.

For details, see the WhatsApp Flows documentation.

WhatsApp Flow form titled Join Now with Name and Email fields, agreement checkboxes, and a Continue button

Interactive list messages allow you to present WhatsApp users with a list of options to choose from.

WhatsApp interactive list message titled Choose Shipping Option with a Shipping Options menu button

Interactive location request messages display body text and a send location button. When a WhatsApp user taps the button, a location sharing screen appears which the user can use to share their location.

WhatsApp location request message asking where to be picked up, with a Send location button

Interactive reply buttons messages allow you to send up to three predefined replies for users to choose from.

WhatsApp interactive reply buttons message about a gardening workshop with Change and Cancel buttons

Location messages allow you to send a location's latitude and longitude coordinates to a WhatsApp user.

WhatsApp location message showing a map with a pin for Philz Coffee and its street address

Sticker messages display animated or static sticker images in a WhatsApp message.

WhatsApp sticker message showing a sprouting plant sticker in a chat bubble

Text messages are messages containing only a text body and an optional link preview.

WhatsApp text message with a Meta Quest 3 link preview and a body containing the product URL

Video messages display a thumbnail preview of a video image with an optional caption. When the WhatsApp user taps the preview, it loads the video and displays it to the user.

WhatsApp video message showing a thumbnail with a play button and the caption A succulent eclipse!

Reaction messages are emoji-reactions that you can apply to a previous WhatsApp user message that you have received.

WhatsApp message reading Perfect, thank you! with a smiling face emoji reaction applied below it

Message quality

Your message quality is based on how messages have been received by WhatsApp users over the past seven days and is weighted by recency. It is determined by a combination of user feedback signals like blocks, reports, mutes, archives, and reasons users provide when they block you.

Guidelines for sending high-quality messages:

  • Make sure your messages follow the WhatsApp Business Messaging Policy⁠.
  • Only send messages to WhatsApp users who have opted into receiving messages from your business.
  • Make the messages highly personalized and useful to users.
  • Avoid sending open-ended welcome or introductory messages.
  • Avoid sending too many messages per day.
  • Optimize your messages for content and length.

Your business phone number's status, quality rating⁠, and messaging limits are displayed in the WhatsApp Manager⁠ > Account tools > Phone numbers panel.

WhatsApp Manager Phone numbers panel under Account tools showing status, quality rating, and messaging limit

Numbers with high traffic commonly experience quality changes within short intervals (even within minutes).

Requests

All send message requests use the Messages API:

POST /<WHATSAPP_BUSINESS_PHONE_NUMBER_ID>/messages

The post body varies depending on the type of message you want to send, but the payload uses the following common syntax:

{  
  "messaging_product": "whatsapp",  
  "recipient_type": "<RECIPIENT_TYPE>",  
  "to": "<WHATSAPP_USER_PHONE_NUMBER>",  
  "type": "<MESSAGE_TYPE>",  
  "<MESSAGE_TYPE>": {<MESSAGE_CONTENTS>}  
}

The type property value in the post body payload indicates the type of message to send, and a property matching that type must be included that describes the message's contents.

The recipient_type property can be either individual for 1:1 messaging, or group for group messages.

See the Groups API documentation for details.

For example, this is a request to send a text message to a WhatsApp user. Note that type is set to text, and a text object follows, which describes the message's contents:

curl 'https://graph.facebook.com/v25.0/106540352242922/messages' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer EAAJB...' \
-d '
{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "+16505551234",
  "type": "text",
  "text": {
    "preview_url": true,
    "body": "As requested, here'\''s the link to our latest product: https://www.meta.com/quest/quest-3/"
  }
}'

If delivered, the message appears like this in the WhatsApp client:

WhatsApp text message with a Meta Quest 3 link preview and a body containing the product URL

Responses

The API returns the following JSON response when it successfully accepts your send message request. This response only indicates that the API successfully accepted your request — it does not indicate successful delivery of your message. You receive delivery status via messages webhooks instead.

Response syntax

{  
  "messaging_product": "whatsapp",  
  "contacts": [  
    {  
      "input": "<WHATSAPP_USER_PHONE_NUMBER>",  
      "wa_id": "<WHATSAPP_USER_ID>"  
    }  
  ],  
  "messages": [  
    {  
      "id": "<WHATSAPP_MESSAGE_ID>",  
      "group_id": "<GROUP_ID>", <!-- Only included if messaging a group -->  
      "message_status": "<PACING_STATUS>" <!-- Only included if sending a template -->  
    }  
  ]  
}

Response contents

PlaceholderDescriptionSample Value
<GROUP_ID> StringThe string identifier of a group made using the Groups API. This field shows when messages are sent, received, or read from a group. Learn more about the Groups APIY2FwaV9ncm91cDoxNzA1NTU1MDEzOToxMjAzNjM0MDQ2OTQyMzM4MjAZD
<PACING_STATUS> StringIndicates template pacing status. The message_status property is only included in responses when sending a template message that uses a template that is being paced.wamid.HBgLMTY0NjcwNDM1OTUVAgARGBI4MjZGRDA0OUE2OTQ3RkEyMzcA
<WHATSAPP_USER_PHONE_NUMBER> StringWhatsApp user's WhatsApp phone number. May not match wa_id value.+16505551234
<WHATSAPP_USER_ID> StringWhatsApp user's WhatsApp ID. May not match input value.16505551234
<WHATSAPP_MESSAGE_ID> StringWhatsApp Message ID. This ID appears in associated messages webhooks, such as sent, read, and delivered webhooks.wamid.HBgLMTY0NjcwNDM1OTUVAgARGBI4MjZGRDA0OUE2OTQ3RkEyMzcA

Commerce messages

Commerce messages are interactive messages used in conjunction with a product catalog. See Share Products With Customers to see how to use these types of messages.

Read receipts

You can let a WhatsApp user know you have read their message by marking it as read, which causes two blue check marks (called "read receipts") to appear below the user's message:

WhatsApp message with two blue check marks labeled Read receipt next to the timestamp

Typing indicators

If it may take you a few seconds or more to respond to a WhatsApp user, you can let them know that you are preparing a response by displaying a typing indicator and read receipts in the WhatsApp client:

WhatsApp chat showing a Typing indicator with three dots and a Read receipt with blue check marks

Contextual replies

You can send a message to a WhatsApp user as a contextual reply, which quotes a previous message in a contextual bubble:

WhatsApp contextual reply quoting a previous message in a contextual bubble above the text message reply

This makes it easier for the user to know which specific message you are replying to.

Webhooks

Messages sent to WhatsApp users trigger messages webhooks, so be sure to subscribe to this topic to receive message status notifications.

WhatsApp user phone number formats

Plus signs (+), hyphens (-), parenthesis ((,)), and spaces are supported in send message requests.

We highly recommend that you include both the plus sign and country calling code when sending a message to a customer. If the plus sign is omitted, your business phone number's country calling code is prepended to the customer's phone number. This can result in undelivered or misdelivered messages.

For example, if your business is in India (country calling code 91) and you send a message to the following customer phone number in various formats:

Number In Send Message RequestNumber Message Delivered ToOutcome
+16315551234+16315551234Correct number
+1 (631) 555-1234+16315551234Correct number
(631) 555-1234+916315551234Potentially wrong number
1 (631) 555-1234+9116315551234Potentially wrong number

Note: For Brazil and Mexico, the extra added prefix of the phone number may be modified by the Cloud API. This is a standard behavior of the system and is not considered a bug.

Media caching

If you are using a link (link) to a media asset on your server (as opposed to the ID (id) of an asset you have uploaded to the Meta servers), the Cloud API internally caches the asset for 10 minutes. The cached asset is reused in subsequent send message requests if the link in subsequent payloads is the same as the link in the initial payload.

If you don't want the cached asset reused in a subsequent message within the 10 minute time period, append a random query string to the asset link in the new send message request payload. The Cloud API treats this as a new asset, fetches it from your server, and caches it for 10 minutes.

For example:

  • Asset link in first send message request: https://link.to.media/sample.jpg — asset fetched, cached for 10 minutes
  • Asset link in second send message request: https://link.to.media/sample.jpg — cached asset reused
  • Asset link in third send message request: https://link.to.media/sample.jpg?abc123 — asset fetched, cached for 10 minutes

Delivery sequence of multiple messages

When sending a series of messages, the order in which messages are delivered is not guaranteed to match the order of your API requests. If you need to ensure the sequence of message delivery, confirm receipt of a delivered status in a status messages webhook before sending the next message in your message sequence.

Message time-to-live (TTL)

If the Cloud API is unable to deliver a message to a WhatsApp user, it retries delivery for a period of time known as a time-to-live, TTL, or the message validity period.

Default TTL

  • All messages except authentication templates: 30 days.
  • Authentication templates: 10 minutes

Customizing TTL for templates

You can customize the default TTL for authentication and utility templates, and for marketing templates sent using the Marketing Messages API for WhatsApp. See Time-to-live for details.

When TTL is exceeded: Dropped messages

The platform drops messages that cannot be delivered within the default or customized TTL.

If you do not receive a status messages webhook with status set to delivered before the TTL is exceeded, assume the message was dropped.

If you send a message that fails (status set to failed), there could be a minor delay before you receive the webhook, so you may wish to build in a small buffer before assuming the message was dropped.

Troubleshooting

If you are experiencing problems with message delivery, see Message Not Delivered.

Unofficial mirror for reference/search purposes. All content originates from developers.facebook.com — see the source link at the top of each page. Machine-readable indexes: llms.txt · llms-full.txt · About