# BLIK recurring payments

Accept recurring BLIK payments with customer-authorized mandates.

BLIK recurring payments let you save a customer’s BLIK payment method and charge it again later for subscriptions or other off-session payments without asking the customer to enter a new BLIK code. You can [save BLIK while accepting a payment](https://docs.stripe.com/payments/blik/save-during-payment.md) or [set up BLIK without an initial payment](https://docs.stripe.com/payments/blik/set-up-payment.md).

## How it works

When you create a reusable BLIK payment method, the customer enters a BLIK code and authorizes a recurring mandate in their banking app. After the mandate is active, you can create off-session PaymentIntents with the saved PaymentMethod.

## BLIK Model O

Stripe uses [BLIK Model O](https://www.blik.com/lp/reccuring-payments/Model-O.141951072.html) for recurring payments. Model O supports flexible charge amounts and schedules, so you don’t need to set a fixed amount or billing interval when the customer authorizes the mandate.

### What customers see when authorizing a mandate

Customers see a BLIK Alias invitation in their banking app to authorize a mandate for future payments from your business. It includes the following details that help them recognize the mandate:

- The merchant name and website from your account details, as with a BLIK payment.
- An alias label containing a masked customer email address and, if provided, text from the SetupIntent or PaymentIntent `description` (max 35 characters total).
- Information that future payments will be charged automatically without the buyer’s additional explicit authorization.
- The initial transaction amount, or 0 PLN if the mandate is set up for future use only.
- The mandate expiration date, if specified.

Once the customer accepts the invitation, you can charge the mandate without asking for a new BLIK code.

## Mandate expiration 

To create a time-limited mandate, set an optional `expires_at` Unix timestamp. The timestamp must be no more than 10 years after the mandate is created. Don’t provide a duration or a number of seconds until expiration. If you omit `expires_at`, the mandate is indefinite.

If a mandate expires, collect a new BLIK mandate before attempting another payment.

| Integration | Parameter |
| --- | --- |
| PaymentIntents, SetupIntents, and Checkout Sessions | `payment_method_options[blik][mandate_options][expires_at]` |
| Subscriptions | `payment_settings[payment_method_options][blik][mandate_options][expires_at]` |

## Eligibility and capabilities

To use BLIK for recurring payments, both the `blik_payments` and `blik_recurring_payments` capabilities must be `active`. The `blik_recurring_payments` capability depends on `blik_payments`. It doesn’t require additional account information beyond what `blik_payments` requires, but it has additional [business eligibility restrictions](https://docs.stripe.com/payments/blik/recurring-payments.md#business-eligibility).

### Request from the Dashboard

In the Dashboard, go to [Payment methods settings](https://dashboard.stripe.com/settings/payment_methods), select BLIK, and enable recurring payments. If you use Connect, request BLIK recurring payments for your platform and for each connected account that accepts recurring BLIK payments.

### Request with the API

If you use Connect, request the BLIK payments capability for the connected account before requesting the BLIK recurring payments capability.

Requesting a capability doesn’t activate it immediately. Resolve any outstanding requirements and verify that both capabilities are `active` before you create a recurring BLIK payment.

#### Accounts v1

```curl
curl https://api.stripe.com/v1/accounts/{{CONNECTEDACCOUNT_ID}}/capabilities/blik_payments \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d requested=true
```

```curl
curl https://api.stripe.com/v1/accounts/{{CONNECTEDACCOUNT_ID}}/capabilities/blik_recurring_payments \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d requested=true
```

Retrieve each [Account capability](https://docs.stripe.com/api/capabilities/retrieve.md) and verify that both capabilities have a status of `active`.

#### Accounts v2

If you use a [restricted API key](https://docs.stripe.com/keys.md#create-restricted-api-key), grant it `v2_account_storer_write` to request these capabilities and `v2_account_storer_read` to retrieve their status. See [API permissions](https://docs.stripe.com/keys/permissions-reference.md).

For an existing Accounts v2 connected account, update the Account to request the BLIK payments capability first.

```curl
curl -X POST https://api.stripe.com/v2/core/accounts/{{CONNECTEDACCOUNT_ID}} \
  -H "Authorization: Bearer <<YOUR_SECRET_KEY>>" \
  -H "Stripe-Version: 2026-09-30.preview" \
  --json '{
    "configuration": {
        "merchant": {
            "capabilities": {
                "blik_payments": {
                    "requested": true
                }
            }
        }
    },
    "include": [
        "configuration.merchant",
        "requirements"
    ]
  }'
```

Then request the BLIK recurring payments capability.

```curl
curl -X POST https://api.stripe.com/v2/core/accounts/{{CONNECTEDACCOUNT_ID}} \
  -H "Authorization: Bearer <<YOUR_SECRET_KEY>>" \
  -H "Stripe-Version: 2026-09-30.preview" \
  --json '{
    "configuration": {
        "merchant": {
            "capabilities": {
                "blik_recurring_payments": {
                    "requested": true
                }
            }
        }
    },
    "include": [
        "configuration.merchant",
        "requirements"
    ]
  }'
```

[Retrieve the Account](https://docs.stripe.com/api/v2/core/accounts/retrieve.md) with `configuration.merchant` and `requirements` included. Verify that both merchant capability statuses are `active`.

## Business eligibility

The following business categories can’t use BLIK recurring payments:

- Telecommunications
- Money transfer, currency exchange, cash disbursement, stored-value, and payment-intermediary services
- Securities brokerage
- Insurance
- Gambling and wagering

If your business is eligible, Stripe evaluates the recurring BLIK capability when you request it. Contact [Stripe Support](https://support.stripe.com/contact) if you have questions about your account’s eligibility.

## Limitations

- Recurring BLIK payments support only off-session use.
- Off-session recurring charges must use the `pln` currency.
- Each off-session recurring charge can’t exceed 2,000 PLN.

## Use with Billing

You can accept BLIK for subscriptions and recurring invoices. Set `collection_method` to `charge_automatically` so Stripe charges the customer’s saved BLIK payment method for each invoice.

Customers can update their payment method for eligible subscriptions in the [customer portal](https://docs.stripe.com/customer-management.md).

When you create a mandate with Checkout or a Subscription, [mandate_options](https://docs.stripe.com/api/checkout/sessions/create.md?api-version=2026-09-30.endive#create_checkout_session-payment_method_options-blik-mandate_options) is optional. See [Mandate expiration](https://docs.stripe.com/payments/blik/recurring-payments.md#mandate-expiration) to set `expires_at`. Invoices charge an existing BLIK mandate.

Before you create the subscription or invoice, make sure both `blik_payments` and `blik_recurring_payments` are active.

### Checkout subscriptions

Create a [Checkout Session](https://docs.stripe.com/api/checkout/sessions/create.md?api-version=2026-09-30.endive) in `subscription` mode. Checkout collects the BLIK code, gets the customer’s mandate authorization, and charges future subscription invoices automatically.

```curl
curl https://api.stripe.com/v1/checkout/sessions \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d mode=subscription \
  -d "customer={{CUSTOMER_ID}}" \
  -d "line_items[0][price]={{PRICE_ID}}" \
  -d "line_items[0][quantity]=1" \
  -d "allowed_payment_method_types[0]=blik" \
  --data-urlencode "success_url=https://example.com/success"
```

For a time-limited Checkout mandate, add `payment_method_options[blik][mandate_options][expires_at]` with the Unix timestamp described in [Mandate expiration](https://docs.stripe.com/payments/blik/recurring-payments.md#mandate-expiration). Omit it when the mandate should be indefinite.

### Subscriptions API

To create a subscription with an existing BLIK PaymentMethod, add `blik` to [Subscription payment method types](https://docs.stripe.com/api/subscriptions/create.md?api-version=2026-09-30.endive#create_subscription-payment_settings-payment_method_types).

```curl
curl https://api.stripe.com/v1/subscriptions \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d "customer={{CUSTOMER_ID}}" \
  -d "items[0][price]={{PRICE_ID}}" \
  -d "default_payment_method={{PAYMENTMETHOD_ID}}" \
  -d collection_method=charge_automatically \
  -d "payment_settings[payment_method_types][0]=blik"
```

### Invoices API

For a recurring invoice that uses an existing BLIK mandate, first create a billable [Invoice Item](https://docs.stripe.com/api/invoiceitems/create.md?api-version=2026-09-30.endive), then add `blik` to [Invoice payment method types](https://docs.stripe.com/api/invoices/create.md?api-version=2026-09-30.endive#create_invoice-payment_settings-payment_method_types) and set `collection_method` to `charge_automatically`.

```curl
curl https://api.stripe.com/v1/invoiceitems \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d "customer={{CUSTOMER_ID}}" \
  -d "pricing[price]={{PRICE_ID}}"
```

```curl
curl https://api.stripe.com/v1/invoices \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d "customer={{CUSTOMER_ID}}" \
  -d "default_payment_method={{PAYMENTMETHOD_ID}}" \
  -d collection_method=charge_automatically \
  -d auto_advance=true \
  -d "payment_settings[payment_method_types][]=blik"
```

## Supported banks and retry behavior

BLIK recurring payments are available to customers of the following banks:

- Alior Bank
- Credit Agricole
- ING Bank Śląski
- Millennium Bank
- mBank
- Nest Bank
- PKO Bank Polski
- Santander Bank Polska
- SGB Cooperative Banks

If a customer’s bank doesn’t support BLIK recurring payments, the setup or payment fails with the [recurring_not_supported_by_bank](https://docs.stripe.com/declines/codes.md#recurring_not_supported_by_bank) decline code. Handle this result by letting the customer retry with another BLIK account that supports recurring payments or choose a different payment method.

For other recurring payment declines, use `error.decline_code` to decide how to respond:

| Decline code | Recommended response |
| --- | --- |
| `insufficient_funds` | Ask the customer to add funds or use another payment method. |
| `customer_declined` | Ask the customer to retry and approve the payment. |
| `payment_limit_exceeded` | Ask the customer to adjust their BLIK limit or use another payment method. |
| `partner_generic_decline` | Ask the customer to contact their bank or use another payment method. |

## Custom checkout pages

Whether you use [hosted Checkout](https://docs.stripe.com/payments/checkout.md) or a custom payment form, present the recurring mandate terms to the customer before you collect their BLIK code. Hosted Checkout collects the BLIK code and mandate authorization, but you must provide the billing and mandate disclosures.

If you build a fully custom BLIK form instead of using hosted Checkout, you’re responsible for displaying the required recurring disclosures. Before you collect the BLIK code, show the customer all of the following:

- **Billing terms and agreement**: The terms and conditions the customer accepts, and a clear statement that they’re authorizing recurring, off-session BLIK payments.
- **Initial charge**: The amount charged when you create the reusable payment method, if any. A SetupIntent doesn’t charge the customer, and saving BLIK during a payment charges the initial payment amount.
- **Charge cycle and recurrence**: The charge cycle or recurrence terms, including the date of the first charge and the cadence or rule for any subsequent charges.
- **Supported banks**: The list of [banks that support BLIK recurring payments](https://docs.stripe.com/payments/blik/recurring-payments.md#supported-banks-and-retry-behavior), so the customer can confirm whether they can use their BLIK account.

You must handle the [unsupported-bank result](https://docs.stripe.com/payments/blik/recurring-payments.md#supported-banks-and-retry-behavior) and provide a retry path with a different BLIK account or payment method.

## See also

- [Save BLIK details during a payment](https://docs.stripe.com/payments/blik/save-during-payment.md)
- [Set up future BLIK recurring payments](https://docs.stripe.com/payments/blik/set-up-payment.md)
- [BLIK recurring-payment failure simulations](https://docs.stripe.com/payments/blik/save-during-payment.md#simulate-failures)
- [Accept a one-time BLIK payment](https://docs.stripe.com/payments/blik/accept-a-payment.md)
