# `Twilio.Page`
[🔗](https://github.com/jeffhuen/twilio_elixir/blob/main/lib/twilio/page.ex#L1)

Paginated result from a Twilio list endpoint.

Handles both pagination formats transparently:
- **Meta wrapper** (v1/v2/v3): `meta.next_page_url`, `meta.key`
- **Flat format** (v2010): `next_page_uri` at top level, no `meta`

# `t`

```elixir
@type t() :: %Twilio.Page{
  first_page_url: String.t() | nil,
  items: [map()],
  key: String.t(),
  next_page_url: String.t() | nil,
  page: non_neg_integer() | nil,
  page_size: non_neg_integer() | nil,
  previous_page_url: String.t() | nil,
  url: String.t() | nil
}
```

# `from_response`

```elixir
@spec from_response(map(), String.t()) :: t()
```

Parse a raw API response into a Page struct.

Auto-detects the pagination format:
- If a `"meta"` key is present -> v1/v2/v3 meta wrapper format
- Otherwise -> v2010 flat format (uses `*_uri` instead of `*_url`)

# `has_next?`

```elixir
@spec has_next?(t()) :: boolean()
```

Check if there are more pages.

# `stream`

```elixir
@spec stream((map() -&gt; {:ok, t()} | {:error, term()}), String.t()) :: Enumerable.t()
```

Auto-page through all results as a lazy stream.

---

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