---
title: "Get Marketing Feedback Risk Groups"
method: GET
path: "/internal/reliability/marketing/feedback/risks/groups"
tags: ["internal"]
---

# Get Marketing Feedback Risk Groups

`GET /internal/reliability/marketing/feedback/risks/groups`

Synchronous SQL group-by counts over the full filtered feedback week.

Same week / company / team / toggle filters as
``GET .../feedback/risks``. Aggregation is inline (no Hatchet / LLM) so the
UI can show ranked category counts on click. ``source_family`` is a cheap
CASE over ``source_clause`` (Marketing standards vs Regulatory).
``disclosure`` recovers the standards filename from a structured or legacy
``source_clause`` prefix.

## Query parameters

- `week_start` string, date, required — ISO week start (Monday) to drill into
- `dimension` 'source_clause' | 'short_text' | 'ignore_comment' | 'source_family' | 'disclosure' — Group-by dimensions for the marketing feedback week drill-down. ``source_family`` is a coarse rollup derived from ``source_clause`` text (Marketing standards vs Regulatory) — not a stored column. ``disclosure`` recovers a Chime DL_ID (``Disclosure CG 23`` → ``cg23``) or the standards filename from a structured / legacy ``source_clause``.
- `company_id` string, uuid, nullable
- `team_id` string, uuid, nullable
- `flagged` boolean — Only risks a reviewer flagged
- `outdated` boolean — Only risks superseded by a re-run
- `reviewer_added` boolean — Only reviewer-added risks
- `dismissed` boolean — Only risks a reviewer dismissed
- `over_flagged` boolean — Only dismissals the reviewer marked as an over-flag / false positive (reason incorrect / out_of_scope / already_met)
- `reason` 'valid_ok' | 'already_met' | 'incorrect' | 'out_of_scope' | 'pre_approved' | 'other' — Why a reviewer dismissed a marketing risk (status=dismissed).
- `ignored` boolean — Only risks with an ignore comment
- `actioned` boolean — Only risks dispositioned (status set or outdated)
- `not_actioned` boolean — Only risks never dispositioned (no status, not outdated)
- `source_clause` string[], nullable — Narrow before aggregating (same semantics as the list endpoint; repeat param to OR)
- `short_text` string[], nullable
- `ignore_comment` string[], nullable
- `source_family` string[], nullable
- `disclosure` string[], nullable

## Response `200`

Successful Response

- FeedbackRiskGroupsResponse — Server-side group counts over the full filtered feedback week (not just the paginated list page). `dimension` is the grouping key; `groups` are ranked by count descending. Empty / null values are bucketed under the literal key ``(none)``. For ``dimension=disclosure``, multi-id attributions are expanded so each DL id gets a count (group ``total`` may exceed distinct risk rows).
  - `week_start` string, date, required
  - `dimension` string, required
  - `total` integer, required
  - `groups` FeedbackGroupCount[], required
    - `key` string, required
    - `count` integer, required

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.dev/kobaltlabs/apis/fastapi.md) · [All operations](https://skmtc.dev/kobaltlabs/apis/fastapi/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/kobaltlabs/fastapi/revisions/425d5b8a3c17/schema)
