# `Codat.RateLimit`
[🔗](https://github.com/iamkanishka/codat.git/blob/v1.0.0/lib/codat/rate_limit.ex#L1)

Rate limit information extracted from Codat API response headers.

## Headers

| Header                   | Description                                         |
|--------------------------|-----------------------------------------------------|
| `X-Rate-Limit-Limit`     | Daily request allowance (`1000 × (1 + ACCs)`)       |
| `X-Rate-Limit-Remaining` | Requests remaining today                            |
| `X-Rate-Limit-Reset`     | Unix timestamp when the limit resets (00:00 UTC)    |

> **ACCs** = Active Connected Companies.

# `t`

```elixir
@type t() :: %Codat.RateLimit{
  exhausted?: boolean(),
  limit: non_neg_integer() | nil,
  remaining: non_neg_integer() | nil,
  reset_timestamp: non_neg_integer() | nil,
  resets_at: DateTime.t() | nil
}
```

# `approaching?`

```elixir
@spec approaching?(
  t(),
  keyword()
) :: boolean()
```

Returns `true` if fewer than `threshold` requests remain today.

## Options

- `:threshold` — the minimum remaining requests (default: 100)

# `from_headers`

```elixir
@spec from_headers([{String.t(), String.t()}]) :: t() | nil
```

Parses rate limit info from a list of HTTP response headers.
Returns `nil` if no rate limit headers are present.

# `seconds_until_reset`

```elixir
@spec seconds_until_reset(t()) :: non_neg_integer() | nil
```

Returns the number of seconds until the rate limit resets, or `nil`.

---

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