WhatsAble
API v1Analytics

Count the messages of a period

gethttps://api.whatsable.app/v1/analytics/messages
Build a request to copy

This page never sends a request. Fill in the fields, then copy the request and run it from your server.

Request
curl -X GET 'https://api.whatsable.app/v1/analytics/messages?from=string&to=string&time_zone=string'

Counts the messages sent, delivered, read, failed and received from from to to, by day or by week. The numbers are the ones the Analytics page of the dashboard shows.

A key on every number may leave out number_id and counts the whole organization. A key limited to some numbers must name one of them in number_id, otherwise 403 number_not_allowed_for_key.

Authorization

bearerAuth
headerAuthorizationBearer <nfy_live_<32 characters>>

An API key from Settings > API keys, sent as Authorization: Bearer <key>.

Query Parameters

from*string

The first day, YYYY-MM-DD, in time_zone.

Match^\d{4}-\d{2}-\d{2}$
to*string

The last day, YYYY-MM-DD, in time_zone. At most 90 days after from, counting both.

Match^\d{4}-\d{2}-\d{2}$
time_zone*string

The IANA time zone the days are read in, such as America/Argentina/Buenos_Aires.

Length1 <= length <= 64
number_id?string

Only this number. A key limited to some numbers must name one of them; a key on every number may leave it out for the whole organization.

Length1 <= length <= 64

Response Body

The counts of the period.

application/json
  1. response

Message counts for a period: what was sent, delivered, read, failed and received. The same numbers as the Analytics page of the dashboard.

object*string
from*string

The first day, as requested.

to*string

The last day, as requested.

time_zone*string
number_id*|

The number counted, or null for every number of the organization.

granularity*|

day up to 31 days, else week: buckets start on Monday, and the first one on from.

counts*
read_rate*|

read divided by sent, from 0 to 1. Null when nothing was sent.

delivery_rate*|

delivered divided by sent, from 0 to 1. Null when nothing was sent.

series*array<>

One entry per day or week, oldest first.

by_sender*array<>

Outbound messages by sender, most first. The counts add up to counts.total_sent.

top_failures*array<>

The five most frequent failure codes, most first.

Example Request
curl -X GET 'https://api.whatsable.app/v1/analytics/messages?from=string&to=string&time_zone=string'
Example Response
{  "object": "message_analytics",  "from": "2026-10-01",  "to": "2026-10-02",  "time_zone": "America/Argentina/Buenos_Aires",  "number_id": null,  "granularity": "day",  "counts": {    "total_sent": 120,    "sent": 116,    "delivered": 110,    "read": 84,    "failed": 4,    "received": 95  },  "read_rate": 0.7241,  "delivery_rate": 0.9483,  "series": [    {      "date": "2026-10-01",      "sent": 60,      "delivered": 57,      "read": 44,      "failed": 1,      "received": 50    },    {      "date": "2026-10-02",      "sent": 56,      "delivered": 53,      "read": 40,      "failed": 3,      "received": 45    }  ],  "by_sender": [    {      "sent_by": "bot",      "count": 70    },    {      "sent_by": "operator",      "count": 50    }  ],  "top_failures": [    {      "meta_code": 131026,      "count": 3    },    {      "meta_code": null,      "count": 1    }  ]}