Skip to content
API PlatformDevelopers
GET/v1/reports/summarystable

Workspace summary

Needs
Read your data (mcp:read)
Plan
Any plan with API access
Limits
300 a minute per key
Undo
Nothing to undo: this only reads.

One call for the headline numbers of a period: messages, conversations, new contacts, broadcasts and SLA breaches.

A metric this workspace cannot answer is null and listed in unavailable[] with the reason. Never read `null` as zero.

Try it

Query (4)

A named period. Default `last_7_days`. Weeks start on Monday.

First day, YYYY-MM-DD. Give `from` and `to` together; they override `preset`. Up to 186 days.

Last day (inclusive), YYYY-MM-DD.

IANA time zone, e.g. `Asia/Dubai`. Default: your workspace time zone.

This only reads. It uses your real data and changes nothing.

Code and response

curl -X GET 'https://mcp.wa-api.cloud/v1/reports/summary?preset=last_7_days' \
  -H "Authorization: Bearer $API_KEY"

The code reads your key from $API_KEY.

Parameters

Parameters
FieldTypeWhat it is
presetstring · queryA named period. Default last_7_days. Weeks start on Monday.one of: today, yesterday, last_7_days, last_14_days, last_30_days, this_month, last_month, this_week, last_week
fromstring · queryFirst day, YYYY-MM-DD. Give from and to together; they override preset. Up to 186 days.pattern ^\d{4}-\d{2}-\d{2}$
tostring · queryLast day (inclusive), YYYY-MM-DD.pattern ^\d{4}-\d{2}-\d{2}$
timezonestring · queryIANA time zone, e.g. Asia/Dubai. Default: your workspace time zone.1–64 characters

Headers

Headers
FieldTypeWhat it is
AuthorizationrequiredheaderBearer $API_KEY — your API key.
Api-VersionheaderThe API version to use, e.g. 2026-10-01. Default: the version your key is pinned to.one of: 2026-10-01 · pattern ^\d{4}-\d{2}-\d{2}$

Response 200

The summary.

Response fields
FieldTypeWhat it is
rangerequiredobjectThe range and timezone these numbers were counted in — always state it when reporting them.
fromrequiredstringFirst local day (YYYY-MM-DD), inclusive.
torequiredstringLast local day (YYYY-MM-DD), inclusive.
daysrequiredintegerNumber of local days in the range.-9007199254740991–9007199254740991
timezonerequiredstringIANA timezone the days were counted in.
started_atrequiredstringRange start as a UTC instant (ISO-8601).
ended_atrequiredstringRange end as a UTC instant (ISO-8601), exclusive.
presetrequiredstring or nullThe named range used, if any.
workspacerequiredobject
company_idrequiredstring or null
namerequiredstring or null
timezonerequiredstring or nullThe workspace timezone the platform holds; the range above says which timezone was actually used.
contacts_totalrequiredinteger or nullAll contacts ever (not the range).-9007199254740991–9007199254740991
messagesrequiredobject
sentrequiredinteger or null-9007199254740991–9007199254740991
deliveredrequiredinteger or null-9007199254740991–9007199254740991
readrequiredinteger or null-9007199254740991–9007199254740991
failedrequiredinteger or null-9007199254740991–9007199254740991
delivery_raterequirednumber or null
conversationsrequiredobject
closesrequiredinteger or nullConversations closed in the range (closing events).-9007199254740991–9007199254740991
distinct_conversationsrequiredinteger or null-9007199254740991–9007199254740991
reopenedrequiredinteger or null-9007199254740991–9007199254740991
median_close_secondsrequirednumber or null
waiting_nowrequiredinteger or nullWaiting on us right now (live, not part of the range).-9007199254740991–9007199254740991
unassigned_nowrequiredinteger or null-9007199254740991–9007199254740991
oldest_wait_buckets_nowrequiredobject or null
contactsrequiredobject
newrequiredinteger or nullContacts created in the range.-9007199254740991–9007199254740991
new_is_lower_boundrequiredbooleantrue = the platform has no count-by-date, the walk was cut short, and "new" is a minimum.
broadcastsrequiredobject
startedrequiredinteger or null-9007199254740991–9007199254740991
sentrequiredinteger or null-9007199254740991–9007199254740991
deliveredrequiredinteger or null-9007199254740991–9007199254740991
readrequiredinteger or null-9007199254740991–9007199254740991
failedrequiredinteger or null-9007199254740991–9007199254740991
opted_outrequiredinteger or null-9007199254740991–9007199254740991
slarequiredobject
runningrequiredboolean or nullIs SLA active for this workspace (plan AND module switch)?
breachesrequiredinteger or null-9007199254740991–9007199254740991
config_problemsrequiredinteger or null-9007199254740991–9007199254740991
agentsrequiredobject
sessionsrequiredinteger or nullAI-agent conversations started in the range (studio tests excluded).-9007199254740991–9007199254740991
handoffsrequiredinteger or nullOf those, handed over to a human.-9007199254740991–9007199254740991
resolution_raterequirednumber or null
chatbotsrequiredobject
sessionsrequirednullAlways null: The platform keeps no chatbot usage analytics.
notesrequiredarray of string
unavailablerequiredarray of objectMetrics that are UNKNOWN (missing data source), not zero. Say so when reporting; do not fill them in with 0.
metricrequiredstringWhich metric or section is missing, e.g. "messages.read".
reasonrequiredstringWhy it is missing (not supported by this server version, service not configured, forbidden, temporarily unavailable…).

Errors

Errors are application/problem+json. Branch on code.

StatusCodeWhen
400invalid_input

A field is missing or has the wrong format. errors[] points at each field. The range is reversed, in the future, longer than 186 days, or the time zone is unknown.

401unauthenticated

The Authorization header is missing, the key is unknown, expired or revoked.

403entitlement_required

The workspace's plan does not include API access (api_access).

403insufficient_scope

The key does not have the permission this operation needs.

429rate_limited

The key or workspace went over its rate limit. Wait for Retry-After seconds.

503upstream_unavailable

A service behind the API is briefly unavailable. Safe to retry with backoff.

Examples

Last 7 days

Response 200

{
  "range": {
    "from": "2026-09-17",
    "to": "2026-09-23",
    "days": 7,
    "timezone": "Asia/Dubai",
    "started_at": "2026-09-16T20:00:00Z",
    "ended_at": "2026-09-23T20:00:00Z",
    "preset": "last_7_days"
  },
  "messages": {
    "sent": 1840,
    "delivered": 1791,
    "read": 1422,
    "failed": 12,
    "delivery_rate": 0.973
  },
  "conversations": {
    "closes": 406,
    "reopened": 31,
    "median_close_seconds": 5400,
    "waiting_now": 9,
    "unassigned_now": 4,
    "distinct_conversations": null,
    "oldest_wait_buckets_now": null
  },
  "contacts": {
    "new": 233,
    "new_is_lower_bound": false
  },
  "broadcasts": {
    "started": 3,
    "sent": 5210,
    "delivered": 5096,
    "failed": 44,
    "read": null,
    "opted_out": null
  },
  "sla": {
    "breaches": 7,
    "running": null,
    "config_problems": null
  },
  "notes": [],
  "unavailable": [],
  "workspace": {
    "company_id": null,
    "name": null,
    "timezone": null,
    "contacts_total": null
  },
  "agents": {
    "sessions": null,
    "handoffs": null,
    "resolution_rate": null
  },
  "chatbots": {
    "sessions": null
  }
}

Operation path

The same operation is also at POST /v1/ops/reports_workspace_summary, with every field in the JSON body.