List available themes
Overview
Returns the live competitive-report theme list (slug + label + KPIs) from ReviewData for the store's partner. It falls back to the shipped defaults (home-services / food-dining) when RD is unreachable or the partner has no RD api key. Pure read — never counts usage.
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/account/competitive-report/themes
Authentication
-
Requires a bearer token in the
Authorization: Bearer <bearer-token>header. -
Who can call it: Partner and Account tokens.
-
This endpoint is available under the authenticated group rather than partner-only access.
-
Unlike the other three endpoints, it validates requests inline in the controller.
store_idmust be a required integer, reference an existing location, and pass an ownership check through the account hierarchy. -
The service resolves the store's parent partner and uses that partner's ReviewData API key.
-
As a result, the available themes follow the store's partner regardless of role.
Rate limit
- No rate limit.
Request body
- Body (success wrapped as
{ data. }, HTTP 200):
| Field | Type | Required | Description |
|---|---|---|---|
store_id | integer | yes | Must be an existing location inside your own account tree. |
{
"store_id": 42
}Response
data.themes(array of objects) — from ReviewData when available; otherwise, the default themes. Each default item contains:slug(string) — for example,home-servicesorfood-dining.label(string) — the display label.kpis(array) — KPI definitions. This is empty ([]) for defaults and populated when ReviewData returns live themes.
200 OK · 200
200{
"data": {
"themes": [
{
"slug": "home-services",
"label": "Home Services",
"kpis": []
},
{
"slug": "food-dining",
"label": "Food Dining",
"kpis": []
}
]
}
}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/account/competitive-report/themes" \
--header 'Authorization: Bearer <bearer-token>' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data '{"store_id": 42}'Updated 11 days ago
