Headline numbers

Overview

Get the period's totals for the account: reviews, rating, response rate, response time, reviews awaiting a response, and the sentiment split.

Reviews, rating and response rate also come with the previous period's value (*_previous): the window of the same length immediately before range_start.

Use this for a dashboard header.

You'll need a token and a date range.

Returns the KPI values.

Prerequisites

  • A bearer token. See Authentication.
  • A date range (range_start, range_end), both Y-m-d H:i:s.
  • Optional: a location (store_id or client_location_id) or an account (account_id or client_account_id) to narrow the report.

Base URL

EnvironmentURL
Productionhttps://production-api.shoutaboutus.com
Developmenthttps://development-api.shoutaboutus.com

Endpoint

POST /api/v1/reports/response/kpis

Authentication

Partner or Account token

  • Every id you send must be inside your own account tree; otherwise 422.
  • Scope, in order: store_id (or client_location_id) is one location; otherwise account_id (or client_account_id) is every location of that account; otherwise every location the token can see.
  • An Account token normally sends only store_id; a Partner token can send account_id or client_account_id to report on one account under the partner.

Rate limit

120 requests per minute, counted per user (the token’s user). See Rate limits.

Request parameters

None.

Request body

FieldTypeRequiredDescription
range_startstringYesStart of the period, Y-m-d H:i:s (e.g. 2026-01-01 00:00:00). A date without a time is rejected.
range_endstringYesEnd of the period, Y-m-d H:i:s (e.g. 2026-09-30 23:59:59).
store_idintegerNoOne location to report on. Must exist and be inside your account tree. Takes priority over every other scope field.
account_idintegerNoAn account to report on (all its locations). Must exist and be inside your account tree. Ignored when store_id or client_location_id is sent.
client_account_idstringNoYour own id for the account, instead of account_id. Up to 255 characters. Ignored when account_id is sent.
client_location_idstringNoYour own id for the location, instead of store_id. Up to 255 characters. Ignored when store_id is sent.

Request payload

{
  "range_start": "2026-09-01 00:00:00",
  "range_end": "2026-09-30 23:59:59",
  "store_id": 3007
}

Response body

The payload is inside data.

FieldTypeDescription
reviews_currentintegerReviews in the period.
reviews_previousintegerReviews in the previous period: the window of the same length immediately before range_start.
avg_ratingnumberAverage star rating of the period's reviews. 0 when there are none.
avg_rating_previousnumberAverage star rating in the previous period. 0 when there are none.
response_rate_pctnumberPercentage of the period's reviews that have a response of any kind. 0 when there are no reviews.
response_rate_pct_previousnumberThe same percentage for the previous period.
avg_response_time_in_daysstringAverage time to respond, in days, as text, e.g. "1.2 Days". "0 Days" when there are no responses.
awaiting_responseintegerReviews in the period with no response yet that the location may respond to (the review is newer than the location, or the plan covers past reviews).
reviews_sentimentsobjectThe period's reviews split into negative, positive and neutral.
reviews_sentiments.negativeReviewsintegerReviews rated below 3 stars.
reviews_sentiments.negativeReviews_percentnumberNegative reviews as a percentage of the period's reviews.
reviews_sentiments.positiveReviewsintegerReviews rated above 3 stars.
reviews_sentiments.positiveReviews_percentnumberPositive reviews as a percentage of the period's reviews.
reviews_sentiments.neutralReviewsintegerThe rest: 3-star reviews, and Facebook reviews with no star rating.
reviews_sentiments.neutralReviews_percentnumberNeutral reviews as a percentage of the period's reviews.

Response payload

{
  "data": {
    "reviews_current": 33,
    "reviews_previous": 37,
    "avg_rating": 4.33,
    "avg_rating_previous": 4.43,
    "response_rate_pct": 0,
    "response_rate_pct_previous": 0,
    "avg_response_time_in_days": "0 Days",
    "awaiting_response": 33,
    "reviews_sentiments": {
      "negativeReviews": 2,
      "negativeReviews_percent": 6.06,
      "positiveReviews": 27,
      "positiveReviews_percent": 81.82,
      "neutralReviews": 4,
      "neutralReviews_percent": 12.12
    }
  }
}

Examples

Success payload

One location, September 2026: see Response payload.

No reviews in the period:

{
  "data": {
    "reviews_current": 0,
    "reviews_previous": 0,
    "avg_rating": 0,
    "avg_rating_previous": 0,
    "response_rate_pct": 0,
    "response_rate_pct_previous": 0,
    "avg_response_time_in_days": "0 Days",
    "awaiting_response": 0,
    "reviews_sentiments": {
      "negativeReviews": 0,
      "negativeReviews_percent": 0,
      "positiveReviews": 0,
      "positiveReviews_percent": 0,
      "neutralReviews": 0,
      "neutralReviews_percent": 0
    }
  }
}

Error payload

422 Dates missing

{
  "message": "The range start field is required. (and 1 more error)",
  "errors": {
    "range_start": [
      "The range start field is required."
    ],
    "range_end": [
      "The range end field is required."
    ]
  }
}

422 Date not in Y-m-d H:i:s

{
  "message": "The range start field must match the format Y-m-d H:i:s.",
  "errors": {
    "range_start": [
      "The range start field must match the format Y-m-d H:i:s."
    ]
  }
}

422 Location outside your tree

{
  "message": "The selected store id does not belong to your company hierarchy.",
  "errors": {
    "store_id": [
      "The selected store id does not belong to your company hierarchy."
    ]
  }
}

422 Account outside your tree

{
  "message": "The selected account id does not belong to your company hierarchy.",
  "errors": {
    "account_id": [
      "The selected account id does not belong to your company hierarchy."
    ]
  }
}

429 Too many requests

{
  "message": "Too Many Attempts."
}
StatusMeaning
200The KPI values for the period.
401The token is missing, expired or invalid.
422A date is missing or not Y-m-d H:i:s, or an id doesn't exist or is outside your tree.
429More than 120 requests in a minute from this user.
500Unexpected server error.

Example request

curl --request POST \
  --url "https://production-api.shoutaboutus.com/api/v1/reports/response/kpis" \
  --header 'Authorization: Bearer <bearer-token>' \
  --header 'Accept: application/json' \
  --header 'Content-Type: application/json' \
  --data '{"range_start": "2026-09-01 00:00:00", "range_end": "2026-09-30 23:59:59", "store_id": 3007}'

Did this page help you?