# `TruelayerClient.Config`
[🔗](https://github.com/iamkanishka/truelayer_client/blob/v1.0.0/lib/truelayer_client/config.ex#L1)

Validated configuration struct for a TruelayerClient instance.

Created internally by `TruelayerClient.new/1`. Do not build directly.

## Fields

  * `:client_id` - OAuth2 client ID (required)
  * `:client_secret` - OAuth2 client secret (required)
  * `:environment` - `:sandbox` or `:live` (default: `:sandbox`)
  * `:api_url` - resolved API base URL
  * `:auth_url` - resolved Auth server base URL
  * `:redirect_uri` - OAuth2 redirect URI for user-facing flows
  * `:signing_key_pem` - PEM-encoded EC private key for request signing
  * `:signing_key_id` - key ID registered in the TrueLayer Console
  * `:webhook_signing_secret` - HMAC-SHA256 secret for webhook verification
  * `:webhook_replay_tolerance_sec` - max accepted webhook age in seconds (default: 300)
  * `:request_timeout_ms` - HTTP timeout in milliseconds (default: 30_000)
  * `:max_retries` - maximum retry attempts (default: 3)
  * `:base_retry_delay_ms` - base exponential-backoff delay in ms (default: 300)
  * `:token_store` - module implementing `TruelayerClient.Auth.TokenStore`
  * `:telemetry_prefix` - prefix for telemetry events (default: `[:truelayer_client]`)

# `environment`

```elixir
@type environment() :: :sandbox | :live
```

# `t`

```elixir
@type t() :: %TruelayerClient.Config{
  api_url: String.t(),
  auth_url: String.t(),
  base_retry_delay_ms: non_neg_integer(),
  client_id: String.t(),
  client_secret: String.t(),
  environment: environment(),
  max_retries: non_neg_integer(),
  redirect_uri: String.t() | nil,
  request_timeout_ms: pos_integer(),
  signing_key_id: String.t() | nil,
  signing_key_pem: binary() | nil,
  telemetry_prefix: [atom()],
  token_store: module(),
  webhook_replay_tolerance_sec: non_neg_integer(),
  webhook_signing_secret: binary() | nil
}
```

# `new`

```elixir
@spec new(keyword()) :: {:ok, t()} | {:error, TruelayerClient.Error.t()}
```

Build and validate a `Config` from keyword options.

Returns `{:ok, config}` or `{:error, %TruelayerClient.Error{type: :validation_error}}`.

---

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