Review-response feed (account-friendly route alias)

Overview

Account-friendly alias of the review-response feed (Review-response feed) — same controller method, mounted under reports/response. This lets an account user reading their own reviews and a partner-admin reading across accounts both work. Returns the paginated feed, overall avg_rating, and the per-publisher KPI strip.

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/reports/response/feed

Authentication

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

  • Who can call it: Partner and Account tokens.

  • Mounted at the top-level reports/response group (no partner/account prefix, role-agnostic).

  • The reachable scope follows the caller's own auth company tree. With no narrowing params the feed defaults to every store under the authenticated user. An account-tradie sees only their stores; a partner-admin sees their whole tree.

  • store_id/client_location_id and account_id/client_account_id must sit inside your own account tree, which resolves client_* identifiers differently for account (bundle_id=3) vs partner (bundle_id=1) callers.

  • So the reachable set differs per role even though the params are identical.

Rate limit

  • No rate limit.

Request body

  • Body:
FieldTypeRequiredDescription
range_startstring Y-m-d H:i:soptionalStart of the review-date window; pair with range_end.
range_endstring Y-m-d H:i:soptionalEnd of window. Both bounds present and limit omitted ⇒ full (unpaginated) result; otherwise paginated.
limitintegeroptionalPage size. Default 10 (hard cap 25 for hipages users).
pageintegeroptionalPage number.
sort_fieldstringoptionalSort column.
sort_bystringoptionalOne of asc,ASC,desc,DESC.
typestringoptionalOne of report,download.
store_idintegeroptionalMust be an existing location; tree-scoped via an ownership check. Narrows to one store.
client_location_idstring (max 255)optionalAlternative to store_id;. Tree-scoped.
account_idintegeroptionalMust be an existing account with bundle_id=3, not soft-deleted; tree-scoped. Narrows to that account's stores.
client_account_idstring (max 255)optionalAlternative to account_id;. Tree-scoped; account vs partner resolution differs (see Auth).
is_pdfintegeroptional0 or 1; switches review-site logos to local asset paths.
review_site_idintegeroptionalFilter feed to one publisher.
ratinginteger or array of integersoptionalScalar normalized to array in prepareForValidation.
statusstringoptionalOne of complete,pending,escalate pending,escalated,error,flagged,removed.
searchstring (max 255)optionalKeyword search over reviewer/customer name, review body, review title, hipages job id, or store/location name.
{
  "range_start": "2024-01-01 00:00:00",
  "range_end": "2024-12-31 23:59:59",
  "store_id": 123,
  "rating": [
    4,
    5
  ],
  "status": "complete",
  "search": "Amanda",
  "limit": 10,
  "page": 1,
  "sort_by": "desc"
}

Response

  • data[] — per review: id, source_platform, review (id/reviewer/rating/message/review_date), reviewsite (id/name/link/review_site_logo/review_site_color/auth_type/scraping_enabled/posting_enabled), store (id/name/slug/address), store_reviewsite (id/url/landing_page_url/connection_status/is_connected), flag (chip array), plan, review_flag, is_flaggable, flag_status, flag_details, response_capabilities, response (or null), plus the hipages-only block (flagging,is_legacy,is_qualified,is_off_platform,classification_label,job_id,sub_dimensions,is_profanity,badges,has_history,moderation) when the row is a hipages review.
  • avg_rating (float) — overall average across scoped stores, 2dp.
  • kpi_by_publisher (array) — per-publisher tiles (review_site_id,review_site_name,review_site_color,rating,total_reviews,was_bridged); [] when no stores in scope.
  • Pagination meta (current_page,last_page,per_page,total) when paginated.

200 Success · 200

{
  "data": [
    {
      "id": 500,
      "source_platform": "google",
      "review": {
        "id": 500,
        "reviewer": "Jane Smith",
        "rating": 4.5,
        "message": "Great service!",
        "review_date": "2024-03-10T08:00:00.000000Z"
      },
      "reviewsite": {
        "id": 44,
        "name": "Google",
        "link": "https://google.com/maps",
        "review_site_logo": "https://cdn.example.com/img-google.png",
        "review_site_color": "#4285F4",
        "auth_type": "oauth",
        "scraping_enabled": true,
        "posting_enabled": true
      },
      "store": {
        "id": 15,
        "name": "Downtown Location - LOC-001",
        "slug": "downtown-location",
        "address": "123 Main St, New York, NY"
      },
      "store_reviewsite": {
        "id": 88,
        "url": "https://maps.google.com/...",
        "landing_page_url": null,
        "connection_status": "connected",
        "is_connected": true
      },
      "flag": [
        {
          "flag": "complete",
          "title": "This response has successfully been posted on the review site.",
          "statusColor": "success",
          "icon": "fa-regular:thumbs-up"
        }
      ],
      "plan": "Premium",
      "review_flag": null,
      "is_flaggable": true,
      "flag_status": "none",
      "flag_details": null,
      "response_capabilities": {
        "manual": true,
        "ai": true,
        "reason": null
      },
      "response": {
        "id": 300,
        "status": "complete",
        "public_contents": "Thank you for your review!",
        "private_contents": null,
        "response_date": "2024-03-11T10:00:00.000000Z",
        "deleted": null
      }
    }
  ],
  "avg_rating": 4.2,
  "kpi_by_publisher": [
    {
      "review_site_id": 44,
      "review_site_name": "Google",
      "review_site_color": "#4285F4",
      "rating": 4.2,
      "total_reviews": 148,
      "was_bridged": false
    }
  ],
  "links": {
    "first": "...?page=1",
    "last": "...?page=15",
    "prev": null,
    "next": "...?page=2"
  },
  "meta": {
    "current_page": 1,
    "from": 1,
    "last_page": 15,
    "per_page": 10,
    "to": 10,
    "total": 148
  }
}

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/reports/response/feed" \
  --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", "store_id": 123, "rating": [4, 5], "status": "complete", "search": "Amanda", "limit": 10, "page": 1, "sort_by": "desc"}'

Did this page help you?