# `BankingCircle.HTTP.Client`
[🔗](https://github.com/iamkanishka/banking_circle/blob/main/lib/banking_circle/http/client.ex#L1)

Builds the shared `Req` request pipeline used by every resource module
(`BankingCircle.Payments`, `BankingCircle.Accounts`, ...), and exposes
`request/2` as the single choke point through which all API traffic
flows — this is where auth injection, retries, telemetry, and error
normalization all compose.

# `build`

```elixir
@spec build(BankingCircle.Config.t()) :: Req.Request.t()
```

# `request`

```elixir
@spec request(
  Req.Request.t(),
  keyword()
) :: {:ok, term()} | {:error, BankingCircle.Error.t()}
```

Issues a request through the shared pipeline: attaches a fresh/cached
bearer token, emits `[:banking_circle, :request, :start | :stop | :exception]`
telemetry, and normalizes any failure into `BankingCircle.Error`.

Returns `{:ok, decoded_body}` on 2xx, `{:error, %BankingCircle.Error{}}`
otherwise.

---

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