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

Modules for interacting with the `chat/polls` 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
 * `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(),
  client: module(),
  endpoint: String.t(),
  req_opts: keyword()
]
```

# `create_poll`

```elixir
@spec create_poll(ExStreamClient.Model.CreatePollRequest.t(), shared_opts()) ::
  {:ok, ExStreamClient.Model.PollResponse.t()} | {:error, any()}
```

Creates a new poll

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

# `create_poll_option`

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

Creates a poll option

### Sends events:
- `poll.updated`

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

# `delete_poll`

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

Deletes a poll

### Sends events:
- `poll.deleted`

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

# `delete_poll_option`

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

Deletes a poll option

### Sends events:
- `poll.updated`

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

# `get_poll`

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

Retrieves a poll

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

# `get_poll_option`

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

Retrieves a poll option

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

# `query_poll_votes`

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

Queries votes

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

# `query_polls`

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

Queries polls

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

# `update_poll`

```elixir
@spec update_poll(ExStreamClient.Model.UpdatePollRequest.t(), shared_opts()) ::
  {:ok, ExStreamClient.Model.PollResponse.t()} | {:error, any()}
```

Updates a poll

### Sends events:
- `poll.closed`
- `poll.updated`

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

# `update_poll_option`

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

Updates a poll option

### Sends events:
- `poll.updated`

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

# `update_poll_partial`

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

Updates a poll partially

### Sends events:
- `poll.updated`

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

---

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