Skip to main content
The two WhatsApp endpoints are read-only: they let you list conversations with their transcripts and drill into a single conversation’s full message history — for reporting, quality review, or keeping a copy in your own CRM.
  • List WhatsApp conversationsGET /api/v2/public/whatsapp/conversations
  • List messages in a WhatsApp conversationGET /api/v2/public/whatsapp/conversations/{session_id}/messages
The endpoint pages document every parameter and field; this guide is about using them well.

Concepts

  • A conversation (a session) is one bounded WhatsApp conversation window with a single customer phone number. A customer accumulates several conversations over time as windows open and close.
  • Each conversation belongs to a client (when the number is matched to a contact) and contains an ordered list of messages.
  • Conversations carry a status (new, ai_handling, human_handling, resolved, expired), a direction (inbound / outbound), an optional disposition tag and an optional sentiment.

Who sent what

Three fields answer three different questions — do not confuse them: A single conversation routinely mixes several people and one or more AI agents (a bot handles the opening, a person takes over, another person closes it), which is why participants exists separately from assigned_users. participants is always complete — it covers the whole conversation even when you request include_messages=false or the transcript is truncated. Only identified senders appear; messages synced from the WhatsApp Business app carry no attributable sender and contribute to no entry.

Common requests

The fastest way to see what exists. participants is still fully populated.

Incremental sync

Do not re-download everything on each run:
1

Store the newest updated_at you have seen

Every conversation carries updated_at, which moves whenever a message arrives or the status, disposition or summary changes.
2

Ask only for what changed

On the next run pass that timestamp as updated_after and sort with sort_by=updated_at for predictable ordering:
3

Page through the result

Keep the same filters and increase offset by limit until you have read count items.

Long conversations

Each conversation embeds at most max_messages_per_session messages (default 500, oldest first). A longer transcript is truncated and flagged with has_more_messages: true — fetch the rest with the messages endpoint, paging with limit / offset:
The messages endpoint also returns the conversation’s full participants roster, so you never need a second call to the list endpoint just for that.

Sample conversation

Notes and limits

  • Read-only. These endpoints never modify conversations.
  • Media files are not downloadable — only kind, mime, filename and caption are returned.
  • Internal fields (model, tokens, cost, storage keys) are never exposed.
  • Additive changes. New fields may be added (sender and participants arrived this way, next to an unchanged sender_type). Ignore fields you do not recognise.
  • No rate limit is enforced today; page with limit ≤ 50 rather than looping on maximal payloads.