# `Attio.Meetings`
[🔗](https://github.com/sgerrand/ex_attio/blob/v0.2.0/lib/attio/meetings.ex#L1)

Functions for managing meetings linked to records.

Meetings represent calendar events — either synced from connected calendars
or created manually. Requires the `meeting:read` scope for read operations
and `meeting:read-write` for mutations.

## Pagination

`list/2` returns a single page. `stream/2` lazily pages through all meetings;
`stream_all/2` collects them into `{:ok, list}`. See `Attio` for an overview.

    client
    |> Attio.Meetings.stream()
    |> Stream.filter(fn m -> m["title"] =~ "intro" end)
    |> Enum.to_list()

# `create`

```elixir
@spec create(Attio.Client.t(), map()) :: {:ok, map()} | {:error, term()}
```

Creates a meeting.

## Required attributes

  * `"title"` - Meeting title.
  * `"start_time"` - ISO 8601 start timestamp.
  * `"end_time"` - ISO 8601 end timestamp.

# `delete`

```elixir
@spec delete(Attio.Client.t(), String.t()) :: {:ok, map()} | {:error, term()}
```

Deletes a meeting.

# `get`

```elixir
@spec get(Attio.Client.t(), String.t()) :: {:ok, map()} | {:error, term()}
```

Gets a single meeting by its ID.

# `list`

```elixir
@spec list(
  Attio.Client.t(),
  keyword()
) :: {:ok, map()} | {:error, term()}
```

Lists meetings. Returns one page.

## Options

  * `:limit` - Number of meetings per page.
  * `:cursor` - Pagination cursor from a previous response.

# `stream`

```elixir
@spec stream(
  Attio.Client.t(),
  keyword()
) :: Enumerable.t()
```

Returns a lazy stream of all meetings across all pages.

Accepts the same options as `list/2`. Raises `{:attio_stream_error, error}`
on API failure mid-stream. Use `stream_all/2` if you prefer a standard
`{:ok, list} | {:error, term()}` return value.

# `stream_all`

```elixir
@spec stream_all(
  Attio.Client.t(),
  keyword()
) :: {:ok, [map()]} | {:error, Attio.Error.t() | Exception.t()}
```

Fetches all meetings across all pages and returns them as a list.

Accepts the same options as `list/2`. Returns `{:ok, [map()]}` on success
or `{:error, term()}` if any page request fails. Unlike `stream/2`, the
entire result set is loaded into memory.

## Example

    {:ok, meetings} = Attio.Meetings.stream_all(client)

# `update`

```elixir
@spec update(Attio.Client.t(), String.t(), map()) :: {:ok, map()} | {:error, term()}
```

Updates a meeting.

---

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