Send a WhatsApp message
Send a message from a connected WhatsApp number. text, media, interactive_buttons, interactive_list, location, contacts, and flow are SESSION messages - deliverable only inside the 24-hour customer window (i.e. after the user messaged you). Outside it, only template (an approved HSM) is deliverable. context_message_id (any type except contacts) threads the message as a reply under a prior WhatsApp message id, rendering as a quoted reply in the customer’s app. type=flow requires the flow to be PUBLISHED first (see the WhatsApp Flows endpoints) - a DRAFT flow can only be tested via its preview URL. Requires social:write.
Pricing. Billed per message from your API wallet, on top of your plan’s monthly WhatsApp send limit. The price depends on the destination country and the message category, mirroring how WhatsApp itself prices, so a utility message to one market and a marketing message to another cost different amounts. Free-form replies are billed as service, priced at the destination market’s utility rate. The response carries a pricing block showing which rate was applied, and the usage block reports cost and remaining balance. You are charged only for a message accepted for delivery - a rejected send is refunded automatically.
Authorizations
API key from Developer dashboard (Bearer token).
Body
A connected WhatsApp number (social account id).
Recipient phone in E.164 (e.g. +14155551234).
text, media, template, interactive_buttons, interactive_list, location, contacts, reaction, flow A prior WhatsApp message id (wamid) to thread this message as a reply under, or (for type=reaction) the message being reacted to. Renders as a quoted reply in the customer's app.
For type=flow. Optional footer line below the body, max 60 characters.
Body for type=text, or the prompt text for type=interactive_buttons/interactive_list.
For type=media.
For type=template.
For type=interactive_buttons. Up to 3 reply buttons; the customer's tap arrives as an inbound message you already receive on your webhook.
3For type=interactive_list. Label on the button that opens the list, max 20 characters.
For type=interactive_list. Up to 10 rows total across all sections.
For type=location.
For type=contacts. WhatsApp's raw contact-card array - see Meta's WhatsApp Cloud API contacts message reference for the full object shape (name, phones, emails, etc.).
For type=reaction. The emoji to react with, or an empty string to remove a previously-sent reaction. Requires context_message_id.
For type=flow.
Pricing category for a template send. Optional - if omitted we read it from the template itself. Free-form sends are always billed as service.
marketing, utility, authentication, service 
