Skip to main content
POST
Review Group Insights Route

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Path Parameters

brand_id
string<uuid>
required

Body

application/json

The cohort to analyse.

advertiser_ids
string<uuid>[]
required
Required array length: 1 - 60 elements
group_label
string | null
Maximum string length: 120
reference_advertiser_id
string<uuid> | null
aspect_platform
enum<string> | null
Available options:
trustpilot,
google
all_aspect_platforms
boolean
default:false

Response

Successful Response

generated_at
string<date-time>
required
group_key
string
required
coverage
ReviewGroupCoverage · object
required

What the cohort can honestly be charted over.

status != "ok" is a measured outcome with prose, not a failure — the caller renders the reason instead of an empty chart.

group_label
string | null
reference_advertiser_id
string<uuid> | null
sample_is_platform_total
boolean
default:false
cohort
ReviewGroupCohort · object

Cohort-level statistics, over GROUP MEMBERS ONLY.

The user's own brand is never included here even when one is selected — see the module docstring.

brands
ReviewGroupBrand · object[]
reference_brand
ReviewGroupBrand · object | null

One brand's measured position in the cohort.

available_aspect_platforms
enum<string>[]
Available options:
trustpilot,
google
aspect_matrix
ReviewAspectMatrix · object

The comparable grid, plus what stops it being over-read.

aspect_matrices
ReviewAspectMatrix · object[]
previous_aspect_matrix
ReviewAspectMatrix · object | null

The comparable grid, plus what stops it being over-read.

previous_period
ReviewGroupPreviousPeriod · object | null

What every previous_* field on this response was measured over.

Present ONLY when the cohort's coverage plan holds two or more calendar buckets. Its absence is the first-measurement state, and it is the single switch the client reads: no descriptor, no delta chips anywhere on the page — a "First measurement" badge instead. There is no code path that emits a previous_* figure without this block beside it.

Definition, and why it is not a new versioning concept. The bucket ladder is the one review_coverage.build_coverage_plan already chose for this exact cohort, and cutoff is the start of its most recent bucket — the same boundary review_trends already compares across for the rating-movement panel. Extending it to the KPI tiles is plumbing, not a second notion of "a period".

Basis, stated plainly because it is a floor, not a total. Current figures count the whole collected corpus; previous figures count that corpus MINUS the reviews we can prove arrived on or after cutoff. A review we hold with no reviewed_at cannot be proven to have arrived this period, so it sits on both sides and contributes nothing to any delta. The delta is therefore a floor on real movement — consistent with every other count on this surface, which REVIEW_SAMPLE_BASIS_NOTICE already discloses as a sample rather than a platform total.

findings
ModuleRuleFinding · object[]