WhatsApp

Use WhatsApp Cloud API to send text, template, media, or interactive messages, react to messages, and manage media. Message webhooks can start workflows. See the messaging-window requirement below before choosing between a free-form message and a template.

Usage Instructions

Integrate WhatsApp into the workflow. Send text, template, media, interactive, and Flow messages, react to messages, and mark messages as read through the WhatsApp Cloud API. Manage message templates, the business profile, and the phone numbers on your WhatsApp Business Account. Free-form messages (text, media, interactive, and Flows) only reach a contact within the 24-hour customer service window that opens each time they message you — outside that window WhatsApp requires a pre-approved template. Trigger workflows on incoming messages, completed Flows, delivery status updates, and template review changes.

Actions

WhatsApp Send Message

Send a free-form text message through the WhatsApp Cloud API. Only works inside the 24-hour customer service window — use Send Template to start a conversation.

Input

ParameterTypeRequiredDescription
phoneNumberstringYesRecipient phone number with country code (e.g., +14155552671)
messagestringYesPlain text message content to send (max 4096 characters)
phoneNumberIdstringYesWhatsApp Business Phone Number ID (from Meta Business Suite)
previewUrlbooleanNoWhether WhatsApp should try to render a link preview for the first URL in the message

Output

ParameterTypeDescription
successbooleanSend success status
messageIdstringWhatsApp message identifier
messageStatusstringPacing status from the send API: accepted, held_for_quality_assessment, or paused. Acceptance is not delivery — use the webhook trigger for delivery status.
messagingProductstringMessaging product returned by the send API
inputPhoneNumberstringRecipient phone number echoed by the send API
whatsappUserIdstringResolved WhatsApp user ID for the recipient
contactsarrayRecipient contacts returned by the send API (each item includes input and wa_id)
mediaIdstringMedia asset ID from Upload Media, or the ID downloaded by Download Media
filefileMedia downloaded by Download Media, stored as a workflow file
fileNamestringName of the file uploaded by Upload Media
mimeTypestringMIME type of the uploaded or downloaded media
sizenumberSize in bytes of the file uploaded by Upload Media
fileSizenumberSize in bytes of the downloaded media
sha256stringSHA-256 hash WhatsApp reported for the downloaded media
templatesarrayTemplates from List Templates (id, name, status, category, language, qualityScore, rejectedReason, components)
countnumberNumber of items returned by a list operation
beforestringCursor for the previous page of a list operation
afterstringCursor for the next page of a list operation
hasMorebooleanWhether a list operation has another page
templateIdstringID of the template created by Create Template
idstringTemplate ID from Get Template
namestringTemplate name from Get Template
categorystringTemplate category from Get or Create Template
languagestringTemplate language from Get Template
parameterFormatstringTemplate variable format from Get Template
previousCategorystringTemplate category before Meta recategorized it
rejectedReasonstringWhy the template was rejected
qualityScorestringTemplate quality rating: GREEN, YELLOW, RED, or UNKNOWN
qualityScoreDatenumberUnix timestamp when the template quality rating was last updated
componentsjsonTemplate components from Get Template
phoneNumbersarrayPhone numbers from List Phone Numbers (id, displayPhoneNumber, verifiedName, status, qualityRating, messagingLimitTier)
aboutstringBusiness profile About text
addressstringBusiness profile address
descriptionstringBusiness profile description
emailstringBusiness profile email
profilePictureUrlstringBusiness profile picture URL
websitesarrayBusiness profile websites
verticalstringBusiness profile industry
eventTypestringWebhook classification: incoming_message, message_status, template_status_update, or mixed
fromstringSender phone number from the first incoming message
recipientIdstringRecipient phone number from the first status update in the batch
phoneNumberIdstringBusiness phone number ID from the first message or status item in the batch
displayPhoneNumberstringBusiness display phone number from the first message or status item in the batch
textstringText body from the first incoming text message
timestampstringTimestamp from the first message or status item in the batch
messageTypestringType of the first incoming message in the batch, such as text, image, or system
mediaMimeTypestringMIME type of the first incoming media message in the webhook batch
captionstringCaption on the first incoming image, video, or document message
statusstringFirst outgoing message status in the trigger batch (sent, delivered, read, failed), or the template review status from Get Template / Create Template
contactjsonFirst sender contact in the webhook batch (wa_id, profile.name)
messagesjsonAll incoming message objects from the webhook batch, flattened across entries/changes
statusesjsonAll message status objects from the webhook batch, flattened across entries/changes
webhookContactsjsonAll sender contact profiles from the webhook batch
conversationjsonConversation metadata from the first status update (id, expiration_timestamp, origin.type); only sent for free entry point conversations since Graph v24.0
pricingjsonPricing from the first status update (billable, pricing_model, type, category, subtype)
errorsjsonErrors from the first failed status in the batch (code, title, message, details)
errorCodenumberError code from the first failed status, e.g. 131047 when the 24-hour window has closed
errorTitlestringError title from the first failed status
errorDetailsstringError details from the first failed status
interactiveTypestringInteractive reply type: button_reply, list_reply, or nfm_reply (completed Flow)
flowResponsejsonFirst completed Flow in the batch with the parsed form answers in responseJson
flowTokenstringflow_token from the first completed Flow
templateStatusUpdatejsonFirst template status change (event, templateId, templateName, templateLanguage, reason)
templateStatusUpdatesjsonAll template status changes in the webhook batch
rawjsonFull structured WhatsApp webhook payload
errorstringError information if sending fails

WhatsApp Send Template

Send a pre-approved WhatsApp template message. Required to start a conversation or to message a user outside the 24-hour customer service window.

Input

ParameterTypeRequiredDescription
phoneNumberstringYesRecipient phone number with country code (e.g., +14155552671)
templateNamestringYesName of the approved message template
languageCodestringYesTemplate language/locale code (e.g., en_US)
componentsjsonNoTemplate components array with parameters for header/body/button variables, per the WhatsApp template message schema
phoneNumberIdstringYesWhatsApp Business Phone Number ID (from Meta Business Suite)

Output

ParameterTypeDescription
successbooleanSend success status
messageIdstringWhatsApp message identifier
messageStatusstringPacing status from the send API: accepted, held_for_quality_assessment, or paused. Acceptance is not delivery — use the webhook trigger for delivery status.
messagingProductstringMessaging product returned by the send API
inputPhoneNumberstringRecipient phone number echoed by the send API
whatsappUserIdstringResolved WhatsApp user ID for the recipient
contactsarrayRecipient contacts returned by the send API (each item includes input and wa_id)
mediaIdstringMedia asset ID from Upload Media, or the ID downloaded by Download Media
filefileMedia downloaded by Download Media, stored as a workflow file
fileNamestringName of the file uploaded by Upload Media
mimeTypestringMIME type of the uploaded or downloaded media
sizenumberSize in bytes of the file uploaded by Upload Media
fileSizenumberSize in bytes of the downloaded media
sha256stringSHA-256 hash WhatsApp reported for the downloaded media
templatesarrayTemplates from List Templates (id, name, status, category, language, qualityScore, rejectedReason, components)
countnumberNumber of items returned by a list operation
beforestringCursor for the previous page of a list operation
afterstringCursor for the next page of a list operation
hasMorebooleanWhether a list operation has another page
templateIdstringID of the template created by Create Template
idstringTemplate ID from Get Template
namestringTemplate name from Get Template
categorystringTemplate category from Get or Create Template
languagestringTemplate language from Get Template
parameterFormatstringTemplate variable format from Get Template
previousCategorystringTemplate category before Meta recategorized it
rejectedReasonstringWhy the template was rejected
qualityScorestringTemplate quality rating: GREEN, YELLOW, RED, or UNKNOWN
qualityScoreDatenumberUnix timestamp when the template quality rating was last updated
componentsjsonTemplate components from Get Template
phoneNumbersarrayPhone numbers from List Phone Numbers (id, displayPhoneNumber, verifiedName, status, qualityRating, messagingLimitTier)
aboutstringBusiness profile About text
addressstringBusiness profile address
descriptionstringBusiness profile description
emailstringBusiness profile email
profilePictureUrlstringBusiness profile picture URL
websitesarrayBusiness profile websites
verticalstringBusiness profile industry
eventTypestringWebhook classification: incoming_message, message_status, template_status_update, or mixed
fromstringSender phone number from the first incoming message
recipientIdstringRecipient phone number from the first status update in the batch
phoneNumberIdstringBusiness phone number ID from the first message or status item in the batch
displayPhoneNumberstringBusiness display phone number from the first message or status item in the batch
textstringText body from the first incoming text message
timestampstringTimestamp from the first message or status item in the batch
messageTypestringType of the first incoming message in the batch, such as text, image, or system
mediaMimeTypestringMIME type of the first incoming media message in the webhook batch
captionstringCaption on the first incoming image, video, or document message
statusstringFirst outgoing message status in the trigger batch (sent, delivered, read, failed), or the template review status from Get Template / Create Template
contactjsonFirst sender contact in the webhook batch (wa_id, profile.name)
messagesjsonAll incoming message objects from the webhook batch, flattened across entries/changes
statusesjsonAll message status objects from the webhook batch, flattened across entries/changes
webhookContactsjsonAll sender contact profiles from the webhook batch
conversationjsonConversation metadata from the first status update (id, expiration_timestamp, origin.type); only sent for free entry point conversations since Graph v24.0
pricingjsonPricing from the first status update (billable, pricing_model, type, category, subtype)
errorsjsonErrors from the first failed status in the batch (code, title, message, details)
errorCodenumberError code from the first failed status, e.g. 131047 when the 24-hour window has closed
errorTitlestringError title from the first failed status
errorDetailsstringError details from the first failed status
interactiveTypestringInteractive reply type: button_reply, list_reply, or nfm_reply (completed Flow)
flowResponsejsonFirst completed Flow in the batch with the parsed form answers in responseJson
flowTokenstringflow_token from the first completed Flow
templateStatusUpdatejsonFirst template status change (event, templateId, templateName, templateLanguage, reason)
templateStatusUpdatesjsonAll template status changes in the webhook batch
rawjsonFull structured WhatsApp webhook payload
errorstringError information if sending fails

WhatsApp Send Media

Send an image, document, video, audio, or sticker message. Accepts an uploaded file, a media ID, or a public link.

Input

ParameterTypeRequiredDescription
phoneNumberstringYesRecipient phone number with country code (e.g., +14155552671)
mediaTypestringYesType of media to send: image, document, video, audio, or sticker
filefileNoFile to send. Uploaded to WhatsApp first, then sent. Use Upload Media instead when sending the same file repeatedly.
mediaIdstringNoID of media previously uploaded to WhatsApp. Alternative to file or mediaLink.
mediaLinkstringNoPublic HTTPS URL of the media. Alternative to file or mediaId.
captionstringNoOptional caption for image, video, or document media (max 1024 characters). Ignored for audio and sticker.
filenamestringNoOptional file name shown to the recipient for document media
phoneNumberIdstringYesWhatsApp Business Phone Number ID (from Meta Business Suite)

Output

ParameterTypeDescription
successbooleanSend success status
messageIdstringWhatsApp message identifier
messageStatusstringPacing status from the send API: accepted, held_for_quality_assessment, or paused. Acceptance is not delivery — use the webhook trigger for delivery status.
messagingProductstringMessaging product returned by the send API
inputPhoneNumberstringRecipient phone number echoed by the send API
whatsappUserIdstringResolved WhatsApp user ID for the recipient
contactsarrayRecipient contacts returned by the send API (each item includes input and wa_id)
mediaIdstringMedia asset ID from Upload Media, or the ID downloaded by Download Media
filefileMedia downloaded by Download Media, stored as a workflow file
fileNamestringName of the file uploaded by Upload Media
mimeTypestringMIME type of the uploaded or downloaded media
sizenumberSize in bytes of the file uploaded by Upload Media
fileSizenumberSize in bytes of the downloaded media
sha256stringSHA-256 hash WhatsApp reported for the downloaded media
templatesarrayTemplates from List Templates (id, name, status, category, language, qualityScore, rejectedReason, components)
countnumberNumber of items returned by a list operation
beforestringCursor for the previous page of a list operation
afterstringCursor for the next page of a list operation
hasMorebooleanWhether a list operation has another page
templateIdstringID of the template created by Create Template
idstringTemplate ID from Get Template
namestringTemplate name from Get Template
categorystringTemplate category from Get or Create Template
languagestringTemplate language from Get Template
parameterFormatstringTemplate variable format from Get Template
previousCategorystringTemplate category before Meta recategorized it
rejectedReasonstringWhy the template was rejected
qualityScorestringTemplate quality rating: GREEN, YELLOW, RED, or UNKNOWN
qualityScoreDatenumberUnix timestamp when the template quality rating was last updated
componentsjsonTemplate components from Get Template
phoneNumbersarrayPhone numbers from List Phone Numbers (id, displayPhoneNumber, verifiedName, status, qualityRating, messagingLimitTier)
aboutstringBusiness profile About text
addressstringBusiness profile address
descriptionstringBusiness profile description
emailstringBusiness profile email
profilePictureUrlstringBusiness profile picture URL
websitesarrayBusiness profile websites
verticalstringBusiness profile industry
eventTypestringWebhook classification: incoming_message, message_status, template_status_update, or mixed
fromstringSender phone number from the first incoming message
recipientIdstringRecipient phone number from the first status update in the batch
phoneNumberIdstringBusiness phone number ID from the first message or status item in the batch
displayPhoneNumberstringBusiness display phone number from the first message or status item in the batch
textstringText body from the first incoming text message
timestampstringTimestamp from the first message or status item in the batch
messageTypestringType of the first incoming message in the batch, such as text, image, or system
mediaMimeTypestringMIME type of the first incoming media message in the webhook batch
captionstringCaption on the first incoming image, video, or document message
statusstringFirst outgoing message status in the trigger batch (sent, delivered, read, failed), or the template review status from Get Template / Create Template
contactjsonFirst sender contact in the webhook batch (wa_id, profile.name)
messagesjsonAll incoming message objects from the webhook batch, flattened across entries/changes
statusesjsonAll message status objects from the webhook batch, flattened across entries/changes
webhookContactsjsonAll sender contact profiles from the webhook batch
conversationjsonConversation metadata from the first status update (id, expiration_timestamp, origin.type); only sent for free entry point conversations since Graph v24.0
pricingjsonPricing from the first status update (billable, pricing_model, type, category, subtype)
errorsjsonErrors from the first failed status in the batch (code, title, message, details)
errorCodenumberError code from the first failed status, e.g. 131047 when the 24-hour window has closed
errorTitlestringError title from the first failed status
errorDetailsstringError details from the first failed status
interactiveTypestringInteractive reply type: button_reply, list_reply, or nfm_reply (completed Flow)
flowResponsejsonFirst completed Flow in the batch with the parsed form answers in responseJson
flowTokenstringflow_token from the first completed Flow
templateStatusUpdatejsonFirst template status change (event, templateId, templateName, templateLanguage, reason)
templateStatusUpdatesjsonAll template status changes in the webhook batch
rawjsonFull structured WhatsApp webhook payload
errorstringError information if sending fails

WhatsApp Send Interactive

Send an interactive WhatsApp message with reply buttons or a selectable list.

Input

ParameterTypeRequiredDescription
phoneNumberstringYesRecipient phone number with country code (e.g., +14155552671)
bodyTextstringYesMain body text of the interactive message (max 1024 characters with buttons, 4096 with a list)
headerTextstringNoOptional plain-text header shown above the body (max 60 characters)
footerTextstringNoOptional footer text shown below the body (max 60 characters)
buttonsjsonNoReply buttons array (max 3), each item: { "type": "reply", "reply": { "id": "...", "title": "..." } }. Button title max 20 characters, id max 256. Provide buttons or sections.
listButtonTextstringNoLabel for the menu button that opens the list, max 20 characters (required when sending a list)
sectionsjsonNoList sections array (max 10 sections, 10 rows total), each item: { "title": "...", "rows": [{ "id": "...", "title": "...", "description": "..." }] }. Section and row titles max 24 characters, row description max 72. Provide sections or buttons.
phoneNumberIdstringYesWhatsApp Business Phone Number ID (from Meta Business Suite)

Output

ParameterTypeDescription
successbooleanSend success status
messageIdstringWhatsApp message identifier
messageStatusstringPacing status from the send API: accepted, held_for_quality_assessment, or paused. Acceptance is not delivery — use the webhook trigger for delivery status.
messagingProductstringMessaging product returned by the send API
inputPhoneNumberstringRecipient phone number echoed by the send API
whatsappUserIdstringResolved WhatsApp user ID for the recipient
contactsarrayRecipient contacts returned by the send API (each item includes input and wa_id)
mediaIdstringMedia asset ID from Upload Media, or the ID downloaded by Download Media
filefileMedia downloaded by Download Media, stored as a workflow file
fileNamestringName of the file uploaded by Upload Media
mimeTypestringMIME type of the uploaded or downloaded media
sizenumberSize in bytes of the file uploaded by Upload Media
fileSizenumberSize in bytes of the downloaded media
sha256stringSHA-256 hash WhatsApp reported for the downloaded media
templatesarrayTemplates from List Templates (id, name, status, category, language, qualityScore, rejectedReason, components)
countnumberNumber of items returned by a list operation
beforestringCursor for the previous page of a list operation
afterstringCursor for the next page of a list operation
hasMorebooleanWhether a list operation has another page
templateIdstringID of the template created by Create Template
idstringTemplate ID from Get Template
namestringTemplate name from Get Template
categorystringTemplate category from Get or Create Template
languagestringTemplate language from Get Template
parameterFormatstringTemplate variable format from Get Template
previousCategorystringTemplate category before Meta recategorized it
rejectedReasonstringWhy the template was rejected
qualityScorestringTemplate quality rating: GREEN, YELLOW, RED, or UNKNOWN
qualityScoreDatenumberUnix timestamp when the template quality rating was last updated
componentsjsonTemplate components from Get Template
phoneNumbersarrayPhone numbers from List Phone Numbers (id, displayPhoneNumber, verifiedName, status, qualityRating, messagingLimitTier)
aboutstringBusiness profile About text
addressstringBusiness profile address
descriptionstringBusiness profile description
emailstringBusiness profile email
profilePictureUrlstringBusiness profile picture URL
websitesarrayBusiness profile websites
verticalstringBusiness profile industry
eventTypestringWebhook classification: incoming_message, message_status, template_status_update, or mixed
fromstringSender phone number from the first incoming message
recipientIdstringRecipient phone number from the first status update in the batch
phoneNumberIdstringBusiness phone number ID from the first message or status item in the batch
displayPhoneNumberstringBusiness display phone number from the first message or status item in the batch
textstringText body from the first incoming text message
timestampstringTimestamp from the first message or status item in the batch
messageTypestringType of the first incoming message in the batch, such as text, image, or system
mediaMimeTypestringMIME type of the first incoming media message in the webhook batch
captionstringCaption on the first incoming image, video, or document message
statusstringFirst outgoing message status in the trigger batch (sent, delivered, read, failed), or the template review status from Get Template / Create Template
contactjsonFirst sender contact in the webhook batch (wa_id, profile.name)
messagesjsonAll incoming message objects from the webhook batch, flattened across entries/changes
statusesjsonAll message status objects from the webhook batch, flattened across entries/changes
webhookContactsjsonAll sender contact profiles from the webhook batch
conversationjsonConversation metadata from the first status update (id, expiration_timestamp, origin.type); only sent for free entry point conversations since Graph v24.0
pricingjsonPricing from the first status update (billable, pricing_model, type, category, subtype)
errorsjsonErrors from the first failed status in the batch (code, title, message, details)
errorCodenumberError code from the first failed status, e.g. 131047 when the 24-hour window has closed
errorTitlestringError title from the first failed status
errorDetailsstringError details from the first failed status
interactiveTypestringInteractive reply type: button_reply, list_reply, or nfm_reply (completed Flow)
flowResponsejsonFirst completed Flow in the batch with the parsed form answers in responseJson
flowTokenstringflow_token from the first completed Flow
templateStatusUpdatejsonFirst template status change (event, templateId, templateName, templateLanguage, reason)
templateStatusUpdatesjsonAll template status changes in the webhook batch
rawjsonFull structured WhatsApp webhook payload
errorstringError information if sending fails

WhatsApp Send Reaction

React to a WhatsApp message with an emoji. Send an empty emoji to remove an existing reaction.

Input

ParameterTypeRequiredDescription
phoneNumberstringYesRecipient phone number with country code (e.g., +14155552671)
messageIdstringYesID (wamid) of the message to react to. Not delivered if the message is over 30 days old, deleted, not in this chat thread, or itself a reaction.
emojistringNoEmoji to react with. Leave empty to remove an existing reaction.
phoneNumberIdstringYesWhatsApp Business Phone Number ID (from Meta Business Suite)

Output

ParameterTypeDescription
successbooleanSend success status
messageIdstringWhatsApp message identifier
messageStatusstringPacing status from the send API: accepted, held_for_quality_assessment, or paused. Acceptance is not delivery — use the webhook trigger for delivery status.
messagingProductstringMessaging product returned by the send API
inputPhoneNumberstringRecipient phone number echoed by the send API
whatsappUserIdstringResolved WhatsApp user ID for the recipient
contactsarrayRecipient contacts returned by the send API (each item includes input and wa_id)
mediaIdstringMedia asset ID from Upload Media, or the ID downloaded by Download Media
filefileMedia downloaded by Download Media, stored as a workflow file
fileNamestringName of the file uploaded by Upload Media
mimeTypestringMIME type of the uploaded or downloaded media
sizenumberSize in bytes of the file uploaded by Upload Media
fileSizenumberSize in bytes of the downloaded media
sha256stringSHA-256 hash WhatsApp reported for the downloaded media
templatesarrayTemplates from List Templates (id, name, status, category, language, qualityScore, rejectedReason, components)
countnumberNumber of items returned by a list operation
beforestringCursor for the previous page of a list operation
afterstringCursor for the next page of a list operation
hasMorebooleanWhether a list operation has another page
templateIdstringID of the template created by Create Template
idstringTemplate ID from Get Template
namestringTemplate name from Get Template
categorystringTemplate category from Get or Create Template
languagestringTemplate language from Get Template
parameterFormatstringTemplate variable format from Get Template
previousCategorystringTemplate category before Meta recategorized it
rejectedReasonstringWhy the template was rejected
qualityScorestringTemplate quality rating: GREEN, YELLOW, RED, or UNKNOWN
qualityScoreDatenumberUnix timestamp when the template quality rating was last updated
componentsjsonTemplate components from Get Template
phoneNumbersarrayPhone numbers from List Phone Numbers (id, displayPhoneNumber, verifiedName, status, qualityRating, messagingLimitTier)
aboutstringBusiness profile About text
addressstringBusiness profile address
descriptionstringBusiness profile description
emailstringBusiness profile email
profilePictureUrlstringBusiness profile picture URL
websitesarrayBusiness profile websites
verticalstringBusiness profile industry
eventTypestringWebhook classification: incoming_message, message_status, template_status_update, or mixed
fromstringSender phone number from the first incoming message
recipientIdstringRecipient phone number from the first status update in the batch
phoneNumberIdstringBusiness phone number ID from the first message or status item in the batch
displayPhoneNumberstringBusiness display phone number from the first message or status item in the batch
textstringText body from the first incoming text message
timestampstringTimestamp from the first message or status item in the batch
messageTypestringType of the first incoming message in the batch, such as text, image, or system
mediaMimeTypestringMIME type of the first incoming media message in the webhook batch
captionstringCaption on the first incoming image, video, or document message
statusstringFirst outgoing message status in the trigger batch (sent, delivered, read, failed), or the template review status from Get Template / Create Template
contactjsonFirst sender contact in the webhook batch (wa_id, profile.name)
messagesjsonAll incoming message objects from the webhook batch, flattened across entries/changes
statusesjsonAll message status objects from the webhook batch, flattened across entries/changes
webhookContactsjsonAll sender contact profiles from the webhook batch
conversationjsonConversation metadata from the first status update (id, expiration_timestamp, origin.type); only sent for free entry point conversations since Graph v24.0
pricingjsonPricing from the first status update (billable, pricing_model, type, category, subtype)
errorsjsonErrors from the first failed status in the batch (code, title, message, details)
errorCodenumberError code from the first failed status, e.g. 131047 when the 24-hour window has closed
errorTitlestringError title from the first failed status
errorDetailsstringError details from the first failed status
interactiveTypestringInteractive reply type: button_reply, list_reply, or nfm_reply (completed Flow)
flowResponsejsonFirst completed Flow in the batch with the parsed form answers in responseJson
flowTokenstringflow_token from the first completed Flow
templateStatusUpdatejsonFirst template status change (event, templateId, templateName, templateLanguage, reason)
templateStatusUpdatesjsonAll template status changes in the webhook batch
rawjsonFull structured WhatsApp webhook payload
errorstringError information if sending fails

WhatsApp Mark As Read

Mark a received WhatsApp message as read so the sender sees blue checkmarks, optionally showing a typing indicator.

Input

ParameterTypeRequiredDescription
messageIdstringYesID (wamid) of the incoming message to mark as read
showTypingIndicatorbooleanNoShow a typing indicator to the sender while a reply is composed. Dismissed once you respond or after 25 seconds, whichever comes first.
phoneNumberIdstringYesWhatsApp Business Phone Number ID (from Meta Business Suite)

Output

ParameterTypeDescription
successbooleanWhether the message was successfully marked as read

WhatsApp Upload Media

Upload a file to WhatsApp and get a media ID for sending. Uploaded media is retained for 30 days and can back many sends.

Input

ParameterTypeRequiredDescription
filefileYesFile to upload. WhatsApp limits: images 5 MB, video and audio 16 MB, documents 100 MB, stickers 500 KB.
phoneNumberIdstringYesWhatsApp Business Phone Number ID (from Meta Business Suite)

Output

ParameterTypeDescription
mediaIdstringWhatsApp media ID. Pass this to Send Media to attach the uploaded file.
fileNamestringName of the uploaded file
mimeTypestringMIME type WhatsApp received the file as
sizenumberSize of the uploaded file in bytes

WhatsApp Download Media

Download media a customer sent you. Takes the media ID from an incoming WhatsApp message and stores the file in the workflow.

Input

ParameterTypeRequiredDescription
mediaIdstringYesMedia asset ID from an incoming message, e.g. <whatsapp.messages[0].mediaId>. This is not the message ID (wamid).
phoneNumberIdstringYesWhatsApp Business Phone Number ID (from Meta Business Suite)

Output

ParameterTypeDescription
filefileDownloaded media stored as a workflow file
mediaIdstringWhatsApp media ID that was downloaded
mimeTypestringMIME type reported by WhatsApp
fileSizenumberSize of the downloaded media in bytes
sha256stringSHA-256 hash WhatsApp reported for the media, for integrity checks

WhatsApp Send Flow

Send an interactive WhatsApp Flow — a multi-screen form such as a booking, sign-up, or survey — behind a call-to-action button. Like other free-form messages it only delivers within 24 hours of the contact last messaging you; outside that window send a template with a Flow button. The completed form arrives on the WhatsApp trigger as a Flow response.

Input

ParameterTypeRequiredDescription
phoneNumberstringYesRecipient phone number with country code (e.g., +14155552671)
bodyTextstringYesMessage body shown above the Flow button
flowIdstringNoFlow ID from WhatsApp Manager. Provide either the Flow ID or the Flow name.
flowNamestringNoFlow name. Provide either the Flow name or the Flow ID, not both.
flowCtastringYesButton label that opens the Flow (e.g., "Book now"), ideally 30 characters or fewer with no emoji
flowTokenstringNoYour own identifier echoed back in the Flow response (e.g., a lead or ticket ID). The response does not include the Flow ID, so use this to match replies.
flowActionstringNonavigate (default) opens a screen directly; data_exchange calls your Flow endpoint first
flowScreenstringNoID of the entry screen to open with the navigate action (defaults to the Flow entry screen)
flowDatajsonNoNon-empty JSON object of input data for the first screen (navigate action only)
flowModestringNopublished (default) sends the last published version; draft sends the current draft for testing
headerTextstringNoOptional plain-text header (max 60 characters)
footerTextstringNoOptional footer text (max 60 characters)
phoneNumberIdstringYesWhatsApp Business Phone Number ID (from Meta Business Suite)

Output

ParameterTypeDescription
successbooleanSend success status
messageIdstringWhatsApp message identifier
messageStatusstringPacing status from the send API: accepted, held_for_quality_assessment, or paused. Acceptance is not delivery — use the webhook trigger for delivery status.
messagingProductstringMessaging product returned by the send API
inputPhoneNumberstringRecipient phone number echoed by the send API
whatsappUserIdstringResolved WhatsApp user ID for the recipient
contactsarrayRecipient contacts returned by the send API (each item includes input and wa_id)
mediaIdstringMedia asset ID from Upload Media, or the ID downloaded by Download Media
filefileMedia downloaded by Download Media, stored as a workflow file
fileNamestringName of the file uploaded by Upload Media
mimeTypestringMIME type of the uploaded or downloaded media
sizenumberSize in bytes of the file uploaded by Upload Media
fileSizenumberSize in bytes of the downloaded media
sha256stringSHA-256 hash WhatsApp reported for the downloaded media
templatesarrayTemplates from List Templates (id, name, status, category, language, qualityScore, rejectedReason, components)
countnumberNumber of items returned by a list operation
beforestringCursor for the previous page of a list operation
afterstringCursor for the next page of a list operation
hasMorebooleanWhether a list operation has another page
templateIdstringID of the template created by Create Template
idstringTemplate ID from Get Template
namestringTemplate name from Get Template
categorystringTemplate category from Get or Create Template
languagestringTemplate language from Get Template
parameterFormatstringTemplate variable format from Get Template
previousCategorystringTemplate category before Meta recategorized it
rejectedReasonstringWhy the template was rejected
qualityScorestringTemplate quality rating: GREEN, YELLOW, RED, or UNKNOWN
qualityScoreDatenumberUnix timestamp when the template quality rating was last updated
componentsjsonTemplate components from Get Template
phoneNumbersarrayPhone numbers from List Phone Numbers (id, displayPhoneNumber, verifiedName, status, qualityRating, messagingLimitTier)
aboutstringBusiness profile About text
addressstringBusiness profile address
descriptionstringBusiness profile description
emailstringBusiness profile email
profilePictureUrlstringBusiness profile picture URL
websitesarrayBusiness profile websites
verticalstringBusiness profile industry
eventTypestringWebhook classification: incoming_message, message_status, template_status_update, or mixed
fromstringSender phone number from the first incoming message
recipientIdstringRecipient phone number from the first status update in the batch
phoneNumberIdstringBusiness phone number ID from the first message or status item in the batch
displayPhoneNumberstringBusiness display phone number from the first message or status item in the batch
textstringText body from the first incoming text message
timestampstringTimestamp from the first message or status item in the batch
messageTypestringType of the first incoming message in the batch, such as text, image, or system
mediaMimeTypestringMIME type of the first incoming media message in the webhook batch
captionstringCaption on the first incoming image, video, or document message
statusstringFirst outgoing message status in the trigger batch (sent, delivered, read, failed), or the template review status from Get Template / Create Template
contactjsonFirst sender contact in the webhook batch (wa_id, profile.name)
messagesjsonAll incoming message objects from the webhook batch, flattened across entries/changes
statusesjsonAll message status objects from the webhook batch, flattened across entries/changes
webhookContactsjsonAll sender contact profiles from the webhook batch
conversationjsonConversation metadata from the first status update (id, expiration_timestamp, origin.type); only sent for free entry point conversations since Graph v24.0
pricingjsonPricing from the first status update (billable, pricing_model, type, category, subtype)
errorsjsonErrors from the first failed status in the batch (code, title, message, details)
errorCodenumberError code from the first failed status, e.g. 131047 when the 24-hour window has closed
errorTitlestringError title from the first failed status
errorDetailsstringError details from the first failed status
interactiveTypestringInteractive reply type: button_reply, list_reply, or nfm_reply (completed Flow)
flowResponsejsonFirst completed Flow in the batch with the parsed form answers in responseJson
flowTokenstringflow_token from the first completed Flow
templateStatusUpdatejsonFirst template status change (event, templateId, templateName, templateLanguage, reason)
templateStatusUpdatesjsonAll template status changes in the webhook batch
rawjsonFull structured WhatsApp webhook payload
errorstringError information if sending fails

WhatsApp List Templates

List message templates on a WhatsApp Business Account with their review status and quality rating. Templates are required to message a contact outside the 24-hour customer service window, and only APPROVED templates can be sent.

Input

ParameterTypeRequiredDescription
templateNamestringNoOnly return templates with this exact name
templateStatusstringNoOnly return templates in this review status (e.g., APPROVED, PENDING, REJECTED, PAUSED, DISABLED)
templateCategorystringNoOnly return templates in this category (MARKETING, UTILITY, AUTHENTICATION)
templateLanguagestringNoOnly return templates in this language and locale code (e.g., en_US)
qualityScorestringNoOnly return templates with this quality rating (GREEN, YELLOW, RED, UNKNOWN)
limitnumberNoMaximum number of templates to return in this page
afterstringNoPagination cursor from a previous response to fetch the next page
beforestringNoPagination cursor from a previous response to fetch the previous page
businessAccountIdstringYesWhatsApp Business Account (WABA) ID (from WhatsApp Manager)

Output

ParameterTypeDescription
templatesarrayMessage templates on the account
countnumberNumber of templates returned in this page

WhatsApp Get Template

Get one WhatsApp message template by ID, including its components, review status, rejection reason, and quality rating.

Input

ParameterTypeRequiredDescription
templateIdstringYesMessage template ID (from List Templates or Create Template)

Output

ParameterTypeDescription
successbooleanSend success status
messageIdstringWhatsApp message identifier
messageStatusstringPacing status from the send API: accepted, held_for_quality_assessment, or paused. Acceptance is not delivery — use the webhook trigger for delivery status.
messagingProductstringMessaging product returned by the send API
inputPhoneNumberstringRecipient phone number echoed by the send API
whatsappUserIdstringResolved WhatsApp user ID for the recipient
contactsarrayRecipient contacts returned by the send API (each item includes input and wa_id)
mediaIdstringMedia asset ID from Upload Media, or the ID downloaded by Download Media
filefileMedia downloaded by Download Media, stored as a workflow file
fileNamestringName of the file uploaded by Upload Media
mimeTypestringMIME type of the uploaded or downloaded media
sizenumberSize in bytes of the file uploaded by Upload Media
fileSizenumberSize in bytes of the downloaded media
sha256stringSHA-256 hash WhatsApp reported for the downloaded media
templatesarrayTemplates from List Templates (id, name, status, category, language, qualityScore, rejectedReason, components)
countnumberNumber of items returned by a list operation
beforestringCursor for the previous page of a list operation
afterstringCursor for the next page of a list operation
hasMorebooleanWhether a list operation has another page
templateIdstringID of the template created by Create Template
idstringTemplate ID from Get Template
namestringTemplate name from Get Template
categorystringTemplate category from Get or Create Template
languagestringTemplate language from Get Template
parameterFormatstringTemplate variable format from Get Template
previousCategorystringTemplate category before Meta recategorized it
rejectedReasonstringWhy the template was rejected
qualityScorestringTemplate quality rating: GREEN, YELLOW, RED, or UNKNOWN
qualityScoreDatenumberUnix timestamp when the template quality rating was last updated
componentsjsonTemplate components from Get Template
phoneNumbersarrayPhone numbers from List Phone Numbers (id, displayPhoneNumber, verifiedName, status, qualityRating, messagingLimitTier)
aboutstringBusiness profile About text
addressstringBusiness profile address
descriptionstringBusiness profile description
emailstringBusiness profile email
profilePictureUrlstringBusiness profile picture URL
websitesarrayBusiness profile websites
verticalstringBusiness profile industry
eventTypestringWebhook classification: incoming_message, message_status, template_status_update, or mixed
fromstringSender phone number from the first incoming message
recipientIdstringRecipient phone number from the first status update in the batch
phoneNumberIdstringBusiness phone number ID from the first message or status item in the batch
displayPhoneNumberstringBusiness display phone number from the first message or status item in the batch
textstringText body from the first incoming text message
timestampstringTimestamp from the first message or status item in the batch
messageTypestringType of the first incoming message in the batch, such as text, image, or system
mediaMimeTypestringMIME type of the first incoming media message in the webhook batch
captionstringCaption on the first incoming image, video, or document message
statusstringFirst outgoing message status in the trigger batch (sent, delivered, read, failed), or the template review status from Get Template / Create Template
contactjsonFirst sender contact in the webhook batch (wa_id, profile.name)
messagesjsonAll incoming message objects from the webhook batch, flattened across entries/changes
statusesjsonAll message status objects from the webhook batch, flattened across entries/changes
webhookContactsjsonAll sender contact profiles from the webhook batch
conversationjsonConversation metadata from the first status update (id, expiration_timestamp, origin.type); only sent for free entry point conversations since Graph v24.0
pricingjsonPricing from the first status update (billable, pricing_model, type, category, subtype)
errorsjsonErrors from the first failed status in the batch (code, title, message, details)
errorCodenumberError code from the first failed status, e.g. 131047 when the 24-hour window has closed
errorTitlestringError title from the first failed status
errorDetailsstringError details from the first failed status
interactiveTypestringInteractive reply type: button_reply, list_reply, or nfm_reply (completed Flow)
flowResponsejsonFirst completed Flow in the batch with the parsed form answers in responseJson
flowTokenstringflow_token from the first completed Flow
templateStatusUpdatejsonFirst template status change (event, templateId, templateName, templateLanguage, reason)
templateStatusUpdatesjsonAll template status changes in the webhook batch
rawjsonFull structured WhatsApp webhook payload
errorstringError information if sending fails

WhatsApp Create Template

Submit a new message template for review. Templates start as PENDING and can only be sent once APPROVED; they are how you message contacts outside the 24-hour customer service window.

Input

ParameterTypeRequiredDescription
templateNamestringYesTemplate name: lowercase letters, numbers, and underscores only (max 512 characters)
templateCategorystringYesTemplate category: MARKETING, UTILITY, or AUTHENTICATION
languageCodestringYesTemplate language and locale code (e.g., en_US)
templateComponentsjsonYesComponents array, e.g. [{"type":"BODY","text":"Hi {{1}}, your order {{2}} shipped.","example":{"body_text":[["Ana","1234"]]}}]. HEADER, BODY, and FOOTER need text; templates with variables need examples to be approved.
parameterFormatstringNoVariable format: positional ({{1}}) or named ({{first_name}}). Defaults to positional.
allowCategoryChangebooleanNoLet Meta reassign the category instead of rejecting a miscategorized template
businessAccountIdstringYesWhatsApp Business Account (WABA) ID (from WhatsApp Manager)

Output

ParameterTypeDescription
templateIdstringID of the new template
statusstringInitial review status, usually PENDING. Watch template status updates for approval.
categorystringCategory Meta assigned to the template

WhatsApp Delete Template

Delete a message template. With only a name, every language version of that template is deleted; add the template ID to delete just one. A deleted approved template name cannot be reused for 30 days.

Input

ParameterTypeRequiredDescription
templateNamestringYesName of the template to delete
templateIdstringNoTemplate ID to delete only that language version
businessAccountIdstringYesWhatsApp Business Account (WABA) ID (from WhatsApp Manager)

Output

ParameterTypeDescription
successbooleanWhether WhatsApp deleted the template

WhatsApp Get Business Profile

Get the WhatsApp business profile customers see for a phone number: about text, address, description, email, websites, industry, and profile picture.

Input

ParameterTypeRequiredDescription
phoneNumberIdstringYesWhatsApp Business Phone Number ID (from Meta Business Suite)

Output

ParameterTypeDescription
aboutstringProfile About text
addressstringBusiness address
descriptionstringBusiness description
emailstringContact email
profilePictureUrlstringURL of the profile picture
websitesarrayWebsites listed on the profile
verticalstringIndustry of the business (e.g., RETAIL, HEALTH, PROF_SERVICES)

WhatsApp Update Business Profile

Update the WhatsApp business profile customers see for a phone number. Only the fields you provide are changed.

Input

ParameterTypeRequiredDescription
aboutstringNoAbout text shown on the profile
addressstringNoBusiness address (free text, max 256 characters)
profileDescriptionstringNoBusiness description
emailstringNoContact email address
websitesjsonNoWebsite URLs as a JSON array or comma-separated list
verticalstringNoIndustry of the business: OTHER, AUTO, BEAUTY, APPAREL, EDU, ENTERTAIN, EVENT_PLAN, FINANCE, GROCERY, GOVT, HOTEL, HEALTH, NONPROFIT, PROF_SERVICES, RETAIL, TRAVEL, RESTAURANT, ALCOHOL, ONLINE_GAMBLING, PHYSICAL_GAMBLING, OTC_DRUGS
profilePictureHandlestringNoProfile picture handle returned by the Meta Resumable Upload API
phoneNumberIdstringYesWhatsApp Business Phone Number ID (from Meta Business Suite)

Output

ParameterTypeDescription
successbooleanWhether WhatsApp saved the profile changes

WhatsApp List Phone Numbers

List the business phone numbers on a WhatsApp Business Account with their connection status, quality rating, and messaging limit tier — the daily cap on contacts you can message outside the 24-hour customer service window.

Input

ParameterTypeRequiredDescription
limitnumberNoMaximum number of phone numbers to return (1-100)
afterstringNoPagination cursor from a previous response to fetch the next page
beforestringNoPagination cursor from a previous response to fetch the previous page
businessAccountIdstringYesWhatsApp Business Account (WABA) ID (from WhatsApp Manager)

Output

ParameterTypeDescription
phoneNumbersarrayBusiness phone numbers on the account
↳ idstringPhone number ID used by the messaging operations
↳ displayPhoneNumberstringPhone number in display format
↳ verifiedNamestringDisplay name approved for the number
↳ statusstringConnection status (CONNECTED, PENDING, FLAGGED, RESTRICTED, RATE_LIMITED, DISCONNECTED, BANNED, MIGRATED, DELETED). Only CONNECTED numbers can send.
↳ qualityRatingstringQuality rating: GREEN, YELLOW, RED, or UNKNOWN
↳ messagingLimitTierstringMessaging limit tier (TIER_50, TIER_250, TIER_1K, TIER_10K, TIER_100K, TIER_UNLIMITED). Since v24.0 this reflects the business portfolio limit.
↳ codeVerificationStatusstringOwnership verification status: VERIFIED, NOT_VERIFIED, or EXPIRED
↳ isOfficialBusinessAccountbooleanWhether the number has Official Business Account status
↳ accountModestringLIVE or SANDBOX
countnumberNumber of phone numbers returned in this page

Triggers

A Trigger is a block that starts a workflow when an event happens in this service.

WhatsApp Webhook

Trigger workflow from WhatsApp incoming messages (including completed Flow forms), outgoing message status updates (sent, delivered, read, failed), and template review status changes

Configuration

ParameterTypeRequiredDescription
verificationTokenstringYesEnter any secure token here. You'll need to provide the same token in your WhatsApp Business Platform dashboard.
appSecretstringYesRequired for WhatsApp POST signature verification. Agent Serve uses it to validate the X-Hub-Signature-256 header on every webhook delivery.
eventTypesstringNoRun only for the selected event types. Leave empty to run on every delivery. Status updates fire for every sent, delivered, read, and failed message, so select only what the workflow handles.

Output

ParameterTypeDescription
eventTypestringWebhook classification: incoming_message, message_status, template_status_update, or mixed
messageIdstringFirst WhatsApp message identifier (wamid) found in the webhook batch
fromstringSender phone number from the first incoming message in the batch
recipientIdstringRecipient phone number from the first status update in the batch
phoneNumberIdstringBusiness phone number ID from the first message or status item in the batch
displayPhoneNumberstringBusiness display phone number from the first message or status item in the batch
textstringText body from the first incoming text message in the batch
timestampstringTimestamp from the first message or status item in the batch
messageTypestringType of the first incoming message in the batch (text, image, system, etc.)
mediaIdstringMedia asset ID from the first incoming media message. Pass to the Download Media operation to fetch the file. Expires after 7 days.
mediaMimeTypestringMIME type of the first incoming media message
captionstringCaption on the first incoming image, video, or document message
statusstringFirst outgoing message status in the batch, such as sent, delivered, read, or failed
contactjsonFirst sender contact in the batch (wa_id, profile.name)
webhookContactsjsonAll sender contact profiles from the webhook batch
messagesjsonAll incoming message objects from the webhook batch, flattened across entries/changes
statusesjsonAll message status objects from the webhook batch, flattened across entries/changes. Failed statuses include an errors array.
conversationjsonConversation metadata from the first status update (id, expiration_timestamp, origin.type). Since Graph v24.0 WhatsApp only sends it for free entry point conversations.
pricingjsonPricing from the first status update (billable, pricing_model, type, category, and subtype when applicable). Sent with sent, delivered, or read statuses.
errorsjsonErrors from the first failed status in the batch, each with code, title, message, details, and href
errorCodenumberError code from the first failed status (e.g., 131047 when the 24-hour window has closed and a template is required)
errorTitlestringError title from the first failed status
errorDetailsstringError details from the first failed status
interactiveTypestringInteractive reply type of the first incoming message: button_reply, list_reply, or nfm_reply (completed Flow)
flowResponsejsonFirst completed WhatsApp Flow in the batch: name, body, responseJson (the parsed form answers, including flow_token), and responseJsonRaw
flowTokenstringflow_token from the first completed Flow, matching the token sent with Send Flow
templateStatusUpdatejsonFirst template status change: event (APPROVED, REJECTED, PAUSED, DISABLED, ARCHIVED, ...), templateId, templateName, templateLanguage, templateCategory, reason, rejectionInfo, disableInfo, otherInfo
templateStatusUpdatesjsonAll template status changes in the webhook batch
rawjsonComplete structured webhook payload from WhatsApp