Annual volume + rating chart (account-only)
Overview
Returns the last 12 months (relative to date) of per-month data for an account or a single store. Each month carries review volume, average rating, cumulative overall rating, and response counts. This drives the annual volume + rating chart.
Prerequisites
- A bearer token. Callable with Partner and Account tokens.
Base URL
| Environment | URL |
|---|---|
| Production | https://production-api.shoutaboutus.com |
| Development | https://development-api.shoutaboutus.com |
Endpoint
POST /api/v1/graph/annual-volume
Authentication
-
Requires a bearer token in the
Authorization: Bearer <bearer-token>header. -
Who can call it: Partner and Account tokens.
-
Mounted under the top-level
api.group, not apartner/*prefix. -
Every identifier param runs through an ownership check, which resolves the target to a company id and rejects anything outside the caller's tree.
-
An account caller (
bundle_id=3) passes its ownaccount_id/store_idor its ownclient_account_id/client_location_id. -
A partner caller (
bundle_id=1) may pass any account/store under its child tree. External client ids are resolved against the partner's full descendant set. -
account_idmust reference abundle_id=3(account) company row.
Rate limit
- No rate limit.
Request body
- Body:
| Field | Type | Required | Description |
|---|---|---|---|
account_id | integer | required* | A the account's id with bundle_id=3 (an account). Required unless supply one of store_id / client_location_id / client_account_id. Must belong to the caller's hierarchy. Expands to all child store ids. |
store_id | integer | required* | A single the location's id. Required unless supply one of account_id / client_location_id / client_account_id. Must belong to the caller's hierarchy. |
client_location_id | string (max 255) | optional | Partner-supplied external store identifier; resolved to a store_id. Scoped by an ownership check. |
client_account_id | string (max 255) | optional | Partner-supplied external account identifier; resolved to an account_id. Scoped by an ownership check. |
review_site_id | integer | optional | Filters reviews/responses to one review site's id (e.g. Google, Yelp). |
date | string (Y-m-d) | optional | Reference date; the 12-month window ends at this month. Defaults to today. |
*At least one of account_id, store_id, client_location_id, client_account_id is required (required_without_all).
{
"account_id": 1,
"review_site_id": 44,
"date": "2026-06-01"
}Response
data.status(string) — always"success".data[].month(string) — month label formattedF-Y, e.g."June-2026".data[].reviews(int) — count of qualifying reviews in that month.data[].avg_rating(float) — averagerateof that month's reviews (0 if none).data[].overall_rating(float) — cumulative averagerateof all qualifying reviews up to and including the end of that month.data[].responses(int) — count of reviews in that month that have a recorded response.
200 Success · 200
200{
"data": {
"status": "success",
"data": [
{ "month": "July-2025", "reviews": 3, "avg_rating": 4.55, "overall_rating": 4.99, "responses": 3 },
{ "month": "August-2025", "reviews": 0, "avg_rating": 0, "overall_rating": 4.99, "responses": 0 }
]
}
}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 POST \
--url "https://production-api.shoutaboutus.com/api/v1/graph/annual-volume" \
--header 'Authorization: Bearer <bearer-token>' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data '{"account_id": 1, "review_site_id": 44, "date": "2026-06-01"}'Updated 11 days ago
