#2655093 or #3441038), see the help center page
WhatsApp connection problems.
GET /api/v1/chats/{business_id} returns test conversations
The kind query parameter defaults to trainer, which returns the AI Trainer’s
sandbox conversations. Pass kind=real for real WhatsApp conversations, or
kind=all for both. Any other value returns 400.
Polling with since returns messages you’ve already seen
since is an ISO-8601 timestamp, exclusive (strictly newer than), and treated
as UTC when it has no offset. It filters which chats are returned — not the
messages embedded in each chat. Every returned chat still embeds its
messages_per_chat most recent messages (default 1, up to 200), regardless of
since.
To sync messages reliably:
- De-duplicate on the message
id, or - Fetch each changed chat’s thread from
GET /api/v1/chats/{chat_id}/messages.
403 plan_limit_rest_api
Personal access tokens vs. business API keys
- Create personal access tokens in the dashboard: avatar → Your settings → API Keys. The tab only appears when the plan includes the REST API.
- The token is shown once, at creation. Store it right away.
- Scopes are optional. A token with no scopes has your role’s full access;
narrow it with scopes such as
chat:read. - The media library endpoints (
/api/v1/businesses/library/imagesand/api/v1/businesses/library/documents) require a user credential — a JWT or a personal access token. A business API key gets401there.
A message is reported as sent, but never arrives
Meta accepts a free-form message sent outside the 24-hour customer-service window, returns a message id, and rejects it later, on the delivery status. Your send call succeeds; the failure shows up afterwards.- Check the delivery status with the MCP tool
get_whatsapp_message_status, or on the message in the conversation. - To (re)open a conversation, send an approved template: MCP
send_whatsapp_template_message, or RESTPOST /api/v1/chats/{chat_id}/messages/template. Template sends are never blocked by the window.
You can’t read media a customer sent
get_chat_messages returns media metadata (file name, type, message id), but
the media_url field is not a public download link. Use the MCP tool
download_media with the message to fetch the file itself.