GET/api/v4/rollup_interactions

Get rollup interactions

Returns a cursor-paginated list of interactions across many locations in the account, with filtering and sorting.

Requires an API key. See Authentication for header format and key rotation.

Parameters

Query

NameTypeRequiredDescriptionDefault
tagstringrequiredLocation tag defining the rollup scope. Required — the request returns 400 without it. Use `all` to span every location.
locationFiltersstringoptionalJSON-encoded array of location IDs to restrict the rollup to.
siteUrlsstringoptionalJSON-encoded array of publisher hostnames to include.
startDatestringoptionalStart of the date-range filter (YYYY-MM-DD).
endDatestringoptionalEnd of the date-range filter (YYYY-MM-DD).
searchStringstringoptionalFull-text search across interaction content.
categorystringoptionalSingle interaction category, e.g. `REVIEW`.
categoriesstringoptionalJSON-encoded array of interaction categories.
ratingFiltersstringoptionalJSON-encoded array of star ratings to include, e.g. `[3,4]`.
ratingFilterintegeroptionalSingle star rating to filter by.
responseStatusstringoptionalJSON-encoded response-status filter. Values: `RESPONDED`, `PENDING`.
sortOrderstringoptionalJSON-encoded sort order. Values: `NEWEST_FIRST`, `OLDEST_FIRST`, `LAST_RESPONDED`.
firstintegeroptionalNumber of records to return from the beginning.
afterstringoptionalCursor value — return records after this cursor (forward pagination).
lastintegeroptionalNumber of records to return from the end.
beforestringoptionalCursor value — return records before this cursor (backward pagination).

Responses

200Paginated rollup of interactions across the account. `data.rollupInteractions` holds the connection.
{
  "data": {
    "rollupInteractions": {
      "pageInfo": {
        "hasNextPage": true,
        "hasPreviousPage": false
      },
      "edges": [
        {
          "node": {
            "id": "9e26d2a8-a6ed-42ea-8454-47d1c92ea841",
            "source": "maps.google.com",
            "content": "Excellent service, highly recommend.",
            "authorName": "Priya S.",
            "rating": 5,
            "date": "2026-06-30T12:04:11+00:00",
            "category": "Review",
            "type": "Review",
            "responded": false,
            "responseCount": 0,
            "canRespond": true,
            "locationId": 1800289
          },
          "cursor": "SW50ZXJhY3Rpb246OWUyNmQyYTg="
        }
      ],
      "totalCount": 1284
    }
  }
}
401Unauthenticated — missing or invalid API key.
429Rate limit exceeded. Retry after the `Retry-After` header value.

Returns a cross-location view of interactions for the account. It supports the same cursor-based pagination (first, last, after, before) and filters as the per-location List interactions endpoint, plus a locationFilters scope. The connection lives at data.rollupInteractions and each node carries a locationId so you can attribute an interaction to its store.

Gotcha: tag is required

Unlike the per-location endpoint, tag is mandatory here — omitting it returns a 400 with Variable "$tag" of required type "String!" was not provided. Pass tag=all to span every location, or a specific tag to scope the rollup to a subset (for example, one region or brand).

Use case: an account-wide "needs a reply" queue

To surface every review still awaiting an owner response across all locations, call GET /rollup_interactions?tag=all&responseStatus=["PENDING"]&sortOrder=["NEWEST_FIRST"]&first=50, then page with after = pageInfo.endCursor until hasNextPage is false. This avoids iterating location by location. Because it is paginated and rate-limited, honor the Retry-After header on a 429 and prefer date-bounded runs (startDate/endDate) for scheduled syncs.

curl -X GET 'https://listingsapi.com/api/v4/rollup_interactions?tag=<tag>' \
  -H "Authorization: API $LISTINGSAPI_KEY"