WhatsAble
API v1Analytics

Count the conversations of a period

gethttps://api.whatsable.app/v1/analytics/conversations
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/conversations?from=string&to=string&time_zone=string'

Counts the conversations and contacts that started from from to to, and how fast the team or the bot answered the customer first. 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 conversations of the period.

application/json
  1. response

Conversation counts and response times for a period. The same numbers as the Conversations section of the dashboard's Analytics page.

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.

new_conversations*integer

Conversations that started in the period.

Range0 <= value <= 9007199254740991
customer_started*integer

Of those, the ones the customer wrote first in.

Range0 <= value <= 9007199254740991
new_contacts*integer

Contacts added in the period.

Range0 <= value <= 9007199254740991
unanswered*integer

Customer-started conversations nobody has answered yet.

Range0 <= value <= 9007199254740991
first_response*

Over the customer-started conversations. An away message or a keep-alive is not an answer.

first_responder*

Who answered first: a person of the team, the AI bot, or anything else.

response_times*

Customer-started conversations by time to the first answer.

series*array<>

One entry per day or week, oldest first.

Example Request
curl -X GET 'https://api.whatsable.app/v1/analytics/conversations?from=string&to=string&time_zone=string'
Example Response
{  "object": "conversation_analytics",  "from": "2026-10-01",  "to": "2026-10-02",  "time_zone": "America/Argentina/Buenos_Aires",  "number_id": null,  "granularity": "day",  "new_conversations": 30,  "customer_started": 26,  "new_contacts": 18,  "unanswered": 2,  "first_response": {    "median_ms": 95000,    "within_5m_rate": 0.625,    "within_1h_rate": 0.9167  },  "first_responder": {    "human": 10,    "bot": 14,    "other": 0  },  "response_times": {    "under_1m": 8,    "1m_to_5m": 7,    "5m_to_15m": 4,    "15m_to_1h": 3,    "1h_to_24h": 2,    "over_24h": 0,    "unanswered": 2  },  "series": [    {      "date": "2026-10-01",      "new_conversations": 16    },    {      "date": "2026-10-02",      "new_conversations": 14    }  ]}