# XREADGROUP

> Reads data from a stream as part of a consumer group.

## Arguments

<ParamField body="group" type="str" required>
  The consumer group name.
</ParamField>

<ParamField body="consumer" type="str" required>
  The consumer name within the group.
</ParamField>

<ParamField body="streams" type="Dict[str, str]" required>
  A dictionary mapping stream keys to their starting IDs.
  Use ">" to read messages never delivered to any consumer in the group.
</ParamField>

<ParamField body="count" type="int">
  The maximum number of messages to return per stream.
</ParamField>

<ParamField body="noack" type="bool">
  Don't add messages to the pending entries list (messages won't need acknowledgment).
</ParamField>

## Response

<ResponseField type="List[List[Any]]">
  Returns a list where each element represents a stream and contains:
  - The stream key
  - A list of messages (ID and field-value pairs)
  
  Returns empty list if no data is available.
</ResponseField>

<RequestExample>
```py Read new messages
result = redis.xreadgroup("mygroup", "consumer1", {"mystream": ">"})
```

```py Multiple streams
result = redis.xreadgroup("mygroup", "consumer1", {"stream1": ">", "stream2": "0-0"})
```

```py With count and noack
result = redis.xreadgroup("mygroup", "consumer1", {"mystream": ">"}, count=5, noack=True)
```

```py Read pending messages
result = redis.xreadgroup("mygroup", "consumer1", {"mystream": "0"})
```
</RequestExample>

<ResponseExample>
```py
[
  ["mystream", [
    ["1638360173533-0", ["field", "value1"]],
    ["1638360173533-1", ["field", "value2"]]
  ]]
]
```
</ResponseExample>
