> ## Documentation Index
> Fetch the complete documentation index at: https://upstash.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# XDELEX

> Extended delete for streams with reference control.

The `XDELEX` command provides extended deletion capabilities for stream entries with additional control options. This is an enhanced version of XDEL with more advanced features for managing stream data.

## Arguments

<ParamField body="key" type="str" required>
  The key of the stream.
</ParamField>

<ParamField body="ids" type="*List[str]" required>
  One or more stream entry IDs to delete.
</ParamField>

<ParamField body="option" type="Literal['KEEPREF', 'DELREF', 'ACKED', 'keepref', 'delref', 'acked']">
  Optional deletion behavior (case-insensitive):

  * `KEEPREF` or `keepref`: Keep consumer group references
  * `DELREF` or `delref`: Delete consumer group references
  * `ACKED` or `acked`: Only acknowledge messages (don't delete)
</ParamField>

## Response

<ResponseField type="List[int]" required>
  A list of integers indicating the result for each ID in the same order as provided.
</ResponseField>

<RequestExample>
  ```py Single Entry theme={"system"}
  # Delete a single stream entry
  result = redis.xdelex("mystream", "1638360173533-0")
  print(result)  # List of results for each ID
  ```

  ```py Multiple Entries theme={"system"}
  # Delete multiple stream entries
  result = redis.xdelex(
      "mystream",
      "1638360173533-0",
      "1638360173533-1",
      "1638360173533-2"
  )
  print(result)  # List of results for each ID
  ```

  ```py With Option theme={"system"}
  # Use KEEPREF option to keep consumer group references
  result = redis.xdelex(
      "mystream",
      "1638360173533-0",
      "1638360173533-1",
      option="KEEPREF"
  )
  print(result)  # List of results for each ID

  # Use DELREF option to delete consumer group references
  result = redis.xdelex(
      "mystream",
      "1638360173533-0",
      option="DELREF"
  )
  print(result)  # List of results for each ID

  # Use ACKED option to only acknowledge (don't delete)
  result = redis.xdelex(
      "mystream",
      "1638360173533-0",
      option="ACKED"
  )
  print(result)  # List of results for each ID
  ```

  ```py With Stream Processing theme={"system"}
  # Add entries to stream
  redis.xadd("events", "*", {"type": "login", "user": "john"})
  redis.xadd("events", "*", {"type": "logout", "user": "john"})

  # Read entries
  entries = redis.xrange("events", "-", "+")
  print(entries)

  # Delete specific entries
  deleted = redis.xdelex(
      "events",
      entries[0][0],  # First entry ID
      entries[1][0]   # Second entry ID
  )
  print(f"Results: {deleted}")  # List of results for each ID
  ```

  ```py Cleanup Old Entries theme={"system"}
  # Get entries older than a certain timestamp
  old_entries = redis.xrange("logs", "-", "1638360000000-0")

  # Delete old entries
  if old_entries:
      ids = [entry[0] for entry in old_entries]
      deleted = redis.xdelex("logs", *ids)
      print(f"Results: {deleted}")  # List of results for each ID
  ```
</RequestExample>

## Use Cases

* **Stream Cleanup**: Remove processed or expired stream entries
* **Data Retention**: Implement custom retention policies
* **Error Handling**: Delete corrupted or invalid stream entries
* **Memory Management**: Clean up streams to free memory

<Note>
  This command is available in Redis 8.2.0 and later. It provides extended functionality compared to the standard XDEL command.
</Note>
