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

TrueLayer Mandates API — Variable Recurring Payments (VRP) and sweeping mandates.

A mandate authorises the SDK to initiate repeated payments on behalf of a PSU
without requiring re-authorisation for each individual payment.

All mutating calls are ES512 request-signed and carry idempotency keys.

# `confirm_funds`

```elixir
@spec confirm_funds(TruelayerClient.t(), String.t(), pos_integer()) ::
  {:ok, map()} | {:error, TruelayerClient.Error.t()}
```

Check whether sufficient funds are available under a mandate.

# `create_mandate`

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

Create a mandate (POST /v3/mandates).

## Required option

  * `:operation_id` — stable ID for idempotency

# `get_constraints`

```elixir
@spec get_constraints(TruelayerClient.t(), String.t()) ::
  {:ok, map()} | {:error, TruelayerClient.Error.t()}
```

Get constraints for a mandate (GET /v3/mandates/{id}/constraints).

# `get_mandate`

```elixir
@spec get_mandate(TruelayerClient.t(), String.t()) ::
  {:ok, map()} | {:error, TruelayerClient.Error.t()}
```

Get a mandate by ID (GET /v3/mandates/{id}).

# `list_mandates`

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

List mandates with optional cursor pagination (GET /v3/mandates).

# `revoke_mandate`

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

Revoke an active mandate (POST /v3/mandates/{id}/revoke).

# `start_authorization_flow`

```elixir
@spec start_authorization_flow(TruelayerClient.t(), String.t(), map()) ::
  {:ok, map()} | {:error, TruelayerClient.Error.t()}
```

Start the authorization flow for a mandate.

# `submit_consent`

```elixir
@spec submit_consent(TruelayerClient.t(), String.t()) ::
  {:ok, map()} | {:error, TruelayerClient.Error.t()}
```

Submit PSU consent for a mandate.

# `submit_provider_selection`

```elixir
@spec submit_provider_selection(TruelayerClient.t(), String.t(), String.t()) ::
  {:ok, map()} | {:error, TruelayerClient.Error.t()}
```

Submit provider selection for a mandate.

---

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