# `BankingCircle.Config`
[🔗](https://github.com/iamkanishka/banking_circle/blob/main/lib/banking_circle/config.ex#L1)

Validated runtime configuration for a Banking Circle client instance.

Supports multiple named clients (e.g. one per legal entity / company id)
running side by side, each with its own credentials, certificate, and
environment — configured either via `config/config.exs` or passed
explicitly at call time.

## Example

    config :banking_circle, BankingCircle,
      environment: :sandbox,
      username: {:system, "BC_USERNAME"},
      password: {:system, "BC_PASSWORD"},
      certificate_thumbprint: {:system, "BC_CERT_THUMBPRINT"},
      client_cert_path: {:system, "BC_CLIENT_CERT_PATH"},
      client_key_path: {:system, "BC_CLIENT_KEY_PATH"},
      request_timeout_ms: 15_000,
      max_retries: 3

Multiple clients:

    config :banking_circle, :entities,
      eu_entity: [environment: :production, username: {:system, "BC_EU_USER"}, ...],
      uk_entity: [environment: :production, username: {:system, "BC_UK_USER"}, ...]

# `t`

```elixir
@type t() :: %BankingCircle.Config{
  api_base_url_override: String.t() | nil,
  auth_base_url_override: String.t() | nil,
  certificate_thumbprint: String.t(),
  client_cert_path: String.t() | nil,
  client_key_path: String.t() | nil,
  environment: BankingCircle.Environment.t(),
  finch_pool_size: pos_integer(),
  max_retries: non_neg_integer(),
  name: atom(),
  password: String.t(),
  request_timeout_ms: pos_integer(),
  retry_base_delay_ms: pos_integer(),
  username: String.t(),
  webhook_encryption_key: String.t() | nil
}
```

# `load!`

```elixir
@spec load!(atom()) :: t()
```

Loads named config from `Application.get_env/3` and validates it.

# `new!`

```elixir
@spec new!(keyword()) :: t()
```

Builds and validates a `BankingCircle.Config` from a keyword list.

Values may be given as literals or as `{:system, "ENV_VAR"}` tuples, which
are resolved at build time (never compiled into a release artifact).

Raises `NimbleOptions.ValidationError` on invalid input.

---

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