How do I list conversations?
Use GET /api/v2/reports/conversations with filters such as senderId, date range, status, labels, and pagination.
List conversation report records for the resolved WhatsApp sender.
Use Conversations APIs to fetch conversation reports, summaries, by-mobile threads, conversation details, and paginated messages.
Endpoint: GET /api/v2/reports/conversations. Conversation report APIs are read-only JSON endpoints under https://graph.whats91.com/api/v2/reports/conversations. Do not use /v2/reports/conversations; that twin path is intentionally not exposed for reporting APIs.
Use Authorization: Bearer w91_live_xxxxxxxxxxxxxxxxx. GET endpoints also accept authToken, auth_token, or token as query parameters for compatibility.
Conversation data is always scoped to the authenticated customer. Public APIs do not accept a userId filter.
/api/v2/reports/conversations| Parameter | Type | Required | Description |
|---|---|---|---|
Authorization | header | Required | Bearer w91_live_xxxxxxxxxxxxxxxxx. |
senderId | string | Optional | WhatsApp sender phone number. Optional when token scope/default sender resolves it. |
page | number | Optional | Positive integer. Default 1. |
limit | number | Optional | Positive integer. Default 50, max 200. |
dateFrom | string | Optional | YYYY-MM-DD. Applies to conversation activity time. |
dateTo | string | Optional | YYYY-MM-DD. Applies to conversation activity time. |
search | string | Optional | Matches contact name, phone, or last message. |
status | string | Optional | active, closed, blocked, or all. |
archived | boolean | Optional | true or false. |
unreadOnly | boolean | Optional | true or false. |
mobileNumber | string | Optional | Recipient phone filter. |
contactPhone | string | Optional | Recipient phone filter alias. |
lastDirection | string | Optional | inbound or outbound. |
labelUid | string | Optional | Filter conversations with an assigned label. |
includeLabelUids | string | Optional | Comma-separated labels to include. |
excludeLabelUids | string | Optional | Comma-separated labels to exclude. |
labelMatchMode | string | Optional | ANY or ALL. Default ANY. |
sortBy | string | Optional | last_message_at, updated_at, created_at, total_messages, or unread_count. |
sortOrder | string | Optional | ASC or DESC. |
curl "https://graph.whats91.com/api/v2/reports/conversations?senderId=919999999999&unreadOnly=true&page=1&limit=50" \
-H "Authorization: Bearer w91_live_xxx"{
"success": true,
"message": "Conversation reports retrieved",
"data": {
"senderId": "919999999999",
"phoneNumberId": "1234567890",
"conversations": [
{
"conversationId": 194977,
"contactPhone": "919343841961",
"contactName": "Prashant Tayal",
"senderPhoneNumber": "919999999999",
"phoneNumberId": "1234567890",
"lastMessageId": "wamid.xxxxx",
"lastMessageContent": "hi",
"lastMessageType": "text",
"lastMessageAt": "2026-06-05T06:08:48.000Z",
"lastMessageDirection": "inbound",
"unreadCount": 1,
"totalMessages": 2,
"isArchived": false,
"isPinned": false,
"isMuted": false,
"isBlocked": false,
"status": "active",
"labels": [
{ "uid": "lbl_support", "labelName": "Support" }
],
"createdAt": "2026-06-05T06:08:48.000Z",
"updatedAt": "2026-06-05T06:08:50.000Z"
}
],
"pagination": {
"page": 1,
"limit": 50,
"total": 1,
"totalPages": 1,
"count": 1,
"hasMore": false
}
},
"metadata": {
"apiVersion": "v2",
"requestId": "request-uuid"
}
}| Filter | Accepted values | Notes |
|---|---|---|
| status | active, closed, blocked, all | Conversation status filter. |
| archived and unreadOnly | true or false | Limit to archived or unread conversations. |
| lastDirection | inbound, outbound | Filter by last message direction. |
| labelUid, includeLabelUids, excludeLabelUids | Label UIDs | Comma-separated values are accepted for include/exclude filters. |
| labelMatchMode | ANY, ALL | Default ANY. |
| sortBy | last_message_at, updated_at, created_at, total_messages, unread_count | Conversation list sort field. |
| sortOrder | ASC, DESC | Sort direction. |
Use these examples as starting points for server-side implementations.
curl -X GET "https://graph.whats91.com/api/v2/reports/conversations" \
-H "Authorization: Bearer w91_live_xxx"const response = await fetch("https://graph.whats91.com/api/v2/reports/conversations", {
method: "GET",
headers: {
"Authorization": "Bearer w91_live_xxx",
"Content-Type": "application/json"
}
});
const data = await response.json();
console.log(data);$ch = curl_init("https://graph.whats91.com/api/v2/reports/conversations");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer w91_live_xxx",
"Content-Type: application/json"
]
]);
$response = curl_exec($ch);
curl_close($ch);
echo $response;import requests
response = requests.request(
"GET",
"https://graph.whats91.com/api/v2/reports/conversations",
headers={
"Authorization": "Bearer w91_live_xxx",
"Content-Type": "application/json",
}
)
print(response.json())using var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer w91_live_xxx");
var request = new HttpRequestMessage(HttpMethod.Get, "https://graph.whats91.com/api/v2/reports/conversations");
var response = await client.SendAsync(request);
Console.WriteLine(await response.Content.ReadAsStringAsync());Use GET /api/v2/reports/conversations with filters such as senderId, date range, status, labels, and pagination.
Yes. Use the conversation messages endpoint with the conversation identifier and pagination parameters.
Yes. Use the by-mobile endpoint to fetch conversation threads for a specific recipient number.
Return aggregate conversation totals for the same conversation filters.
List conversation thread summaries for one recipient mobile number.
List message reports with pagination, date filters, status filters, and sender scoping.
Webhook management requests, responses, and event payload samples for common Whats91 webhook flows.