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

EnvironmentURL
Productionhttps://production-api.shoutaboutus.com
Developmenthttps://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_id must 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):
FieldTypeRequiredDescription
store_idintegeryesMust 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-services or food-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

{
  "data": {
    "themes": [
      {
        "slug": "home-services",
        "label": "Home Services",
        "kpis": []
      },
      {
        "slug": "food-dining",
        "label": "Food Dining",
        "kpis": []
      }
    ]
  }
}

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 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}'

Did this page help you?