# `Tink.Providers`
[🔗](https://github.com/iamkanishka/tink.ex/blob/v0.1.1/lib/tink/providers.ex#L1)

Providers API with explicit caching (1-hour TTL for list, 2-hour for individual).

Provider data rarely changes — banks don't appear or disappear frequently —
making it an ideal candidate for aggressive caching. Both `list_providers/2`
and `get_provider/2` cache their responses explicitly via `Tink.Cache.fetch/3`.

## Cache Keys

  * List: `"providers:<market>:<capabilities>"`
  * Individual: `"providers:provider:<provider_id>"`

Cache is invalidated automatically when the client's TTL expires. To force a
fresh fetch, pass `cache: false` on the client or call `Tink.Cache.clear/0`.

## Required Scopes

- `providers:read` — authenticated access

# `get_provider`

```elixir
@spec get_provider(Tink.Client.t(), String.t()) ::
  {:ok, map()} | {:error, Tink.Error.t()}
```

Gets detailed information about a specific provider with caching.

Individual providers are cached for 2 hours by provider ID.

## Examples

    {:ok, provider} = Tink.Providers.get_provider(client, "uk-ob-barclays")

# `list_providers`

```elixir
@spec list_providers(
  Tink.Client.t(),
  keyword()
) :: {:ok, map()} | {:error, Tink.Error.t()}
```

Lists all available providers with explicit caching.

## Parameters

  * `client` - Tink client
  * `opts` - Query options:
    * `:market` - ISO 3166-1 alpha-2 code (e.g. `"GB"`)
    * `:capabilities` - List of required capabilities
    * `:cache` - Override (`true` | `false`)

## Examples

    {:ok, providers} = Tink.Providers.list_providers(client, market: "GB")

---

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