Whats91
Developers

List message reports with pagination, date filters, status filters, and sender scoping.

All Message Reports

Summary

Use Reports APIs to fetch message reports, statuses, mobile-number history, campaign reporting, and delivery analytics.

Prerequisites

  • Bearer token authentication
  • Date filters or identifiers for scoped report lookups

Public message reporting APIs are read-only JSON endpoints under the canonical reports base URL. Do not use /v2/reports; that twin path is intentionally not exposed for report management.

Reports base URL
https://graph.whats91.com/api/v2/reports

Authentication

Use a public API token in the Authorization header. GET endpoints also accept authToken, auth_token, or token as query parameters for compatibility.

Authorization header
Authorization: Bearer w91_live_xxxxxxxxxxxxxxxxx

List Messages API

Endpoint: GET /api/v2/reports/messages.

GET/api/v2/reports/messages
ParameterTypeRequiredDescription
senderIdstringOptionalWhatsApp sender phone number. Optional when token scope/default sender resolves it.
pagenumberOptionalPositive integer. Default 1.
limitnumberOptionalPositive integer. Default 50, max 200.
dateFromstringOptionalYYYY-MM-DD. Defaults to the last 30 days for live message reports.
dateTostringOptionalYYYY-MM-DD. Defaults to today for live message reports.
storagestringOptionallive or archive. Default live.
statusstringOptionalaccepted, sent, delivered, read, failed, pending, or another supported report status.
receiverstringOptionalRecipient phone number.
campaignUidstringOptionalFilter reports by campaign UID.
templateNamestringOptionalFilter reports by template name.
messageTypestringOptionaltemplate, text, image, document, or another message type.
sourceTypestringOptionalPUBLIC_API, CAMPAIGN, CHATBOT, FLOW, or another source type.
List delivered reports
curl "https://graph.whats91.com/api/v2/reports/messages?senderId=919999999999&status=delivered&limit=50" \
  -H "Authorization: Bearer w91_live_xxx"
Success Response
{
  "success": true,
  "message": "Message reports retrieved",
  "data": {
    "senderId": "919999999999",
    "phoneNumberId": "1234567890",
    "reports": [
      {
        "reportUid": "msg_uid",
        "messageId": "wamid.xxxxx",
        "receiver": "918888888888",
        "sourceType": "CAMPAIGN",
        "campaignUid": "campaign_uid",
        "templateName": "payment_reminder",
        "messageType": "template",
        "status": "delivered",
        "latestStatus": "delivered",
        "occurredAt": "2026-06-05T08:00:00.000Z"
      }
    ],
    "pagination": {
      "page": 1,
      "limit": 50,
      "total": 1,
      "totalPages": 1,
      "count": 1,
      "hasMore": false
    }
  },
  "metadata": {
    "apiVersion": "v2",
    "requestId": "request-uuid"
  }
}

Common errors

HTTPError codeMeaning
401MISSING_AUTH_TOKENNo bearer/query token was supplied.
401INVALID_AUTH_TOKENToken is invalid, expired, revoked, or user inactive.
403SENDER_NOT_ALLOWEDNumber-scoped token attempted another sender.
403FEATURE_NOT_AVAILABLESubscription does not include the requested report feature.
400VALIDATION_FAILEDInvalid date range, pagination, storage, or missing required query field.

SDK Examples

Use these examples as starting points for server-side implementations.

cURL
curl -X GET "https://graph.whats91.com/api/v2/reports/messages" \
  -H "Authorization: Bearer w91_live_xxx"
Node.js
const response = await fetch("https://graph.whats91.com/api/v2/reports/messages", {
  method: "GET",
  headers: {
    "Authorization": "Bearer w91_live_xxx",
    "Content-Type": "application/json"
  }
});

const data = await response.json();
console.log(data);
PHP
$ch = curl_init("https://graph.whats91.com/api/v2/reports/messages");
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;
Python
import requests

response = requests.request(
    "GET",
    "https://graph.whats91.com/api/v2/reports/messages",
    headers={
        "Authorization": "Bearer w91_live_xxx",
        "Content-Type": "application/json",
    }
)

print(response.json())
C#
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/messages");

var response = await client.SendAsync(request);
Console.WriteLine(await response.Content.ReadAsStringAsync());

Frequently Asked Questions

How do I fetch message reports?

Use GET /api/v2/reports with pagination and filters such as sender, status, date range, and mobile number.

Can I look up one message status?

Yes. Use the message status endpoint with the required message identifier to retrieve the current report status.

Are reports real-time?

Reports reflect Whats91 processing and webhook updates. Use Webhooks for real-time event delivery and Reports for querying stored state.

Related APIs