Portfolio Supported AIs Solutions Tasks Email Archive Bring Your Own Code Integrations Pricing

Get Started

ChatGPT

ChatGPT

Start directly →

Ready
Claude

Claude

Directory Connector →

Ready
Mistral

Mistral

Directory Connector →

Ready

Dashboard Always available
WhatsApp (Cloud API)

WhatsApp (Cloud API)

🔑 BYO Key — Messaging

Two-way WhatsApp with your own WhatsApp Business number (Meta Cloud API). Send text, approved templates and files (e.g. a quote PDF from your private files, no public link) and receive replies, photos and delivery statuses through a signed webhook. Stored per project for you and your admin pages (office inbox): conversations, unread counts, the 24-hour window, your own reference per message. Automatic webhook setup with your app id. Tokens stay in your vault.

🔑 Setup Required — Bring Your Own Key This integration requires API credentials. Store them once via setup_integration or the Dashboard Vault — they're encrypted with AES-256-GCM and never exposed.
  1. In Meta for Developers create or open a Business app with the WhatsApp product; add your number in WhatsApp Manager.
  2. Store a System User token (whatsapp_business_messaging + whatsapp_business_management) in the vault as whatsapp_access_token.
  3. Store the app secret (App settings > Basic) in the vault as whatsapp_app_secret.
  4. Call whatsapp configure with phone_number_id, waba_id and app_id: number checked, app subscribed, webhook registered.
  5. Send a message to the number and call list-messages.

Required Credentials

whatsapp_access_token
WhatsApp access token
Permanent System User token (Meta Business Settings > System users) with whatsapp_business_messaging and whatsapp_business_management.
whatsapp_app_secret
Meta App secret
Meta for Developers > your app > App settings > Basic > App secret. Verifies that webhooks come from Meta.

Get your API key at developers.facebook.com →

Try it with your AI assistant

Once WebsitePublisher is connected to your AI assistant, paste one of these into the chat. Replace the parts in [brackets] with your own details.

@WebsitePublisher connect my WhatsApp Business number so customer replies show up in my office admin page
@WebsitePublisher send the quote PDF for job [reference] to [customer number] on WhatsApp
@WebsitePublisher show me the unread WhatsApp conversations and which ones I can still answer without a template
With WebsitePublisher, connect my WhatsApp Business number so customer replies show up in my office admin page
With WebsitePublisher, send the quote PDF for job [reference] to [customer number] on WhatsApp
With WebsitePublisher, show me the unread WhatsApp conversations and which ones I can still answer without a template
With WebsitePublisher, connect my WhatsApp Business number so customer replies show up in my office admin page
With WebsitePublisher, send the quote PDF for job [reference] to [customer number] on WhatsApp
With WebsitePublisher, show me the unread WhatsApp conversations and which ones I can still answer without a template

Endpoints (15)

POST configure

Connect, update or disable one number. Checks token and phone_number_id with Meta first. waba_id subscribes the app to the WhatsApp Business Account (webhooks, list-templates); app_id + app secret in the vault registers the webhook automatically. Returns webhook.url and webhook.verify_token. Paid plans, max 5 numbers.

Field Type Required Description
phone_number_id string|integer ✓ Yes Numeric "Phone number ID" from Meta (WhatsApp > API Setup), not the phone number.
waba_id string|integer No WhatsApp Business Account id (recommended). null clears.
app_id string|integer No Meta App id: automatic webhook registration. null clears.
token_ref string No Vault key NAME of the token (default whatsapp_access_token).
app_secret_ref string No Vault key NAME of the app secret (default whatsapp_app_secret).
status string No active (default) or disabled.
settings object No Keys given replace those keys; null resets. admin_send (true): admin pages may send. auto_mark_read (false). retention_days (null = keep, 1..3650).
rotate_verify_token boolean No New verify token.
POST connection-status

The numbers: display number, verified name, quality, status, settings, last webhook, last signature failure; for the owner also vault keys, webhook_url, verify_token. Start here when messages do not arrive.

No input parameters required.

POST remove-number

Remove a number. Messages kept unless keep_messages false; secrets stay.

Field Type Required Description
phone_number_id string|integer No Required with more than one number.
keep_messages boolean No Default true.
POST send-text

Free-form text to one recipient, only inside the 24-hour window (check-window); otherwise send-template. reference (job or quote number) is stored with the message. Paid plans.

Field Type Required Description
to string|integer ✓ Yes International format, e.g. +31612345678.
text string ✓ Yes Message text.
preview_url boolean No Link preview for the first URL.
reply_to string No wamid to reply to.
reference string No Your own reference.
phone_number_id string|integer No Required with more than one number.
POST send-template

Approved template to one recipient: the only type allowed outside the 24-hour window. body_params: list for {{1}}.. or object for named placeholders. header: {type: document|image|video, private_asset|link|media_id, filename} or {type: text, text}; private_asset sends a private file without public URL. buttons: [{index, sub_type: url|quick_reply|copy_code, value}]. components: raw Cloud API components instead. Paid plans.

Field Type Required Description
to string|integer ✓ Yes International format, e.g. +31612345678.
template_name string ✓ Yes APPROVED template (list-templates).
language string ✓ Yes Language code as in list-templates, e.g. en_GB.
body_params array No Placeholder values (list or object).
header object No Media or text header.
buttons array No Dynamic button values.
components array No Raw components (advanced).
reference string No Your own reference.
phone_number_id string|integer No Required with more than one number.
POST send-media

One file to one recipient inside the 24-hour window. Exactly one source: private_asset (uploaded server-side, never public), media_id or link (public https). Document any type; image jpeg/png 5 MB; video mp4/3gpp and audio 16 MB; private_asset max 25 MB. Paid plans.

Field Type Required Description
to string|integer ✓ Yes International format.
kind string ✓ Yes document, image, video or audio.
private_asset string No Private asset path, e.g. "quotes/Q-1042.pdf".
media_id string|integer No Media uploaded to WhatsApp before.
link string No Public https URL.
filename string No File name shown (documents).
caption string No Caption (not audio).
reply_to string No wamid to reply to.
reference string No Your own reference.
phone_number_id string|integer No Required with more than one number.
POST mark-read

Mark incoming messages read, in WhatsApp and here: wamid = one, wa_id = all unread from that contact.

Field Type Required Description
wamid string No One incoming message.
wa_id string|integer No A contact.
phone_number_id string|integer No Required with more than one number.
POST list-templates

Message templates of the WhatsApp Business Account (needs waba_id): name, language, status (only APPROVED can be sent), category, components.

Field Type Required Description
status string No e.g. APPROVED.
name string No Name filter.
limit integer No 1..100, default 50.
after string No Paging cursor.
phone_number_id string|integer No Required with more than one number.
POST list-messages

Stored messages, newest first, in and out: type, text, media, status (received/read in; accepted/sent/delivered/read/failed out), error, reference, sent_by.

Field Type Required Description
wa_id string|integer No One contact.
reference string No Your reference.
wamid string No One message.
direction string No in or out.
type string No text, image, document, template, ...
status string No e.g. received, failed.
unread_only boolean No Incoming, not marked read.
since string No From date/time.
before string No Before date/time.
phone_number_id string|integer No One number.
limit integer No 1..200, default 50.
offset integer No Paging offset.
POST list-conversations

One row per contact, most recent first: name, message and unread count, last message, 24-hour window open. The office inbox view.

Field Type Required Description
unread_only boolean No Only contacts with unread messages.
phone_number_id string|integer No One number.
limit integer No 1..200, default 50.
offset integer No Paging offset.
POST check-window

Is the 24-hour window open for this contact, and until when? Closed: only send-template works.

Field Type Required Description
to string|integer ✓ Yes The contact.
phone_number_id string|integer No Required with more than one number.
POST download-media

Save the photo, document, voice note or video of an incoming message as a private asset (never public), e.g. whatsapp/31612345678/20261111-123.jpg. WhatsApp keeps media 30 days. Plan limits apply. Paid plans.

Field Type Required Description
wamid string ✓ Yes Incoming message with media.
POST list-events

Webhook audit (30 days): verified, verify_failed, processed, signature_failed, invalid, unknown_number.

Field Type Required Description
status string No Status filter.
limit integer No 1..200, default 50.
offset integer No Paging offset.
POST simulate-inbound

Test without Meta: a synthetic incoming text via the real parser and store, marked is_test. Nothing is sent.

Field Type Required Description
from string|integer ✓ Yes Test sender, international format.
text string ✓ Yes Message text.
contact_name string No Profile name.
reply_to string No wamid it replies to.
phone_number_id string|integer No Required with more than one number.
POST delete-messages

Delete stored messages: everything with one contact (wa_id, e.g. erasure) or a list of wamids. Saved private assets are listed, not deleted.

Field Type Required Description
wa_id string|integer No A contact.
wamids array No Message ids.
phone_number_id string|integer No One number.

MCP Tool Names

When using this integration through an AI assistant (Claude, ChatGPT, Cursor, etc.), the endpoints are available as MCP tools:

EndpointMCP Tool Name
configure whatsapp_configure
connection-status whatsapp_connection_status
remove-number whatsapp_remove_number
send-text whatsapp_send_text
send-template whatsapp_send_template
send-media whatsapp_send_media
mark-read whatsapp_mark_read
list-templates whatsapp_list_templates
list-messages whatsapp_list_messages
list-conversations whatsapp_list_conversations
check-window whatsapp_check_window
download-media whatsapp_download_media
list-events whatsapp_list_events
simulate-inbound whatsapp_simulate_inbound
delete-messages whatsapp_delete_messages
← Back to all integrations