# List recurring approval groups

> Read-only rollup answering 'what keeps coming back?' — groups items by `dedup_key` and returns those recurring at least `min_count` times, most-recurrent first. Each group carries the ordered item chain (via `previous_item_id`) and the resolution reasons in order, so a human can read recurring rejections side by side and graduate the pattern into a guardrail `deny`. Exact-key grouping only; no cluster state is stored.

<Heading
  as={"h1"}
  className={"openapi__heading"}
  children={"List recurring approval groups"}
>
</Heading>

<MethodEndpoint
  method={"get"}
  path={"/api/v1/approvals/recurrences"}
  context={"endpoint"}
>
  
</MethodEndpoint>

Read-only rollup answering "what keeps coming back?" — groups items by `dedup_key` and returns those recurring at least `min_count` times, most-recurrent first. Each group carries the ordered item chain (via `previous_item_id`) and the resolution reasons in order, so a human can read recurring rejections side by side and graduate the pattern into a guardrail `deny`. Exact-key grouping only; no cluster state is stored.

<Heading
  id={"request"}
  as={"h2"}
  className={"openapi-tabs__heading"}
>
  <Translate id="theme.openapi.request.title">Request</Translate>
</Heading>

<ParamsDetails
  {...require("./list-approval-recurrences.ParamsDetails.json")}
>
  
</ParamsDetails>

<RequestSchema
  {...require("./list-approval-recurrences.RequestSchema.json")}
>
  
</RequestSchema>

<StatusCodes
  {...require("./list-approval-recurrences.StatusCodes.json")}
>
  
</StatusCodes>
