# BLIK payments

Learn how to accept BLIK, a common payment method in Poland.

# Checkout


BLIK is a [single use](https://docs.stripe.com/payments/payment-methods.md#usage) payment method that requires customers to [authenticate](https://docs.stripe.com/payments/payment-methods.md#customer-actions) their payments. When customers want to pay online using BLIK, they request a six-digit code from their banking application and enter it into the payment collection form.

The bank sends a push notification to your customer’s mobile phone asking to authorize the payment inside their banking application. The BLIK code is valid for 2 minutes; customers have 60 seconds to authorize the payment after starting a payment. After 60 seconds, it times out and they must request a new BLIK code. Customers typically approve BLIK payments in less than 10 seconds.

## Determine compatibility

**Supported business locations**: AT, AU, BE, BG, CA, CH, CY, CZ, DE, DK, EE, ES, FI, FR, GB, GR, HR, HU, IE, IS, IT, LI, LT, LU, LV, MT, NL, NO, PL, PT, RO, SE, SG, SI, SK, US

**Supported currencies**: `pln`

**Presentment currencies**: `pln`

**Payment mode**: Yes

**Setup mode**: Not yet

**Subscription mode**: Not yet

A Checkout Session must satisfy all of the following conditions to support BLIK payments:

- *Prices* (Prices define how much and how often to charge for products. This includes how much the product costs, what currency to use, and the interval if the price is for subscriptions) for all line items must be expressed in Złoty (currency code `pln`).

## Accept a payment

> This guide builds on the foundational [accept a payment](https://docs.stripe.com/payments/accept-a-payment.md?ui=stripe-hosted) Checkout integration.

### Enable BLIK as a payment method

When creating a new [Checkout Session](https://docs.stripe.com/api/checkout/sessions.md), you need to:

1. [Enable BLIK](https://dashboard.stripe.com/settings/payment_methods) in your Dashboard. Stripe automatically displays BLIK to eligible customers using [dynamic payment methods](https://docs.stripe.com/payments/payment-methods/dynamic-payment-methods.md). If you currently specify `payment_method_types`, see the [migration guide](https://docs.stripe.com/payments/dashboard-payment-methods.md).
2. Make sure all your `line_items` use the `pln` currency.

#### Stripe-hosted page

```curl
curl https://api.stripe.com/v1/checkout/sessions \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d "line_items[0][price_data][currency]=pln" \
  -d "line_items[0][price_data][product_data][name]=T-shirt" \
  -d "line_items[0][price_data][unit_amount]=2000" \
  -d "line_items[0][quantity]=1" \
  -d mode=payment \
  --data-urlencode "success_url=https://example.com/success"
```

#### Full embedded page

```curl
curl https://api.stripe.com/v1/checkout/sessions \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d "line_items[0][price_data][currency]=pln" \
  -d "line_items[0][price_data][product_data][name]=T-shirt" \
  -d "line_items[0][price_data][unit_amount]=2000" \
  -d "line_items[0][quantity]=1" \
  -d mode=payment \
  --data-urlencode "return_url=https://example.com/return" \
  -d ui_mode=embedded_page
```

#### Elements

```curl
curl https://api.stripe.com/v1/checkout/sessions \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d "line_items[0][price_data][currency]=pln" \
  -d "line_items[0][price_data][product_data][name]=T-shirt" \
  -d "line_items[0][price_data][unit_amount]=2000" \
  -d "line_items[0][quantity]=1" \
  -d mode=payment \
  --data-urlencode "return_url=https://example.com/return" \
  -d ui_mode=elements
```

### What customers see

Inside their Banking app, customers see four lines related to each BLIK transaction:

- If you provided a value for [payment_intent_data.description](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-payment_intent_data-description), the first two lines display it (max 70 characters).
- If you provided a value for [payment_intent_data.statement_descriptor](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-payment_intent_data-statement_descriptor) (typically, an order ID), line 3 displays it (max 22 characters).
- The fourth line automatically populates with the URL of your website.

### Fulfill your orders

After accepting a payment, learn how to [fulfill orders](https://docs.stripe.com/checkout/fulfillment.md).

## Test your integration

When testing your Checkout integration, select BLIK as the payment method and click the **Pay** button.

Use a *sandbox* (A sandbox is an isolated test environment that allows you to test Stripe functionality in your account without affecting your live integration. Use sandboxes to safely experiment with new features and changes) to test a successful payment by entering any 6-digit code (such as `123456`) in the payment form.

## Handle refunds and disputes

The refund period for BLIK is up to 13 months after the original payment.

Customers can dispute a payment through their bank up to 13 months after the original payment. There’s no appeal process.

Learn more about [BLIK disputes](https://docs.stripe.com/payments/blik.md#disputed-payments).

## Optional: Simulate failures in a sandbox

BLIK payments can fail for different reasons. There are immediate failures (for example, the code is expired or invalid), delayed errors (the bank declines) or timeouts (the customer didn’t respond in time). You can simulate each failure scenarios by passing `email` values matching certain patterns (documented below) when creating the `PaymentIntent`, as part of the [billing details](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_data-billing_details), with any 6-digit as BLIK code.

You can enter the `email` in the contact information section of the Checkout page.

### Immediate failures

| Error code                         | Decline code   | Explanation                                                                                                    | Email pattern       |
| ---------------------------------- | -------------- | -------------------------------------------------------------------------------------------------------------- | ------------------- |
| `payment_method_invalid_parameter` | `code_invalid` | The code passed wasn’t a valid BLIK code.                                                                      | `.*invalid_code@.*` |
| `payment_method_invalid_parameter` | `code_expired` | The code passed has expired. BLIK codes expire after 2 minutes, please request another code from the customer. | `.*expired_code@.*` |

### Declines (8 second delay)

| Error code                        | Decline code              | Explanation                                                                                    | Email pattern             |
| --------------------------------- | ------------------------- | ---------------------------------------------------------------------------------------------- | ------------------------- |
| `payment_method_provider_decline` | `payment_limit_exceeded`  | The payment has been declined because the payment limit on this bank account has been reached. | `.*limit_exceeded@.*`     |
| `payment_method_provider_decline` | `insufficient_funds`      | The bank account has insufficient funds to complete the purchase.                              | `.*insufficient_funds@.*` |
| `payment_method_provider_decline` | `customer_declined`       | The customer declined this payment.                                                            | `.*customer_declined@.*`  |
| `payment_method_provider_decline` | `partner_generic_decline` | The payment has been declined by the customer’s bank for an unknown reason.                    | `.*bank_declined@.*`      |
| `payment_method_provider_decline` | `partner_generic_decline` | The payment has been declined for an unknown reason.                                           | `.*blik_declined@.*`      |

### Timeouts (60 second delay)

| Error code                        | Decline code      | Explanation                                                               | Email pattern           |
| --------------------------------- | ----------------- | ------------------------------------------------------------------------- | ----------------------- |
| `payment_method_provider_timeout` | `generic_decline` | The customer didn’t approve this payment within the allocated 60 seconds. | `.*customer_timeout@.*` |
| `payment_method_provider_timeout` | `generic_decline` | The request to the customer’s bank timed out.                             | `.*bank_timeout@.*`     |
| `payment_method_provider_timeout` | `generic_decline` | The request to the BLIK network timed out.                                | `.*blik_timeout@.*`     |

## See also

- [More about BLIK](https://docs.stripe.com/payments/blik.md)
- [Checkout fulfillment](https://docs.stripe.com/checkout/fulfillment.md)
- [Customizing Checkout](https://docs.stripe.com/payments/checkout/customization.md)

