---
updatedAt: 2026-10-01T15:02:09.000Z
agentTools:
  projectIndex: https://docs.shoutaboutus.com/llms.txt
---

# Get reviews for a location

Get reviews as a paginated list, newest first, each with its response (if any), the location and site it came from, its flag status, and whether you can respond to it. Also returns the average rating and a per-site summary for the reviews in scope. This is the first call most integrations make: use it to build a review feed, sync reviews into your own system, or find reviews that still need a response. Optional filters: `store_id` or `client_location_id` for one location; `account_id` or `client_account_id` for one account; leave both out for everything under your partner. Also `review_site_id`, `rating`, response `status` (or `awaiting_response` for reviews with no reply yet), a date range, and a keyword `search`. Page size defaults to 10. To keep your own copy in sync, send `updated_since` with the time of your last sync, and `include_removed: true` to also get the reviews removed since then. Each review carries `external_review_id`, `created_at`, `updated_at` and `deleted_at`. Each entry includes `response_capabilities`, telling you whether a manual or AI response is possible right now and, if not, why.

**Prerequisites:** a bearer token. Optional: a location or an account to narrow the feed.

**Authentication:** Partner token. Without a location or account, the feed covers every location under the partner; `store_id`, `client_location_id`, `account_id` and `client_account_id` must be inside your own account tree, otherwise `422`. Account tokens use `POST /api/v1/reports/response/feed`, with the same request and response.

**Rate limit:** 300 requests per minute, counted per user (the token’s user).

# OpenAPI definition

```json
{
  "openapi": "3.0.0",
  "info": {
    "title": "Shout About Us API",
    "description": "The Shout About Us API for monitoring and responding to reviews across Google, Facebook, Trustpilot and more, running review-request campaigns, and viewing analytics.\n\n**Base path:** most endpoints are versioned under `/api/v1`; the OAuth token endpoint lives at the server root.\n\n**Authentication:** send a **Bearer** token (a Personal access token from the dashboard's API Keys page, or an App credentials (OAuth 2.0) access token) in the `Authorization` header. Public endpoints are marked per-endpoint.",
    "contact": {
      "name": "Shout About Us Support",
      "email": "techsupport@shoutaboutus.com"
    },
    "version": "1.0.0"
  },
  "servers": [
    {
      "url": "https://production-api.shoutaboutus.com",
      "description": "Production"
    },
    {
      "url": "https://development-api.shoutaboutus.com",
      "description": "Development"
    }
  ],
  "security": [
    {
      "bearerAuth": []
    }
  ],
  "paths": {
    "/api/v1/partner/report/review-response/feed": {
      "post": {
        "tags": [
          "Review-response reports"
        ],
        "summary": "Get reviews for a location",
        "operationId": "postPartnerReportReviewResponseFeed",
        "description": "Get reviews as a paginated list, newest first, each with its response (if any), the location and site it came from, its flag status, and whether you can respond to it. Also returns the average rating and a per-site summary for the reviews in scope. This is the first call most integrations make: use it to build a review feed, sync reviews into your own system, or find reviews that still need a response. Optional filters: `store_id` or `client_location_id` for one location; `account_id` or `client_account_id` for one account; leave both out for everything under your partner. Also `review_site_id`, `rating`, response `status` (or `awaiting_response` for reviews with no reply yet), a date range, and a keyword `search`. Page size defaults to 10. To keep your own copy in sync, send `updated_since` with the time of your last sync, and `include_removed: true` to also get the reviews removed since then. Each review carries `external_review_id`, `created_at`, `updated_at` and `deleted_at`. Each entry includes `response_capabilities`, telling you whether a manual or AI response is possible right now and, if not, why.\n\n**Prerequisites:** a bearer token. Optional: a location or an account to narrow the feed.\n\n**Authentication:** Partner token. Without a location or account, the feed covers every location under the partner; `store_id`, `client_location_id`, `account_id` and `client_account_id` must be inside your own account tree, otherwise `422`. Account tokens use `POST /api/v1/reports/response/feed`, with the same request and response.\n\n**Rate limit:** 300 requests per minute, counted per user (the token’s user).",
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "range_start": {
                    "type": "string",
                    "description": "Start of the review-date window, `Y-m-d H:i:s`. Use with `range_end`.",
                    "example": "2026-01-01 00:00:00",
                    "pattern": "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$",
                    "default": "2026-01-01 00:00:00"
                  },
                  "range_end": {
                    "type": "string",
                    "description": "End of the window, `Y-m-d H:i:s`. When both dates are sent and `limit` is left out, every matching review is returned in one response, without paging.",
                    "example": "2026-12-31 23:59:59",
                    "pattern": "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$",
                    "default": "2026-12-31 23:59:59"
                  },
                  "limit": {
                    "type": "integer",
                    "description": "Page size, 10–100. Default `10`. Values below 10 are raised to 10; above 100 returns `422`. Eligible partners default to 25, and a larger value is lowered to 25 without an error.",
                    "example": 10,
                    "minimum": 10,
                    "maximum": 100,
                    "default": 10
                  },
                  "page": {
                    "type": "integer",
                    "description": "The page to return, from `1`.",
                    "example": 1,
                    "minimum": 1,
                    "default": 1
                  },
                  "sort_field": {
                    "type": "string",
                    "description": "Sort by `review_date`, `rating`, `rate` (same as `rating`), `reviewer`, `created_at`, `updated_at`, `response_date` or `store_name`. Applied only with `sort_by`. Default order: `review_date`, newest first.",
                    "example": "review_date",
                    "enum": [
                      "review_date",
                      "rating",
                      "rate",
                      "reviewer",
                      "created_at",
                      "updated_at",
                      "response_date",
                      "store_name"
                    ],
                    "default": "review_date"
                  },
                  "sort_by": {
                    "type": "string",
                    "description": "`asc` or `desc`.",
                    "example": "desc",
                    "enum": [
                      "asc",
                      "desc"
                    ],
                    "default": "desc"
                  },
                  "type": {
                    "type": "string",
                    "description": "`report` or `download`.",
                    "enum": [
                      "report",
                      "download"
                    ],
                    "example": "report",
                    "default": "report"
                  },
                  "store_id": {
                    "type": "integer",
                    "description": "Only this location. Must exist and be inside your account tree.",
                    "example": 3007,
                    "default": 3007
                  },
                  "client_location_id": {
                    "type": "string",
                    "description": "Your own id for the location, instead of `store_id`. Up to 255 characters.",
                    "maxLength": 255,
                    "example": "docs-test-loc-001",
                    "default": "docs-test-loc-001"
                  },
                  "account_id": {
                    "type": "integer",
                    "description": "Only this account's locations. Must be an active account inside your account tree.",
                    "example": 5994,
                    "default": 5994
                  },
                  "client_account_id": {
                    "type": "string",
                    "description": "Your own id for the account, instead of `account_id`. Up to 255 characters.",
                    "maxLength": 255,
                    "example": "ACC-001",
                    "default": "ACC-001"
                  },
                  "is_pdf": {
                    "type": "integer",
                    "description": "`0` or `1`. `1`: logo URLs point at the API host instead of the CDN.",
                    "enum": [
                      0,
                      1
                    ],
                    "example": 0,
                    "default": 0
                  },
                  "review_site_id": {
                    "type": "integer",
                    "description": "Only reviews from this review site.",
                    "example": 44,
                    "default": 44
                  },
                  "rating": {
                    "type": "array",
                    "items": {
                      "type": "integer"
                    },
                    "description": "Only these star ratings, e.g. `[4, 5]`. A single number is accepted too.",
                    "example": [
                      4,
                      5
                    ],
                    "default": [
                      4,
                      5
                    ]
                  },
                  "status": {
                    "type": "string",
                    "description": "Only reviews whose response is `complete`, `pending`, `error`, `flagged` or `removed`; or `awaiting_response`: reviews with no response yet that the location may respond to under its plan (the same set as the dashboard's Awaiting Response count).",
                    "example": "awaiting_response",
                    "enum": [
                      "complete",
                      "pending",
                      "error",
                      "flagged",
                      "removed",
                      "awaiting_response"
                    ],
                    "default": "awaiting_response"
                  },
                  "search": {
                    "type": "string",
                    "description": "Matches part of the reviewer or customer name, the review text or title, the job id, or the location name. Up to 255 characters.",
                    "example": "clean",
                    "maxLength": 255,
                    "default": "clean"
                  },
                  "created_since": {
                    "type": "string",
                    "example": "2026-10-01 00:00:00",
                    "description": "Only reviews we collected at or after this time, UTC, `Y-m-d H:i:s`. Compares against `created_at`.",
                    "default": "2026-10-01 00:00:00"
                  },
                  "updated_since": {
                    "type": "string",
                    "example": "2026-10-01 00:00:00",
                    "description": "Only reviews that changed at or after this time, UTC, `Y-m-d H:i:s`. Compares against `updated_at`; with `include_removed`, also matches reviews removed at or after it. Send the time of your last sync to get only what changed. A change is a new review, an edit to its rating, text, reviewer name or date, a moderation change (for example hidden or suppressed), a removal or a restore. A new, edited or deleted reply, a change to its posting status, and a change to a removal request (flag) count too, so `updated_since` alone keeps reviews, replies and flags current. The `response_*` and `flag_*` webhooks only tell you sooner.",
                    "default": "2026-10-01 00:00:00"
                  },
                  "include_removed": {
                    "type": "boolean",
                    "example": true,
                    "description": "Also return reviews removed on our side, with `deleted_at` set. Off by default. Not the same as `status=removed`, which filters on the review site reporting the review gone.",
                    "default": true
                  }
                }
              },
              "examples": {
                "one_account": {
                  "summary": "One account, Google, 4 and 5 stars, awaiting a response",
                  "value": {
                    "range_start": "2026-01-01 00:00:00",
                    "range_end": "2026-12-31 23:59:59",
                    "account_id": 5994,
                    "review_site_id": 44,
                    "rating": [
                      4,
                      5
                    ],
                    "status": "awaiting_response",
                    "search": "clean",
                    "limit": 10,
                    "page": 1,
                    "sort_field": "review_date",
                    "sort_by": "desc"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "A page of reviews, with the average rating and per-site summary.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "integer",
                            "description": "The review's id (`review_id`).",
                            "example": 265997
                          },
                          "external_review_id": {
                            "type": "string",
                            "nullable": true,
                            "description": "The review site's own id for this review, as we collected it, or `null`.",
                            "example": "ChdDSUhNMG9nS0VJQ0FnSUM0bnRlM21BRRAB"
                          },
                          "review_url": {
                            "type": "string",
                            "nullable": true,
                            "description": "A link to this review on the review site, or `null`. Given when the site provides a link to the individual review; for sites that don't (for example Facebook, or Google connected through Google sign-in) it's `null`. The location's page on the site is `store_reviewsite.url`.",
                            "example": "https://www.yelp.com/biz/acme-coffee-sydney?hrid=Xk2pQ9"
                          },
                          "created_at": {
                            "type": "string",
                            "nullable": true,
                            "description": "When we collected the review (ISO 8601, UTC).",
                            "example": "2026-09-23T10:31:02+00:00"
                          },
                          "updated_at": {
                            "type": "string",
                            "nullable": true,
                            "description": "When the review last changed on our side (ISO 8601, UTC): collected, edited, moderated, removed or restored. A new, edited or deleted reply, a change to its posting status, or a flag change updates it too.",
                            "example": "2026-09-23T10:31:02+00:00"
                          },
                          "deleted_at": {
                            "type": "string",
                            "nullable": true,
                            "description": "When the review was removed (ISO 8601, UTC). Always `null` unless `include_removed` is sent.",
                            "example": null
                          },
                          "source_platform": {
                            "type": "string",
                            "description": "The site the review came from, e.g. `google`.",
                            "example": "google"
                          },
                          "review": {
                            "type": "object",
                            "description": "The review.",
                            "properties": {
                              "id": {
                                "type": "integer",
                                "description": "The review's id.",
                                "example": 265997
                              },
                              "reviewer": {
                                "type": "string",
                                "description": "The reviewer's name as shown on the site.",
                                "example": "Jane Smith"
                              },
                              "rating": {
                                "type": "number",
                                "description": "The star rating, a whole number from 0 to 5; `0` when the review has no rating. Decimal ratings are rounded to the nearest whole star. Sites that rate out of 10 (Booking.com, Agoda, Expedia, Hotels.com, Orbitz, Travelocity, Trip.com, HolidayCheck, HomeStars) are halved, then rounded, with a lowest of 1: 8.6/10 comes through as 4. A Facebook recommendation without stars counts as 5 (recommends) or 1 (doesn't recommend).",
                                "example": 4
                              },
                              "message": {
                                "type": "string",
                                "description": "The review text. `\"\"` when the review is a rating only.",
                                "example": "Busy, but clean."
                              },
                              "review_date": {
                                "type": "string",
                                "nullable": true,
                                "description": "When the review was posted (ISO 8601), or `null` if unknown.",
                                "example": "2026-09-23T10:09:39.000000Z",
                                "format": "date-time"
                              }
                            }
                          },
                          "reviewsite": {
                            "type": "object",
                            "description": "The review site.",
                            "properties": {
                              "id": {
                                "type": "integer",
                                "description": "The review site's id (`review_site_id`).",
                                "example": 44
                              },
                              "name": {
                                "type": "string",
                                "description": "The review site's name, e.g. `Google`.",
                                "example": "Google"
                              },
                              "link": {
                                "type": "string",
                                "description": "The site's home page.",
                                "example": "http://maps.google.com"
                              },
                              "review_site_logo": {
                                "type": "string",
                                "description": "URL of the site's logo.",
                                "example": "https://d2ny6zb7otrnhl.cloudfront.net/static/images/img-google.png",
                                "format": "uri"
                              },
                              "review_site_color": {
                                "type": "string",
                                "description": "The site's brand colour, e.g. `#4285F4`.",
                                "example": "#4285F4"
                              },
                              "auth_type": {
                                "type": "string",
                                "nullable": true,
                                "description": "How the site connects: `oauth`, `cookie`, `credential`, `default`, `restapi`, or `null`. See [List supported review sites](/docs/rm-post-account-reviewsite-list).",
                                "example": "oauth"
                              },
                              "scraping_enabled": {
                                "type": "boolean",
                                "description": "Whether reviews can be collected from this site.",
                                "example": true
                              },
                              "posting_enabled": {
                                "type": "boolean",
                                "description": "Whether responses can be posted to this site.",
                                "example": true
                              }
                            }
                          },
                          "store": {
                            "type": "object",
                            "description": "The location.",
                            "properties": {
                              "id": {
                                "type": "integer",
                                "description": "The location's id (`store_id`).",
                                "example": 3007
                              },
                              "name": {
                                "type": "string",
                                "description": "The location's name, followed by ` - ` and your `client_location_id` (or its `storeId` label) when it has one.",
                                "example": "Acme Coffee - docs-test-loc-001"
                              },
                              "slug": {
                                "type": "string",
                                "description": "The location's URL slug.",
                                "example": "acme-coffee"
                              },
                              "address": {
                                "type": "string",
                                "description": "The location's address: street, city and state.",
                                "example": "1 George St, Sydney, NSW"
                              }
                            }
                          },
                          "store_reviewsite": {
                            "type": "object",
                            "description": "The connection between the location and the site.",
                            "properties": {
                              "id": {
                                "type": "integer",
                                "nullable": true,
                                "description": "The connection's id (`store_review_site_id`).",
                                "example": 8784
                              },
                              "url": {
                                "type": "string",
                                "nullable": true,
                                "description": "The site's review URL for the location.",
                                "example": "https://www.google.com/maps/place/Wynyard/@-33.8648805,151.2065622,1523m/data=!3m1!1e3!4m6!3m5!1s0x6b12ae40e6fcf9eb:0x45845f7ff56e0d1!8m2!3d-33.86594!4d151.2061!16s%2Fg%2F1262gn7v0?entry=ttu&g_ep=EgoyMDI2MDkyMC4wIKXMDSoASAFQAw%3D%3D"
                              },
                              "landing_page_url": {
                                "type": "string",
                                "nullable": true,
                                "description": "The landing page URL used in review requests.",
                                "example": "https://www.google.com/maps/place/Wynyard/@-33.8648805,151.2065622,1523m/data=!3m1!1e3!4m6!3m5!1s0x6b12ae40e6fcf9eb:0x45845f7ff56e0d1!8m2!3d-33.86594!4d151.2061!16s%2Fg%2F1262gn7v0?entry=ttu&g_ep=EgoyMDI2MDkyMC4wIKXMDSoASAFQAw%3D%3D"
                              },
                              "connection_status": {
                                "type": "string",
                                "nullable": true,
                                "description": "The stored connection state, e.g. `connected` or `Disconnected`, or `null`.",
                                "example": "Disconnected"
                              },
                              "is_connected": {
                                "type": "boolean",
                                "description": "Whether the site is connected for this location.",
                                "example": false
                              }
                            }
                          },
                          "flag": {
                            "type": "array",
                            "items": {
                              "type": "object",
                              "properties": {
                                "flag": {
                                  "type": "string",
                                  "description": "The chip label, e.g. `complete` or `Flagged — Pending Review`."
                                },
                                "title": {
                                  "type": "string",
                                  "description": "What the chip means, in plain language."
                                },
                                "statusColor": {
                                  "type": "string",
                                  "description": "`success`, `warning` or `error`.",
                                  "enum": [
                                    "success",
                                    "warning",
                                    "error"
                                  ]
                                },
                                "icon": {
                                  "type": "string",
                                  "description": "Icon name for the chip."
                                },
                                "links": {
                                  "type": "array",
                                  "items": {
                                    "type": "object",
                                    "properties": {
                                      "name": {
                                        "type": "string",
                                        "description": "Link label, e.g. `Edit Review Site`."
                                      },
                                      "url": {
                                        "type": "string",
                                        "description": "Link URL in the Shout About Us web app."
                                      }
                                    }
                                  },
                                  "description": "Only on some chips: where to fix the problem."
                                }
                              }
                            },
                            "description": "Status chips for the response and any removal flag, in display order. Empty when there is nothing to show."
                          },
                          "plan": {
                            "type": "string",
                            "description": "The plan name recorded with the latest update to the response, or `\"\"`.",
                            "example": ""
                          },
                          "review_flag": {
                            "type": "object",
                            "nullable": true,
                            "description": "The removal flag on this review, or `null`.",
                            "properties": {
                              "review_id": {
                                "type": "integer",
                                "description": "The review's id."
                              },
                              "reason": {
                                "type": "string",
                                "description": "Why the review was flagged."
                              },
                              "flag_status": {
                                "type": "string",
                                "description": "`pending`, `submitted_to_platform`, `approved_removed` or `denied`.",
                                "enum": [
                                  "pending",
                                  "submitted_to_platform",
                                  "approved_removed",
                                  "denied"
                                ]
                              },
                              "flag_date": {
                                "type": "string",
                                "description": "When it was flagged (ISO 8601)."
                              },
                              "flag_reason_detail": {
                                "type": "string",
                                "nullable": true,
                                "description": "The extra detail given when flagging, or `null`."
                              },
                              "reason_identifier": {
                                "type": "string",
                                "nullable": true,
                                "description": "The flag reason category, e.g. `Low quality information`."
                              }
                            }
                          },
                          "is_flaggable": {
                            "type": "boolean",
                            "description": "Whether you can flag this review for removal now.",
                            "example": true
                          },
                          "flag_status": {
                            "type": "string",
                            "description": "`none` when not flagged, otherwise `pending`, `submitted_to_platform`, `approved_removed` or `denied`.",
                            "example": "none",
                            "enum": [
                              "none",
                              "pending",
                              "submitted_to_platform",
                              "approved_removed",
                              "denied"
                            ]
                          },
                          "flag_details": {
                            "type": "object",
                            "nullable": true,
                            "description": "The flag, or `null` when not flagged.",
                            "properties": {
                              "reason": {
                                "type": "string",
                                "description": "Why the review was flagged."
                              },
                              "reason_identifier": {
                                "type": "string",
                                "nullable": true,
                                "description": "The flag reason category."
                              },
                              "flag_reason_detail": {
                                "type": "string",
                                "nullable": true,
                                "description": "The extra detail given when flagging."
                              },
                              "flag_date": {
                                "type": "string",
                                "nullable": true,
                                "description": "When it was flagged (ISO 8601)."
                              }
                            }
                          },
                          "response_capabilities": {
                            "type": "object",
                            "description": "Whether a response can be sent now.",
                            "properties": {
                              "manual": {
                                "type": "boolean",
                                "description": "Whether you can write and send a response.",
                                "example": true
                              },
                              "ai": {
                                "type": "boolean",
                                "description": "Whether you can send an AI-drafted response.",
                                "example": true
                              },
                              "reason": {
                                "type": "string",
                                "nullable": true,
                                "description": "Why not, when either is `false`, e.g. `no_store_plan`, `dormant_tier`, `pre_response_cutoff`, `past_response_window_expired`, `past_response_quota_reached` or `past_response_unavailable`. Otherwise `null`."
                              }
                            }
                          },
                          "response": {
                            "type": "object",
                            "nullable": true,
                            "description": "The response to the review, or `null` when there is none.",
                            "properties": {
                              "id": {
                                "type": "integer",
                                "description": "The response's id."
                              },
                              "status": {
                                "type": "string",
                                "description": "Where the response is: e.g. `complete` (posted), `pending` (in the posting queue), or why it wasn't posted, e.g. `login_error`. The `flag` chip explains it."
                              },
                              "public_contents": {
                                "type": "string",
                                "nullable": true,
                                "description": "The response text posted on the site."
                              },
                              "private_contents": {
                                "type": "string",
                                "nullable": true,
                                "description": "The private part of the response, or `null`."
                              },
                              "response_date": {
                                "type": "string",
                                "nullable": true,
                                "description": "When the response was made, or `null`."
                              },
                              "deleted": {
                                "type": "object",
                                "nullable": true,
                                "description": "Set when the response was removed from the site, otherwise `null`.",
                                "properties": {
                                  "delete_on": {
                                    "type": "string",
                                    "description": "When it was removed."
                                  },
                                  "status": {
                                    "type": "string",
                                    "description": "The removal status."
                                  }
                                }
                              }
                            }
                          }
                        }
                      },
                      "description": "One entry per review, newest first by default."
                    },
                    "links": {
                      "type": "object",
                      "description": "Paging links.",
                      "properties": {
                        "first": {
                          "type": "string",
                          "description": "URL of the first page.",
                          "example": "https://production-api.shoutaboutus.com/api/v1/partner/report/review-response/feed?page=1"
                        },
                        "last": {
                          "type": "string",
                          "description": "URL of the last page.",
                          "example": "https://production-api.shoutaboutus.com/api/v1/partner/report/review-response/feed?page=69"
                        },
                        "prev": {
                          "type": "string",
                          "nullable": true,
                          "description": "URL of the previous page, or `null`."
                        },
                        "next": {
                          "type": "string",
                          "nullable": true,
                          "description": "URL of the next page, or `null`.",
                          "example": "https://production-api.shoutaboutus.com/api/v1/partner/report/review-response/feed?page=2"
                        }
                      }
                    },
                    "meta": {
                      "type": "object",
                      "description": "Paging details.",
                      "properties": {
                        "current_page": {
                          "type": "integer",
                          "description": "This page.",
                          "example": 1
                        },
                        "from": {
                          "type": "integer",
                          "nullable": true,
                          "description": "Position of the first review on this page.",
                          "example": 1
                        },
                        "last_page": {
                          "type": "integer",
                          "description": "The last page.",
                          "example": 69
                        },
                        "links": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "url": {
                                "type": "string",
                                "nullable": true,
                                "description": "The page's URL."
                              },
                              "label": {
                                "type": "string",
                                "description": "The link label.",
                                "example": "&laquo; Previous"
                              },
                              "page": {
                                "type": "integer",
                                "nullable": true,
                                "description": "The page number."
                              },
                              "active": {
                                "type": "boolean",
                                "description": "`true` for this page.",
                                "example": false
                              }
                            }
                          },
                          "description": "Page links for a pager."
                        },
                        "path": {
                          "type": "string",
                          "description": "The endpoint's URL.",
                          "example": "https://production-api.shoutaboutus.com/api/v1/partner/report/review-response/feed"
                        },
                        "per_page": {
                          "type": "integer",
                          "description": "Reviews per page.",
                          "example": 10
                        },
                        "to": {
                          "type": "integer",
                          "nullable": true,
                          "description": "Position of the last review on this page.",
                          "example": 10
                        },
                        "total": {
                          "type": "integer",
                          "description": "Reviews across all pages.",
                          "example": 682
                        }
                      }
                    },
                    "avg_rating": {
                      "type": "number",
                      "description": "Average rating of all the reviews in scope, over all time (not narrowed by the date range or the other filters), to 2 decimal places. Refreshed every 10 minutes.",
                      "example": 4.21
                    },
                    "kpi_by_publisher": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "review_site_id": {
                            "type": "integer",
                            "description": "The review site's id.",
                            "example": 44
                          },
                          "review_site_name": {
                            "type": "string",
                            "description": "The review site's name.",
                            "example": "Google"
                          },
                          "review_site_color": {
                            "type": "string",
                            "nullable": true,
                            "description": "The site's brand colour.",
                            "example": "#4285F4"
                          },
                          "rating": {
                            "type": "number",
                            "nullable": true,
                            "description": "Average rating on the site, to 1 decimal place, or `null`.",
                            "example": 4.2
                          },
                          "total_reviews": {
                            "type": "integer",
                            "description": "Number of reviews on the site.",
                            "example": 682
                          },
                          "was_bridged": {
                            "type": "boolean",
                            "description": "`true` when `rating` is a blended rating rather than a simple average of the reviews.",
                            "example": false
                          }
                        }
                      },
                      "description": "One entry per review site with reviews in scope, narrowed by the date range and `rating`. Empty when there are no locations in scope."
                    }
                  }
                },
                "examples": {
                  "success": {
                    "summary": "Success",
                    "value": {
                      "data": [
                        {
                          "id": 265997,
                          "external_review_id": "ChdDSUhNMG9nS0VJQ0FnSUM0bnRlM21BRRAB",
                          "review_url": null,
                          "created_at": "2026-09-23T10:31:02+00:00",
                          "updated_at": "2026-09-23T10:31:02+00:00",
                          "deleted_at": null,
                          "source_platform": "google",
                          "review": {
                            "id": 265997,
                            "reviewer": "Jane Smith",
                            "rating": 4,
                            "message": "Busy, but clean.",
                            "review_date": "2026-09-23T10:09:39.000000Z"
                          },
                          "reviewsite": {
                            "id": 44,
                            "name": "Google",
                            "link": "http://maps.google.com",
                            "review_site_logo": "https://d2ny6zb7otrnhl.cloudfront.net/static/images/img-google.png",
                            "review_site_color": "#4285F4",
                            "auth_type": "oauth",
                            "scraping_enabled": true,
                            "posting_enabled": true
                          },
                          "store": {
                            "id": 3007,
                            "name": "Acme Coffee - docs-test-loc-001",
                            "slug": "acme-coffee",
                            "address": "1 George St, Sydney, NSW"
                          },
                          "store_reviewsite": {
                            "id": 8784,
                            "url": "https://www.google.com/maps/place/Wynyard/@-33.8648805,151.2065622,1523m/data=!3m1!1e3!4m6!3m5!1s0x6b12ae40e6fcf9eb:0x45845f7ff56e0d1!8m2!3d-33.86594!4d151.2061!16s%2Fg%2F1262gn7v0?entry=ttu&g_ep=EgoyMDI2MDkyMC4wIKXMDSoASAFQAw%3D%3D",
                            "landing_page_url": "https://www.google.com/maps/place/Wynyard/@-33.8648805,151.2065622,1523m/data=!3m1!1e3!4m6!3m5!1s0x6b12ae40e6fcf9eb:0x45845f7ff56e0d1!8m2!3d-33.86594!4d151.2061!16s%2Fg%2F1262gn7v0?entry=ttu&g_ep=EgoyMDI2MDkyMC4wIKXMDSoASAFQAw%3D%3D",
                            "connection_status": "Disconnected",
                            "is_connected": false
                          },
                          "flag": [],
                          "plan": "",
                          "review_flag": null,
                          "is_flaggable": true,
                          "flag_status": "none",
                          "flag_details": null,
                          "response_capabilities": {
                            "manual": true,
                            "ai": true,
                            "reason": null
                          },
                          "response": null
                        },
                        {
                          "id": 279309,
                          "external_review_id": "ChZDSUhNMG9nS0VJQ0FnSURyeWZqd0dREAE",
                          "review_url": null,
                          "created_at": "2026-09-27T01:02:44+00:00",
                          "updated_at": "2026-09-28T14:48:21+00:00",
                          "deleted_at": null,
                          "source_platform": "google",
                          "review": {
                            "id": 279309,
                            "reviewer": "John Smith",
                            "rating": 4,
                            "message": "",
                            "review_date": "2026-09-27T00:22:21.000000Z"
                          },
                          "reviewsite": {
                            "id": 44,
                            "name": "Google",
                            "link": "http://maps.google.com",
                            "review_site_logo": "https://d2ny6zb7otrnhl.cloudfront.net/static/images/img-google.png",
                            "review_site_color": "#4285F4",
                            "auth_type": "oauth",
                            "scraping_enabled": true,
                            "posting_enabled": true
                          },
                          "store": {
                            "id": 3007,
                            "name": "Acme Coffee - docs-test-loc-001",
                            "slug": "acme-coffee",
                            "address": "1 George St, Sydney, NSW"
                          },
                          "store_reviewsite": {
                            "id": 8784,
                            "url": "https://www.google.com/maps/place/Wynyard/@-33.8648805,151.2065622,1523m/data=!3m1!1e3!4m6!3m5!1s0x6b12ae40e6fcf9eb:0x45845f7ff56e0d1!8m2!3d-33.86594!4d151.2061!16s%2Fg%2F1262gn7v0?entry=ttu&g_ep=EgoyMDI2MDkyMC4wIKXMDSoASAFQAw%3D%3D",
                            "landing_page_url": "https://www.google.com/maps/place/Wynyard/@-33.8648805,151.2065622,1523m/data=!3m1!1e3!4m6!3m5!1s0x6b12ae40e6fcf9eb:0x45845f7ff56e0d1!8m2!3d-33.86594!4d151.2061!16s%2Fg%2F1262gn7v0?entry=ttu&g_ep=EgoyMDI2MDkyMC4wIKXMDSoASAFQAw%3D%3D",
                            "connection_status": "Disconnected",
                            "is_connected": false
                          },
                          "flag": [
                            {
                              "flag": "Flagged — Pending Review",
                              "title": "This review is in the queue to be flagged for removal from the review site. (Review is off-topic, contains ads, or is gibberish or repetitive)",
                              "statusColor": "warning",
                              "icon": "fa-regular:flag"
                            }
                          ],
                          "plan": "",
                          "review_flag": {
                            "review_id": 279309,
                            "reason": "Review is off-topic, contains ads, or is gibberish or repetitive",
                            "flag_status": "pending",
                            "flag_date": "2026-09-28T14:48:21.000000Z",
                            "flag_reason_detail": "Duplicate of an earlier review.",
                            "reason_identifier": "Low quality information"
                          },
                          "is_flaggable": true,
                          "flag_status": "pending",
                          "flag_details": {
                            "reason": "Review is off-topic, contains ads, or is gibberish or repetitive",
                            "reason_identifier": "Low quality information",
                            "flag_reason_detail": "Duplicate of an earlier review.",
                            "flag_date": "2026-09-28T14:48:21+00:00"
                          },
                          "response_capabilities": {
                            "manual": true,
                            "ai": true,
                            "reason": null
                          },
                          "response": null
                        }
                      ],
                      "links": {
                        "first": "https://production-api.shoutaboutus.com/api/v1/partner/report/review-response/feed?page=1",
                        "last": "https://production-api.shoutaboutus.com/api/v1/partner/report/review-response/feed?page=69",
                        "prev": null,
                        "next": "https://production-api.shoutaboutus.com/api/v1/partner/report/review-response/feed?page=2"
                      },
                      "meta": {
                        "current_page": 1,
                        "from": 1,
                        "last_page": 69,
                        "links": [
                          {
                            "url": null,
                            "label": "&laquo; Previous",
                            "page": null,
                            "active": false
                          },
                          {
                            "url": "https://production-api.shoutaboutus.com/api/v1/partner/report/review-response/feed?page=1",
                            "label": "1",
                            "page": 1,
                            "active": true
                          },
                          {
                            "url": "https://production-api.shoutaboutus.com/api/v1/partner/report/review-response/feed?page=2",
                            "label": "2",
                            "page": 2,
                            "active": false
                          },
                          {
                            "url": "https://production-api.shoutaboutus.com/api/v1/partner/report/review-response/feed?page=2",
                            "label": "Next &raquo;",
                            "page": 2,
                            "active": false
                          }
                        ],
                        "path": "https://production-api.shoutaboutus.com/api/v1/partner/report/review-response/feed",
                        "per_page": 10,
                        "to": 10,
                        "total": 682
                      },
                      "avg_rating": 4.21,
                      "kpi_by_publisher": [
                        {
                          "review_site_id": 44,
                          "review_site_name": "Google",
                          "review_site_color": "#4285F4",
                          "rating": 4.2,
                          "total_reviews": 682,
                          "was_bridged": false
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "The token is missing, expired or invalid.",
            "content": {
              "application/json": {
                "example": {
                  "message": "Unauthenticated."
                }
              }
            }
          },
          "422": {
            "description": "A value is invalid, a location or account is outside your tree, or `limit` is over 100.",
            "content": {
              "application/json": {
                "examples": {
                  "invalid_values": {
                    "summary": "Invalid values",
                    "value": {
                      "message": "The range start field must match the format Y-m-d H:i:s. (and 3 more errors)",
                      "errors": {
                        "range_start": [
                          "The range start field must match the format Y-m-d H:i:s."
                        ],
                        "sort_field": [
                          "The selected sort field is invalid."
                        ],
                        "status": [
                          "The selected status is invalid."
                        ],
                        "rating.0": [
                          "The rating.0 field must be an integer."
                        ]
                      }
                    }
                  },
                  "location_outside": {
                    "summary": "Location outside your tree",
                    "value": {
                      "message": "The selected store id does not belong to your company hierarchy.",
                      "errors": {
                        "store_id": [
                          "The selected store id does not belong to your company hierarchy."
                        ]
                      }
                    }
                  },
                  "account_exist": {
                    "summary": "Account doesn't exist or is outside your tree",
                    "value": {
                      "message": "The selected account id is invalid. (and 1 more error)",
                      "errors": {
                        "account_id": [
                          "The selected account id is invalid.",
                          "The selected account id does not belong to your company hierarchy."
                        ]
                      }
                    }
                  },
                  "limit_over": {
                    "summary": "limit over 100",
                    "value": {
                      "message": "The limit field must not be greater than 100.",
                      "errors": {
                        "limit": [
                          "The limit field must not be greater than 100."
                        ]
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "More than 300 requests in a minute from this user.",
            "content": {
              "application/json": {
                "example": {
                  "message": "Too Many Attempts."
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error.",
            "content": {
              "application/json": {
                "example": {
                  "message": "An unexpected error occurred. Please try again later or contact your account rep.",
                  "status": "error",
                  "errors": []
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "JWT"
      }
    }
  }
}
```