All integrations

WhatsApp

MESSAGING · MESSAGING

Send messages and manage templates from their own business numbers.

Connecting WhatsApp in practice

A WhatsApp business phone number can send up to 80 messages per second overall but only one message every six seconds to the same user, and a new business portfolio starts capped at 250 unique customers per 24 hours. Anything sent outside a customer service window has to be a pre-approved template, so an agent cannot compose a fresh reply to a cold contact.

Scopes that draw scrutiny

  • whatsapp_business_messaging Sends messages and calls, uploads and retrieves media, manages the business profile and registers phone numbers with Meta. Requires App Review with a screencast showing a message being sent and received.
  • whatsapp_business_management A declared dependency of whatsapp_business_messaging, so the messaging permission cannot be approved on its own.

Rate limits

  • Business phone numbers support up to 80 messages per second by default, with capacity upgrades available.
  • Pair rate limit: 1 message every 6 seconds to the same WhatsApp user (0.17 messages/second). Bursts of up to 45 messages in 6 seconds are allowed, then throttled.
  • Messaging limit tiers, counted as unique customer phone numbers per 24 hours: 250, 2,000, 10,000, 100,000, then unlimited.

Who has to approve

Meta gates the account rather than the connecting user: business verification (by you or by a partner) is one of the routes out of the 250-customer starting tier, and templates generally require approval before they can be sent. Verification status also feeds throughput and Official Business Account status.

Worth knowing

  • Automatic tier scaling only fires if, in the last 7 days, the business has used at least half its current messaging limit and quality is high — then the limit rises one level within 6 hours. An integration that ramps slowly never gets a bigger tier.
  • Templates are the only message type that can reach a user outside a customer service window, so template approval, not code, is the critical path for outbound.
  • Test numbers have relaxed messaging limits, which makes sandbox throughput a bad predictor of production throughput.

Checked against WhatsApp Cloud API overview (2026-09-29), WhatsApp messaging limits (2026-09-29), Meta permissions reference (whatsapp_business_messaging) (2026-09-29)

Acts as the person, not as itself

Each user connects their own account. Every call carries both identities — the agent and the person it is acting for — so the agent can never reach past what that individual can already do.

Credentials never touch the agent

Tokens live in the vault and attach server-side at call time. The agent holds a session, not a secret, and revoking access does not mean rotating a key.

Every call on the record

Who asked, which agent acted, which action ran, and the verdict that let it through — one audit trail across every integration, not one per vendor.

What an agent can do

Each action is granted on its own. An agent allowed to read is not thereby allowed to write, and the scope beside each row is what the acting user must have connected for it to run at all.

whatsapp_delete_chats_by_chat_idWRITE

Delete a chat. DELETE /api/v1/chats/{chat_id}. Delete a chat. Supported for WhatsApp and LinkedIn only.

delete
whatsapp_delete_messages_by_message_idWRITE

Delete a message. DELETE /api/v1/messages/{message_id}. Delete a message. Supported for WhatsApp and LinkedIn only. For LinkedIn, it is only possible within the first 60 minutes after the message is sent.

delete
whatsapp_get_chat_attendeesREAD

List all attendees. GET /api/v1/chat_attendees. Returns a list of messaging attendees. Some optional parameters are available to filter the results.

read
whatsapp_get_chat_attendees_by_attendee_id_chatsREAD

List all 1to1 chats for a given attendee. GET /api/v1/chat_attendees/{attendee_id}/chats. Returns a list of chats where a given attendee is involved.

read
whatsapp_get_chat_attendees_by_attendee_id_syncREAD

Resynchronize chats for a given attendee. GET /api/v1/chat_attendees/{attendee_id}/sync. Starts or monitors the synchronization of all chats for a given attendee.

read
whatsapp_get_chat_attendees_by_idREAD

Retrieve an attendee. GET /api/v1/chat_attendees/{id}. The id of the wanted attendee.

read
whatsapp_get_chat_attendees_by_id_pictureREAD

Download a chat attendee picture. GET /api/v1/chat_attendees/{id}/picture. Download the profile picture of an attendee or picture of a group chat.

read
whatsapp_get_chat_attendees_by_sender_id_messagesREAD

List all messages for a given attendee. GET /api/v1/chat_attendees/{sender_id}/messages. Returns a list of messages where a given attendee is involved.

read
whatsapp_get_chatsREAD

List all chats. GET /api/v1/chats. Returns a list of chats. Some optional parameters are available to filter the results.

read
whatsapp_get_chats_by_chat_idREAD

Retrieve a chat. GET /api/v1/chats/{chat_id}. Retrieve the details of a chat.

read
whatsapp_get_chats_by_chat_id_attendeesREAD

List all attendees from a chat. GET /api/v1/chats/{chat_id}/attendees. Returns a list of messaging attendees related to a given chat. Some optional parameters are available to filter the results.

read
whatsapp_get_chats_by_chat_id_messagesREAD

List all messages from a chat. GET /api/v1/chats/{chat_id}/messages. Returns a list of messages related to the given chat. Some parameters are available to filter the results.

read
whatsapp_get_chats_by_chat_id_syncREAD

Synchronize a conversation from its beginning. GET /api/v1/chats/{chat_id}/sync. This route can be used both to initiate a synchronization process and to monitor its status via regular polling.

read
whatsapp_get_messagesREAD

List all messages. GET /api/v1/messages. Returns a list of messages. Some optional parameters are available to filter the results.

read
whatsapp_get_messages_by_message_idREAD

Retrieve a message. GET /api/v1/messages/{message_id}. Retrieve the details of a message.

read
whatsapp_get_messages_by_message_id_attachments_by_attachment_idREAD

Retrieve an attachment from a message. GET /api/v1/messages/{message_id}/attachments/{attachment_id}. Retrieve one of the attachment linked to a message. The provider answers this route with the file's raw bytes. This connection has no artifact transport, so the tool returns the file's content type and byte length instead of its contents.

read
whatsapp_patch_chats_by_chat_idWRITE

Perform an action on a given chat. PATCH /api/v1/chats/{chat_id}. Perform an action like changing the read status, muting the chat, retrieving a group invite link, etc.

write
whatsapp_patch_messages_by_message_idWRITE

Edit a message. PATCH /api/v1/messages/{message_id}. Edit a message. Supported for WhatsApp and LinkedIn Classic only. WhatsApp may reject edits after an indicative 15-minute window following the original send time. LinkedIn Classic edits are only possible within the first 60 minutes after the message is sent.

write
whatsapp_post_chatsWRITE

Start a new chat. POST /api/v1/chats. IRREVERSIBLE OUTWARD ACTION: this is visible to someone other than the account owner and cannot be undone through this API. Start a new conversation with one or more attendee. Attachments are not supported on this connection: the messaging provider accepts this operation only as multipart/form-data, and its file properties (attachments, linkedin.follow_up.attachments, video_message, voice_message) are omitted from this tool's schema because unbounded bytes must not enter a tool argument. Every text field is available and is sent as a multipart text part.

write
whatsapp_post_chats_by_chat_id_messagesWRITE

Send a message in a chat. POST /api/v1/chats/{chat_id}/messages. IRREVERSIBLE OUTWARD ACTION: this is visible to someone other than the account owner and cannot be undone through this API. Send a message to the given chat with the possibility to link some attachments. Attachments are not supported on this connection: the messaging provider accepts this operation only as multipart/form-data, and its file properties (attachments, video_message, voice_message) are omitted from this tool's schema because unbounded bytes must not enter a tool argument. Every text field is available and is sent as a multipart text part.

write
whatsapp_post_messages_by_message_id_forwardWRITE

Forward a message. POST /api/v1/messages/{message_id}/forward. IRREVERSIBLE OUTWARD ACTION: this is visible to someone other than the account owner and cannot be undone through this API. Forward a message to a chat. (Whatsapp only)

write
whatsapp_post_messages_by_message_id_reactionWRITE

Add a reaction to a message. POST /api/v1/messages/{message_id}/reaction. IRREVERSIBLE OUTWARD ACTION: this is visible to someone other than the account owner and cannot be undone through this API. Add a reaction to a message. (Whatsapp, LinkedIn, Telegram, Instagram)

write

Put WhatsApp behind one governed endpoint.

Same permissions, same audit trail, whatever else you connect next.