Sofort | Direct Bank Transfer

Learn how to accept direct bank transfer payments

Sofort, also known as Pay now with Klarna, is a popular online banking method in Germany, Austria, and Switzerland, and Belgium.
In order to pay with Sofort, customers are redirected to Sofort’s site where they enter their bank login credentials. Upon authentication, Sofort initiates a bank transfer from their bank account.

Although successful authorization indicates a very high likelihood of payment, funds are not guaranteed to your business until they are actually received, which is typically two business days later (but can be up to 14 days later). Once received, payments cannot be reversed except by business-initiated refunds.

Payment typeOnline banking
MarketAustria, Belgium, France, Germany, Italy, Netherlands, Poland, Spain, Sweden, Switzerland
Customer currenciesEUR
Processing currenciesEUR
Settlement currenciesEUR

Step 1. Make a transaction request

From your server, make a POST /payment_preauthorize request.


The process flow of this payment system is the same as the 3DSecure transaction procedure. Please note the following exceptions:

  1. For sofortüberweisung transactions, we don’t need param_3d parameter.
  2. The redirect URL is provided in redirect_url, instead of url_3ds (used in step 2 and step 3)
  3. Only Preauthorize interface should be used for sending transactions.
  4. Merchant would be notified on the notification URL about the accepted, success and the failed transaction, capture may remain in the accepted state until credited or not_credited notification has been received from the
  5. Please pay special attention to the following pre-authorization interface parameters:
  • merchantid: The merchant identification number.
  • orderid: The field orderid is optional and exclusively for the merchant's convenience.
  • amount: The amount field contains the transaction’s total amount. This is the amount that will be transmitted to the authorizing system.
  • currency: The currency field contains the alphanumeric currency code for the transaction, according to ISO 4217, e.g. EUR.
  • payment_method: The payment method id - 17.
  • signature: The signature field contains a 40-figure hexadecimal value. This signature value is a checksum designed to protect the merchant account from unauthorized access.
  • email: The customer's email address.
  • url_return: redirect URL after transaction completion
  • url_success: Success transaction URL
  • url_failed: Failed transaction URL

You can see a full list of parameters in Pre-Authorization.

Request example


SofortÜberweisung contains an additional notification parameter which is payment_state, which could contain the following values:

  • not_credited_yet: Capture - Accepted.
  • credited: Capture - Successful.
  • not_credited: Capture - Failed.
    Each state change would trigger a notification to the notification URL, notification URL is the URL that was provided when the merchant account was created.


Sofort does not support iFrame, full page redirect needs to be done.

Step 2. Handle the redirect

To complete the payment, you need to redirect the customer to the correct URL in the response.



Notification example - Accepted Notification


Notification example - Successful Notification


Additional Customer details can be added to both callbacks. Please contact Tech support to enable them:

  • bank_country (alpha2 format)
  • bic
  • payment_system
  • account_holder
  • iban

When the customer finished or canceled the payment, he will be redirected back to url_return, provided by you in the initial request to payment_preauthorize. After that, you will receive a notification, posted to notification_url, with the final transaction status, which you suppose to use to update your system.


url_return and notification_url should be provided by you to payabl. technical team.

Notification example with additional account parameters.

security=19667fb6d9d2f3c8457e29d949f72319a9986b88b0be47050d9fc49f746d279b&orderid=6eebd443fb407e3f35f0&errorcode=0" "https://www.notification_url"