🎓 CoursesMarkets & internationalIntermediate⏱ 60 min
🇵🇱
Accepting payments in Poland and Central Europe. 6 chapters and a final quiz.
An operating manual for four markets where cards are not the main rail. Build your payment mix country by country, wire up BLIK and its short-lived code, set up Polish pay-by-link acquiring, and accept payments through Hungary’s standardized QR code, Czech QR Platba, and RoPay. Then cost out Romanian cash on delivery and stay compliant with KSeF, RO e-Factura, and NAV Online Számla while configuring four non-euro currencies.
Build the payment mix country by country and order the checkout by local usage, not Western habit
Wire up a complete BLIK flow: 6-digit code, expiry, recurring alias, refunds, and failure reasons
Set up Polish pay-by-link acquiring and choose between Express Elixir, BlueCash, and Euro Elixir to credit funds
Integrate the regional payment initiation layers (qvik, QR Platba, RoPay) without getting the QR code standard wrong
Chapter 1. Building the payment mix country by country.
A merchant’s payment mix is the set of payment methods it offers and the order in which they appear at checkout. It is decided market by market, because the methods people actually use differ from country to country. Poland, Czechia, Hungary, and Romania each have a dominant method of their own. A provider’s catalog lists the methods it can process. It does not tell you which ones local buyers use every day. Build the mix from the payment habits observed in the target country.
In all four countries, local payments run on account-to-account transfers rather than on cards. BLIK in Poland, qvik in Hungary, QR Platba in Czechia, and RoPay in Romania all use that rail. This has three consequences for the merchant. Funds arrive instantly, with no clearing cycle to finance. There is no 3-D Secure and no card scheme dispute process. Refunds run on a separate flow from collection and must be integrated explicitly.
49,7 %
BLIK’s share of Polish e-commerce transactions by number, and 44.9% by value
NBP, “Zwyczaje płatnicze w Polsce w 2023 r.,” published in late 2024 (payment diary survey, September–October 2023)
2.9B
BLIK transactions in 2025, worth PLN 441.5 billion (+21% by number, +27% by value); 20.7 million active accounts at the end of December 2025
Polski Standard Płatności, February 2026 press release
45,5 %
share of Czech interbank transfers executed as instant payments in March 2026, up from 21% in mid-2022
ČNB, press release, April 13, 2026
421 000
qvik payments in Hungary in Q3 2025, worth HUF 17.1 billion
MNB data reported by the Hungarian press, 2025
Country
Collection currency
Put first at checkout
Rail that credits the funds
Dispute framework
Poland
PLN (euro runs on a separate rail)
BLIK, then pay-by-link, then cards
Express Elixir or BlueCash, depending on which rail the banks are connected to
Credit transfer law, no scheme chargeback
Czechia
CZK
Cards, then QR Platba and bank-backed BNPL (Skip Pay, Twisto)
CERTIS instant module, run by the ČNB (Czech National Bank)
Card chargebacks on one side, credit transfer law on the other
Hungary
HUF
Cards, then qvik (the standardized QR code banks must support)
AFR / GIROInstant, executed in under 5 seconds
Credit transfer law for qvik; scheme rules for cards
Romania
RON (a separate EUR rail runs through SENT)
Cards, cash on delivery, then RoPay
Plăți instant, settled in under 10 seconds
Scheme rules for cards; nothing for cash on delivery
Slovakia
EUR since 2009
Cards, then BLIK via the BLIK SK, a.s. gateway
TIPS; no national instant rail
SEPA framework and card scheme rules
Decision grid: what a merchant configures differently in each country
Checkout order decides which payment method the buyer sees first, so it shapes how choices split. In Poland, placing BLIK below cards hides the country’s leading payment method, which the NBP credits with half of all e-commerce transactions by number. In Czechia and Hungary, by contrast, cards remain the natural entry point online, while the transfer layer is gaining ground mainly at the point of sale and on invoices.
Decide country by country, never by region. A single “Central Europe” setting produces four mediocre checkouts instead of one good one.
Check the settlement currency before the display currency. Collecting in PLN and getting paid out in EUR adds a conversion nobody budgeted for.
Get the local method written into the contract, not just cards: a card acquiring contract gives you no rights to BLIK, qvik, or RoPay.
Measure before you decide. Conversion rate by payment method and by country is the only data point that settles the ordering debate.
Plan for refunds from the testing phase. On a transfer rail, refunds do not follow from collection and must be tested separately.
Brands to name in a regional RFPBLBLIKPRPrzelewy24PAPayUVisaMastercard
🎯 Quick question
A merchant launches in Poland and puts BLIK fourth at checkout, behind Visa, Mastercard, and PayPal. What measurable effect should it expect?
Chapter 2. Wiring up BLIK end to end.
BLIK is Poland’s mobile payment system. It triggers an account-to-account transfer from the payer’s banking app. It is operated by Polski Standard Płatności, a company owned by a consortium of Polish banks, and has been running since 2015. The user opens their own bank’s app and generates a code that always has 6 digits and is valid for 2 minutes (BLIK, FAQ, accessed August 2026). They enter it on the payment page, then confirm in the app. No card number is requested, and no PAN changes hands.
The 2-minute window constrains the entire integration. It keeps running while the buyer switches screens, reads the notification, and confirms in the banking app. Any time spent on a slow intermediate page comes out of that same window. A form without a countdown leaves the buyer unaware of how much time remains. If the checkout offers no button to generate a new code, a buyer whose code has expired cannot resume the payment, and the order is abandoned. Track the code expiry rate as a conversion metric in its own right.
What the merchant’s code must handle, step by step
Payment page
Displays six input boxes and a visible countdown
Numeric input, pasting allowed, automatic advance from box to box; the countdown starts when the buyer generates the code, not when the page loads
➜
Merchant server
Sends the code and amount to the provider, then waits
Nothing is debited at this stage; the call is not a card authorization and places no hold on funds
➜
Banking app
Notifies the buyer, shows the merchant and amount, and collects confirmation
The bank’s app handles strong authentication; no 3-D Secure challenge is involved
➜
Merchant server
Receives the outcome webhook and exits the waiting state
Three outcomes to model: confirmed, declined by the buyer, and expired with no response; the webhook is authoritative, not the screen
➜
Back office
Reconciles the credit received in the collection account
The credit arrives by instant transfer; the reconciliation reference comes from the provider, not from a card scheme identifier
Status
Trigger
Typical duration
Required action
Code entered
6 digits submitted by the buyer on the page
Instant
Block double submission, show the time remaining
Awaiting confirmation
Code sent to the provider
A few seconds to 2 minutes
Non-reloadable waiting screen, no premature success message
Confirmed
Success webhook
–
Trigger order fulfillment, log the reconciliation reference
Declined by the buyer
Explicit rejection in the banking app
–
Offer another method without making the buyer rebuild the cart
Expired
2-minute window ends with no response
–
Offer to generate a new code, keeping the session
Refunded
Refund request sent by the merchant
Separate flow from collection
Test partial refunds in staging, not just full refunds
States to model on the merchant side, and the expected action for each
⚠️
Three failures that keep recurring in production
1) Showing the success screen before the webhook. The buyer sees a confirmed order that the back office never received, because the browser redirect carries no proof of the payment outcome. Only the server-to-server notification confirms how the payment ended. 2) Shipping refunds untested. Refunds run on a separate flow from collection. Testing that covers only collection leaves them untested, and their first real use comes with the first dispute. 3) Treating the recurring alias like a card token. The user can revoke it from their banking app without going through the merchant, so a subscription that does not handle revocation piles up silent failures.
Recurring payments: after a first confirmed payment, an alias linked to the merchant allows the next charge without a code. BLIK’s FAQ explicitly cites subscriptions and electricity or phone bills.
Czek BLIK: a 9-digit code, separate from the 6-digit code, used for payments and ATM cash withdrawals (BLIK, FAQ, 2026).
ATM withdrawals and deposits, contactless payments in store: these use cases require their own acquirer setup. No existing card contract covers them.
Transfers to a mobile number: outside the merchant’s scope, but this is the adoption driver that feeds everything else.
Regional expansion: Polski Standard Płatności now controls the Slovak company BLIK SK, a.s. (formerly Viamo), whose gateway offers BLIK alongside cards, Apple Pay, Google Pay, and Sporopay.
BLIK test plan: cases to run before going live
1. Correct code, immediate confirmation -> order created on webhook, not on redirect
2. Correct code, confirmed after 110 s -> success; the countdown must not have cut the session
3. Correct code, no confirmation -> clean expiry + “generate a new code” button
4. Code declined in the banking app -> cart intact on return, another method offered
5. Same code submitted twice -> one order only; idempotency on the merchant reference
6. Webhook replayed twice -> one order only; idempotency on the outcome ID
7. FULL refund -> executed and reconciled
8. PARTIAL refund -> executed; correct remaining balance in the back office
9. Recurring alias revoked by the user -> explicit failure + customer follow-up, no blind retry
10. Amount in groszy -> PLN 49.90 sent as 4990, never as 49.9
🎯 Quick question
A Polish buyer confirms a BLIK payment, but the merchant never received the webhook and has already shown “order confirmed.” What is the integration mistake?
Chapter 3. Setting up Polish acquiring: pay-by-link and zloty rails.
Pay-by-link is a payment flow in which the buyer pays by a transfer authorized in their own bank’s interface. It is the second pillar of payment acceptance in Poland. The buyer first picks their bank from a list shown at checkout. They are then redirected to that bank’s interface, which displays a prefilled transfer order with the payee, amount, and reference. The buyer authorizes it with their usual credentials, and the merchant receives a transfer instead of an authorization.
The risk model follows directly. An authorized transfer is pushed and irrevocable, which rules out a preauthorization awaiting capture, a scheme dispute window, and a late chargeback. The outcome is known as soon as the payment is authorized, with no later capture and no dispute period to monitor. The channel is used heavily for high-value orders, where card limits start to bite.
Topic
Pay-by-link (credit transfer)
Card
Type of payment
Transfer order authorized by the payer in their bank
Authorization then capture, two separate messages
Funds hold
None: the account is debited or nothing happens
Authorization holds funds until capture or expiry
Revocability
Irrevocable once executed
Chargeback possible under network rules
Funds availability
Instant if both banks are on the same rail
After the clearing cycle and the acquirer payout
Typical failure to handle
Bank missing from the list, banking session expired, reference truncated
Outgoing transfer to the payer’s account, separate flow
Refund message linked to the original transaction
Pay-by-link vs. card authorization: how the code and the books differ
Poland’s market for payment providers is crowded and local. Przelewy24, operated by PayPro S.A., is a standard entry point: it combines pay-by-link, BLIK, and cards under one contract and operates as a payment institution supervised by the KNF. PayU, Tpay, and Autopay compete on the same ground. What sets them apart is the list of banks actually covered for pay-by-link, cooperative banks included, because if a bank is missing from that list, its customers cannot use the flow.
636.08M
Express Elixir transactions in 2025, worth PLN 320.58 billion, up 21% by both number and value
KIR, 2025 statistics
≈ 5M/yr
BlueCash transactions, Poland’s second instant rail, privately operated
Autopay S.A., autopay.pl, accessed August 2026
55.59M
SEPA transfers processed by Euro Elixir in 2025, worth €391.58 billion
KIR, 2025 statistics
September 8, 2025
go-live of SORBNET3, the NBP’s ISO 20022-based RTGS system, replacing SORBNET2
Narodowy Bank Polski
⚠️
Two competing instant rails, so instant is not guaranteed
Poland runs two instant infrastructures in zloty: Express Elixir, operated by KIR since 2012, and BlueCash, operated by Autopay S.A. since 2011. A bank may be connected to one, the other, or both, so an instant credit between any two accounts is not guaranteed, and the success rate depends on the pair of banks. Otherwise, the transfer falls back to Elixir, the bulk clearing system that runs in daily sessions, and the credit slips by one session or even one business day. What you need to verify is each bank’s connection to the instant rail, and the provider should supply that information before you sign.
ℹ️
Collecting euros through a Polish account: Euro Elixir
Euro Elixir, KIR’s SEPA arm, connected to STEP2 since 2005, lets a Polish bank send and receive SEPA euro transfers without going through a correspondent bank in the euro area. A merchant that sells in Poland and gets paid in euros uses this rail, which is separate from the zloty rails. Configuration involves three currencies: the collection account’s currency, the provider’s billing currency, and the payout currency. Three different currencies in one chain mean two conversions.
Demand the named list of banks covered for pay-by-link, and compare it with how your target customers are actually spread across banks.
Test the reconciliation reference: if one bank truncates the payment description, cash application breaks for a whole group of payers.
Check the payout window the provider promises, separately from the rail’s own timing: the two add up.
Document the Paybynet case, a KIR service built into the ePUAP public services platform, if your business involves administrative fees.
Note that Autopay plays two roles (infrastructure operator through BlueCash and merchant provider), a setup to spell out in any RFP.
🎯 Quick question
Why can a pay-by-link transfer between two Polish accounts be credited only the next day, when an instant rail has existed since 2012?
Chapter 4. QR codes are not an implementation choice: qvik, QR Platba, and RoPay.
A payment initiation layer is a national scheme that triggers a transfer from the payer’s banking app. Hungary, Czechia, and Romania each run one: qvik, QR Platba, and RoPay, respectively. The QR code shown to the customer does not belong to the merchant. Its format is set nationally, and banking apps recognize only that format. A QR code generated by the merchant, or borrowed from a wallet used in another market, therefore cannot be read. The customer opens the app, scans, and never gets a payment screen.
🔑
Hungary: the QR format is set by decree
Decree MNB 35/2017 (XII. 14.) sets out in its Annex 5 the technical specifications for QR, deep link, and NFC flows, in force since February 1, 2024. It was amended by Decrees 57/2022 (XII. 22.) and 65/2023 (XII. 15.). The code itself follows the ISO/IEC 18004 standard. Since September 1, 2024, every Hungarian payment provider has had to support reading these solutions in its own banking app, which made qvik usable without a dedicated app. The code shown to the payer is issued by the provider in the format set by the decree. The merchant does not generate it.
qvik (Hungary)
QR Platba (Czech Republic)
RoPay (Romania)
Operator
MNB and GIRO Zrt., since September 1, 2024
Standard of the Česká bankovní asociace (Czech Banking Association), since 2012
TRANSFOND S.A. with the Romanian Association of Banks, since 2025
Underlying rail
AFR / GIROInstant, executed in under 5 seconds
CERTIS instant module
Plăți instant, settled in under 10 seconds
What the code encodes
A standardized payment request, format set by decree
A transfer order: IBAN, amount, variable symbol, message
National initiation: QR, deep link, NFC, phone number as an IBAN proxy
Who reads it
Every Hungarian banking app, by law
Every Czech banking app
Institutions that have joined the scheme, per a published, dated register
Payment guarantee
None: the actual credit is what counts
None: the code carries no authorization and no guarantee
None: the actual credit is what counts
Check before delivering
Credit received in the account, not the scan on screen
Credit received, reconciled by variable symbol
Credit received, and the scheme version supported
Three national layers: what the QR code encodes and what the merchant must check
QR Platba encodes an IBAN, an amount, a message, and a variable symbol, the reconciliation key specific to Czechia. The variable symbol is the field Czech accounting has long used to match incoming payments. The merchant’s system must generate it, keep it unique per order, and print it identically on the invoice. A missing variable symbol produces an anonymous transfer; a reused one matches two orders to the same line.
qvik-QR: a dynamic code shown at the register or at online checkout, regenerated for each amount.
qvik-NFC: the phone is tapped on a compatible terminal, with no scanning.
qvik-LINK: a payment link sent by text message or email, useful for remote sales and customer service.
qvik-kérelem: the fizetési kérelem, a request to pay that Hungarian providers have been required to accept since April 1, 2024; this is the flow for invoicing and collections.
The usual integration point in Hungary: SimplePay Zrt., formerly OTP Mobil Kft. and renamed in July 2025, which offers cards, terminals, tokenization, and qvik under a single contract.
In Romania, RoPay is a versioned scheme whose technical rules change through successive releases. The register of institutions that have joined the leu-denominated RoPay scheme is dated December 17, 2025, and version RoPay_V02R02 takes effect on April 30, 2026. A merchant’s connection is therefore not a one-time project: it follows a release calendar, as with a card scheme. The clause to secure from the provider is the upgrade lead time after a new version is published.
1 in 5
small Czech businesses accepting QR payments at the point of sale; 98% of those who use them say they are satisfied
IPSOS survey for the ČNB, 300 businesses with 5 or fewer employees, October 2025
3 s
average time for the payee to be credited on a Czech instant payment
ČNB, 2026
HUF 20M
cap on Hungarian electronic transfers subject to mandatory instant execution since September 1, 2023
MNB
🎯 Quick question
A retail chain brings its in-house wallet’s proprietary QR code, already used in three other countries, to Hungary. What happens at the register?
Chapter 5. Cash on delivery: costing it, containing it, reducing it.
Cash on delivery, ramburs in Romanian, means the customer pays the courier in cash for an order placed online. Romanian shoppers still expect it, and it is found elsewhere in the region too. Technically, though, no payment takes place when the order is placed. For the merchant, the transaction is trade credit extended to a stranger, combined with a collection mandate given to the carrier: the merchant fronts the goods and the shipping, then waits for the carrier to remit the cash. The topic therefore moves out of the payments team and into logistics and customer credit.
The cash cycle of a cash-on-delivery order
Merchant
Accepts the order without collecting anything
Stock is reserved, picked, and shipped on nothing more than a promise to pay
➜
Merchant
Incurs picking and shipping costs
Packaging, labor, outbound shipping: all spent before any cash comes in
➜
Carrier
Presents the parcel and collects the cash, or leaves with it
A doorstep refusal is the event to measure; it triggers return shipping and restocking
➜
Carrier
Remits the cash collected to the merchant on the schedule set in the contract
This remittance delay is a working capital item and should be negotiated as one
➜
Merchant
Matches each remittance line by line against orders
A lump-sum remittance with no per-order detail makes cash application impossible: require that detail in the contract
All-in cost model: the rates are parameters to replace with your own
PARAMETERS TO MEASURE IN YOUR OWN DATA
P = average order value of the cash-on-delivery population
M = gross margin per unit
r = refusal rate at delivery
Ta = outbound shipping cost
Tr = return shipping cost
Cp = picking and packing cost
f = carrier collection fee (% of amount collected)
d = remittance delay, in days
i = daily cost of financing working capital
COST PER ACCEPTED ORDER
refusal_loss = r x (Ta + Tr + Cp + restocking cost)
commission = (1 - r) x f x P
carrying_cost = (1 - r) x P x i x d
total_cost = refusal_loss + commission + carrying_cost
DECISION
If total_cost > M, cash-on-delivery orders destroy margin.
The most sensitive lever is r, not f: one point of refusal costs
a full round trip, not a percentage of the order value.
Lever
Implementation
Expected effect
Risk
Order-value cap
Cash on delivery unavailable above a set amount
Caps the loss per refusal
Loses high-value orders from unbanked buyers
Active confirmation
Call, message, or link to confirm before shipping
Sharply cuts refusals at delivery
Adds delay; weigh it against the gain
Customer score
Refusal history by buyer and by address
Targets the restriction at the population that warrants it
Data processing that must be documented
Prepayment incentive
Free shipping or a discount for instant payment methods
Shifts volume to RoPay, cards, or transfers
Upfront cost of the incentive, to compare with the cost of refusals
Cash-on-delivery fee
Surcharge shown at checkout
Makes the cost visible and funds part of the refusals
Watch the effect on conversion by cohort
Levers for reducing cost, and what they actually shift
⚠️
Market estimates are no substitute for your own measurements
Published figures for cash on delivery’s share in Romania vary widely with survey method and scope, so treat them as an order of magnitude, not as a basis for management decisions. Two metrics measured in-house are enough to decide: the refusal rate at delivery by product category, and the carrier’s actual remittance delay, standard deviation included. These two figures set the order-value cap, the confirmation policy, and the working capital you need to finance.
🎯 Quick question
In the all-in cost of a cash-on-delivery order, which parameter weighs most and should be tackled first?
Chapter 6. KSeF, e-Factura, NAV: invoices become data flows, and four currencies stay local.
Under mandatory e-invoicing, invoices are reported, transmitted, or issued through a government system. Three of the four countries covered here have such a regime, each with its own logic. Hungary has invoices reported to the tax authority after issue, while Romania requires transmission within a set deadline. Poland is moving to a system in which invoices are issued by the government platform itself. Because the three regimes use different formats and timelines, no single connector covers all three countries.
April 1, 2021
Online Számla extended to all invoices (Hungary)
Reporting covers every invoice, regardless of amount or customer type. Only the XSD 3.0 schema is accepted; earlier versions are rejected (NAV, Hungary’s tax authority).
July 1, 2024
RO e-Factura penalties take effect (Romania)
Transmission within 5 calendar days of issue, through ANAF’s SPV portal. Fines of RON 5,000 to 10,000 for large taxpayers, RON 2,500 to 5,000 for midsize ones, and RON 1,000 to 2,500 for all others; 15% of the invoice value for failure to transmit.
September 1, 2024
qvik goes live (Hungary)
Every banking app must read the unified data entry solutions. The installed base is every banked customer from day one.
February 1, 2026
KSeF, phase I (Poland)
Required for taxpayers whose 2024 sales, tax included, exceeded PLN 200 million (Ministerstwo Finansów, KSeF rollout plan).
April 1, 2026
KSeF, phase II (Poland)
All other businesses become subject to the requirement, except the smallest taxpayers. VAT RR invoices for purchases from flat-rate farmers are no longer exempt.
April 30, 2026
RoPay_V02R02 (Romania)
The schema version takes effect; RoPay connections follow a release calendar.
January 1, 2027
KSeF, phase III (Poland)
So-called digitally excluded microbusinesses, with transactions of at most PLN 450 per invoice and PLN 10,000 in monthly revenue.
January 9, then July 9, 2027
Regulation (EU) 2024/886, outside the euro area
Polish, Czech, Hungarian, and Romanian providers must first receive, then send, instant transfers in euros.
KSeF (Poland)
RO e-Factura (Romania)
Online Számla (Hungary)
Logic
Issued through the government platform
Transmission of the issued invoice
Reporting of invoice data
Authority
Ministerstwo Finansów
ANAF, via the SPV
NAV
Settlement time
Invoices are issued through the system
5 calendar days after issue
Reported after issue, with no amount threshold
Format
KSeF structured invoice
RO e-Factura electronic invoice
XSD 3.0 mandatory since April 1, 2021
Stated penalty
Phased obligation based on revenue thresholds
Graduated fines and 15% of the untransmitted value
Submissions in the wrong format are rejected
Impact on collection
The invoice reference becomes the reconciliation key
The transmission deadline constrains dunning
Reporting must follow every credit note
Three invoicing regimes, three different projects
The collection currency is the currency in which the merchant actually receives funds. Poland collects in zloty, Czechia in Czech koruna, Hungary in forint, and Romania in leu, and none of these four currencies is the euro. Slovakia adopted the euro in 2009, and Bulgaria on January 1, 2026, at the irrevocable rate of €1 = BGN 1.95583. A regional rollout therefore spans two distinct monetary regimes, with two sets of rails.
ℹ️
The EU instant payments regulation covers only the euro
Regulation (EU) 2024/886 covers transfers in euros, which leaves national-currency rails (PLN, CZK, HUF, RON) outside its scope. Timelines, limits, and pricing on those rails are still set nationally. A provider can therefore meet every obligation under the regulation for its euro flows and apply entirely different rules to its zloty flows. Due diligence means getting commitments spelled out currency by currency, not country by country. For these four markets, the EU deadlines fall on January 9 and July 9, 2027, and they apply only to the euro.
One collection account per currency, at minimum: converting a PLN collection into a EUR account adds a conversion that the displayed price never shows.
Align the display, settlement, and payout currencies. Three currencies in one chain mean two conversions and two FX margins.
Display prices in local currency, rounded to local practice: a price converted on the fly signals a foreign seller and hurts conversion.
Check the provider’s stance on dynamic currency conversion at the point of sale, and the rate applied to the cardholder.
Document account descriptions: the reconciliation reference travels differently on national rails and on SEPA rails.
🎯 Quick question
A Polish company’s 2024 sales, tax included, totaled PLN 320 million. Which KSeF phase applies to it?