Partner reviews by publisher (lifetime)

Overview

Returns per-publisher lifetime totals (all-time review count + overall rating from the synced per-store review-site connections, hipages spans all connected sites). It also returns the selected-period review count and rating. Results are scoped to the partner.

Prerequisites

  • A bearer token. Callable with Partner tokens.

Base URL

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

Endpoint

POST /api/v1/partner/report/review-response/by-publisher

Authentication

  • Requires a bearer token in the Authorization: Bearer <bearer-token> header.

  • Who can call it: Partner tokens.

  • Mounted under the partner/report group.

  • Store set precedence: store_id → single store; else account_id (account); else all partner stores.

  • This handler does NOT translate client_location_id/client_account_id to ids (unlike its by-site sibling) — pass store_id/account_id directly.

  • All id params are guarded by an ownership check.

Rate limit

  • No rate limit.

Request body

  • Body:
FieldTypeRequiredDescription
range_startstringyesY-m-d H:i:s
range_endstringyesY-m-d H:i:s
store_idintegernobelongs to auth company
account_idintegernoaccount (bundle_id=3) under this partner
client_location_idstringnovalidated but NOT resolved by this handler
client_account_idstringnovalidated but NOT resolved by this handler
{
  "range_start": "2024-01-01 00:00:00",
  "range_end": "2024-12-31 23:59:59",
  "account_id": 7
}

Response

  • id (int) — review_site id
  • review_site (string) — display name (maps.googleGoogle)
  • review_site_logo (string) — S3 logo URL
  • review_site_color (string|null)
  • total_reviews (int) — lifetime/all-time total
  • overall_rating (float|null) — count-weighted lifetime rating
  • period_reviews (int) — reviews within the date range
  • period_rating (float|null) — average rating within range

200 OK · 200

{
  "data": [
    {
      "id": 44,
      "review_site": "Google",
      "review_site_logo": "https://s3.amazonaws.com/bucket/assets/review-sites/google_ic.png",
      "review_site_color": "#4285F4",
      "total_reviews": 5459,
      "overall_rating": 4.25,
      "period_reviews": 84,
      "period_rating": 4.61
    },
    {
      "id": 3,
      "review_site": "Facebook",
      "review_site_logo": "https://s3.amazonaws.com/bucket/assets/review-sites/facebook_ic.png",
      "review_site_color": "#1877F2",
      "total_reviews": 812,
      "overall_rating": 4.1,
      "period_reviews": 12,
      "period_rating": 4.5
    }
  ]
}

422 Validation error · 422

{
  "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 does not match the format Y-m-d H:i:s."]
  }
}

Errors

StatusMeaning
401The bearer token is missing, expired or invalid
422Validation error
500Unexpected server error

Example request

curl --request POST \
  --url "https://production-api.shoutaboutus.com/api/v1/partner/report/review-response/by-publisher" \
  --header 'Authorization: Bearer <bearer-token>' \
  --header 'Accept: application/json' \
  --header 'Content-Type: application/json' \
  --data '{"range_start": "2024-01-01 00:00:00", "range_end": "2024-12-31 23:59:59", "account_id": 7}'

Did this page help you?