Przelewy24

Learn how to accept Przelewy24 payments.

Przelewy24 is a real-time bank transfer payment method. Customers based in Poland can use it to transfer funds directly to merchants from their bank accounts.

The customer selects their bank from a list of banks displayed. The customer confirms payment and bank transfer instructions to activate a bank transfer, and they can also print out the bank transfer details. The customer re-directs to their banks' login page and logs in. They check that the bank transfer information matches that shown on the Przelewy24 payment page and submits their payment.

Payment typeOnline banking
MarketPoland
Customer currenciesPLN
Processing currenciesPLN
RefundsYes

If you want to use Przelewy24 logos in your marketing materials or on the checkout page, please use the source of the official guidelines: P24 logos.

General flow

POST Request -> to /payment_preauthorize
<- Response (direct, synchronous) with status=2000&errormessage=pending and redirect_url
Customer is redirected to redirect_url (EPS/Giropay URL)
<- Callback (asynchronous) with errorcode=0&payment_state=not_credited_yet to notification_url
<- Callback (asynchronous) with errorcode=0&payment_state=credited to notification_url

Step 1. Make a transaction request

From your server, make a POST /payment_preauthorize request.

POST https://sandbox.payabl.com/pay/backoffice/payment_preauthorize

Include in request:

ParameterFormatDescription
merchantid40 charactersMerchant identification number assigned during account creation
orderidmax. 40 charactersThe field orderid is optional and exclusively for the merchants' convenience
amountdigits only, either no decimals or two decimal places (e.g. 8 or 8.50)Transaction’s total amount that will be deducted from the customer
currency3 characters. ISO 4217The currency field contains the alpha-3 currency code for the transaction. Links to ISO. Supported currencies: PLN
payment_method120payabl. Payment methods IDs
signature40 charactersSignature Calculation
emailmax. 50 charactersCustomer email. An RFC 822 compliant email address
firstnamemax. 50 charactersFirst name of the customer
lastnamemax. 50 charactersLast name of the customer
url_successmax. 255 characters starting with http or httpsSuccessful transaction redirection URL
url_failedmax. 255 characters starting with http or httpsFailed transaction redirection URL
url_returnmax. 255 characters starting with http or httpsURL for customer redirection

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

Request example:

merchantid=gateway_test&orderid=Payabl-Test&amount=109.82&currency=PLN&country=POL&[email protected]&firstname=John&
lastname=Doe&payment_method=120&zip=02-496&street=ul. Spacerowa&house=42&city=Warszawa&customerip=2.22.75.244&
url_return=https://yourshop.example/thank_you&notification_url=https://yourshop.example/notification&url_success=
https://yourshop.example/payment_successful&url_failed=https://yourshop.example/payment_failed&signature=5e44a6db4c7ead910a390ed81ff616758340a710

🚧

Public Sandbox information

Do not use your personal email address, Order ID with sensitive information, real customer details and credit card data in the public Sandbox. For email field you may use [email protected].

📘

Redirection to url_return does not confirm that the transaction is successful. Always check the transaction via notification_url or use the diagnose interface to get the final status of the transaction.

Step 2. Handle the redirect

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

Response example:

transactionid=105178168&transid=105178168&status=2000&errormessage=pending&errmsg=pending&amount=109.82&price=109.82&
currency=PLN&orderid=Payabl-Test&user_id=715927&redirect_url=https%3A%2F%2Fsandbox.przelewy24.pl%2FtrnRequest%2FBDF1
F4E272-19B35F-A45492-90D6548A74

Response fields reference:

ParameterDescription
transactionidpayabl. internal transaction id. Please use this transaction id when referring to the transaction in communications with the payabl. team
transidThe same as transactionid
statusTransaction error code
errormessageBrief explanation of transaction decline reason (empty on success)
errmsgThe same as errormessage
amountTransaction amount
priceThe same as amount
currencyTransaction currency
orderidOptional transaction identifier given by the merchant
redirect_urlURL for customer redirection to finalize the payment (URL encoded)
user_idPayment system user identifier

Step 3. Receive the final status

Once the customer completes the payment, we will send a notification with the transaction's final status to the notification_url specified by you.

url_return and notification_url should be passed by you in the Pre-authorization request.

Alternatively, you can communicate a notifciation_url to be used by default to payabl. technical team. By doing so, you won't need to send it in every request.

P24 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, either provided in the request body or configured when the merchant account was created.

Notification example - Accepted Capture:

account_number=&errorcode=0&bank_number=&timestamp=1683804623&orderid=Payabl-Test&errormessage=&security=b84d70cea110cd
40edd3dc53f9c16b5097b92dfbe32c08638a9a7723f93c0c43&transactionid=105178168&payment_method=120&payment_state=not_credited_yet&
account_holder=John+Doe&bank_name=&type=capture

Notification example - Successful Capture:

account_number=&errorcode=0&bank_number=&timestamp=1683804623&orderid=Payabl-Test&errormessage=&security=b84d70cea
110cd40edd3dc53f9c16b5097b92dfbe32c08638a9a7723f93c0c43&transactionid=105178168&payment_method=120&payment_state=credited&
account_holder=John+Doe&bank_name=&type=capture

Notification fields reference:

ParameterDescription
transactionidpayabl. internal transaction id. Please use this transaction id when referring to the transaction in communications with the payabl. team
typeTransaction type
errorcodeTransaction error code (0 for success)
errormessageBrief explanation of transaction decline reason (empty on success)
amountTransaction amount
orderidOptional transaction identifier given by the merchant
securitySignature to verify the authenticity of the notification. You can find more information here
timestampNotification timestamp
payment_stateTransaction acceptance state as described above
payment_methodPayment method ID
account_holderName of the customer (same as what was sent in the request)
account_numberMD5sum of bank account number
bank_numberEmpty field, we do not get this from P24

After the customer has finished or canceled the payment, they 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 are supposed to use to update your system.

📘

Notification URL can be configured by our tech support team in your account on our side,
or you can send it as a parameter notification_url in the initial request to payment_preauthorize.

Refunds

Przelewy24 supports refunds and can be initiated only on a successful captured transaction.
The request will send a credit note to the authorization system after the customer has already been charged. The refund amount will be credited to the customer and the merchant’s account will be charged.

The refund can be done in two ways:

  • Through API integration
  • Through payabl. dashboard

If you have API integration, you can check more in our documentation Refund.


Our Technical Support team is there to help you:
Email: [email protected]
Available Monday – Friday between 09:00 and 17:00 CET/CEST