# `CCXT.Defaults`
[🔗](https://github.com/ZenHive/ccxt_client/blob/main/lib/ccxt/defaults.ex#L1)

Centralized default configuration values for ccxt_client.

All defaults can be overridden via application config:

    config :ccxt_client,
      recv_window_ms: 10_000,
      request_timeout_ms: 60_000

## Available Defaults

| Config Key | Default | Description |
|------------|---------|-------------|
| `:recv_window_ms` | 5000 | Request timestamp validity window (exchanges reject stale requests) |
| `:request_timeout_ms` | 30000 | HTTP request timeout |
| `:retry_policy` | `:safe_transient` | HTTP retry strategy (GET/HEAD only) |
| `:rate_limiter_enabled` | `true` | Enable/disable rate limiter |
| `:rate_limit_cleanup_interval_ms` | 60000 | Interval for cleaning up old rate limit timestamps |
| `:rate_limit_max_age_ms` | 60000 | Maximum age for rate limit request timestamps |

# `rate_limit_cleanup_interval_ms`

```elixir
@spec rate_limit_cleanup_interval_ms() :: pos_integer()
```

Returns the interval for cleaning up expired rate limit timestamps.

Default: 60000ms

# `rate_limit_max_age_ms`

```elixir
@spec rate_limit_max_age_ms() :: pos_integer()
```

Returns the maximum age for rate limit request timestamps before removal.

Default: 60000ms

# `rate_limiter_enabled?`

```elixir
@spec rate_limiter_enabled?() :: boolean()
```

Returns whether the rate limiter is enabled.

Default: `true`

# `recv_window_ms`

```elixir
@spec recv_window_ms() :: pos_integer()
```

Returns the recv_window value in milliseconds.

The recv_window defines how long a signed request is valid.
Exchanges reject requests with timestamps outside this window.

Default: 5000ms

# `request_timeout_ms`

```elixir
@spec request_timeout_ms() :: pos_integer()
```

Returns the HTTP request timeout in milliseconds.

Maximum time to wait for a response from an exchange API.

Default: 30000ms

# `retry_policy`

```elixir
@spec retry_policy() :: :safe_transient | :transient | false
```

Returns the HTTP retry policy.

## Trading Safety (CRITICAL)

Uses `:safe_transient` by default — only retries GET/HEAD requests.
**Never use `:transient` for trading APIs** as it could duplicate orders.

Default: `:safe_transient`

---

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