# `ExStreamClient.Operations.Moderation`
[🔗](https://github.com/Tango-Tango/ex_stream_client/blob/main/lib/ex_stream_client/operations/moderation.ex#L1)

Modules for interacting with the `moderation` group of Stream APIs

API Reference: https://getstream.github.io/protocol/?urls.primaryName=Chat%20v2

### Shared options
All functions in this module accept the following optional parameters:

 * `api_key` - API key to use. If not provided, the default key from config will be used
 * `authenticate_as_user` - User id to authenticate. If not provided, the server key will be used
 * `api_key_secret` - API key secret to use. If not provided, the default secret from config will be used
 * `endpoint` - endpoint to use. If not provided, the default endpoint from config will be used
 * `client` - HTTP client to use. Must implement `ExStreamClient.Http.Behavior`. Defaults to `ExStreamClient.Http`
 * `req_opts` - all of these options will be forwarded to req. See `Req.new/1` for available options

# `shared_opts`

```elixir
@type shared_opts() :: [
  api_key: String.t(),
  api_key_secret: String.t(),
  authenticate_as_user: String.t(),
  client: module(),
  endpoint: String.t(),
  req_opts: keyword()
]
```

# `appeal`

```elixir
@spec appeal(ExStreamClient.Model.AppealRequest.t(), shared_opts()) ::
  {:ok, ExStreamClient.Model.AppealResponse.t()} | {:error, any()}
```

Appeal against the moderation decision

### Required Arguments:
- `payload`: `Elixir.ExStreamClient.Model.AppealRequest`
### Optional Arguments:
- All options from [Shared Options](#module-shared-options) are supported.

# `ban`

```elixir
@spec ban(ExStreamClient.Model.BanRequest.t(), shared_opts()) ::
  {:ok, ExStreamClient.Model.BanResponse.t()} | {:error, any()}
```

Ban a user from a channel or the entire app

### Required Arguments:
- `payload`: `Elixir.ExStreamClient.Model.BanRequest`
### Optional Arguments:
- All options from [Shared Options](#module-shared-options) are supported.

# `bulk_delete_action_config`

```elixir
@spec bulk_delete_action_config(
  ExStreamClient.Model.BulkDeleteActionConfigRequest.t(),
  shared_opts()
) ::
  {:ok, ExStreamClient.Model.BulkDeleteActionConfigResponse.t()}
  | {:error, any()}
```

Delete multiple moderation action config entries by UUID in a single request.

### Required Arguments:
- `payload`: `Elixir.ExStreamClient.Model.BulkDeleteActionConfigRequest`
### Optional Arguments:
- All options from [Shared Options](#module-shared-options) are supported.

# `bulk_image_moderation`

```elixir
@spec bulk_image_moderation(
  ExStreamClient.Model.BulkImageModerationRequest.t(),
  shared_opts()
) ::
  {:ok, ExStreamClient.Model.BulkImageModerationResponse.t()} | {:error, any()}
```

Moderate multiple images in bulk using a CSV file

### Required Arguments:
- `payload`: `Elixir.ExStreamClient.Model.BulkImageModerationRequest`
### Optional Arguments:
- All options from [Shared Options](#module-shared-options) are supported.

# `bulk_upsert_action_config`

```elixir
@spec bulk_upsert_action_config(
  ExStreamClient.Model.BulkUpsertActionConfigRequest.t(),
  shared_opts()
) ::
  {:ok, ExStreamClient.Model.BulkUpsertActionConfigResponse.t()}
  | {:error, any()}
```

Create or update multiple moderation action config entries in a single request. Omit the ID field to create; provide an ID to update.

### Required Arguments:
- `payload`: `Elixir.ExStreamClient.Model.BulkUpsertActionConfigRequest`
### Optional Arguments:
- All options from [Shared Options](#module-shared-options) are supported.

# `bypass`

```elixir
@spec bypass(ExStreamClient.Model.BypassRequest.t(), shared_opts()) ::
  {:ok, ExStreamClient.Model.BypassResponse.t()} | {:error, any()}
```

Enable or disable moderation bypass for a user. This endpoint is server-side only.

### Required Arguments:
- `payload`: `Elixir.ExStreamClient.Model.BypassRequest`
### Optional Arguments:
- All options from [Shared Options](#module-shared-options) are supported.

# `check`

```elixir
@spec check(ExStreamClient.Model.CheckRequest.t(), shared_opts()) ::
  {:ok, ExStreamClient.Model.CheckResponse.t()} | {:error, any()}
```

Run moderation checks on the provided content

### Required Arguments:
- `payload`: `Elixir.ExStreamClient.Model.CheckRequest`
### Optional Arguments:
- All options from [Shared Options](#module-shared-options) are supported.

# `check_s3_access`

```elixir
@spec check_s3_access(ExStreamClient.Model.CheckS3AccessRequest.t(), shared_opts()) ::
  {:ok, ExStreamClient.Model.CheckS3AccessResponse.t()} | {:error, any()}
```

Verifies that the configured IAM role ARN can access private S3 images for moderation. Optionally accepts a stream+s3:// URL to check access to a specific object.

### Required Arguments:
- `payload`: `Elixir.ExStreamClient.Model.CheckS3AccessRequest`
### Optional Arguments:
- All options from [Shared Options](#module-shared-options) are supported.

# `custom_check`

```elixir
@spec custom_check(ExStreamClient.Model.CustomCheckRequest.t(), shared_opts()) ::
  {:ok, ExStreamClient.Model.CustomCheckResponse.t()} | {:error, any()}
```

Custom check, add your own AI model reports to the review queue

### Required Arguments:
- `payload`: `Elixir.ExStreamClient.Model.CustomCheckRequest`
### Optional Arguments:
- All options from [Shared Options](#module-shared-options) are supported.

# `delete_action_config`

```elixir
@spec delete_action_config(String.t(), [{:user_id, String.t()} | shared_opts()]) ::
  {:ok, ExStreamClient.Model.DeleteActionConfigResponse.t()} | {:error, any()}
```

Delete a specific moderation action config entry by its UUID.

### Required Arguments:
- `id`
### Optional Arguments:
- `user_id`
- All options from [Shared Options](#module-shared-options) are supported.

# `delete_config`

```elixir
@spec delete_config(String.t(), [
  ({:user_id, String.t()} | {:team, String.t()}) | shared_opts()
]) ::
  {:ok, ExStreamClient.Model.DeleteModerationConfigResponse.t()}
  | {:error, any()}
```

Delete a specific moderation policy by its name

### Required Arguments:
- `key`
### Optional Arguments:
- `team`
- `user_id`
- All options from [Shared Options](#module-shared-options) are supported.

# `delete_moderation_rule`

```elixir
@spec delete_moderation_rule(String.t(), [{:user_id, String.t()} | shared_opts()]) ::
  {:ok, ExStreamClient.Model.DeleteModerationRuleResponse.t()} | {:error, any()}
```

Delete an existing moderation rule

### Required Arguments:
- `id`
### Optional Arguments:
- `user_id`
- All options from [Shared Options](#module-shared-options) are supported.

# `flag`

```elixir
@spec flag(ExStreamClient.Model.FlagRequest.t(), shared_opts()) ::
  {:ok, ExStreamClient.Model.FlagResponse.t()} | {:error, any()}
```

Flag any type of content (messages, users, channels, activities) for moderation review. Supports custom content types and additional metadata for flagged content.

### Required Arguments:
- `payload`: `Elixir.ExStreamClient.Model.FlagRequest`
### Optional Arguments:
- All options from [Shared Options](#module-shared-options) are supported.

# `get_action_config`

```elixir
@spec get_action_config([
  ({:user_id, String.t()}
   | {:only_defaults, boolean()}
   | {:exclude_defaults, boolean()}
   | {:entity_type, String.t()}
   | {:queue_type, String.t()})
  | shared_opts()
]) :: {:ok, ExStreamClient.Model.GetActionConfigResponse.t()} | {:error, any()}
```

Returns moderation action configs grouped by entity type, sorted by order ascending. Supports fetching DB-configured actions, hardcoded defaults, or both.

### Optional Arguments:
- `entity_type`
- `exclude_defaults`
- `only_defaults`
- `queue_type`
- `user_id`
- All options from [Shared Options](#module-shared-options) are supported.

# `get_appeal`

```elixir
@spec get_appeal(String.t(), shared_opts()) ::
  {:ok, ExStreamClient.Model.GetAppealResponse.t()} | {:error, any()}
```

Retrieve a specific appeal item by its ID

### Required Arguments:
- `id`
### Optional Arguments:
- All options from [Shared Options](#module-shared-options) are supported.

# `get_config`

```elixir
@spec get_config(String.t(), [{:team, String.t()} | shared_opts()]) ::
  {:ok, ExStreamClient.Model.GetConfigResponse.t()} | {:error, any()}
```

Retrieve a specific moderation configuration by its key and team. This configuration contains settings for various moderation features like toxicity detection, AI analysis, and filtering rules.

### Required Arguments:
- `key`
### Optional Arguments:
- `team`
- All options from [Shared Options](#module-shared-options) are supported.

# `get_flag_count`

```elixir
@spec get_flag_count(ExStreamClient.Model.GetFlagCountRequest.t(), shared_opts()) ::
  {:ok, ExStreamClient.Model.GetFlagCountResponse.t()} | {:error, any()}
```

Returns the number of moderation flags created against a specific user's content. Optionally filter by entity type.

### Required Arguments:
- `payload`: `Elixir.ExStreamClient.Model.GetFlagCountRequest`
### Optional Arguments:
- All options from [Shared Options](#module-shared-options) are supported.

# `get_moderation_rule`

```elixir
@spec get_moderation_rule(String.t(), shared_opts()) ::
  {:ok, ExStreamClient.Model.GetModerationRuleResponse.t()} | {:error, any()}
```

Get a specific moderation rule by ID

### Required Arguments:
- `id`
### Optional Arguments:
- All options from [Shared Options](#module-shared-options) are supported.

# `get_review_queue_item`

```elixir
@spec get_review_queue_item(String.t(), shared_opts()) ::
  {:ok, ExStreamClient.Model.GetReviewQueueItemResponse.t()} | {:error, any()}
```

Retrieve a specific review queue item by its ID

### Required Arguments:
- `id`
### Optional Arguments:
- All options from [Shared Options](#module-shared-options) are supported.

# `insert_action_log`

```elixir
@spec insert_action_log(
  ExStreamClient.Model.InsertActionLogRequest.t(),
  shared_opts()
) ::
  {:ok, ExStreamClient.Model.InsertActionLogResponse.t()} | {:error, any()}
```

Insert a moderation action log entry. Server-side only. Used by product services to log moderation-related actions.

### Required Arguments:
- `payload`: `Elixir.ExStreamClient.Model.InsertActionLogRequest`
### Optional Arguments:
- All options from [Shared Options](#module-shared-options) are supported.

# `labels`

```elixir
@spec labels(ExStreamClient.Model.LabelsRequest.t(), shared_opts()) ::
  {:ok, ExStreamClient.Model.LabelsResponse.t()} | {:error, any()}
```

Run moderation on text and return labels

### Required Arguments:
- `payload`: `Elixir.ExStreamClient.Model.LabelsRequest`
### Optional Arguments:
- All options from [Shared Options](#module-shared-options) are supported.

# `mute`

```elixir
@spec mute(ExStreamClient.Model.MuteRequest.t(), shared_opts()) ::
  {:ok, ExStreamClient.Model.MuteResponse.t()} | {:error, any()}
```

Mute a user. Mutes are generally not visible to the user you mute, while block is something you notice.

### Required Arguments:
- `payload`: `Elixir.ExStreamClient.Model.MuteRequest`
### Optional Arguments:
- All options from [Shared Options](#module-shared-options) are supported.

# `query_appeals`

```elixir
@spec query_appeals(ExStreamClient.Model.QueryAppealsRequest.t(), shared_opts()) ::
  {:ok, ExStreamClient.Model.QueryAppealsResponse.t()} | {:error, any()}
```

Query Appeals

### Required Arguments:
- `payload`: `Elixir.ExStreamClient.Model.QueryAppealsRequest`
### Optional Arguments:
- All options from [Shared Options](#module-shared-options) are supported.

# `query_label_results`

```elixir
@spec query_label_results(
  ExStreamClient.Model.QueryLabelResultsRequest.t(),
  shared_opts()
) ::
  {:ok, ExStreamClient.Model.QueryLabelResultsResponse.t()} | {:error, any()}
```

Search and filter moderation label results with support for pagination and sorting. View the history of moderation labels applied to content.

### Required Arguments:
- `payload`: `Elixir.ExStreamClient.Model.QueryLabelResultsRequest`
### Optional Arguments:
- All options from [Shared Options](#module-shared-options) are supported.

# `query_moderation_configs`

```elixir
@spec query_moderation_configs(
  ExStreamClient.Model.QueryModerationConfigsRequest.t(),
  shared_opts()
) ::
  {:ok, ExStreamClient.Model.QueryModerationConfigsResponse.t()}
  | {:error, any()}
```

Search and filter moderation configurations across your application. This endpoint is designed for building moderation dashboards and managing multiple configuration sets.

### Required Arguments:
- `payload`: `Elixir.ExStreamClient.Model.QueryModerationConfigsRequest`
### Optional Arguments:
- All options from [Shared Options](#module-shared-options) are supported.

# `query_moderation_flags`

```elixir
@spec query_moderation_flags(
  ExStreamClient.Model.QueryModerationFlagsRequest.t(),
  shared_opts()
) ::
  {:ok, ExStreamClient.Model.QueryModerationFlagsResponse.t()} | {:error, any()}
```

Query flags associated with moderation items. This is used for building a moderation dashboard.

### Required Arguments:
- `payload`: `Elixir.ExStreamClient.Model.QueryModerationFlagsRequest`
### Optional Arguments:
- All options from [Shared Options](#module-shared-options) are supported.

# `query_moderation_logs`

```elixir
@spec query_moderation_logs(
  ExStreamClient.Model.QueryModerationLogsRequest.t(),
  shared_opts()
) ::
  {:ok, ExStreamClient.Model.QueryModerationLogsResponse.t()} | {:error, any()}
```

Search and filter moderation action logs with support for pagination. View the history of moderation actions taken, including who performed them and when.

### Required Arguments:
- `payload`: `Elixir.ExStreamClient.Model.QueryModerationLogsRequest`
### Optional Arguments:
- All options from [Shared Options](#module-shared-options) are supported.

# `query_moderation_rules`

```elixir
@spec query_moderation_rules(
  ExStreamClient.Model.QueryModerationRulesRequest.t(),
  shared_opts()
) ::
  {:ok, ExStreamClient.Model.QueryModerationRulesResponse.t()} | {:error, any()}
```

Search and filter moderation rules across your application. This endpoint is designed for building moderation dashboards and managing multiple rule sets.

### Required Arguments:
- `payload`: `Elixir.ExStreamClient.Model.QueryModerationRulesRequest`
### Optional Arguments:
- All options from [Shared Options](#module-shared-options) are supported.

# `query_review_queue`

```elixir
@spec query_review_queue(
  ExStreamClient.Model.QueryReviewQueueRequest.t(),
  shared_opts()
) ::
  {:ok, ExStreamClient.Model.QueryReviewQueueResponse.t()} | {:error, any()}
```

Query review queue items allows you to filter the review queue items. This is used for building a moderation dashboard.

### Required Arguments:
- `payload`: `Elixir.ExStreamClient.Model.QueryReviewQueueRequest`
### Optional Arguments:
- All options from [Shared Options](#module-shared-options) are supported.

# `submit_action`

```elixir
@spec submit_action(ExStreamClient.Model.SubmitActionRequest.t(), shared_opts()) ::
  {:ok, ExStreamClient.Model.SubmitActionResponse.t()} | {:error, any()}
```

Take action on flagged content, such as marking content as safe, deleting content, banning users, or executing custom moderation actions. Supports various action types with configurable parameters.

### Required Arguments:
- `payload`: `Elixir.ExStreamClient.Model.SubmitActionRequest`
### Optional Arguments:
- All options from [Shared Options](#module-shared-options) are supported.

# `submit_moderation_feedback`

```elixir
@spec submit_moderation_feedback(
  ExStreamClient.Model.SubmitModerationFeedbackRequest.t(),
  shared_opts()
) ::
  {:ok, ExStreamClient.Model.SubmitModerationFeedbackResponse.t()}
  | {:error, any()}
```

Forward a moderator-supplied correction to the moderation feedback pipeline. Server-side only.

### Required Arguments:
- `payload`: `Elixir.ExStreamClient.Model.SubmitModerationFeedbackRequest`
### Optional Arguments:
- All options from [Shared Options](#module-shared-options) are supported.

# `unban`

```elixir
@spec unban(String.t(), ExStreamClient.Model.UnbanRequest.t(), [
  ({:created_by, String.t()} | {:channel_cid, String.t()}) | shared_opts()
]) :: {:ok, ExStreamClient.Model.UnbanResponse.t()} | {:error, any()}
```

Unban a user from a channel or globally.

### Required Arguments:
- `target_user_id`
- `payload`: `Elixir.ExStreamClient.Model.UnbanRequest`
### Optional Arguments:
- `channel_cid`
- `created_by`
- All options from [Shared Options](#module-shared-options) are supported.

# `unmute`

```elixir
@spec unmute(ExStreamClient.Model.UnmuteRequest.t(), shared_opts()) ::
  {:ok, ExStreamClient.Model.UnmuteResponse.t()} | {:error, any()}
```

Unmute a user

### Required Arguments:
- `payload`: `Elixir.ExStreamClient.Model.UnmuteRequest`
### Optional Arguments:
- All options from [Shared Options](#module-shared-options) are supported.

# `upsert_action_config`

```elixir
@spec upsert_action_config(
  ExStreamClient.Model.UpsertActionConfigRequest.t(),
  shared_opts()
) ::
  {:ok, ExStreamClient.Model.UpsertActionConfigResponse.t()} | {:error, any()}
```

Create a new moderation action config entry or update an existing one. Action configs control the action buttons displayed in the moderation dashboard for each entity type.

### Required Arguments:
- `payload`: `Elixir.ExStreamClient.Model.UpsertActionConfigRequest`
### Optional Arguments:
- All options from [Shared Options](#module-shared-options) are supported.

# `upsert_config`

```elixir
@spec upsert_config(ExStreamClient.Model.UpsertConfigRequest.t(), shared_opts()) ::
  {:ok, ExStreamClient.Model.UpsertConfigResponse.t()} | {:error, any()}
```

Create a new moderation configuration or update an existing one. Configure settings for content filtering, AI analysis, toxicity detection, and other moderation features.

### Required Arguments:
- `payload`: `Elixir.ExStreamClient.Model.UpsertConfigRequest`
### Optional Arguments:
- All options from [Shared Options](#module-shared-options) are supported.

# `upsert_moderation_rule`

```elixir
@spec upsert_moderation_rule(
  ExStreamClient.Model.UpsertModerationRuleRequest.t(),
  shared_opts()
) ::
  {:ok, ExStreamClient.Model.UpsertModerationRuleResponse.t()} | {:error, any()}
```

Create or update a moderation rule that can apply app-wide or to specific moderation configs

### Required Arguments:
- `payload`: `Elixir.ExStreamClient.Model.UpsertModerationRuleRequest`
### Optional Arguments:
- All options from [Shared Options](#module-shared-options) are supported.

# `v2_delete_template`

```elixir
@spec v2_delete_template(shared_opts()) ::
  {:ok, ExStreamClient.Model.DeleteModerationTemplateResponse.t()}
  | {:error, any()}
```

Delete a specific moderation template by its name

### Optional Arguments:
- All options from [Shared Options](#module-shared-options) are supported.

# `v2_query_templates`

```elixir
@spec v2_query_templates(shared_opts()) ::
  {:ok, ExStreamClient.Model.QueryFeedModerationTemplatesResponse.t()}
  | {:error, any()}
```

Retrieve a list of feed moderation templates that define preset moderation rules and configurations. Limited to 100 templates per request.

### Optional Arguments:
- All options from [Shared Options](#module-shared-options) are supported.

# `v2_upsert_template`

```elixir
@spec v2_upsert_template(
  ExStreamClient.Model.UpsertModerationTemplateRequest.t(),
  shared_opts()
) ::
  {:ok, ExStreamClient.Model.UpsertModerationTemplateResponse.t()}
  | {:error, any()}
```

Upsert feeds template for moderation

### Required Arguments:
- `payload`: `Elixir.ExStreamClient.Model.UpsertModerationTemplateRequest`
### Optional Arguments:
- All options from [Shared Options](#module-shared-options) are supported.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
