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

EnvironmentURL
Productionhttps://production-api.shoutaboutus.com
Developmenthttps://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/dashboard group (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 (string Y-m-d, optional) — start of window.
  • Query: range_end (string Y-m-d, optional) — must be ≥ range_start. awaiting_response and comparison are 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. Contains previous_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

{
  "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

StatusMeaning
401The bearer token is missing, expired or invalid
422The request failed validation — the response names the fields
500Unexpected 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'

Did this page help you?