Lifetime reviews by site
Overview
Get all-time totals by site for the account, next to the same site's figures for the period you choose.
Use this for a big-picture view.
You'll need a token and a date range. total_reviews and overall_rating are all-time; period_reviews and period_rating cover the date range.
Returns totals per site, the site with the most reviews first.
Prerequisites
- A bearer token. See Authentication.
- A date range (
range_start,range_end), bothY-m-d H:i:s. - Optional: a location id (
store_id). Leave it out to report on every location your token can see.
Base URL
| Environment | URL |
|---|---|
| Production | https://production-api.shoutaboutus.com |
| Development | https://development-api.shoutaboutus.com |
Endpoint
POST /api/v1/reports/response/reviews/publisher
Authentication
Partner or Account token
store_idmust be inside your own account tree; otherwise422.- Without
store_id, the report covers every location the token can see: every location under the partner for a Partner token, the account's locations for an Account token, or only the assigned locations for a user limited to some locations. - There are no
account_idorclient_*fields here.
Rate limit
120 requests per minute, counted per user (the token’s user). See Rate limits.
Request parameters
None.
Request body
| Field | Type | Required | Description |
|---|---|---|---|
range_start | string | Yes | Start 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_end | string | Yes | End of the period, Y-m-d H:i:s (e.g. 2026-09-30 23:59:59). |
store_id | integer | No | One location to report on. Must exist and be inside your account tree. Leave it out to cover every location your token can see. |
Request payload
{
"range_start": "2026-01-01 00:00:00",
"range_end": "2026-09-30 23:59:59",
"store_id": 3007
}Response body
data is an array with one row per review site, sorted by total_reviews, highest first. Sites with no reviews at all are left out; it's [] when there are none.
| Field | Type | Description |
|---|---|---|
data[] | array of objects | One row per review site, most reviews first. [] when there are none. |
data[].id | integer | The review site's id (review_site_id). |
data[].review_site | string | The review site's display name, e.g. Google. |
data[].review_site_logo | string | URL of the site's logo. |
data[].review_site_color | string or null | The site's brand colour as a hex code, e.g. #4285F4. |
data[].total_reviews | integer | All-time review count: the platform's own count where it has been synced, otherwise the number of reviews we hold. |
data[].overall_rating | number or null | All-time rating, weighted by each location's review count. null when there's no rating. |
data[].period_reviews | integer | Reviews within the date range. |
data[].period_rating | number or null | Average star rating within the date range. null when no rated reviews fall in it. |
Response payload
{
"data": [
{
"id": 44,
"review_site": "Google",
"review_site_logo": "https://d2ny6zb7otrnhl.cloudfront.net/assets/backend/images/logos/google_ic.png",
"review_site_color": "#4285F4",
"total_reviews": 684,
"overall_rating": 4.2,
"period_reviews": 223,
"period_rating": 4.4
}
]
}Examples
Success payload
One location: see Response payload.
No reviews:
{
"data": []
}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."
]
}
}429 Too many requests
{
"message": "Too Many Attempts."
}| Status | Meaning |
|---|---|
200 | One row per review site, or [] when there are none. |
401 | The token is missing, expired or invalid. |
422 | A date is missing or not Y-m-d H:i:s, or store_id doesn't exist or is outside your tree. |
429 | More than 120 requests in a minute from this user. |
500 | Unexpected server error. |
Example request
curl --request POST \
--url "https://production-api.shoutaboutus.com/api/v1/reports/response/reviews/publisher" \
--header 'Authorization: Bearer <bearer-token>' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data '{"range_start": "2026-01-01 00:00:00", "range_end": "2026-09-30 23:59:59", "store_id": 3007}'Updated 17 days ago
Did this page help you?
