What it is
The WhatsApp Messages API sends template, text, image, video, audio, document, sticker, location, interactive, contact, and reaction messages from a connected WhatsApp business phone number.Before you begin
- Store your YCloud API key in
YCLOUD_API_KEY. - Connect a WhatsApp Business Account and phone number to YCloud.
- Collect the sender phone number in E.164 format and either the recipient phone number, BSUID, or parent BSUID.
- Use an
APPROVEDtemplate for ordinary template sends. - Upload media first when the message references a YCloud media ID.
How it works
Choose the endpoint based on when YCloud should submit the message to the WhatsApp Business API.
Both endpoints return a YCloud message object. The initial response does not
confirm final delivery. Later status changes arrive through
whatsapp.message.updated Webhooks.
Send your first message
Choose an approved template owned by your connected WABA. Replace the sender, recipient, template name, and language with your own values, then send:id and follow its whatsapp.message.updated events. An
accepted response means the request entered processing, not that the customer
received it. Configure both whatsapp.message.updated and
whatsapp.inbound_message.received when you need delivery tracking and replies.
Choose a template or session message
Use an approved template for ordinary business-initiated messages outside the customer service window. Within an open window, use supported free-form message types such as text, media, or interactive replies. Check customer service window rules at send time. A pricing window does not replace messaging eligibility. See WhatsApp pricing for current charges and entry-point conditions.Direct Send for utility content
Direct Send can submit eligible utility content or convert an existing utility template. It works with either sending endpoint. ThesendDirectly endpoint
controls synchronous submission; it does not enable Direct Send by itself.
Follow Direct Send best practices
for eligibility, requests, template conversion, limits, and account events.
Choose the best send time
Match the send time to the message purpose and the recipient’s local time.- Send OTPs and other time-sensitive messages immediately. Use
POST /whatsapp/messages/sendDirectlywhen your workflow needs the submission result before continuing. - Send transactional updates when the related event occurs, such as a payment, shipment, or appointment change.
- Schedule marketing messages for reasonable hours in the recipient’s time zone. Use your own delivery, read, and conversion data to test different time slots for each audience instead of assuming one universal best hour.
- Start a scheduled campaign with a small recipient group. Check delivery, response, and opt-out results before sending to the rest of the audience.
- Avoid repeated sends when a message is delayed. Store
externalIdand processwhatsapp.message.updatedWebhooks before deciding whether to retry.
Request
Choose either endpoint above, then use the request body that matches the message type. Thefrom value is your connected WhatsApp business phone number. Address
the recipient with to in E.164 format or with recipient set to a BSUID or
parent BSUID.
Common request fields
Provide at least one of
to or recipient. If you include both, YCloud uses
to and ignores recipient.
One-tap, zero-tap, and copy-code authentication templates require a phone
number. Use
to for these template types.Request examples
Template message
Template message
Text message
Text message
Image message
Image message
Video message
Video message
Audio message
Audio message
Document message
Document message
Sticker message
Sticker message
Location message
Location message
Interactive message
Interactive message
Contacts message
Contacts message
Reaction message
Reaction message
Add template variables
Match the template name, language, and parameter order to your approved template. For a body with customer name and order-reference parameters, send:Reply to a specific message
Setcontext.message_id to the original WhatsApp message ID (wamid) to create
a quoted reply. Continue to check that the customer service window is open.
Apply unsubscribe and block filters
ForPOST /whatsapp/messages, set filterUnsubscribed: true and
filterBlocked: true when you need to apply your YCloud suppression lists.
Both default to false and do not apply to sendDirectly.
Inspect whatsappMessage.errorCode in status webhooks for
RECIPIENT_UNSUBSCRIBED or RECIPIENT_IN_BLOCK_LIST. Do not expect a separate
filtered status. Enforce suppression in your application before using
sendDirectly.
Use externalId to associate messages with an order or another internal record.
It is a correlation field, not a server-side idempotency key.
Response
A successful response returns the YCloud message object. An initialstatus: accepted means YCloud accepted the send request. It does not mean the
message has been sent by Meta or delivered to the WhatsApp user.
Example response
Response fields
Delivery status
Subscribe towhatsapp.message.updated Webhooks to receive later status changes
such as sent, failed, delivered, or read.
Use GET /whatsapp/messages/{id} when you need to retrieve a message directly.
Limits and troubleshooting
- Ordinary template sends require an
APPROVEDtemplate;ARCHIVEDtemplates cannot be sent as ordinary template messages. - Do not retry an accepted request without an idempotency strategy. A repeated request can send a duplicate message.
- Use the YCloud
id,wamid,externalId, and Webhook status when investigating delivery. - Inspect
whatsappApiErrorwhen a direct request reaches Meta and Meta rejects it.
Direct Send best practices
Send utility content, convert templates, and monitor category and restriction events.
Production best practices
Design status synchronization, bounded retries, consent checks, media reuse,
and throughput controls for a production integration.
Use business-scoped user IDs
Send messages and calls by BSUID, request phone numbers, manage Meta contact
book entries, and process BSUID webhook fields.

