Logo GH

Sofort/Klarna: pay-by-bank

1) What is Sofort/Klarna Pay-by-Bank

Sofort (now Klarna Pay Now/Pay-by-Bank) is an A2A tool that allows a buyer to pay for an order directly from their bank account through an online bank/mobile application. The stream is typically built on an SCA confirmation issuer-redirect/App2App (PSD2), and the merchant receives online authorization (success) and then a bank loan based on the provider's reports/calculations.

Key properties:
  • Low cost relative to card MDRs.
  • Online status (success/failure) almost immediately, while crediting funds is not always instant (usually T + 1/T + 2).
  • Wide geography in the EU/EEA (Germany/Austria is especially strong), support for dozens of issuing banks.
  • Minimum payment details from the buyer - bank selection and confirmation.

2) Roles and participants

Klarna/Sofort (scheme/provider): routing to banks, statuses, reports, settlements, returns.
Issuer (payer's bank): SCA, write-off confirmation, limits/anti-fraud.
Merchant PSP/Acquirer: merchant connection, API/SDK, webhooks and recon.

Merchant - Initiate payment, process status/returns, reconcile

3) Payment flows: Redirect and App2App

3. 1 Classic redirect

1. Checkout merchant → select "Pay by bank (Sofort/Klarna)."

2. The list of banks → redirect to the online bank (or to the provider's hosted page) → SCA.
3. The bank confirms the payment → return to the merchant with the status (success/failed/canceled/pending).
4. Merchant records order as "paid/pending," waits for webhook/enrollment report.

3. 2 App2App / Mobile

On mobile devices, the merchant opens the banking application by deeplink/intent → confirmation → return according to the scheme above.
Conversion is higher, friction is lower; keep the fallback on the web redirect.

3. 3 Request-to-Pay/Embedded options

A number of banks have request-to-pay/PIS available through the provider's interfaces (the buyer receives a request from the application bank).
Embedded widgets from PSP simplify the list of banks, errors and statuses.

4) Limits and behavior of banks

There is no single "circuit" ceiling - issuer bank limits and risk profiles of the provider apply:
  • Per-transaction, per-day/week at the payer's bank.
  • New recipients/merchants - reduced thresholds, shutter speed is possible.
  • Channel (mobile/web), velocity rules, geo/device signals.
  • In individual countries/banks, threshold SCA exceptions (RA, TRA) are possible - depending on the bank.
💡 Practice: Don't hardcode amounts; maintain a limit guide by bank/country and update. At UX, show a clear "bank/channel limit exceeded" message and suggest alternatives.

5) Authorization vs settlement

Online status: `success`, `pending`, `failed`, `canceled`, `expired`.
Pending is possible when a confirmation delay or asynchronous check occurs.
Settlement: the actual loan comes from the provider's reports (usually T + 1/T + 2 bank days; depends on country/bank/clearing scheme).
For critical services, use the authorization ⇒ conditional execution model until enrollment is confirmed.

6) Returns, partial returns and disputes

Chargeback (as in cards) is missing. A return is a new credit transaction through a provider to the payer.
Partial refunds are supported.
Return credit terms - bank (T + 1/T + 2).
Disputes/complaints go through the provider + ODR procedure through the payer's bank; prepare order logs, proof-of-delivery/services.

7) Commissions and Economics

Usually fixed/low percentage with transaction + payment for platform functions (hosted checkout, reports, ODR).
Consider the cost of support (pending/expiries), risk incidents, and recon transaction costs.

8) Reconciliation and reporting

Save the'paymentId/transactionId' of the provider, 'orderId', issuing bank, timestamps, statuses.
Enable webhooks about status changes and daily auto-recon.
Combine online events (success/pending) with financial reports (credits/returns/corrections).
Store the UTR/bank reference from the report for each transaction.

9) UX practices

Directory of banks: pre-fill the last choice, sort by popularity/device bank.
Mobile-first: offer App2App, fallback - web redirect.
Errors and retry: give clear reasons (limit, SCA failure, timeout), retry button and alternatives.
Idempotence: 'orderId' + idempotence key for safe repeats.
Receipt: amount, date/time, 'transactionId', bank, channel (App2App/Redirect).

10) Recurrent write-offs and mandates

Classic Sofort - one-off. For recurrent models, a bunch is used: the first payment is A2A → e-mandate/SEPA DD/Open Banking PIS for the future.
Manage mandates (limit, frequency, notifications), store acceptance logs.

11) Compliance, security, data

PSD2/SCA: confirmation in the bank, device binding, anti-fraud bank.
PII minimization: store only the necessary attributes; encrypt the PII; HMAC signatures of web hooks.
GDPR/Logs: consents, right to delete, audit changes.

12) High Risk Verticals (including iGaming)

The availability of Pay-by-Bank for some categories is limited by the provider/banks according to internal policies and local law.
Expect reduced limits, additional CUS/financial monitoring, possible holds.
Keep alternative rails (cards, SEPA, open banking A2A, vouchers) and traffic segmentation.

13) Merchant Integration: Options

1. Hosted/Embedded от PSP/Klarna

Quick start: bank selection widget, statuses, bugs, webhooks out of the box.

2. Server-to-Server + redirect/App2App

More control: banks' own page, fine error processing, own QR/Deep Link.

3. Request-to-Pay

Sending a payment request (email/SMS/link), convenient for B2B/services.

Required backend components:
  • Эндпоинты: `createPayment`, `queryStatus`, `refund`, `webhook`, `reconcile`.
  • Idempotence and dedupe table by 'orderId'.
  • Retrai exponentially for statuses, dead-letter for unstable responses.
  • Catalogs: banks/countries, limits/error codes, SLA metrics by issuers.

14) Sofort/Klarna Gateway architecture

API layer (REST/GraphQL) for the cash register.
Event queues: status events → billing/CRM/analytics.
Observability: bank/channel conversion, 'pending→success/expired', latency, SCA failure.
Security: vault for secrets, IP-allowlist provider, anti-replay tokens, strict redirect-URI validation.

15) Output checklist

1. Select the PSP/Klarna/Sofort channel with the desired bank geography.
2. Implement 'createPayment' + bank selection + redirect/App2App with fallback.
3. Connect webhooks, idempotency, timeouts and status repetition.
4. Set up recon (daily + full), UTR/fin references storage.
5. Enable partial/full refunds and ODR in the support.
6. Prepare UX failure/limit scenarios and alternative methods.
7. Test mobile banks (iOS/Android) and major issuers in target countries.
8. Maintain a limit guide and incident status page.

Landmark card

💡 Actual thresholds/delays vary by bank/country/provider.

Статусы: `success`, `pending`, `failed`, `canceled`, `expired`.
Settlement: more often T + 1/T + 2; plan "conditional execution" before credit.
Limits: per-txn/day/week at issuer'a; for new recipients - below.
Recurrence: via e-mandate/SEPA DD/Open Banking.

Summary

For conversion - App2App/Embedded, for stability - clear webhooks + recon.
Separate online confirmation and actual credit (T + 1/T + 2) in business logic.
Do not fix hard amounts: limit configs by bank/country + regular updating.
For subscriptions, use the first A2A payment → mandate, with clear UX management and limits.

Contact

Get in Touch

Reach out with any questions or support needs.We are always ready to help!

Start Integration

Email is required. Telegram or WhatsApp — optional.

Your Name optional
Email optional
Subject optional
Message optional
Telegram optional
@
If you include Telegram — we will reply there as well, in addition to Email.
WhatsApp optional
Format: +country code and number (e.g., +380XXXXXXXXX).

By clicking this button, you agree to data processing.