Count what the AI bots did in a period
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.
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.
bearerAuthAuthorizationBearer <nfy_live_<32 characters>>An API key from Settings > API keys, sent as Authorization: Bearer <key>.
from*stringThe first day, YYYY-MM-DD, in time_zone.
^\d{4}-\d{2}-\d{2}$to*stringThe last day, YYYY-MM-DD, in time_zone. At most 90 days after from, counting both.
^\d{4}-\d{2}-\d{2}$time_zone*stringThe IANA time zone the days are read in, such as America/Argentina/Buenos_Aires.
1 <= length <= 64number_id?stringOnly 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.
1 <= length <= 64What the AI bots did in the period.
application/json- 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*stringfrom*stringThe first day, as requested.
to*stringThe last day, as requested.
time_zone*stringnumber_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*curl -X GET 'https://api.whatsable.app/v1/analytics/ai?from=string&to=string&time_zone=string'{ "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 }}Count the conversations of a period GET
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.
List the broadcasts of a period and how each did GET
Lists the broadcasts started from `from` to `to`, newest first and at most 200, with their recipients and their sent, failed and read counts. The table is the one the Analytics page of the dashboard shows.