# `Stripe.Resources.Mandate`
[🔗](https://github.com/jeffhuen/tiger_stripe/blob/main/lib/stripe/resources/mandate.ex#L2)

Mandate

A Mandate is a record of the permission that your customer gives you to debit their payment method.

# `customer_acceptance`

```elixir
@type customer_acceptance() :: %{
  optional(:accepted_at) =&gt; integer() | nil,
  optional(:offline) =&gt; map() | nil,
  optional(:online) =&gt; customer_acceptance_online() | nil,
  optional(:type) =&gt; String.t() | nil,
  optional(String.t()) =&gt; term()
}
```

* `accepted_at` - The time that the customer accepts the mandate. Format: Unix timestamp. Nullable.
* `offline`
* `online`
* `type` - The mandate includes the type of customer acceptance information, such as: `online` or `offline`. Possible values: `offline`, `online`.

# `customer_acceptance_online`

```elixir
@type customer_acceptance_online() :: %{
  optional(:ip_address) =&gt; String.t() | nil,
  optional(:user_agent) =&gt; String.t() | nil,
  optional(String.t()) =&gt; term()
}
```

* `ip_address` - The customer accepts the mandate from this IP address. Max length: 5000. Nullable.
* `user_agent` - The customer accepts the mandate using the user agent of the browser. Max length: 5000. Nullable.

# `payment_method_details`

```elixir
@type payment_method_details() :: %{
  optional(:acss_debit) =&gt; Stripe.Resources.AcssDebit.t() | nil,
  optional(:amazon_pay) =&gt; Stripe.Resources.AmazonPay.t() | nil,
  optional(:au_becs_debit) =&gt; payment_method_details_au_becs_debit() | nil,
  optional(:bacs_debit) =&gt; payment_method_details_bacs_debit() | nil,
  optional(:card) =&gt; map() | nil,
  optional(:cashapp) =&gt; Stripe.Resources.Cashapp.t() | nil,
  optional(:kakao_pay) =&gt; Stripe.Resources.KakaoPay.t() | nil,
  optional(:klarna) =&gt; map() | nil,
  optional(:kr_card) =&gt; Stripe.Resources.KrCard.t() | nil,
  optional(:link) =&gt; map() | nil,
  optional(:naver_pay) =&gt; map() | nil,
  optional(:nz_bank_account) =&gt; Stripe.Resources.NzBankAccount.t() | nil,
  optional(:paypal) =&gt; payment_method_details_paypal() | nil,
  optional(:payto) =&gt; Stripe.Resources.Payto.t() | nil,
  optional(:revolut_pay) =&gt; Stripe.Resources.RevolutPay.t() | nil,
  optional(:sepa_debit) =&gt; Stripe.Resources.SepaDebit.t() | nil,
  optional(:type) =&gt; String.t() | nil,
  optional(:us_bank_account) =&gt; Stripe.Resources.UsBankAccount.t() | nil,
  optional(String.t()) =&gt; term()
}
```

* `acss_debit`
* `amazon_pay`
* `au_becs_debit`
* `bacs_debit`
* `card`
* `cashapp`
* `kakao_pay`
* `klarna`
* `kr_card`
* `link`
* `naver_pay`
* `nz_bank_account`
* `paypal`
* `payto`
* `revolut_pay`
* `sepa_debit`
* `type` - This mandate corresponds with a specific payment method type. The `payment_method_details` includes an additional hash with the same name and contains mandate information that's specific to that payment method. Max length: 5000.
* `us_bank_account`

# `payment_method_details_au_becs_debit`

```elixir
@type payment_method_details_au_becs_debit() :: %{
  optional(:url) =&gt; String.t() | nil,
  optional(String.t()) =&gt; term()
}
```

* `url` - The URL of the mandate. This URL generally contains sensitive information about the customer and should be shared with them exclusively. Max length: 5000.

# `payment_method_details_bacs_debit`

```elixir
@type payment_method_details_bacs_debit() :: %{
  optional(:network_status) =&gt; String.t() | nil,
  optional(:reference) =&gt; String.t() | nil,
  optional(:revocation_reason) =&gt; String.t() | nil,
  optional(:url) =&gt; String.t() | nil,
  optional(String.t()) =&gt; term()
}
```

* `network_status` - The status of the mandate on the Bacs network. Can be one of `pending`, `revoked`, `refused`, or `accepted`. Possible values: `accepted`, `pending`, `refused`, `revoked`.
* `reference` - The unique reference identifying the mandate on the Bacs network. Max length: 5000.
* `revocation_reason` - When the mandate is revoked on the Bacs network this field displays the reason for the revocation. Possible values: `account_closed`, `bank_account_restricted`, `bank_ownership_changed`, `could_not_process`, `debit_not_authorized`. Nullable.
* `url` - The URL that will contain the mandate that the customer has signed. Max length: 5000.

# `payment_method_details_paypal`

```elixir
@type payment_method_details_paypal() :: %{
  optional(:billing_agreement_id) =&gt; String.t() | nil,
  optional(:payer_id) =&gt; String.t() | nil,
  optional(String.t()) =&gt; term()
}
```

* `billing_agreement_id` - The PayPal Billing Agreement ID (BAID). This is an ID generated by PayPal which represents the mandate between the merchant and the customer. Max length: 5000. Nullable.
* `payer_id` - PayPal account PayerID. This identifier uniquely identifies the PayPal customer. Max length: 5000. Nullable.

# `single_use`

```elixir
@type single_use() :: %{
  optional(:amount) =&gt; integer() | nil,
  optional(:currency) =&gt; String.t() | nil,
  optional(String.t()) =&gt; term()
}
```

* `amount` - The amount of the payment on a single use mandate.
* `currency` - The currency of the payment on a single use mandate. Format: ISO 4217 currency code.

# `t`

```elixir
@type t() :: %Stripe.Resources.Mandate{
  customer_acceptance: customer_acceptance(),
  id: String.t(),
  livemode: boolean(),
  multi_use: map() | nil,
  object: String.t(),
  on_behalf_of: String.t() | nil,
  payment_method: String.t() | Stripe.Resources.PaymentMethod.t(),
  payment_method_details: payment_method_details(),
  single_use: single_use() | nil,
  status: String.t(),
  type: String.t()
}
```

* `customer_acceptance` - Expandable.
* `id` - Unique identifier for the object. Max length: 5000.
* `livemode` - Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode.
* `multi_use` - Expandable.
* `object` - String representing the object's type. Objects of the same type share the same value. Possible values: `mandate`.
* `on_behalf_of` - The account (if any) that the mandate is intended for. Max length: 5000.
* `payment_method` - ID of the payment method associated with this mandate. Expandable.
* `payment_method_details` - Expandable.
* `single_use` - Expandable.
* `status` - The mandate status indicates whether or not you can use it to initiate a payment. Possible values: `active`, `inactive`, `pending`.
* `type` - The type of the mandate. Possible values: `multi_use`, `single_use`.

# `expandable_fields`

# `object_name`

---

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