Blik
Accept Blik — Poland's mobile-first payment standard — with VINR.
Blik is Poland's leading instant payment method, built into over 20 Polish banking apps and used by tens of millions of customers. At checkout the customer opens their banking app, generates a 6-digit one-time code, and enters it on your payment page — no redirect required. Payments are final and irrevocable the moment the bank confirms.
AvailabilityAsk
| Detail | Value |
|---|---|
| Countries | Poland |
| Currency | PLN only |
| Flow | 6-digit code (or in-app push) |
| Finality | Final on confirmation |
| Refunds | Supported via standard refund API |
Payment flowAsk
Blik supports two confirmation modes that VINR handles automatically based on the customer's bank:
6-digit code flow (classic)
Create the payment
Create a payment with methods: ['blik'] and a PLN amount. The VINR-hosted checkout displays a code entry field.
Customer generates the code
The customer opens their banking app, navigates to the Blik section, and copies the 6-digit code displayed there. The code is valid for two minutes.
Customer enters the code at checkout
The customer pastes or types the code into your checkout page and confirms.
Bank approves and the payment completes
The bank validates the code and pushes a confirmation to VINR. The payment moves to completed. The customer stays on your page — no redirect.
In-app push flow (Blik One Click / newer banks)
Some banks skip the code entirely and send a push notification to the customer's phone. The customer approves directly in the banking app while remaining on your checkout page.
Creating a Blik paymentAsk
import { Vinr } from '@vinr/sdk';
const vinr = new Vinr({ secretKey: process.env.VINR_SECRET_KEY });
const payment = await vinr.payments.create({
amount: 12900, // 129.00 PLN in minor units (groszy)
currency: 'PLN',
description: 'Order #2231',
methods: ['blik'],
returnUrl: 'https://yoursite.com/payment/complete',
metadata: { orderId: '2231' },
});
// Redirect the customer to payment.checkoutUrlFulfill from the webhook:
// POST /webhooks/vinr
const event = vinr.webhooks.verify(rawBody, req.headers['x-vinr-signature']);
if (event.type === 'payment.completed') {
const payment = event.data;
// payment.method → "blik"
await fulfillOrder(payment.metadata.orderId);
}Because the customer stays on your page during a code-flow payment, the returnUrl is only reached if the session times out. Always drive fulfillment from the payment.completed webhook.
Code expiry & retriesAsk
Blik codes expire after two minutes. If the customer enters an expired code, the payment moves to failed with code: blik_code_expired. You can create a new payment and let the customer generate a fresh code — or re-present the same checkoutUrl if your integration allows.
Settlement & timingAsk
Blik payments authorize and capture in seconds. The captured amount lands in your balance immediately and follows your normal settlement schedule.
RefundsAsk
Refunds are returned to the customer's originating bank account, typically within one to three business days.
const refund = await vinr.refunds.create({
payment: 'pay_...',
amount: 12900, // full refund; omit amount for full
reason: 'requested_by_customer',
});Because Blik payments are final, there are no chargebacks. A refund is the only way to return funds after the payment completes.
TestingAsk
In the VINR sandbox, Blik flows open a VINR test page where you choose Approve or Fail — no real banking app is required. Use any 6-digit value as the test code.
LimitationsAsk
- PLN only. Blik cannot process amounts in any other currency.
- Poland only. The method only appears for customers with a Blik-enabled Polish banking app; presenting it outside Poland returns
method_not_available. - No manual capture. Blik captures in full at the moment the bank confirms.
- Code valid for 2 minutes. Customers who take too long must generate a new code.
See alsoAsk
Local methods
Overview of all region-specific payment methods.
Przelewy24
Another popular Polish payment method supporting PLN and EUR.
Refunds
Issue full or partial refunds via the API.
Last updated on