curl --request GET \
--url https://app.thinnest.ai/api/v1/whatsapp/summary \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.thinnest.ai/api/v1/whatsapp/summary', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://app.thinnest.ai/api/v1/whatsapp/summary"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"from": "2026-09-01",
"to": "2026-09-30",
"timezone": "Asia/Kolkata",
"grain": "day",
"sent": 1820,
"delivered": 410,
"read": 1290,
"failed": 34,
"noReceipt": 86,
"received": 2210,
"series": [
{
"bucket": "2026-09-30T00:00:00",
"sent": 61,
"received": 70
}
],
"errors": [
{
"error": "131049",
"n": 21
}
],
"cost": {
"currency": "INR",
"totalMicro": 214350000,
"complete": true,
"byCategory": [
{
"category": "marketing",
"messages": 1200,
"costMicro": 191400000
},
{
"category": "utility",
"messages": 620,
"costMicro": 22950000
}
],
"lines": [
{
"category": "marketing",
"direction": "outbound",
"country": "IN",
"messages": 1200,
"callSeconds": 0,
"billable": 1200,
"costMicro": 191400000
}
]
}
}Get WhatsApp Summary
WhatsApp messages sent and received, how many were delivered, read or failed (with failure codes), a series, and what they cost you — the WhatsApp dashboard’s figures. Either a rolling days or a from/to range (inclusive, up to 366 days), in your workspace’s time zone; from/to wins when both are given. Any key may call this, a read-only key included.
curl --request GET \
--url https://app.thinnest.ai/api/v1/whatsapp/summary \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.thinnest.ai/api/v1/whatsapp/summary', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://app.thinnest.ai/api/v1/whatsapp/summary"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"from": "2026-09-01",
"to": "2026-09-30",
"timezone": "Asia/Kolkata",
"grain": "day",
"sent": 1820,
"delivered": 410,
"read": 1290,
"failed": 34,
"noReceipt": 86,
"received": 2210,
"series": [
{
"bucket": "2026-09-30T00:00:00",
"sent": 61,
"received": 70
}
],
"errors": [
{
"error": "131049",
"n": 21
}
],
"cost": {
"currency": "INR",
"totalMicro": 214350000,
"complete": true,
"byCategory": [
{
"category": "marketing",
"messages": 1200,
"costMicro": 191400000
},
{
"category": "utility",
"messages": 620,
"costMicro": 22950000
}
],
"lines": [
{
"category": "marketing",
"direction": "outbound",
"country": "IN",
"messages": 1200,
"callSeconds": 0,
"billable": 1200,
"costMicro": 191400000
}
]
}
}Authorizations
Your API key (ta_live_…) from Settings → API keys, sent as Authorization: Bearer <key>. Keep it on a server: it can message every customer you have. A key is full, build or read-only; a request its level does not allow is refused with 403.
Headers
Developers only: the customer workspace this request acts in — its org_… id from POST /customers. Leave it out to act in your own workspace.
"org_3fKq9TzQ1mN8vB2xR7cLpA"
Query Parameters
The rolling window. Ignored when from/to are given.
1 <= x <= 90Range start, YYYY-MM-DD, your time zone. Needs to.
Range end, YYYY-MM-DD, inclusive. Needs from.
Response
WhatsApp totals.
Your workspace's time zone.
hour for a one-day window, else day.
hour, day Messages sent by the agent or a person.
Sent messages whose latest receipt is delivered (not yet read).
Sent messages read.
Sent messages that failed.
Sent messages with no receipt yet.
Messages received from customers.
Show child attributes
Show child attributes
Failures by WhatsApp error code, most first.
Show child attributes
Show child attributes
What the window's WhatsApp messages cost you, priced as the WhatsApp dashboard prices them.
Show child attributes
Show child attributes
The rolling window, when asked by days. Absent with from/to.
Range start, when asked by from/to.
Range end, when asked by from/to.