# `AdyenClient.Client`
[🔗](https://github.com/iamkanishka/adyen_client/blob/v1.0.0/lib/adyen_client/client.ex#L1)

Core HTTP client for AdyenClient.

Features:
- Automatic retry with exponential backoff for retryable errors (5xx, 429)
- Telemetry events on every request
- Idempotency key injection for POST
- Configurable timeouts
- JSON encode/decode with Jason
- Structured `AdyenClient.Error` on failure

# `method`

```elixir
@type method() :: :get | :post | :patch | :put | :delete
```

# `response`

```elixir
@type response() :: {:ok, map() | list() | nil} | {:error, AdyenClient.Error.t()}
```

# `delete`

```elixir
@spec delete(
  String.t(),
  keyword()
) :: response()
```

# `get`

```elixir
@spec get(
  String.t(),
  keyword()
) :: response()
```

# `patch`

```elixir
@spec patch(String.t(), map(), keyword()) :: response()
```

# `post`

```elixir
@spec post(String.t(), map(), keyword()) :: response()
```

# `request`

```elixir
@spec request(method(), String.t(), keyword()) :: response()
```

Make an authenticated API request.

## Options
- `:body` — request body (map), JSON-encoded automatically
- `:query` — map of query string params
- `:config` — `AdyenClient.Config.t()` (defaults to `Config.load!()`)
- `:idempotency_key` — override the auto-generated POST idempotency key

---

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