Get KPI data counts
Overview
Top-row KPI tiles for the account dashboard: total reviews, average rating (hipages spans all connected sites), campaign request count, response-rate %, average response time (days), and reviews awaiting a response. When both range_start and range_end are supplied it also returns a comparison block of period-over-period trends. The comparison runs against the immediately-preceding window of equal length. Otherwise comparison is null and tiles are all-time.
Prerequisites
- A bearer token. Callable with Account tokens.
Base URL
| Environment | URL |
|---|---|
| Production | https://production-api.shoutaboutus.com |
| Development | https://development-api.shoutaboutus.com |
Endpoint
GET /api/v1/account/dashboard/reviews/count
Authentication
-
Requires a bearer token in the
Authorization: Bearer <bearer-token>header. -
Who can call it: Account tokens.
-
Mounted under the
account/dashboardgroup (role-agnostic). -
Scope is the caller's company tree.
-
store_id(if given) is validated by an ownership check; otherwise all of the caller's stores are used.
Rate limit
- No rate limit.
Query parameters
- Query:
store_id(integer, optional) — must belong to the caller's company; omit it to cover all of your locations. - Query:
review_site_id(integer, optional) — filter to one platform; must be an existing review site. - Query:
range_start(stringY-m-d, optional) — start of window. - Query:
range_end(stringY-m-d, optional) — must be ≥range_start.awaiting_responseandcomparisonare only populated when BOTH range params are supplied.
Response
data.reviews_count(integer) — qualifying reviews in window.data.avg_rating(float) — average rating (hipages spans all connected sites).data.request_count(integer) — sent email + SMS campaign requests.data.response_rate_pct(float) — responses / reviews × 100.data.avg_response_time(float) — average response time in days.data.awaiting_response(integer) — point-in-time backlog of reviews awaiting a response (0 unless a range is supplied).data.comparison(object|null) — null unless both range params given. Containsprevious_period({ range_start, range_end }) plus a comparison cell per windowed metric (reviews_count,avg_rating,request_count,response_rate_pct,avg_response_time). Each cell ={ current, previous, change_pct (float|null — null when previous is 0), direction ("up"|"down"|"flat") }.
200 Success · 200
200{
"data": {
"reviews_count": 150,
"avg_rating": 4.35,
"request_count": 200,
"response_rate_pct": 80.0,
"avg_response_time": 1.5,
"awaiting_response": 12,
"comparison": null
}
}Errors
| Status | Meaning |
|---|---|
401 | The bearer token is missing, expired or invalid |
422 | The request failed validation — the response names the fields |
500 | Unexpected server error |
Example request
curl --request GET \
--url "https://production-api.shoutaboutus.com/api/v1/account/dashboard/reviews/count?store_id=123&review_site_id=123&range_start=2026-01-01&range_end=2026-01-31" \
--header 'Authorization: Bearer <bearer-token>' \
--header 'Accept: application/json'Updated 9 days ago
