WhatsAble
API v1Analytics

Count what the AI bots did in a period

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

Counts what the AI bots did from from to to: their turns, handoffs to a person, reply times, the labels they applied and their follow-ups. 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

What the AI bots did in the period.

application/json
  1. response

What the AI bots did in a period: turns, handoffs, reply times, labels and follow-ups. The same numbers as the AI 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.

turns*
handoffs*
reply_time*
quality*array<>

Replies the bot wrote and did not send, by reason, most first.

knowledge_used_rate*|

The share of sent replies that used the bot's knowledge documents, from 0 to 1.

labels_applied*array<>

Labels the bot applied, most first.

follow_ups*
Example Request
curl -X GET 'https://api.whatsable.app/v1/analytics/ai?from=string&to=string&time_zone=string'
Example Response
{  "object": "ai_analytics",  "from": "2026-10-01",  "to": "2026-10-02",  "time_zone": "America/Argentina/Buenos_Aires",  "number_id": null,  "turns": {    "total": 80,    "finished": 79,    "by_trigger": {      "inbound": 70,      "proactive": 10    },    "by_status": {      "sent": 74,      "discarded": 4,      "running": 1,      "failed": 1    }  },  "handoffs": {    "count": 6,    "rate": 0.0759,    "reasons": [      {        "reason": "asked_for_human",        "count": 4      },      {        "reason": null,        "count": 2      }    ]  },  "reply_time": {    "median_ms": 6200,    "p95_ms": 14800,    "target_ms": 25000  },  "quality": [    {      "reason": "guard_tripped",      "count": 3    },    {      "reason": "other",      "count": 1    }  ],  "knowledge_used_rate": 0.4054,  "labels_applied": [    {      "label_id": "cm2v8l1a00001qz8h2b3c4d5e",      "name": "Lead",      "count": 12    }  ],  "follow_ups": {    "sequences_armed": 9,    "sent": 7,    "outcomes": [      {        "outcome": "sent",        "count": 7      },      {        "outcome": "customer_replied",        "count": 2      }    ],    "replied": 3,    "awaiting_reply": 1,    "reply_rate": 0.5  }}