openapi: 3.0.0 servers: - url: https://sandbox.przelewy24.pl description: Sandbox server (uses test data) - url: https://secure.przelewy24.pl description: Production server (uses live data) info: x-logo: url: getfile/przelewy24-logo_mini.png altText: LogoP24 contact: name: Przelewy24 Support url: https://www.przelewy24.pl/support title: Przelewy24 REST API Documentation description: > # Payment system Przelewy24 provides an authorisation and clearing system and provides payment services as a Domestic Payment Institution.

Through Przelewy24 API you can access all of the services offered by the system. Below documentation includes most common used functionalities. Contact the [Sales Department](https://www.przelewy24.pl/pomoc/formularz-kontaktowy) to find out more.

In order to be able to access Przelewy24 API, you first need to [create an account](https://panel.przelewy24.pl/rejestracja.php) in the P24 Administration Panel. After registration, among others, the merchant may use the administration panel to keep track of the account balance, all payments made by their clients and refunds.
## Transaction process After placing the order, customer clicks the **"pay"** button. Merchant system sends a register transaction request to the P24 system and receives a unique TOKEN. Afterwards customer will be redirected to the P24 transaction panel. In case of payment cancellation, the customer is redirected to the **“urlReturn"** address. Upon successful completion of the transaction, the customer is redirected to the "urlReturn" address. P24 sends the transaction notification to the "urlStatus" address. The transaction notification is sent **asynchronously**. To verify the credibility of the received confirmation, the Merchant’s system sends a return request to P24 as a transaction verification. Payment process ## Transaction requirement In order to carry out the transaction correctly, merchant’s website should offer transaction registering as well as handling transaction result.

The entire process is fully automatic and does not require any interference of the shop personnel in it.

After the payment process has been completed successfully, status of the order on the merchant website should automatically change to paid/accepted. At this point, merchant may proceed with order fulfilment.

Environment # Definitions **CVV** – card verification value/code. **Cyclic Redundancy Check (CRC)** – unique key (String) obtained from Przelewy24 used to generate the checksum of the parameters sent. **Dynamic Currency Conversion (DCC)** – process whereby the amount of card transaction is converted to the currency of the payment card’s country of issue at the point of sale. **Merchant** – an institution or a private person using Przelewy24 services. **Session ID** – unique ID used to identify single transaction in merchant system. # Use cases ## How to display a full selection of payment methods in your shop? In order to facilitate the process of payment, it is possible to move the customer's selection of payment method to the very stage of placing an order. If the customer additionally accepts the terms and conditions of Przelewy24 (in the request, you need to set regulationAccept = true), they would be redirected from the shop's website directly to the bank or to the form for card payments, after clicking "pay".

The following text must be placed on the store's website and displayed to the customer: “I declare that I have read the terms and conditions and information obligation of the Przelewy24 service.” The words "terms and conditions" and "information obligation" must be followed by a link to the pages containing these documents. The checkbox cannot be pre-selected.

In order to download the list of payment methods, you need to use the PaymentMethods method, described in the Additional Services.

Payment Methods
The list may be presented on your website in any form. ## How to redirect a customer to specific method of payment? In order to redirect the customer directly to selected method of payment, an identifier of a given method must be sent in the method field in transaction request. For instance, when redirecting to the mTransfer method, the request looks as follows: ```json { "merchantId": {{merchantId}}, "posId": {{posId}}, "sessionId": "{{sessionId}}", "amount": {{amount}}, "currency": "{{currency}}", "description": "{{description}}", "email": "{{email}}", "country": "PL", "language": "pl", "method": {{method}}, "urlReturn": "{{urlReturn}}", "sign": "{{sign}}", } ``` ## How to limit the time allowed for finalise the payment by a customer? Depending on specific character of a given system, it might be necessary to limit the time that customer has for completing their payment. This option is controlled by timeLimit parameter. Setting this parameter to 0 would switch off the timer. Entering values 1-99 sets the time limit in minutes. ## How to enable customer's return to the shop, so that they don't have to wait for synchronic payment confirmation? In case of some payment methods, especially e-transfers, payment is confirmed within couple of minutes after making it. The client may either wait for result of the transaction in the transaction service and be redirected back to the shop upon receiving confirmation (that way the shop would already get the payment notification), or the client may be immediately redirected to the shop, without waiting for the result of the transaction. The choice between these two variants is made by means of the transaction request parameter waitForResult. The latter option is enabled when the parameter is set on false, the former, when the parameter is set on true. ## How to process a refund to a customer? Processing refunds, like all services in Przelewy24, is fully automatic and done via webservices. Refunds are processed by means of transaction/refund method.

Multiple refund requests may be ordered, as long as the sum of refunds does not exceed the sum of the original transaction. ## Can a customer finalise a transaction process after the end of a session? If a customer discontinues payment process (e.g. after accessing the bank’s website), Przelewy24 system offers an option of sending an automatic e-mail with a link that allows to finalise the initiated payment process. If the customer use this option, the outcome will be no different than the outcome of a transaction finalised on-line.

To have this functionality enabled, please contact Partner Support via contact form # Graphic materials P24 logo and banners are available at: [https://www.przelewy24.pl/en/download?#materialy-graficzne](https://www.przelewy24.pl/en/download?#materialy-graficzne) # Environments ## Production environment Every request is differentiated by its own unique request URL. This way P24 knows which API-function you want to access. Combined with the base URL for either the production- or test-environment, you will get the complete API-URL. Base URL production system:
https://secure.przelewy24.pl/api/v1 Production transactions will be visible in the panel
https://panel.przelewy24.pl/index.php ## Test environment During implementation of the mechanisms in merchant’s system, it is recommended to use test environment. Test environment allows to reproduce system functionalities without making actual payments.

Test environment endpoint:
https://sandbox.przelewy24.pl/api/v1

Test transactions will be visible in the test panel
https://sandbox.przelewy24.pl/panel/index.php

**The testing environment cannot be used for production transactions.** # IP server addresses We recommend script protection against suspicious calls using address filtering for incoming connections. IP server ranges for the P24 servers:

5.252.202.255 , 5.252.202.254
20.215.81.124
193.178.213.0/24
91.220.177.0/24
20.215.183.48/28
134.112.88.8/29
# Environment requirements Transport Layer Security - TLS 1.2 (minimum required)

https://wiki.mozilla.org/Security/Server_Side_TLS
https://en.wikipedia.org/wiki/Transport_Layer_Security

OpenSSL 1.0.1 (minimum required)

https://www.openssl.org/news/changelog.html#x31

cURL 7.34.0

https://curl.haxx.se/docs/manpage.html#--tlsv12 # Possible error codes | ErrorCode | Description | |-----------|------------------------------------------------------------------------------------------------------------------------------------------------------------| | err00 | Invalid script call | | err01 | No confirmation of reception of authorisation has been received from the shop | | err02 | No authorisation has been received | | err03 | This query has already been processed | | err04 | Authorisation query incomplete or invalid | | err05 | Reading of web-shop configuration failed | | err06 | Record of authorisation query failed | | err07 | A different person is making the payment | | err08 | Status of connection with the shop not established. | | err09 | Limit on the number of data corrections exceeded. | | err10 | Invalid transaction amount! | | err49 | Transaction risk assessment score too high. | | err51 | Invalid website call | | err52 | Invalid feedback session information! | | err53 | Transaction error! | | err54 | Incompatible transaction amounts! | | err55 | Invalid response code! | | err56 | Invalid card | | err57 | IncompatibleTEST flag! | | err58 | Invalid sequence number! | | err59 | Invalid transaction currency! | | err101 | Website call error A required parameter is missing from the transaction request or an inadmissible value has appeared. | | err102 | Allowed time for transaction has expired | | err103 | Invalid amount of transfer | | err104 | Transaction is awaiting confirmation. | | err105 | Transaction made after expiry of time allowed for transaction | | err161 | Request for transaction interrupted by User The customer has interrupted the payment procedure by clicking "Go back" on the payment method selection site. | | err162 | Request for transaction interrupted by User The customer has cancelled the payment procedure by clicking „Resign” on the payment instructions site. | # Authentication P24 supports the mechanism of Basic Authentication. version: 1.0.0. x-tagGroups: - name: Transaction service tags: - Transaction service API - Notification - Calculating Sign - name: Additional services tags: - Additional API functionality - RefundNotification - Additional services Additional Notifications - Payment Methods Use Cases - Additional services Mass Payments Transactions - name: Card payment tags: - Card API - Card Notification - Pre-authorization - name: BLIK tags: - BLIK Use Cases - BLIK API - BLIK Additional - Alias Update Notification - name: Reports tags: - Report API - name: Card payment 2.0 tags: - Introduction - Google Pay - Apple Pay - Form initialization - Form initialization v2 - Tokenization - Card payment flow - Recursion (doPayment) - Card API v2 - Card notification - Mobile payment (Android) - Mobile payment (iOS) - name: How to integrate installments? tags: - Buttons and banners - Widget - Simulator paths: /api/v1/transaction/register: post: tags: - Transaction service API summary: Transaction registration requestBody: content: application/json: schema: $ref: "#/components/schemas/TransactionRequestBody1" description: Before sending the transaction request, transaction data must be saved in the merchant’s local database. In particular, the session ID and the transaction amount should be stored.


Redirection to transaction panel

URL address:https://secure.przelewy24.pl/trnRequest/{TOKEN}

where {TOKEN} was obtained upon transaction registration.


On transaction success the URL address transferred in "urlStatus" parameter is used to send notification irrespective of whether the customer has been redirected to "urlReturn" or not. The notification is sent only for correct payments. The system does not send information on invalid or failed payments. The notification is sent in the JSON format.

Show Transaction result JSON required: true responses: "200": description: successful operation content: application/json: schema: $ref: "#/components/schemas/TransactionRegistrationResponse" "400": description: bad request content: application/json: schema: $ref: "#/components/schemas/InvalidInputData" "401": description: not authorized content: application/json: schema: $ref: "#/components/schemas/UnauthorizedResponse" security: - basicAuth: [] /api/v1/transaction/verify: put: tags: - Transaction service API summary: Transaction verification requestBody: content: application/json: schema: $ref: "#/components/schemas/TransactionVerificationBody" description: After receiving notification, the merchant’s system should perform an additional action to confirm the payment and authenticate the notification. It is necessary to use transaction/verify method.

**Important!** Transaction will be confirmed only after verification process. In case the customer performs transaction and merchant does not verify performed transaction, amount will not be transferred to the merchant and settled. It will stay at the customer’s disposal as an advance payment. responses: "200": description: successful operation content: application/json: schema: $ref: "#/components/schemas/TransactionVerificationResponse" "400": description: bad request content: application/json: schema: $ref: "#/components/schemas/InvalidInputData" "401": description: not authorized content: application/json: schema: $ref: "#/components/schemas/UnauthorizedResponse" security: - basicAuth: [] /api/v1.1/transaction/register/simp: post: tags: - Additional services Mass Payments Transactions summary: Mass payments transaction register description: Before sending a transaction request, save its data to the Partner's local database. In particular, the session ID and transaction amount information should be saved.

The request takes analogous values to the request transaction/register, except for two additional parameters used when requesting transaction/register/simp czyli simpCountryCode and simpClientId. requestBody: content: application/json: schema: $ref: "#/components/schemas/TransactionRegistrationSIMPBody" responses: "200": description: Successful operation content: application/json: schema: $ref: "#/components/schemas/SIMPTransactionRegistrationResponse" "400": description: Invalid input data content: application/json: schema: $ref: "#/components/schemas/SIMPResponse400" "401": description: Not authorized content: application/json: schema: $ref: "#/components/schemas/UnauthorizedResponse" "409": description: Conflict content: application/json: schema: $ref: "#/components/schemas/SIMPConflict" "500": description: Undefined error content: application/json: schema: $ref: "#/components/schemas/ErrorCodeResponse" security: - basicAuth: [] /api/v2/transaction/by/sessionId/{sessionId}: get: tags: - Additional services Mass Payments Transactions summary: Data about transaction via sessionID description: The method returns transaction information based on the sessionId field. For a single sessionId within a SIMP payment, multiple payments can be made on the IBAN, hence the API can return multiple objects. parameters: - in: path name: sessionId schema: type: string required: true description: SessionId of the transaction given during transaction registration responses: "200": description: Successful operation content: application/json: schema: $ref: "#/components/schemas/SIMPGetTransactionBySessionId200" "400": description: Invalid input data content: application/json: schema: $ref: "#/components/schemas/InvalidInputData" "401": description: Incorrect Authentication content: application/json: schema: $ref: "#/components/schemas/UnauthorizedResponse" "500": description: Undefined error content: application/json: schema: $ref: "#/components/schemas/ErrorCodeResponse" security: - basicAuth: [] /api/v1/testAccess: get: tags: - Additional API functionality summary: Test Access description: Test connection. REST uses "basicAuth" authorisation standard, where login and password are, respectively, account ID in P24 and the API key obtained from the “My data” section (“API and configuration data” subsection). responses: "200": description: OK content: application/json: schema: $ref: "#/components/schemas/TransactionTestAccess200" "400": description: Bad Request content: application/json: schema: $ref: "#/components/schemas/InvalidInputData" "401": description: Unauthorized content: application/json: schema: $ref: "#/components/schemas/UnauthorizedResponse" security: - basicAuth: [] /api/v1/payment/methods/{lang}?amount=150&subgroup=1¤cy=PLN: get: tags: - Additional API functionality summary: Payment Methods description: Method returns a list of payment methods. parameters: - name: lang in: path description: "A language code. One of these: pl , en" required: true schema: type: string enum: - pl - en - in: query name: amount schema: type: integer description: Value of the amount.
It gives the possibility of clarifying whether a given form of payment is available for a specific amount. required: false - in: query name: currency schema: type: string default: PLN description: Currency compatible with ISO, e.g. PLN required: false - in: query name: subgroup schema: type: integer enum: - 1 - 0 description: Condition if the subgroup value should be visible in the response. Default 0 (NO). Optional 1 (YES). required: false responses: "200": description: List of payment methods content: application/json: schema: properties: data: type: array description: List of methods items: $ref: "#/components/schemas/PaymentMethodsResponseMethod" agreements: type: array description: List of agreements responseCode: type: string default: "" type: object "403": description: Not authorized. content: application/json: schema: $ref: "#/components/schemas/UnauthorizedResponse" "404": description: Payment methods not found content: application/json: schema: $ref: "#/components/schemas/BasicResponse" security: - basicAuth: [] /api/v1/transaction/refund: post: tags: - Additional API functionality summary: Refund transaction description: Create refund for one or more transactions. requestBody: content: application/json: schema: $ref: '#/components/schemas/TransactionRefundJsonRequestBody' description: 'Parameter ''refunds'' may contain multiple refunds.' required: true responses: "201": description: 'Created. Parameter ''data'' contains all refunds.' content: application/json: schema: $ref: '#/components/schemas/TransactionRefund201' "400": description: 'Invalid input data' content: application/json: schema: $ref: '#/components/schemas/InvalidInputDataRefund' "401": description: 'Not authorized' content: application/json: schema: $ref: '#/components/schemas/UnauthorizedResponse' "409": description: 'Conflict' content: application/json: schema: $ref: '#/components/schemas/TransactionRefund409' "500": description: 'Unknown error' content: application/json: schema: $ref: '#/components/schemas/Refund500Response' security: - basicAuth: [] /api/v1/transaction/registerOffline: post: description: This method allows you to register offline payments. To use the method, you must first register standard payment transaction with register transaction method.

Additionally, you can control which bank use for payment by using the method parameter. tags: - Additional API functionality summary: Register offline transaction requestBody: content: application/json: schema: $ref: "#/components/schemas/TransactionRegisterOfflineRequest" application/x-www-form-urlencoded: schema: $ref: "#/components/schemas/TransactionRegisterOfflineRequest" description: Input parameters. required: true responses: "200": description: Successful response content: application/json: schema: $ref: "#/components/schemas/TransactionRegistrationOffline200" "400": description: Invalid input data content: application/json: schema: $ref: "#/components/schemas/InvalidInputData" "401": description: Not authorized content: application/json: schema: $ref: "#/components/schemas/UnauthorizedResponse" "409": description: Conflict content: application/json: schema: $ref: "#/components/schemas/TransactionRegistrationOffline409" "500": description: Undefined error content: application/json: schema: $ref: "#/components/schemas/ErrorCodeResponse" security: - basicAuth: [] /api/v1/transaction/register/ttl: post: description: Transaction registration and defining the lifespan of the transaction at the same time. The ttl paramter is required. tags: - Additional API functionality summary: Transaction Registration with ttl requestBody: content: application/json: schema: $ref: "#/components/schemas/TransactionRegisterTtl" responses: "200": description: successful operation content: application/json: schema: $ref: "#/components/schemas/TransactionRegistrationResponse" "400": description: bad request content: application/json: schema: $ref: "#/components/schemas/InvalidInputData" "401": description: not authorized content: application/json: schema: $ref: "#/components/schemas/UnauthorizedResponse" security: - basicAuth: [] /api/v1/transaction/register/splitpayment: post: description: Split Payments are charged using previously registered token in a process analogous to transaction/register. When registering the token, you must add the splitPaymentDetails object characteristic for this form of transaction execution. tags: - Additional API functionality summary: Split Payment requestBody: content: application/json: schema: $ref: "#/components/schemas/TranstactionSplitPayment" description: Array responses: "200": description: Successful operation content: application/json: schema: $ref: "#/components/schemas/TransactionRegistrationResponse" "400": description: Bad request content: application/json: schema: $ref: "#/components/schemas/InvalidInputData" "401": description: Not authorized content: application/json: schema: $ref: "#/components/schemas/UnauthorizedResponse" security: - basicAuth: [] '/api/v1/refund/by/orderId/{orderId}': get: tags: - Additional API functionality summary: Refund by OrderID description: Get refund details for given Order Id consumes: - application/json - application/x-www-form-urlencoded parameters: - name: orderId in: path description: 'existing refund Order Id' required: true type: integer format: int64 responses: "200": description: 'Request has been processed successful. Parameter ''data'' contains refund info.' content: application/json: schema: $ref: '#/components/schemas/TransactionRefundsInfoResponse' "401": description: 'Not authorized' content: application/json: schema: $ref: '#/components/schemas/UnauthorizedResponse' "404": description: 'Refund with given Order Id not found' content: application/json: schema: $ref: '#/components/schemas/TransactionNotFoundResponse' "500": description: 'Undefined error' content: application/json: schema: $ref: '#/components/schemas/ErrorCodeResponse' security: - basicAuth: [] '/api/v1/transaction/by/sessionId/{sessionId}': get: tags: - Additional API functionality summary: Get transaction by sessionID description: Method returns transaction information by sessionId consumes: - application/json - application/x-www-form-urlencoded parameters: - name: sessionId in: path description: 'Transaction ID assigned by Merchant' required: true type: string responses: "200": description: 'OK' content: application/json: schema: $ref: '#/components/schemas/TransactionBySessionIdSuccessResponse' "400": description: 'Invalid input data' content: application/json: schema: $ref: "#/components/schemas/InvalidInputData" "401": description: 'Incorrect authentication' content: application/json: schema: $ref: '#/components/schemas/UnauthorizedResponse' "404": description: 'Transaction not exist' content: application/json: schema: $ref: '#/components/schemas/TransactionNotFoundResponse' security: - basicAuth: [] /api/v1/paymentMethod/blik/chargeByCode: post: tags: - BLIK API summary: 'BLIK charge by code' description: Allows to charge blik transaction with T6 code. Returns unique transaction Id. requestBody: content: application/json: schema: $ref: "#/components/schemas/RecurringParams" responses: "201": description: Created content: application/json: schema: $ref: "#/components/schemas/BlikChargeByCodeResponse" "400": description: Invalid input data content: application/json: schema: $ref: "#/components/schemas/InvalidInputData" "401": description: not authorized content: application/json: schema: $ref: "#/components/schemas/UnauthorizedResponse" "500": description: Undefined error content: application/json: schema: $ref: "#/components/schemas/ErrorCodeResponse" security: - basicAuth: [] /api/v1/paymentMethod/blik/chargeByAlias: post: tags: - BLIK API summary: BLIK charge by Alias description: ChargeByAlias is a one click payment method. It allows to charge customer using a previously obtained alias (**getAliasesByEmail**). Alias obtained must be provided in methodRefId parameter during transaction registration requestBody: content: application/json: schema: $ref: "#/components/schemas/BlikOneClick" responses: "201": description: Created content: application/json: schema: $ref: "#/components/schemas/BlikChargeByCodeResponse" "400": description: Bad request content: application/json: schema: $ref: "#/components/schemas/InvalidInputData" "401": description: Not authorized content: application/json: schema: $ref: "#/components/schemas/UnauthorizedResponse" "409": description: AlternativeKeys content: application/json: schema: $ref: "#/components/schemas/ChargeByAlias409" "500": description: Undefined error content: application/json: schema: $ref: "#/components/schemas/ErrorCodeResponse" security: - basicAuth: [] /api/v1/paymentMethod/blik/getAliasesByEmail/{email}: get: tags: - BLIK API summary: Getting Aliases ByEmail description: In order to receive an alias for subsequent payments, call the "getAliasesByEmail" method.

The method returns a list of aliases (along with the type and status) created for a given email address in the scope of a given merchant.

parameters: - name: email in: path description: For aliases registered by email address required: true responses: "200": description: OK content: application/json: schema: $ref: "#/components/schemas/Transaction200Blik" "400": description: Bad Request content: application/json: schema: $ref: "#/components/schemas/InvalidInputData" "401": description: Unauthorized content: application/json: schema: $ref: "#/components/schemas/UnauthorizedResponse" "404": description: 'Alias not found' content: application/json: schema: $ref: '#/components/schemas/TransactionNotFoundResponse' security: - basicAuth: [] /api/v1/paymentMethod/blik/getAliasesByEmail/{email}/custom: get: tags: - BLIK API summary: Getting Aliases ByEmail (Custom) description: In order to receive an alias for subsequent payments, call the "getAliasesByEmail" method.

The method returns a list of aliases (along with the type and status) created for a given email address in the scope of a given merchant. parameters: - name: email in: path description: For Aliases registered with values "aliasValue" and "aliasLabel" required: true responses: "200": description: OK content: application/json: schema: $ref: "#/components/schemas/Transaction200Blik" "400": description: Bad Request content: application/json: schema: $ref: "#/components/schemas/InvalidInputData" "401": description: Unauthorized content: application/json: schema: $ref: "#/components/schemas/UnauthorizedResponse" "404": description: 'Alias not found' content: application/json: schema: $ref: '#/components/schemas/TransactionNotFoundResponse' security: - basicAuth: [] "/api/v1/card/info/{orderId}": get: tags: - Card API summary: Card info parameters: - name: orderId in: path description: An unique order ID. required: true schema: type: integer format: int64 description: The method generates information about specific payment card based on previous payment. Including reference number to charge card without CVV authorisation. responses: "200": description: Success content: application/json: schema: $ref: "#/components/schemas/cardinfores" "400": description: Wrong input data content: application/json: schema: $ref: "#/components/schemas/ErrorCodeResponse" "403": description: Not authorized content: application/json: schema: $ref: "#/components/schemas/UnauthorizedResponse" "404": description: Transaction not exists content: application/json: schema: $ref: "#/components/schemas/ErrorCodeResponse" security: - basicAuth: [] /api/v1/card/chargeWith3ds: post: tags: - Card API summary: Charge card with 3DS requestBody: content: application/json: schema: $ref: "#/components/schemas/CardChargeRequestBody" description: The method allows to charge a card based on the reference number. responses: "200": description: The charge card command has been accepted - notification will be send on success. content: application/json: schema: $ref: "#/components/schemas/ChargeCard3dsSuccessResponse" "201": description: The card payment requires 3DS redirection content: application/json: schema: $ref: "#/components/schemas/ChargeCard3dsSuccessResponse" "400": description: Invalid input data content: application/json: schema: $ref: "#/components/schemas/InvalidInputData" "401": description: Not authorized content: application/json: schema: $ref: "#/components/schemas/UnauthorizedResponse" security: - basicAuth: [] /api/v1/card/charge: post: tags: - Card API summary: Charge card requestBody: content: application/json: schema: $ref: "#/components/schemas/CardChargeRequestBody" description: The method allows to charge a card based on the reference number. responses: "200": description: The charge card command has been accepted - notification will be send on success. content: application/json: schema: $ref: "#/components/schemas/ChargeCardSuccessResponse" "400": description: Invalid input data content: application/json: schema: $ref: "#/components/schemas/InvalidInputData" "401": description: Not authorized content: application/json: schema: $ref: "#/components/schemas/UnauthorizedResponse" security: - basicAuth: [] /api/v1/card/pay: post: tags: - Card API summary: Card Payment requestBody: content: application/json: schema: $ref: "#/components/schemas/CardRegisterRequestBody" description: Method is used for charging customer's card. Method directly sends card details. To use the method, the merchant must have PCI DSS certificate. responses: "200": description: The card payment has been succesed. content: application/json: schema: $ref: "#/components/schemas/CardPaySuccessResponse" "201": description: The card payment requires 3DS redirection. content: application/json: schema: $ref: "#/components/schemas/CardPayThreeDSecureResponse" "400": description: Invalid input data content: application/json: schema: $ref: "#/components/schemas/InvalidInputData" "401": description: Not authorized content: application/json: schema: $ref: "#/components/schemas/UnauthorizedResponse" "409": description: Conflict content: application/json: schema: $ref: "#/components/schemas/CardPayResponse409" security: - basicAuth: [] /api/v1/transaction/reject: put: tags: - Card API summary: Reject transaction description: Method allows to reject an authorised transaction. requestBody: content: application/json: schema: $ref: "#/components/schemas/TransactionRejectJsonRequestBodyV11" description: required: true responses: "200": description: Success content: application/json: schema: $ref: "#/components/schemas/TransactionReject200" "400": description: Invalid input data content: application/json: schema: $ref: "#/components/schemas/InvalidInputData" "401": description: Not authorized content: application/json: schema: $ref: "#/components/schemas/UnauthorizedResponse" "500": description: Undefined error content: application/json: schema: $ref: "#/components/schemas/ErrorCodeResponse" /api/v1/report/history: get: tags: - Report API summary: History transaction description: '
This method gives you back information about: batches, transactions and refunds, in questioned period of time.

Pagination

To call next page you need to call report/history with token as a query parameter, e.g.:
GET[https://secure.przelewy24.pl/api/v1/report/history/{token}](https://secure.przelewy24.pl/api/v1/report/history/{token})
' parameters: - name: dateFrom in: path description: Date in format YYYYMMDD required: true schema: type: string - name: dateTo in: path description: Date in format YYYYMMDD. Max period length is 31 days required: true schema: type: string - name: type in: path description: 'Type of objects to load. Omit this parameter, if you want to load everything. Acceptable values: batch, transaction, refund.' required: false schema: type: string responses: "200": description: OK content: application/json: schema: $ref: "#/components/schemas/HistoryResponse200Body" "400": description: Bad request content: application/json: schema: $ref: "#/components/schemas/HistoryError400Body" "401": description: Not authorized content: application/json: schema: $ref: "#/components/schemas/GeneralErrorResponse" "500": description: Undefined error content: application/json: schema: $ref: "#/components/schemas/GeneralErrorResponse" security: - basicAuth: [] /api/v1/report/batch/details: get: tags: - Report API summary: Batch information description: Method returns all transactions and refunds paid in requested batch.

Pagination

To call next page you need to call report/batch/details with token in payload e.g.:
GET[https://secure.przelewy24.pl/api/v1/report/batch/details](https://secure.przelewy24.pl/api/v1/report/batch/details)
parameters: - name: batch in: path description: Unique ID of batch (withdrawal) required: true schema: type: integer - name: token in: path description: Token needed to request next page required: false schema: type: string responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/BatchDetails200ResponseBody' "400": description: Bad request content: application/json: schema: $ref: "#/components/schemas/BatchDetailsError400Body" "401": description: Not authorized content: application/json: schema: $ref: "#/components/schemas/GeneralErrorResponse" "500": description: Undefined error content: application/json: schema: $ref: "#/components/schemas/GeneralErrorResponse" security: - basicAuth: [] /api/v1/issueWithdrawal: post: description: Method allows to generete withdrawals/batches. tags: - Report API summary: Issue Withdrawal requestBody: content: application/json: schema: $ref: "#/components/schemas/IssueWithdrawalRequestBody" responses: "200": description: OK content: application/json: schema: $ref: "#/components/schemas/WithdrawalResponseBody" "400": description: Bad Request content: application/json: schema: $ref: "#/components/schemas/GeneralErrorResponse" "401": description: Not authorized content: application/json: schema: $ref: "#/components/schemas/GeneralErrorResponse" "409": description: Conflict content: application/json: schema: $ref: "#/components/schemas/409ErrorResponse" "500": description: Undefined error content: application/json: schema: $ref: "#/components/schemas/GeneralErrorResponse" security: - basicAuth: [] /bundle/payWithGoogle/{TOKEN}: get: tags: - GPay API summary: Token transfer consumes: - application/json - application/x-www-form-urlencoded parameters: - name: TOKEN in: path description: Token obtained from Przelewy24. description: Upon token obtaining from P24, JavaScript script should be called.

On completion of the transaction, a relevant response (callback) is called. In case 3D-Secure is required, customer will be redirected to bank’s website. After authorisation customer will be redirected to URL provided in "urlReturn" parameter. x-codeSamples: - lang: HTML source: | PayWithGoogle /bundle/applepay/{TOKEN}: get: tags: - APay API summary: Token transfer servers: - url: https://secure.przelewy24.pl description: Production server (uses live data) consumes: - application/json - application/x-www-form-urlencoded parameters: - name: TOKEN in: path description: Token obtained from Przelewy24. description: Upon token obtaining from P24, JavaScript script should be called

On completion of the transaction, a relevant response (callback) is called. x-codeSamples: - lang: HTML source: | Apple Pay /api/v1/transaction/doPayment: post: tags: - Recursion (doPayment) summary: Transaction without JS/SDK requestBody: description: In order to register a recurring transaction, it is necessary to send transaction registration request first to `transaction/register` endpoint, consistent with the parameters set out in Recursion section. content: application/json: schema: properties: requestId: type: string description: RequestId must follow the UUIDv4 format token: type: string description: Transaction token returned from transaction registration request required: - requestId - token type: object responses: 200: description: OK content: application/json: schema: properties: token: type: string description: Transaction token sessionId: type: string description: Unique transaction's sessionId status: type: string description: "Status of created transaction, possible: DONE" data: properties: url: type: string description: URL redirecting to 3DS type: type: string description: URL call method payload: type: array description: Payload headers: properties: content-type: type: string description: "text/html; charset=UTF-8" type: object description: If in the transaction registration request in the cardData object the transactionType parameter contains the value "recurring", then the object is empty. Otherwise, data such as a link with a redirection to 3DS verification will be passed in the data object. type: object required: - token - sessionId - status 201: description: Created content: application/json: schema: properties: token: type: string description: Transaction token sessionId: type: string description: Unique transaction's sessionId status: type: string description: "Status of created transaction, possible: DONE" data: properties: url: type: string description: URL redirecting to 3DS type: type: string description: URL call method payload: type: array description: Payload headers: properties: content-type: type: string description: "text/html; charset=UTF-8" type: object description: If in the transaction registration request in the cardData object the transactionType parameter contains the value "recurring", then the object is empty. Otherwise, data such as a link with a redirection to 3DS verification will be passed in the data object. type: object required: - token - sessionId - status 400: description: Invalid input data content: application/json: schema: $ref: "#/components/schemas/InvalidInputData" 401: description: Not authorized content: application/json: schema: $ref: "#/components/schemas/UnauthorizedResponse" security: - basicAuth: [] ####components###### components: securitySchemes: basicAuth: description: This is the default authentication method. User and secretId are available in P24 panel:
- "User" it's the same value as posId,
- secretId it's the samevalue as key for reports (API key). type: http scheme: basic schemas: przelewy24: required: - merchantId - sessionId - sign properties: merchantId: type: integer description: Merchant identification number sessionId: type: string description: Unique identifier from merchant's system sign: type: string description: Checksum of parameters:
{"merchantId":int,"sessionId":"string","crc":"string"}

calculated with the use of sha384

IMPORTANT!:
in case json_encode function is used, the following attributes should be added
"JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES" type: object render: required: - type - id properties: type: type: string default: "form" enum: - form description: Type of form id: type: string example: "#card-form-block" description: ID of the block in which the iFrame will be generated options: type: object description: Additional form styling options type: object options: properties: lang: type: string description: Default form language default: "pl" example: "pl" size: type: object description: Object that modifies the size of an iFrame properties: width: type: string description: "Width" default: "500px" example: "500px" height: type: string description: "Height" default: "500px" example: "500px" labels: type: object description: "Object that modifies the labels of an fields" properties: cardholder: type: string description: "Text visible as the label of the cardholder field" example: "Name and surname of the card holder" card: type: string description: "Text visible as the label of the card number field" example: "Card number" cvv: type: string description: "Text visible as the label of the card's CVV/CVC number field" example: "Card CVV/CVC number" exp: type: string description: "Text visible as the label of the card expiration date field" example: "Card expiration date" agreement: type: object description: "An object that modifies the visibility and language of the TOS (Terms Of Services) field" properties: contentEnabled: type: object description: "An object that modifies the visibility of Terms Of Services elements" properties: enabled: type: boolean description: "Should information about regulations and information obligations be displayed?" example: true checkboxEnabled: type: boolean description: "Should a checkbox be displayed confirming that you have read the regulations and the information obligation?" example: true TOSLanguage: type: string description: "Defines in what language the Terms Of Services text will be displayed" example: "pl" placeholders: type: object description: Object that modifies text visible in individual elements properties: card: type: string description: "Text visible in card element" example: "Enter your card number" cvv: type: string description: "Text visible in cvv element" example: "Enter your card's CVV number" exp: type: string description: "Text visible in the expire date element" example: "Enter your expired card's date" cardholder: type: string description: "Text visible in cardholder element" example: "Enter the name and surname of the card holder" styles: type: object description: "Conditions style modifying object" properties: font: type: object description: "Object that modifies form font" properties: basic: type: object description: "Default font configuration" properties: size: type: string description: "Font size" example: "24px" family: type: string description: "Font family" example: "Impact,Charcoal,sans-serif" weight: type: string description: "Font weight" example: "500" color: type: string description: "Font color (possibility to indicate in HEX or words)" example: "#000/black" error: type: object description: "Error font configuration" properties: color: type: string description: "Font color (possibility to indicate in HEX or words)" example: "#000/black" weight: type: string description: "Grubość czcionki" example: "500" agreement: type: object description: "Configuring the font for the TOS (Terms Of Services) field" properties: family: type: string description: "Font family" example: "Impact,Charcoal,sans-serif" color: type: string description: "Font color (possibility to indicate in HEX or words)" example: "#000/black" size: type: string description: "Font size" example: "24px" weight: type: string description: "Font weight" default: "500" example: "500" link: type: string description: "Determines the font color of the link to the regulations and information obligation (can be indicated in HEX or in words)" example: "#000/black" visited: type: string description: "Determines the font color of the link to the regulations and information obligation that has already been visited (can be indicated in HEX or in words)" example: "#000/black" active: type: string description: "Determines the font color of the link to the regulations and information obligation, which the mouse cursor is currently on (can be indicated in HEX or in words)" example: "#000/black" focus: type: object description: "Font configuration when activating an item" properties: color: type: string description: "Font color (possibility to indicate in HEX or words)" example: "#000/black" weight: type: string description: "Font weight" example: "500" placeholders: type: object description: "Font configuration for text visible in individual element" properties: color: type: string description: "Font color (possibility to indicate in HEX or words)" example: "#000/black" weight: type: string description: "Font weight" example: "500" colors: type: object description: "Object that modifies the font color for a particular element" properties: card: type: string description: "Font color in card element" default: "#000/black" example: "#000/black" cvv: type: string description: "Font color in cvv element" default: "#000/black" example: "#000/black" exp: type: string description: "Font color in expiry date of card element" default: "#000/black" example: "#000/black" cardholder: type: string description: "Font color in cardholder element" default: "#000/black" example: "#000/black" loader: type: object description: "Loader color" properties: primary: type: string description: "Main color, static element" default: "#000/black" example: "#000/black" secondary: type: string description: "Color of moving element" default: "#000/black" example: "#000/black" border: type: object description: "Object that modifies the edge for a particular element" properties: card: type: object description: "Edge styles for card element" properties: type: type: string description: "Edge Type" example: "solid" color: type: string description: "Edge Color" example: "#000/black" width: type: string description: "Edge Thickness" example: "15px" radius: type: string description: "Edge rounding" example: "15px" cvv: type: object description: "Edge styles for cvv element" properties: type: type: string description: "Edge Type" example: "solid" color: type: string description: "Edge Color" example: "#000/black" width: type: string description: "Edge Thickness" example: "15px" radius: type: string description: "Edge rounding" example: "15px" exp: type: object description: "Edge styles for Expiry Date element" properties: type: type: string description: "Edge Type" example: "solid" color: type: string description: "Edge Color" example: "#000/black" width: type: string description: "Edge Thickness" example: "15px" radius: type: string description: "Edge rounding" example: "15px" form: type: object description: "Edge styles for form element" properties: type: type: string description: "Edge Type" example: "solid" color: type: string description: "Edge Color" example: "#000/black" width: type: string description: "Edge Thickness" example: "15px" radius: type: string description: "Edge rounding" example: "15px" cardholder: type: object description: "Border styles for tabholder element" properties: type: type: string description: "Edge Type" example: "solid" color: type: string description: "Edge Color" example: "#000/black" width: type: string description: "Edge Thickness" example: "15px" radius: type: string description: "Edge rounding" example: "15px" agreement_checkbox: type: object description: "Object that modifies the colors of TOS (Terms Of Services) checkbox." properties: color: type: string description: "The color of the checkbox border" example: "#000/black" colorInside: type: string description: "The color of the checkbox background" example: "#000/black" colorSelected: type: string description: "The color of the checkbox when selected" example: "#000/black" width: type: string description: "The width and height of the checkbox" example: "15px" background: type: object description: "Object that modifies the background color of a particular element" properties: card: type: object description: "Background color for card element" properties: color: type: string description: "Background color" example: "#000/black" cvv: type: object description: "Background color for CVV element" properties: color: type: string description: "Background color" example: "#000/black" exp: type: object description: "Background color for Expiry Date element" properties: color: type: string description: "Background color" example: "#000/black" form: type: object description: "Background color for form element" properties: color: type: string description: "Background color" example: "#000/black" cardholder: type: object description: "Background color for card holder element" properties: color: type: string description: "Kolor tła" example: "#000/black" buttons: type: object description: "Object used for generating buttons with relevant styling. By default, the form gets generated without buttons. If you want the buttons to be visible, you must indicate them." properties: tokenize: type: object description: "Button edges, labels and backgrounds styles" properties: label: type: string description: "Text visible on button" example: "Save card and pay" backgroundColor: type: string description: "Button background color" example: "#000/black" border: type: object description: "Button Edge Styles" properties: type: type: string description: "Edge Type" example: "solid" color: type: string description: "Edge Color" example: "#000/black" width: type: string description: "Edge Thickness" example: "15px" radius: type: string description: "Edge rounding" example: "15px" tokenize_temporary: type: object description: "Button edges, labels and backgrounds styles" properties: label: type: string description: "Text visible on button" example: "Save card and pay" backgroundColor: type: string description: "Button background color" example: "#000/black" border: type: object description: "Button Edge Styles" properties: type: type: string description: "Edge Type" example: "solid" color: type: string description: "Edge Color" example: "#000/black" width: type: string description: "Edge Thickness" example: "15px" radius: type: string description: "Edge rounding" example: "15px" required: - label przelewy24_new: required: - merchantId - sessionId - sign properties: merchantId: type: integer description: "Merchant identification number" sessionId: type: string description: "Unique identifier from merchant's system" sign: type: string description: Parameters checksum calculated using sha384
IMPORTANT!:
in case json_encode function is used, the following attributes should be added
"JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES" userId: type: string description: "User ID in the merchant's system" type: object clear_new: properties: card: type: integer description: "Clearing the card number field" cvv: type: string description: "Clearing the CVV/CVC field" exp: type: string description: "Clear the card expiration date field" cardholder: type: string description: "Clearing the first name and last name fields" type: object eventLoading: properties: data: type: object $ref: "#/components/schemas/eventLoadingData" eventLoadingData: properties: p24: type: boolean description: "Indication of the message addressee" type: type: string description: "Indication of message type" example: "loading" eventStart: properties: data: type: object $ref: "#/components/schemas/eventStartData" eventStartData: properties: p24: type: boolean description: "Indication of the message addressee" type: type: string description: "Indication of message type" example: "start" eventReady: properties: data: type: object $ref: "#/components/schemas/eventReadyData" eventReadyData: properties: p24: type: boolean description: "Indication of the message addressee" type: type: string description: "Indication of message type" example: "start" status: type: boolean description: "Indicating whether the form is completed correctly and the button can be activated" example: true buttons: type: array description: "Indication of which button is affected by the status" items: type: string enum: - temporary - permanent - temporary,permanent eventSuccess: properties: data: type: object $ref: "#/components/schemas/eventSuccessData" eventSuccessData: properties: p24: type: boolean description: "Indication of the message addressee" type: type: string description: "Indication of message type" example: "success" data: type: object $ref: "#/components/schemas/eventSuccessDataData" eventSuccessDataData: properties: cardType: type: string description: "Indication of card type" example: Visa bank: type: string description: "Indication on the card issuer's bank" example: "Bank Polska Kasa Opieki S.A. (Bank Pekao Sa)" refId: type: string description: "Indication of the id that will be used to charge the Payer's card" example: "G7891BF3-F04CB264-8B294H9E-1834D8AC" bin: type: integer description: "Indication on bin of stored card" example: "512345" mask: type: string description: "Indication on last4 saved card" example: "XXXX XXXX XXXX 2122" cardDate: type: string description: "Indication of the expiration date of the stored card (MMYYY)" example: "122024" hash: type: string description: "Indication of the hash of the stored card" example: "a5fe3eb65615e7db2c55623f30675531b05cd" cardCountry: type: string description: "Indication of the card's country of issue" example: "PL" tokenization: type: string description: "Indication of card recording type" example: "permanent" eventFail: properties: data: type: object $ref: "#/components/schemas/eventFailData" eventFailData: properties: p24: type: boolean description: "Indication of the message addressee" type: type: string description: "Indication of message type" example: "fail" error: type: array description: "An indication of the type of error" items: type: string example: "invalidCardNumber" NetworkTokenNotification: type: object properties: refid: type: string description: Reference number for making debits during card transactions example: "BDA8DF2315F17426D1279776DE1E032" token_status: type: string description: Current token status example: "active" enum: - active - suspended - cancelled tokenExpire: allOf: - $ref: "#/components/schemas/NetworkTokenNotificationTokenExpire" card_art: allOf: - $ref: "#/components/schemas/NetworkTokenNotificationCardArt" card_logotype: allOf: - $ref: "#/components/schemas/NetworkTokenNotificationCardLogotype" card: allOf: - $ref: "#/components/schemas/NetworkTokenNotificationCard" NetworkTokenNotificationTokenExpire: type: object description: Data on the validity of the token properties: month: type: integer description: Month example: 2 year: type: integer description: Year example: 2028 NetworkTokenNotificationCardArt: type: object description: "Card appearance data.
Submission of the object depends on the data received from the card organizations." properties: width: type: integer description: Recommended card width in px example: 1536 height: type: integer description: Recommended card height in px example: 960 url: type: string description: Link to download art card example: https://card-art/combined-image-asset/MyBank.png NetworkTokenNotificationCardLogotype: type: object description: "Card logo data.
Submission of the object depends on the data received from the card organizations." properties: width: type: integer description: Recommended width of the logo in px example: 100 height: type: integer description: Recommended height of the logo in px example: 100 url: type: string description: "Link to download the card's logo" example: https://card-logotype/combined-image-asset/MyBank.png NetworkTokenNotificationCard: type: object description: "Card data.
The object is sent if any of the following parameters change" properties: bin: type: string description: BIN value of the card example: "564125" mask: type: string description: Card mask example: "XXXX XXXX XXXX 1101" expire_date: allOf: - $ref: "#/components/schemas/NetworkTokenNotificationCardExpireDate" NetworkTokenNotificationCardExpireDate: type: object description: Card expiry data properties: month: type: integer description: Month example: 10 year: type: integer description: Year example: 2025 render_new: required: - type - id properties: type: type: string enum: - form description: "Form type" id: type: string example: "#card-form-block" description: "ID of the block in which the iFrame will be generated" options: type: object description: "Additional form styling options" # $ref: "#/components/schemas/renderOptions" type: object renderOptions: properties: lang: type: string description: "Default form language according to ISO 639-1 standard" default: "pl" loader: type: boolean description: "Indicate whether to show loader when building form" default: false errorMessage: type: boolean description: "Indicate whether to show an error if the Payer completes the form incorrectly" default: false transactions: type: object description: "Additional transaction data" properties: amount: type: integer description: "Transaction amount expressed in lowest currency unit, e.g. 1.23 PLN = 123" example: 1000 currency: type: string description: "Transaction currency in accordance with ISO" example: "PLN" channel: type: string description: "Indicate which payment channels are to be available on the form
1 - cards" example: 1 enum: 1 c2p: type: boolean description: 'Available Click to Pay payment in form.
Click to Pay is an extension of the current card payment method, allowing card details to be stored in one secure place - the payer profile. Read more
IMPORTANT!:
There will be a blocking of card enrollment in permanent mode (e.g., for recurring payments) if the payer logs his profile in Click to Pay.
' default: false psu: type: object description: "Additional data about the Payer" properties: email: type: string description: "Email Payer" example: "Jan.Kowalski@gmail.com" size: type: object description: "Object that modifies the size of the iFrame" properties: width: type: string minimum: 360px description: 'Width
IMPORTANT!:
Sending less than the minimum value will cause a form generation error. In such a situation, a fail event will be sent.
' default: "370px" height: type: string description: "The height of the iFrame. By default, it will adjust to the content presented in the iFrame" default: "638px" agreement: type: object description: "Object responsible for visibility of Przelewy24 regulations" properties: contentEnabled: type: object description: "Object that modifies the visibility of elements" properties: enabled: type: boolean description: "Indicate whether the rules of Przelewy24 are to be displayed" example: true checkboxEnabled: type: boolean description: "Indication of whether the displayed regulations require confirmation by the Payer" example: true TOSLanguage: type: string deprecated: true description: "Defines in which language the text of the terms of service in ISO 639-1 will be displayed." default: "pl" agreement_save_card: type: object description: "Object responsible for visibility of Merchant's regulations" properties: contentEnabled: type: object description: "Object that modifies the visibility of elements" properties: enabled: type: boolean description: "Indicate whether Merchant's regulations are to be displayed" example: true checkboxEnabled: type: boolean description: 'Indicate whether the displayed regulations require confirmation by the Payer
IMPORTANT!:
With Click to Pay enabled, it is not possible to present Merchant''s terms and conditions without requiring the Payer to confirm them (no checkbox). Attempting to set this up will result in a form generation error. A fail event will be returned. For the moment, the Payer can save the card either to Click to Pay or with Merchant.
' example: true labels: type: object description: "Text modification object visible as label of fields" properties: cardholder: type: string maximum: 40 chars description: 'Text visible as a cardholder field label
IMPORTANT!:
Send more than the maximum value will cause a form generation error. In this situation, a fail event will be passed.
' default: "Name and surname" example: "Name and surname of the cardholder " card: type: string maximum: 40 chars description: 'Text visible as label of card number field
IMPORTANT!:
Send more than the maximum value will cause a form generation error. In this situation, a fail event will be passed.
' default: "Card number" example: "Card number" cvv: type: string maximum: 30 chars description: 'Text visible as the label of the field of CVV/CVC number of the card
IMPORTANT!:
Send more than the maximum value will cause a form generation error. In this situation, a fail event will be passed.
' default: "CVV/CVC code" example: "CVV/CVC" exp: type: string maximum: 30 chars description: 'Text visible as label of card expiration date field
IMPORTANT!:
Send more than the maximum value will cause a form generation error. In this situation, a fail event will be passed.
' default: "Expiry date" example: "MM/RR" placeholders: type: object description: "Object that modifies the text visible in each element" properties: card: type: string description: "Text visible in the card element" default: "0000 0000 0000 0000" example: "Enter your card number" cvv: type: string description: "Text visible in the cvv element" default: "123" example: "Enter your CVV/CVC" exp: type: string description: "Text visible in the expire date element" default: "MM/RR" example: "Enter your expire date" cardholder: type: string description: "Text visible in the cardholder element" default: "John Doe" example: "Enter the name and surname of the cardholder" buttons: type: object description: 'The object that enables the configuration of buttons in a card form.
IMPORTANT!:
By default, buttons are not available in iFrame.
' properties: tokenize: type: object description: 'The object responsible for configuring a button to permanently save card data, which in the future can be used for loads using another library Read more
IMPORTANT!:
At this moment there is no possibility to save permanent card data if the Payer will use Click to Pay. Work is in progress to provide such functionality.
' required: - label properties: label: type: string maximum: 30 chars description: 'The text shown on the button
IMPORTANT!:
Send more than the maximum value will cause a form generation error. In this situation, a fail event will be passed.
' example: "Enroll and pay" backgroundColor: type: string description: "Button background color" default: "#29323C" example: "#000/black" color: type: string description: "Text color on the button" default: "#FFFFFF" example: "#000/black" border: type: object description: "Button edge styles" properties: type: type: string description: "Edge type" example: "solid" color: type: string description: "Edge color" default: "#29323C" example: "#000/black" width: type: string description: "Edge thickness" default: "1px" example: "15px" radius: type: string description: "Edge rounding" default: "4px" example: "15px" tokenize_temporary: type: object description: 'Object responsible for configuring a button to temporarily save card data for later loading using another library Read more' required: - label properties: label: type: string maximum: 30 chars description: 'The text shown on the button
IMPORTANT!:
Send more than the maximum value will cause a form generation error. In this situation, a fail event will be passed.
' example: "Enroll card" backgroundColor: type: string description: "Button background color" default: "#29323C" example: "#000/black" color: type: string description: "Text color on the button" default: "#FFFFFF" example: "#000/black" border: type: object description: "Button edge styles" properties: type: type: string description: "Edge type" example: "solid" color: type: string description: "Edge color" default: "#29323C" example: "#000/black" width: type: string description: "Edge thickness" default: "1px" example: "15px" radius: type: string description: "Edge rounding" default: "4px" example: "15px" styles: type: object description: "Object that modifies form styles" properties: font: type: object description: "Object that modifies the font of the form" properties: basic: type: object description: "Font configuration relating to the whole form" properties: size: type: string description: "Size expressed in px, em, rem" default: "14px" example: "24px" family: type: string description: "Font family specified after the comma (without spaces). All Google fonts are supported." default: "Inter,Regular" example: "Impact,Charcoal,sans-serif" weight: type: string description: "Font thickness" default: "normal" example: "500" color: type: string description: "Font color (option to indicate in HEX or in words)" default: "#0000C7" example: "#000/black" error: type: object description: "Configure the font for the error" properties: color: type: string description: "Font color (option to indicate in HEX or in words)" default: "#BB1820" example: "#000/black" weight: type: string description: "Font thickness" default: "normal" example: "500" agreement: type: object description: "Configure the font for the TOS (Terms Of Services) field." properties: family: type: string description: "Font family specified after the comma (without spaces). All Google fonts are supported." default: "Inter,Regular" example: "Impact,Charcoal,sans-serif" color: type: string description: "Font color (option to indicate in HEX or in words)" default: "#00008A" example: "#000/black" size: deprecated: true type: string description: "Size" default: "10px" example: "24px" weight: type: string description: "Font thickness" default: "normal" example: "500" link: type: string description: "Specifies the font color of the link to the regulations and information obligation (possibility to indicate in HEX or in words)" default: "#29323C" example: "#000/black" visited: type: string description: "Specifies the font color of the link to the regulations and information obligation that has already been visited (option to indicate in HEX or in words)" default: "#29323C" example: "#000/black" active: type: string description: "Specifies the font color of the link to the regulations and information obligation on which the mouse cursor is just located (possibility to indicate in HEX or in words)" default: "#29323C" example: "#000/black" focus: type: object description: "Configure the font during element activation" properties: color: type: string description: "Font color (option to indicate in HEX or in words)" example: "#000/black" weight: type: string description: "Font thickness" example: "500" placeholders: type: object description: "Configure the font for the text visible in each element" properties: color: type: string description: "Font color (option to indicate in HEX or in words)" default: "#29323C" example: "#000/black" weight: type: string description: "Font thickness" default: "normal" example: "500" colors: type: object description: "Object that modifies the font color for an individual element." properties: card: type: string description: "Font color in the card element" default: "#29323C" example: "#000/black" cvv: type: string description: "Font color in the cvv element" default: "#29323C" example: "#000/black" exp: type: string description: "Font color in the exp element" default: "#29323C" example: "#000/black" cardholder: type: string description: "Font color in the cardholder element" default: "#29323C" example: "#000/black" loader: type: object description: "Loadera color" properties: primary: type: string description: "Main color, static element" example: "#000/black" secondary: type: string description: "Color of the moving element" example: "#000/black" border: type: object description: "Obiekt modyfikujący krawędź dla poszczególnego elementu" properties: basic: type: object description: "Edge modification object for a specific element" properties: type: type: string description: "Edge type" example: "solid" color: type: string description: "Edge color" example: "#000/black" width: type: string description: "Edge thickness" example: "15px" radius: type: string description: "Edge rounding" example: "15px" form: type: object description: "Edge styles for the form element" properties: type: type: string description: "Edge type" example: "solid" color: type: string description: "Edge color" example: "#000/black" width: type: string description: "Edge thickness" example: "15px" radius: type: string description: "Edge rounding" example: "15px" agreement_checkbox: deprecated: true type: object description: "Object that modifies the colors for the TOS (Terms Of Services) checkbox." properties: color: type: string description: "Checkbox border color" example: "#000/black" colorInside: type: string description: "Background color of the checkbox" example: "#000/black" colorSelected: type: string description: "Color of the checkbox when selected" example: "#000/black" width: type: string description: "Width and height of the checkbox" example: "15px" checkboxes: type: object description: "Object that modifies the colors for the checkbox" properties: color: type: string description: "Checkbox border color" default: "#C9D1D6" example: "#000/black" colorInside: type: string description: "Background color of the checkbox" default: "#F6F9FC" example: "#000/black" colorSelected: type: string description: "Color of the checkbox when selected" default: "#0000ED" example: "#000/black" width: type: string description: "Width and height of the checkbox" default: "16px" example: "15px" background: type: object description: "Object that modifies the background color for an individual element" properties: basic: type: object description: "Background color for all input type elements" properties: color: type: string description: "Background color" default: "#F6F9FC" example: "#000/black" form: type: object description: "Background color for the form element" properties: color: type: string description: "Background color" default: "#F6F9FC" example: "#000/black" additional: type: object description: "Additional configuration of padding and margin for individual form elements" properties: inputs: type: object description: "Applies to all text inputs in the form " properties: paddingTop: type: string example: "10px" description: "Specifies the internal spacing between the top edge of the element and its content." paddingRight: type: string example: "10px" description: "Specifies the internal spacing between the right edge of the element and its content." paddingBottom: type: string example: "10px" description: "Specifies the internal spacing between the bottom edge of the element and its content." paddingLeft: type: string example: "10px" description: "Specifies the internal spacing between the left edge of the element and its content." marginTop: type: string example: "10px" description: "Specifies the external spacing between the top edge of the element and surrounding elements" marginRight: type: string example: "10px" description: "Specifies the external spacing between the right edge of the element and surrounding elements" marginBottom: type: string example: "10px" description: "Specifies the external spacing between the bottom edge of the element and surrounding elements" marginLeft: type: string example: "10px" description: "Specifies the external spacing between the left edge of the element and surrounding elements" labels: type: object description: "Applies to all form labels" properties: paddingTop: type: string example: "10px" description: "Specifies the internal spacing between the top edge of the element and its content." paddingRight: type: string example: "10px" description: "Specifies the internal spacing between the right edge of the element and its content." paddingBottom: type: string example: "10px" description: "Specifies the internal spacing between the bottom edge of the element and its content." paddingLeft: type: string example: "10px" description: "Specifies the internal spacing between the left edge of the element and its content." marginTop: type: string example: "10px" description: "Specifies the external spacing between the top edge of the element and surrounding elements" marginRight: type: string example: "10px" description: "Specifies the external spacing between the right edge of the element and surrounding elements" marginBottom: type: string example: "10px" description: "Specifies the external spacing between the bottom edge of the element and surrounding elements" marginLeft: type: string example: "10px" description: "Specifies the external spacing between the left edge of the element and surrounding elements" buttons: type: object description: "Applies to all form buttons" properties: paddingTop: type: string example: "10px" description: "Specifies the internal spacing between the top edge of the element and its content." paddingRight: type: string example: "10px" description: "Specifies the internal spacing between the right edge of the element and its content." paddingBottom: type: string example: "10px" description: "Specifies the internal spacing between the bottom edge of the element and its content." paddingLeft: type: string example: "10px" description: "Specifies the internal spacing between the left edge of the element and its content." marginTop: type: string example: "10px" description: "Specifies the external spacing between the top edge of the element and surrounding elements" marginRight: type: string example: "10px" description: "Specifies the external spacing between the right edge of the element and surrounding elements" marginBottom: type: string example: "10px" description: "Specifies the external spacing between the bottom edge of the element and surrounding elements" marginLeft: type: string example: "10px" description: "Specifies the external spacing between the left edge of the element and surrounding elements" form: type: object description: "Applies to the entire form" properties: paddingTop: type: string example: "10px" description: "Specifies the internal spacing between the top edge of the element and its content." paddingRight: type: string example: "10px" description: "Specifies the internal spacing between the right edge of the element and its content." paddingBottom: type: string example: "10px" description: "Specifies the internal spacing between the bottom edge of the element and its content." paddingLeft: type: string example: "10px" description: "Specifies the internal spacing between the left edge of the element and its content." marginTop: type: string example: "10px" description: "Specifies the external spacing between the top edge of the element and surrounding elements" marginRight: type: string example: "10px" description: "Specifies the external spacing between the right edge of the element and surrounding elements" marginBottom: type: string example: "10px" description: "Specifies the external spacing between the bottom edge of the element and surrounding elements" marginLeft: type: string example: "10px" description: "Specifies the external spacing between the left edge of the element and surrounding elements" SIMPGetTransactionBySessionId200: properties: data: type: array items: $ref: "#/components/schemas/SIMPTransactionBySessionIdResponse200" responseCode: type: number default: 0 type: object SIMPTransactionBySessionIdResponse200: properties: statement: type: array description: Transfer title orderId: type: integer format: int64 description: Transaction ID sessionId: type: string description: Transaction ID assigned by Merchant status: type: integer description: Transaction status. 0 - no payment, 1 - advance payment, 2 - payment made, 3 - payment returned amount: type: integer description: Transaction amount currency: type: string default: PLN description: Transaction currency date: type: string description: Transaction registration date dateOfTransaction: type: string description: Date of payment clientEmail: type: string description: Customer's e-mail accountMD5: type: string description: Customer's hashed bank account number paymentMethod: type: integer description: Payment method ID description: type: string description: Transaction description clientName: type: string description: Customer's first name and surname clientAddress: type: string description: Customer's address clientCity: type: string description: Customer's city clientPostcode: type: string description: Customer's zip code batchId: type: integer description: Batch number in which the transaction was paid fee: type: string description: Commission SIMPConflict: properties: error: type: string example: Conflict code: type: number example: 409 SIMPResponse400: properties: error: type: string example: Invalid simpClientId code: type: number example: 400 SIMPTransactionRegistrationResponse: properties: data: properties: token: type: string description: Token iban: type: string description: IBAN example: PL59105000996912000444444341 companyName: type: string description: Company name type: object responseCode: type: string default: "0" TransactionRegistrationSIMPBody: type: object properties: merchantId: name: merchantId in: formData description: Merchant identification number type: integer posId: name: posId in: formData description: Shop identification number (defaults to merchant ID) type: integer sessionId: name: sessionId in: formData description: Unique identifier from merchant's system type: string maxLength: 100 amount: name: amount in: formData description: Transaction amount expressed in lowest currency unit, e.g. 1.23 PLN = 123 type: integer currency: name: currency in: formData description: Currency compatible with ISO, e.g. PLN type: string maxLength: 3 default: PLN description: name: description in: formData description: Transaction description type: string maxLength: 1024 email: name: email in: formData description: Customer's e-mail type: string maxLength: 50 client: name: client in: formData description: Customer's first name and surname type: string maxLength: 40 address: name: address in: formData description: Customer's address type: string maxLength: 80 zip: name: zip in: formData description: Customer's postal code type: string maxLength: 10 city: name: city in: formData description: Customer's city type: string maxLength: 50 country: name: country in: formData description: Country codes compatible with ISO, e.g. PL, DE, etc. type: string maxLength: 2 default: PL phone: name: phone in: formData description: "Customer's telephone in the following format: 481321132123" type: string maxLength: 12 language: name: language in: formData description: "One of following language codes according to ISO 639-1: bg, cs, de, en, es, fr, hr, hu, it, nl, pl, pt, se, sk, ro" type: string maxLength: 2 default: pl method: name: method in: formData description: Payment method ID. List of payment methods provided in the panel or available through API type: integer urlReturn: name: urlReturn in: formData description: URL address to which customer will be redirected when transaction is complete type: string maxLength: 250 urlStatus: name: urlStatus in: formData description: URL address to which transaction status will be send type: string maxLength: 250 timeLimit: name: timeLimit in: formData description: Time limit for transaction process, 0 - no limit, max. 99 (in minutes) type: integer channel: name: channel description: " 1 - card + ApplePay + GooglePay, 2 - transfer, 4 - traditional transfer, 8 - N/A, 16 - all 24/7 – makes available all payment methods, 32 - use pre-payment, 64 – only pay-by-link methods, 128 – instalment payment forms, 256 – wallets, 4096 - card, 8192 - blik, 16384 - all methods except blik

To activate the specific channels, their values should be summed up.

Example: transfer and traditional transfer: channel=6" type: integer enum: - 1 - 2 - 4 - 8 - 16 - 32 - 64 - 128 - 256 - 4096 - 8192 - 16384 waitForResult: type: boolean description: Parameter determines wheter a user should wait for result of the transaction in the transaction service and be redirected back to the shop upon receiving confirmation or be redirected back to the shop immediately after payment. Read more regulationAccept: type: boolean description: 'Acceptance of Przelewy24 regulations:
false – display consent on p24 website (default),
true – consent granted, do not display.
In case the „true” parameter is sent, the consent – worded as follows – must be displayed on the Partner’s website: „I hereby state that I have read the [regulations](https://www.przelewy24.pl/regulamin) and [information obligation](https://www.przelewy24.pl/obowiazekinformacyjny) of ”Przelewy24”.
Under words regulations and information obligation there must be hyperlinks redirecting to websites with these documents. The checkbox must not be ticked by default.' default: false shipping: name: shipping in: formData description: Delivery cost type: integer transferLabel: name: transferLabel in: formData description: "Description forwarded to transfer's description (not in every payment methods). A parameter can contain values only ​​in a range [a-z A-Z 0-9 ęółśążźćńĘÓŁŚĄŻŹĆŃ . /\ :- ]" type: string maxLength: 20 mobileLib: name: mobileLib description: The parameter is necessary while using SDK libraries. The value passed in mobileLib parameter is always 1 and value passed in sdkVersion determines which version of library should be used. type: integer enum: - 1 sdkVersion: name: sdkVersion in: formData description: Version of mobile library. Determines if transaction is mobile. type: string maxLength: 10 sign: name: sign in: formData type: string maxLength: 100 description:
Checksum of parameters:
{"sessionId":"str","merchantId":int,"amount":int,"currency":"str","crc":"str"}

calculated with the use of sha384

IMPORTANT!:
in case json_encode function is used, the following attributes should be added
"JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES" encoding: name: encoding in: formData description: "Coding system for characters sent: ISO-8859-2, UTF-8, Windows-1250" type: string maxLength: 15 methodRefId: name: methodRefId in: formData description: Special parameter for some payment flows e.g. BLIK and Card one-click. type: string maxLength: 250 cardData: type: object allOf: - $ref: "#/components/schemas/cardData" cart: description: cart items: $ref: "#/components/schemas/CartParameters" additional: type: object description: Set of additional information about the transaction or the payer allOf: - $ref: "#/components/schemas/AdditionalProperties" simpCountryCode: type: string maxLength: 2 description: Country code according to ISO 3166 to create an IBAN number. Currently, the only one supported is PL. simpClientId: type: string maxLength: 8 description: Gives the possibility to assign an individual ID to the customer. After completing this parameter, the IBAN number in its last 8 digits, contains the specified ID (e.g. 59 1050 XXXX XXXX 1234 5678 for simpClientId = 12345678). required: - merchantId - posId - sessionId - amount - currency - description - email - country - language - urlReturn - ttl - sign - simpCountryCode TransactionVerificationResponse: properties: data: properties: status: type: string default: success type: object responseCode: type: number default: 0 PaymentMethodsResponseMethod: properties: name: type: string description: Name of payment method id: type: integer description: Payment method ID group: type: string description: "Possible values: FastTransfers, Blik, eTransfer, Credit Card, Installments, Wallet, Foreign, PrePayment, TraditionalTransfer, Another. SplitPayment" subgroup: type: string description: "Possible values: PBL, Blik, BlikWhiteLabel, eTransfer, Credit Card, Installments, Wallet, Foreign, PrePayment, TraditionalTransfer, Another, SplitPayment, PIS" status: type: boolean example: true description: Specifies whether a given method is active imgUrl: type: string description: Link to graphics mobileImgUrl: type: string description: Link to mobile graphics mobile: type: boolean example: true description: Is the payment mobile method available? availabilityHours: $ref: "#/components/schemas/availabilityHours" availabilityHours: type: object description: An object containing information about the method's availability hours (methods with ID 177, 178 return bool true/false information) properties: mondayToFriday: type: string saturday: type: string sunday: type: string TransactionVerificationBody: properties: merchantId: description: Merchant ID type: integer posId: description: Shop identification number (defaults to merchant ID) type: integer sessionId: description: Unique identifier from merchant's system type: string maxLength: 100 amount: description: Transaction amount which format is presented as amount in lowest currency unit, e.g. 1.23 PLN = 123 type: integer currency: description: Currency type: string maxLength: 3 default: "PLN" orderId: description: Id of an order assigned by P24 type: integer format: int64 sign: description: Checksum of parameters:
{"sessionId":"str","orderId":int,"amount":int,"currency":"str","crc":"str"}

calculated with the use of sha384

IMPORTANT!:
in case json_encode function is used, the following attributes should be added
"JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES" type: string required: - posId - sessionId - amount - currency - orderId - sign - merchantId AvailabilityHoursResponse: properties: mondayToFriday: type: string saturday: type: string default: unavailable sunday: type: string TransactionRequestBody1: type: object properties: merchantId: name: merchantId in: formData description: Merchant identification number type: integer posId: name: posId in: formData description: Shop identification number (defaults to merchant ID) type: integer sessionId: name: sessionId in: formData description: Unique identifier from merchant's system type: string maxLength: 100 amount: name: amount in: formData description: Transaction amount expressed in lowest currency unit, e.g. 1.23 PLN = 123 type: integer currency: name: currency in: formData description: Currency compatible with ISO, e.g. PLN type: string maxLength: 3 default: PLN description: name: description in: formData description: Transaction description type: string maxLength: 1024 email: name: email in: formData description: Customer's e-mail type: string maxLength: 50 client: name: client in: formData description: Customer's first name and surname type: string maxLength: 40 address: name: address in: formData description: Customer's address type: string maxLength: 80 zip: name: zip in: formData description: Customer's postal code type: string maxLength: 10 city: name: city in: formData description: Customer's city type: string maxLength: 50 country: name: country in: formData description: Country codes compatible with ISO, e.g. PL, DE, etc. type: string maxLength: 2 default: PL phone: name: phone in: formData description: "Customer's telephone in the following format: 481321132123" type: string maxLength: 12 language: name: language in: formData description: "One of following language codes according to ISO 639-1: bg, cs, de, en, es, fr, hr, hu, it, nl, pl, pt, se, sk, ro" type: string maxLength: 2 default: pl method: name: method in: formData description: Payment method ID. List of payment methods provided in the panel or available through API type: integer urlReturn: name: urlReturn in: formData description: URL address to which customer will be redirected when transaction is complete type: string maxLength: 250 urlStatus: name: urlStatus in: formData description: URL address to which transaction status will be send type: string maxLength: 250 urlNotify: name: urlNotify in: formData description: URL address to which transaction notifications will be sent type: string maxLength: 250 timeLimit: name: timeLimit in: formData description: Time limit for transaction process, 0 - no limit, max. 99 (in minutes) type: integer channel: name: channel description: " 1 - card + ApplePay + GooglePay, 2 - transfer, 4 - traditional transfer, 8 - N/A, 16 - all 24/7 – makes available all payment methods, 32 - use pre-payment, 64 – only pay-by-link methods, 128 – instalment payment forms, 256 – wallets, 4096 - card, 8192 - blik, 16384 - all methods except blik

To activate the specific channels, their values should be summed up.

Example: transfer and traditional transfer: channel=6" type: integer enum: - 1 - 2 - 4 - 8 - 16 - 32 - 64 - 128 - 256 - 4096 - 8192 - 16384 waitForResult: type: boolean description: Parameter determines wheter a user should wait for result of the transaction in the transaction service and be redirected back to the shop upon receiving confirmation or be redirected back to the shop immediately after payment. Read more regulationAccept: type: boolean description: 'Acceptance of Przelewy24 regulations:
false – display consent on p24 website (default),
true – consent granted, do not display.
In case the „true” parameter is sent, the consent – worded as follows – must be displayed on the Partner’s website: „I hereby state that I have read the [regulations](https://www.przelewy24.pl/regulamin) and [information obligation](https://www.przelewy24.pl/obowiazekinformacyjny) of ”Przelewy24”.
Under words regulations and information obligation there must be hyperlinks redirecting to websites with these documents. The checkbox must not be ticked by default.' default: false shipping: name: shipping in: formData description: Delivery cost type: integer transferLabel: name: transferLabel in: formData description: "Description forwarded to transfer's description (not in every payment methods). A parameter can contain values only ​​in a range [a-z A-Z 0-9 ęółśążźćńĘÓŁŚĄŻŹĆŃ . /\ :- ]" type: string maxLength: 20 mobileLib: name: mobileLib description: The parameter is necessary while using SDK libraries. The value passed in mobileLib parameter is always 1 and value passed in sdkVersion determines which version of library should be used. type: integer enum: - 1 sdkVersion: name: sdkVersion in: formData description: Version of mobile library. Determines if transaction is mobile. type: string maxLength: 10 sign: name: sign in: formData type: string maxLength: 100 description:
Checksum of parameters:
{"sessionId":"str","merchantId":int,"amount":int,"currency":"str","crc":"str"}

calculated with the use of sha384

IMPORTANT!:
in case json_encode function is used, the following attributes should be added
"JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES" encoding: name: encoding in: formData description: "Coding system for characters sent: ISO-8859-2, UTF-8, Windows-1250" type: string maxLength: 15 methodRefId: name: methodRefId in: formData description: Special parameter for some payment flows e.g. BLIK and Card one-click. type: string maxLength: 250 cardData: type: object allOf: - $ref: "#/components/schemas/cardData" cart: description: cart items: $ref: "#/components/schemas/CartParameters" additional: type: object description: Set of additional information about the transaction or the payer allOf: - $ref: "#/components/schemas/AdditionalProperties" required: - merchantId - posId - sessionId - amount - currency - description - email - country - language - urlReturn - ttl - sign AdditionalProperties: properties: shipping: type: object description: Additional shipping information properties: type: type: integer description: Type of shipment:
0 - courier
1 - delivery point
2 - parcel locker
3 - package in a shop enum: - 0 - 1 - 2 - 3 address: type: string description: 'Shipment address: street and number' zip: type: string description: Shipment zip code city: type: string description: Shipment city country: type: string description: Shipment country required: - type - address - zip - city - country PSU: type: object description: > Payment Service User
IMPORTANT!:
Object required when using methods blikChargeByCode or blikChargeByAlias. properties: IP: type: string description: IPv4 or IPv6 userAgent: type: string maxLength: 255 description: UserAgent is a string identifying the browser and operating system. TransactionRegistrationResponse: properties: data: properties: token: type: string type: object responseCode: type: number default: 0 cardData: type: object description: IN PREPARATION! An object containing card data discriminator: propertyName: transactionType mapping: recurring: "#/components/schemas/recurring" standard: "#/components/schemas/other2" initial: "#/components/schemas/other" 1click: "#/components/schemas/other2" properties: means: type: object properties: card: type: object properties: pan: type: string description: Payment card number (PAN - personal account number) expYear: type: integer description: The year in which the card expires expMonth: type: integer description: The month in which the card expires clientName: type: string description: Name and surname of the card holder securityCode: type: string description: CVV/CVC code required: - pan - expYear - expMonth - clientName referenceNumber: type: object properties: id: type: string description: Reference number (token assigned by P24) securityCode: type: string description: Security code required: - id schemeToken: type: object properties: pan: type: string description: Token number expYear: type: integer description: The year in which the card expires expMonth: type: integer description: The month in which the card expires securityCode: type: string description: Cryptogram eci: type: string description: The Electronic Commerce Indicator type: type: string description: Typ tokenu enum: - visaToken - mcToken - visaMobile - applepay - googlepay required: - pan - expYear - expMonth - type xPayPayload: type: object properties: payload: type: string description: Base64 encrypted payment payload type: type: string description: Payment type enum: - applepay - googlepay required: - payload - type transactionType: type: string description: > Transaction type:
- standard - standard transaction
- initial - 1click or recurring initialization transaction. Launched in SCA mode
- 1click - transaction with a saved card in the presence of the customer
- recurring - recurring transaction
required: - means - transactionType Transaction200Blik: properties: data: description: Array of objects related to the BLIK alias items: $ref: "#/components/schemas/BlikAlias200" responseCode: type: integer default: 0 recurring: description: recurring transaction allOf: - $ref: "#/components/schemas/cardData" properties: traceID: type: string description: "Initialization transaction reference number (required for recurring, if the following have been provided: card, schemeToken)" required: - traceID type: object other: description: recurring transaction allOf: - $ref: "#/components/schemas/cardData" - type: object type: object other2: description: recurring transaction allOf: - $ref: "#/components/schemas/cardData" - type: object properties: 3dsMode: type: string default: LSRequired description: > Tryb autoryzacji 3D Secure:
- LSRequired - transaction with submitted Liability Shift requirement
- SCA - transaction with submitted Liability Shift requirement + Force
- lowValue - transaction with Low_Value exception sent
- tra - transaction with Transaction_Risk_Analysys exception thrown
- exemption - the default RTS exception is thrown
- noPreference - transaction without any preferences (also without Liability Shift requirement)
enum: - LSRequired - SCA - lowValue - tra - exemption - noPreference required: - 3dsMode type: object BlikAlias200: properties: value: type: string description: alias value type: type: string description: alias type status: type: string description: alias status expirationDate: type: string description: alias expiration date InvalidInputData: properties: error: type: string default: Invalid input data example: Invalid input data code: type: number default: 400 example: 400 UnauthorizedResponse: properties: error: type: string default: Incorrect authentication example: Incorrect authentication code: type: number default: 401 example: 401 TransactionTestAccess200: properties: data: type: boolean default: true error: type: string PaymentMethodsResponse: properties: name: type: string description: Name of payment method id: type: integer description: Payment method ID status: type: boolean description: Specifies whether a given method is active imgUrl: type: string description: Link do grafiki mobileImgUrl: type: string description: Link do grafiki mobilnej mobile: type: boolean description: Czy forma płatności jest dostępna mobilnie availabilityHours: $ref: "#/components/schemas/AvailabilityHoursResponse" BasicResponse: properties: data: type: array default: Payment methods not found items: type: string default: Payment methods not found responseCode: default: 404 type: number TransactionRefundJsonRequestBody: properties: requestId: type: string description: Individual request ID maxLength: 45 refunds: type: array items: $ref: "#/components/schemas/RefundRequestArrayDataBasic" refundsUuid: type: string description: Individual ID for a correct refund request in the merchant’s system maxLength: 35 urlStatus: type: string description: Notification address for the refund batch transferred required: - requestId - refunds - refundsUuid RefundRequestArrayDataBasic: properties: orderId: type: integer format: int64 description: Transaction order ID from Przelewy24 sessionId: type: string description: Transaction session ID from the Partner’s system amount: type: integer description: Amount of refund description: type: string description: Refund description visible in transfer details maxLength: 35 type: object required: - orderId - sessionId - amount TransactionRefund201: properties: data: type: array items: $ref: "#/components/schemas/TransactionRefund201Item" responseCode: type: number TransactionRefund201Item: properties: orderId: type: integer format: int64 description: Transaction order ID from Przelewy24 sessionId: type: string description: Transaction session ID from the Partner’s system amount: type: integer description: Amount of refund description: type: string description: Transaction description status: type: boolean example: true description: Was refund attempt successful? message: type: string example: success description: Text description of successful refund InvalidInputDataRefund: properties: error: type: string description: Error message. Possbile values:

"Invalid input parameters" - in case incorrect parameters or their values,

"Request already exists" - in case the refund was already created,

"Concurrent call" - in case the refund is multiplied. code: type: number default: 400 example: 400 TransactionRefund409: properties: error: type: array items: $ref: "#/components/schemas/TransactionRefund409Item" code: type: integer example: 409 TransactionRefund409Item: properties: orderId: type: integer format: int64 description: Transaction order ID from Przelewy24 sessionId: type: string description: Transaction session ID from the Partner’s system amount: type: integer description: Amount of refund description: type: string description: Refund description status: type: boolean example: false description: Was refund attempt successful? message: type: string example: The amount of refund exceeds available amount for the transaction description: Error message. Possible values:

"Transaction not found" - in case the transaction is not found,

"Transaction in wrong status - cannot refund" - in case the transaction is in wrong status, therefore the refundis not possible,

"Insufficient funds available" - in case there are not enough funds to execute the refund,

"The amount of refund exceeds available amount for the transaction" - in case the amount of the refund request exceeds available amount for the transaction Refund500Response: properties: error: type: string example: Unknown error description: Error message code: type: integer example: 500 default: 500 TransactionRegisterOfflineRequest: properties: token: type: string TransactionRegistrationOffline200: properties: data: properties: orderId: type: integer format: int64 description: Unique transaction ID assigned by P24 sessionId: type: string description: Unique ID assigned by the merchant’s system amount: type: integer description: Transaction amount statement: type: string description: Full payment title iban: type: string description: Number of account for payment ibanOwner: type: string description: Name of payment recipient ibanOwnerAddress: type: string description: Address of payment recipient type: object responseCode: type: number example: 0 TransactionRegistrationOffline409: properties: error: type: string default: Unable to create offline transaction example: Unable to create offline transaction code: type: number example: 409 ErrorCodeResponse: properties: error: type: string example: Undefined error default: Undefined error code: type: integer example: 500 default: 500 type: object TranstactionSplitPayment: required: - merchantId - posId - sessionId - amount - currency - description - email - country - language - urlReturn - sign - splitPaymentDetails - description properties: merchantId: name: merchantId in: formData description: Merchant identification number type: integer posId: name: posId in: formData description: Shop identification number (defaults to merchant ID) type: integer sessionId: name: sessionId in: formData description: Unique identifier from merchant's system type: string maxLength: 100 amount: name: amount in: formData description: Transaction amount expressed in lowest currency unit, e.g. 1.23 PLN = 123 type: integer currency: name: currency in: formData description: Currency compatible with ISO, e.g. PLN type: string maxLength: 3 default: PLN description: name: description in: formData description: Transaction description type: string maxLength: 1024 email: name: email in: formData description: Customer's e-mail type: string maxLength: 50 client: name: client in: formData description: Customer's first name and surname type: string maxLength: 40 address: name: address in: formData description: Customer's address type: string maxLength: 80 zip: name: zip in: formData description: Customer's postal code type: string maxLength: 10 city: name: city in: formData description: Customer's city type: string maxLength: 50 country: name: country in: formData description: Country codes compatible with ISO, e.g. PL, DE, etc. type: string maxLength: 2 default: PL phone: name: phone in: formData description: "Customer's telephone in the following format: 481321132123" type: string maxLength: 12 language: name: language in: formData description: "One of following language codes according to ISO 639-1: bg, cs, de, en, es, fr, hr, hu, it, nl, pl, pt, se, sk, ro" type: string default: pl maxLength: 2 method: name: method in: formData description: Payment method ID. List of payment methods provided in the panel or available through API type: integer urlReturn: name: urlReturn in: formData description: URL address to which customer will be redirected when transaction is complete type: string maxLength: 250 urlStatus: name: urlStatus in: formData description: URL address to which transaction status will be send type: string maxLength: 250 timeLimit: name: timeLimit in: formData description: Time limit for transaction process, 0 - no limit, max. 99 (in minutes) type: integer channel: name: channel in: formData description: " 1 - card + ApplePay + GooglePay, 2 - transfer, 4 - traditional transfer, 8 - N/A, 16 - all 24/7 – makes available all payment methods, 32 - use pre-payment, 64 – only pay-by-link methods, 128 – instalment payment forms, 256 – wallets, 4096 - card, 8192 - blik, 16384 - all methods except blik

To activate the specific channels, their values should be summed up.

Example: transfer and traditional transfer: channel=6" type: integer enum: - "1" - "2" - "4" - "8" - "16" - "32" - "64" - "128" - "256" - "4096" - "8192" - "16384" shipping: name: shipping in: formData description: Delivery cost type: integer transferLabel: name: transferLabel in: formData description: "Description forwarded to transfer's description (not in every payment methods). A parameter can contain values only ​​in a range [a-z A-Z 0-9 ęółśążźćńĘÓŁŚĄŻŹĆŃ . /\ :- ]" type: string maxLength: 20 sdkVersion: name: sdkVersion in: formData description: Version of mobile library. Determines if transaction is mobile. type: string maxLength: 10 sign: name: sign in: formData type: string maxLength: 100 description:
Checksum of parameters:
{"sessionId":"string","merchantId":int,"amount":int,"currency":"string","crc":"string"}

calculated with the use of sha384

IMPORTANT!:
in case json_encode function is used, the following attributes should be added
"JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES" encoding: name: encoding in: formData description: "Coding system for characters sent: ISO-8859-2, UTF-8, Windows-1250" type: string maxLength: 15 cart: description: cart items: $ref: "#/components/schemas/CartParameters" methodRefId: name: methodRefId in: formData description: Special parameter for some payment flows e.g. BLIK and Card one-click. type: string maxLength: 250 splitPaymentDetails: type: object properties: vatAmount: type: integer description: Kwota podatku VAT invoiceNumber: type: string description: Numer faktury nip: type: string description: Numer identyfikacji podatkowej iban: type: string description: Międzynarodowy numer rachunku bankowego IBAN (international bank account number) required: - vatAmount - invoiceNumber - nip CartParameters: description: Cart Parameters type: object required: - sellerId - sellerCategory properties: sellerId: type: string description: Shop ID on the part of Partner sellerCategory: type: string description: Shop category name: type: string description: Product name

Required for PayPal payment method description: type: string description: Product description

Required for PayPal payment method quantity: type: integer description: Product quantity

Required for PayPal payment method price: type: integer description: Product price

Required for PayPal payment method number: type: string description: Product number

Required for PayPal payment method TransactionRefundsInfoResponse: properties: data: $ref: "#/components/schemas/TransactionWithRefundsResponse" responseCode: type: number example: 0 TransactionWithRefundsResponse: properties: orderId: type: integer format: int64 sessionId: type: string amount: type: integer currency: type: string refunds: type: array items: $ref: "#/components/schemas/RefundsCollection" type: object RefundsCollection: properties: batchId: type: integer requestId: type: string date: type: string login: type: string description: type: string status: type: integer example: 3 default: 3 description: 1 - completed,
2 - pending,
3 - awaiting P24's acceptance,
4 - rejected amount: type: integer type: object TransactionNotFoundResponse: properties: error: type: string default: Transaction not found example: Transaction not found responseCode: type: number default: 0 example: 0 TransactionBySessionIdSuccessResponse: properties: data: $ref: "#/components/schemas/TransactionBySessionIdResponse" responseCode: type: number default: 0 type: object TransactionBySessionIdResponse: properties: statement: type: string description: Transfer title orderId: type: integer format: int64 description: Transaction ID sessionId: type: string description: Transaction ID assigned by Merchant status: type: integer description: Transaction status. 0 - no payment, 1 - advance payment, 2 - payment made, 3 - payment returned amount: type: integer description: Transaction amount currency: type: string default: PLN description: Transaction currency date: type: string description: Transaction registration date dateOfTransaction: type: string description: Date of payment clientEmail: type: string description: Customer's e-mail accountMD5: type: string description: Customer's hashed bank account number paymentMethod: type: integer description: Payment method ID description: type: string description: Transaction description clientName: type: string description: Customer's first name and surname clientAddress: type: string description: Customer's address clientCity: type: string description: Customer's city clientPostcode: type: string description: Customer's zip code batchId: type: integer description: Batch number in which the transaction was paid fee: type: string description: Commission RecurringParams: type: object properties: token: type: string description: Token obtained during transaction registration request via transaction/register.

IMPORTANT!:
In order to correctly charge the payer using the blikChargeByCode method the PSU object must be sent in the additional object in the transaction/register request. blikCode: type: string description: 6-digit, one-time BLIK code generated in the app aliasValue: type: string description: Unique alias of the user which can be used to charge client's next transactions.

IMPORTANT!: Parameter required if a `recurring` object was sent in the request. aliasLabel: type: string description: Alias label displayed in the app.

IMPORTANT!: Parameter required if a `recurring` object was sent in the request. minLength: 5 maxLength: 35 recurring: type: object $ref: "#/components/schemas/RecurringParamsIn" required: - token - blikCode RecurringParamsIn: description: > An object containing information on BLIK recurring payment.

The recurring payment functionality is not enabled by default. Contact the Technical Service Department via contact form, in order to launch the service.
type: object discriminator: propertyName: type mapping: O: '#/components/schemas/RecurringParametersO' M: '#/components/schemas/RecurringParametersM' A: '#/components/schemas/RecurringParametersA' properties: type: type: string name: type enum: - M - A - O description: 'The type of recurring payment; allowed values: A, O, M' in: formData default: M expirationDate: type: string description: 'Allowed format: YYYY-MM-DD hh:mm:ss' frequency: type: string description: 'Frequency of the recurrency; value must fulfill regex: [1-9][0-9]{0,2}[DWMY])' totalLimitAmount: type: integer description: 'Maximum total amount that will be charged through the process' limitAmount: type: integer description: 'Maximum amount that will be charged in a single payment' totalLimitCount: type: integer description: 'Number of payments that will be issued in the whole process' minimumTime: type: boolean description: 'Parametr to control min flag' default: true availableBanks: description: 'Parameter to control the verification of whether the bank supports recursion. If set to false, it is not checked if the bank supports recursion.' default: true type: boolean RecurringParametersO: allOf: # - $ref: '#/components/schemas/RecurringParamsIn' - type: object properties: type: type: string name: type enum: - M - A - O description: 'Type of recurring payment; allowed values: A, O, M' in: formData expirationDate: type: string description: 'Allowed format: YYYY-MM-DD hh:mm:ss' availableBanks: description: 'Parameter to control the verification of whether the bank supports recursion. If set to false, it is not checked if the bank supports recursion.' default: true type: boolean initDate: type: string description: 'Allowed format: YYYY-MM-DD' required: - type RecurringParametersA: allOf: - $ref: '#/components/schemas/RecurringParamsIn' - type: object properties: type: type: string name: type enum: - M - A - O description: 'the type of recurring payment; allowed values: A, O, M' in: formData initDate: type: string description: 'Allowed format: YYYY-MM-DD' expirationDate: type: string description: 'Allowed format: YYYY-MM-DD hh:mm:ss' frequency: type: string description: 'Frequency of the recurrency; value must fulfill regex: [1-9][0-9]{0,2}[DWMY])' totalLimitAmount: type: integer description: 'Maximum total amount that will be charged through the process' limitAmount: type: integer description: 'Maximum amount that will be charged in a single payment' totalLimitCount: type: integer description: 'Number of payments that will be issued in the whole process' availableBanks: description: 'Parameter to control the verification of whether the bank supports recursion. If set to false, it is not checked if the bank supports recursion.' default: true type: boolean required: - initDate - totalLimitAmount - limitAmount - frequency - type RecurringParametersM: allOf: - $ref: '#/components/schemas/RecurringParamsIn' - type: object properties: type: type: string name: type enum: - A - O - M description: 'the type of recurring payment; allowed values: A, O, M' in: formData expirationDate: type: string description: 'Allowed format: YYYY-MM-DD hh:mm:ss' frequency: type: string description: 'Frequency of the recurrency; value must fulfill regex: [1-9][0-9]{0,2}[DWMY])' totalLimitAmount: type: integer description: 'Maximum total amount that will be charged through the process' limitAmount: type: integer description: 'Maximum amount that will be charged in a single payment' totalLimitCount: type: integer description: 'Number of payments that will be issued in the whole process' minimumTime: type: boolean description: 'Parametr to control min flag' default: true availableBanks: description: 'Parameter to control the verification of whether the bank supports recursion. If set to false, it is not checked if the bank supports recursion.' default: true type: boolean required: - type BlikChargeByCodeResponse: properties: data: properties: orderId: type: integer format: int64 message: type: string type: object responseCode: type: number default: 0 BlikOneClick: type: object required: - token - type discriminator: propertyName: type mapping: alias: '#/components/schemas/Alias' alternativeKey: '#/components/schemas/Alternativekey' #blikCode: '#/components/schemas/Blik_Code' properties: token: type: string description: Token obtained during transaction registration request via transaction/register.

IMPORTANT!:
In order to correctly charge the payer using the blikChargeByAlias method the PSU object must be sent in the additional object in the transaction/register request. type: type: string aliasValue: type: string description: Warning! If you send the parameter it will result in overwriting the current value.
Unique alias of the user which can be used to charge client's next transactions aliasLabel: type: string description: Warning! If you send the parameter it will result in overwriting the current value.
Alias label displayed in the app recurring: description: $ref: "#/components/schemas/RecurringParamsIn" Alias: description: alias description type: object allOf: - $ref: '#/components/schemas/BlikOneClick' - type: object properties: token: type: string description: Token obtained during transaction registration request via transaction/register.

IMPORTANT!:
In order to correctly charge the payer using the blikChargeByAlias method the PSU object must be sent in the additional object in the transaction/register request. type: type: string description: Set value „alias” required: - token - type Alternativekey: type: object allOf: - $ref: '#/components/schemas/BlikOneClick' - type: object properties: token: type: string description: Token obtained during transaction registration request via transaction/register.

IMPORTANT!:
In order to correctly charge the payer using the blikChargeByAlias method the PSU object must be sent in the additional object in the transaction/register request. type: type: string description: Send value „alternativeKey” alternativeKey: type: string description: Value obtained as a response from chargeByAlias, when charging a token with "type" = "alias" where is assigned more than one banking application required: - token - type - alternativeKey #Blik_Code: # type: object #allOf: # - $ref: '#/components/schemas/BlikOneClick' #- type: object # properties: # token: # type: string # description: Token obtained from transaction registration #type: # type: string # description: Send value „blikCode” #blikCode: # type: string #description: Value T6 entered by Customer #required: # - token #- type #- blikCode BlikChargeByAliasResponse: properties: data: properties: orderId: type: integer format: int64 message: type: string type: object ChargeByAlias409: properties: error: type: object properties: message: type: string alternativeKeys: type: array items: $ref: "#/components/schemas/alternativeKeysItem" code: type: integer example: 51 # ChargeByAlias409Item: # properties: # message: # type: string # alternativeKeys: # type: array # items: # $ref: "#/components/schemas/alternativeKeysItem" alternativeKeysItem: properties: label: type: string alias: type: string cardinfores: properties: data: type: object properties: refId: type: string description: Unique card token (reference code) bin: type: integer description: Card’s BIN number mask: type: string description: Masked card number cardType: type: string description: Card type (VISA, ECMC) cardDate: type: string description: Expiry date in the following format MMYYYY hash: type: string description: Unique card hash – unique for each card responseCode: type: number default: 0 example: 0 CardChargeRequestBody: properties: token: type: string description: Token registered by transaction/register method. Card reference number must be provided during transaction registration in methodRefId parameter. ChargeCard3dsSuccessResponse: properties: data: properties: orderId: type: integer format: int64 redirectUrl: type: string type: object responseCode: type: number example: 0 ChargeCardSuccessResponse: properties: data: properties: orderId: type: integer format: int64 description: Registered transaction ID type: object responseCode: type: number default: 0 example: 0 CardRegisterRequestBody: type: object properties: transactionToken: type: string description: Token obtained during registration cardNumber: type: string description: Card number maxLength: 16 cardDate: type: string description: Card expiry date in format MMYYYY cvv: type: string description: Card CVV clientName: type: string description: First name and surname of cardholder required: - transactionToken - cardNumber - cardDate - cvv - clientName CardPayThreeDSecureResponse: properties: data: properties: orderId: type: integer format: int64 redirectUrl: type: string type: object responseCode: type: number example: 0 CardPayResponse409: properties: error: type: string example: Unable to make payment. code: type: number CardPaySuccessResponse: properties: data: properties: orderId: type: integer format: int64 redirectUrl: type: string type: object responseCode: type: number example: 0 blikadnotification: properties: email: type: string description: client email value: type: string description: alias value type: type: string description: UID for oneclick, PAYID for recurring payments status: type: string description: REGISTERED / UNREGISTERED / EXPIRED example: REGISTERED bliknotification: properties: data: properties: orderId: type: integer format: int64 description: Order ID sessionId: type: string description: Merchant session ID method: type: integer description: Payment Method ID result: description: Array of values type: object properties: error: type: string description: Error code - 0 for success message: type: string description: Error message status: type: string description: Transaction status trxRef: type: string description: BLIK transaction reference number sign: type: string description:
Checksum of parameters:
{"orderId":int, "sessionId":"string", "method":int, "result":array, "crc":"string"}

calculated with the use of sha384

IMPORTANT!:
in case json_encode function is used, the following attributes should be added
"JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES" CardNotificationExtN: properties: amount: type: integer description: Transaction amount 3ds: type: boolean description: Was 3D-Secure performed during payment? method: type: integer description: Payment method ID orderId: type: integer format: int64 description: Transaction number assigned by P24 for oneclick sampling sessionId: type: string description: Unique identifier from merchant's system errorCode: type: string description: Error code errorMessage: type: string description: Error description sign: type: string description:
Before calculating the sign value, it is necessary to convert the alphanumeric characters to diacritics.

Checksum of parameters:
{"amount":int,"3ds":boolean,"method":int,"orderId":int,"sessionId":"str",
"errorCode":"str","errorMessage":"str","crc":"str"}

Calculated with the use of SHA384

IMPORTANT!:
in case json_encode function is used, the following attributes should be added
"JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES" CardNotificationExt: properties: amount: type: integer description: Transaction amount 3ds: type: boolean description: Was 3D-Secure performed during payment? method: type: integer description: Payment method ID refId: type: string description: Card reference number orderId: type: integer format: int64 description: Transaction number assigned by P24 for oneclick sampling sessionId: type: string description: Unique identifier from merchant's system bin: type: integer description: Registered card bin maskedCCNumber: type: string description: Masked card number ccExp: type: string description: Card expiry date in MMYYYY format eg. 122020 hash: type: string description: Unique card hash – unique for each card cardCountry: type: string description: Country code compatible with ISO, e.g. PL example: "PL" risk: type: integer description: 0 – safe, 1 – suspicious, 2 – hazardous. Score calculated using a card payment risk calculation tool liabilityshift: type: boolean description: Liability Shift means transferring responsibility for fraudulent transactions from the merchant to the card issuer or payment processor. 1 – Yes, 0 – No sign: type: string description:
Checksum of parameters:
{"amount":int,"3ds":boolean,"method":int,"refId":"str","orderId":int,"sessionId":"str",
"bin":int,"maskedCCNumber":"str","ccExp":"str","hash":"str",
"cardCountry":"str","risk":int,"liabilityshift":boolean,"crc":"str"}

calculated with the use of sha384

IMPORTANT!:
in case json_encode function is used, the following attributes should be added
"JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES" cardpayjson: properties: cardHolderLabel: type: string cardNumberLabel: type: integer cvvLabel: type: integer expDateLabel: type: string payButtonCaption: type: string threeDSAuthMessage: type: string TransactionRefundResult: type: object properties: orderId: type: integer format: int64 description: ID of the refunded transaction in P24 system sessionId: type: string description: ID of the refunded transaction in Partner's system merchantId: type: integer description: Merchant's ID of whose account the refund is performed requestId: type: string description: ID of refund request provided in transaction/refund refundsUuid: type: string description: ID of refund request in Partner's system provided in transaction/refund amount: type: integer description: Refund amount expressed in lowest currency unit, e.g. 1.23 PLN = 123 currency: type: string example: PLN description: Refund currency timestamp: type: integer description: Time of sending the refund notification provided in UNIX timestamp status: type: integer example: 0 description: Status of the executed refund. 0 - completed, 1 - rejected enum: - 0 - 1 sign: type: string description:
Checksum of parameters:
{"orderId":int,"sessionId":"str","refundsUuid":"str","merchantId":int,"amount":int,
"currency":"str","status":int,"crc":"str"}

calculated with the use of sha384

IMPORTANT!:
in case json_encode function is used, the following attributes should be added
"JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES" TransactionResult: type: object properties: merchantId: name: merchantId in: formData description: Merchant identification number type: integer posId: name: posId in: formData description: Shop identification number (defaults to merchant ID) type: integer sessionId: name: sessionId in: formData description: Unique identifier from merchant's system type: string maxLength: 100 amount: name: amount in: formData description: Amount of paid transaction expressed in lowest currency unit, e.g. 1.23 PLN = 123 type: integer originAmount: name: originAmount in: formData description: Amount of the transaction when registered the token expressed in lowest currency unit, e.g. 1.23 PLN = 123 type: integer currency: name: currency in: formData description: Currency compatible with ISO, e.g. PLN type: string maxLength: 3 default: PLN orderId: name: orderId in: formData description: Transaction number assigned by P24 type: integer format: int64 methodId: name: methodId in: formData description: Payment method used by customer type: integer statement: name: statement in: formData description: Payment title type: string sign: name: sign in: formData description:
Checksum of parameters:
{"merchantId":int,"posId":int,"sessionId":"string","amount":int,"originAmount":int,"currency":"string", "orderId":int,"methodId":int,"statement":"string","crc":"string"}

calculated with the use of sha384

IMPORTANT!:
in case json_encode function is used, the following attributes should be added
"JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES" type: string TransactionRejectJsonRequestBodyV11: properties: orderId: type: integer format: int64 description: Transaction ID assigned by Przelewy24 sessionId: type: string description: Unique ID from Partner’s system sign: type: string description:
Checksum of parameters:
{"merchantId":int,"orderId":int,"sessionId":"string","crc":"string"}

calculated with the use of sha384

IMPORTANT!:
in case json_encode function is used, the following attributes should be added
"JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES" TransactionReject200: properties: data: properties: status: type: string example: success type: object responseCode: type: string example: "0" GeneralErrorResponse: properties: error: type: string code: type: string HistoryResponse200Body: properties: data: description: Array of objects (batches, transactions, refunds) items: $ref: "#/components/schemas/HistoryDataObject" token: type: string description: Token to request next page responseCode: type: integer description: 0 if correct pageInformation: description: Information about pagination items: $ref: "#/components/schemas/PageInformationObject" PageInformationObject: properties: recordsOnPage: type: integer description: Amount records on current page recordsAll: type: integer description: Amount of all records pageCount: type: integer description: Amount of pages HistoryDataObject: oneOf: - $ref: "#/components/schemas/Batch" - $ref: "#/components/schemas/Transaction" - $ref: "#/components/schemas/Refund" discriminator: propertyName: details Batch: properties: type: type: string description: 'Possible values: batch, refund, transaction' amount: type: integer description: Amount currency: type: string description: Currency example: PLN details: description: Array of objects depended of type items: $ref: "#/components/schemas/BatchObject" BatchObject: properties: dateIn: type: string description: 'Date of creating batch. Format: “YYYY-MM-DD HH:MM:SS”' dateOut: type: string description: 'Date of withdrawal. Format: “YYYY-MM-DD HH:MM:SS”' batchId: type: integer description: Unique id of withdrawal commision: type: integer description: Sum of commisions charge: type: integer description: Charge refund: type: integer description: Sum of refunds Transaction: properties: type: type: string description: 'Possible values: batch, refund, transaction' amount: type: integer description: Amount currency: type: string description: Currency example: PLN details: description: Array of objects depended of type items: $ref: "#/components/schemas/TransactionObject" TransactionObject: properties: settledAmount: type: integer description: Amount without commision ordrId: type: integer description: Unique id of transaction sessionId: type: string description: Id of transaction used by merchant status: type: integer description: 'Status of transaction: 0 – not paid, 1 – paid, 2 – paid and verified, 3 – payment returned' date: type: string description: 'Creation date of transaction. Format: “YYYY-MM-DD HH:MM:SS”' dateOfTransaction: type: string description: Transaction registration date dateOfVerification: type: string description: Date of verification clientEmail: type: string description: Client's email accountChecksum: type: string description: Customer’s hashed bank account number paymentMethod: type: integer description: Payment method ID description: type: string description: Transaction description clientName: type: string description: Customer’s first name and surname clientAddress: type: string description: Customer's address clientCity: type: string description: Customer's city clientZip: type: string description: Customer's zip code statement: type: string description: Payment title fee: type: integer descirption: Commision Refund: properties: type: type: string description: 'Possible values: batch, refund, transaction' amount: type: integer description: Amount currency: type: string description: Currency example: PLN details: description: Array of objects depended of type items: $ref: "#/components/schemas/RefundObject" RefundObject: properties: refundId: type: integer description: Unique id of refund orderId: type: integer format: int64 descirption: Unique id of payment transaction requestId: type: string description: Unique request ID of refund. Empty when refund is done by P24 Panel. dateIn: type: string description: Refund registration date dateOut: type: string description: Refund payout date status: type: integer descirption: 'Status of refund: 1 – completed, 2 – pending, 3 – waiting to acceptance, 4 - rejected' description: type: string description: Additional description of refund HistoryError400Body: properties: error: type: string example: Invalid data provided code: type: string example: 400 validation: items: $ref: "#/components/schemas/ValidationObject" ValidationObject: properties: type: type: array example: Provided type is unknown BatchDetails200ResponseBody: properties: token: type: string description: Token needed to request next page responseCode: type: integer description: 0 if correct pageInformation: description: Array of page information properties: recordsOnPage: type: integer description: Amount records on current page recordsAll: type: integer description: Amount of all records pageCount: type: integer description: Amount of pages data: description: Array of transactions, refunds and batch items: $ref: "#/components/schemas/DataBatchDetailsObject" DataBatchDetailsObject: properties: overall: description: Batch overall information items: $ref: "#/components/schemas/OverallObject" transactions: description: List of transactions type: array refunds: description: List of refunds type: array OverallObject: oneOf: - $ref: "#/components/schemas/Batch" - $ref: "#/components/schemas/Transaction" - $ref: "#/components/schemas/Refund" discriminator: propertyName: details BatchDetailsError400Body: properties: code: type: string example: 400 error: type: string example: Value for field batch is invalid WithdrawalResponseBody: properties: data: type: array items: type: string responseCode: type: string IssueWithdrawalRequestBody: properties: currency: type: string description: Currency timestamp: type: integer description: Timestamp affiliateId: type: integer description: Affiliated Id 409ErrorResponse: properties: data: type: array items: type: string responseCode: type: string TransactionRegisterTtl: required: - merchantId - posId - sessionId - amount - currency - description - email - country - language - urlReturn - sign - ttl properties: merchantId: description: Merchant identification number type: integer posId: description: Shop identification number (defaults to merchant ID) type: integer sessionId: description: Unique identifier from merchant's system type: string amount: description: Transaction amount expressed in lowest currency unit, e.g. 1.23 PLN = 123 type: integer currency: description: Currency compatible with ISO, e.g. PLN default: "PLN" type: string maxLength: 3 description: description: Transaction description type: string maxLength: 1024 email: description: Customer's e-mail type: string maxLength: 50 client: description: Customer's first name and surname type: string maxLength: 50 address: description: Customer's address type: string maxLength: 80 zip: description: Customer's postal code type: string maxLength: 10 city: description: Customer's city type: string maxLength: 50 country: description: Country codes compatible with ISO, e.g. PL, DE, etc. type: string default: "PL" maxLength: 2 phone: description: "Customer's telephone in the following format : 481321132123" type: string maxLength: 2 language: description: "One of following language codes according to ISO 639-1: bg, cs, de, en, es, fr, hr, hu, it, nl, pl, pt, se, sk, ro" type: string default: "pl" method: description: Payment method ID. List of payment methods provided in the panel or available through API type: integer maxLength: 2 urlReturn: description: URL address to which customer will be redirected when transaction is complete type: string maxLength: 250 urlStatus: description: URL address to which transaction status will be send type: string maxLength: 250 urlNotify: description: URL address to which notify message will be send type: string maxLength: 250 timeLimit: description: Time limit for transaction process 0 - no limit max. 99 (in minutes) type: integer ttl: description: Time limit for transaction token 0 = max 31 days max. 44640 (in minutes) type: integer channel: description: " 1 - card + ApplePay + GooglePay, 2 - transfer, 4 - traditional transfer, 8 - N/A, 16 - all 24/7 – makes available all payment methods, 32 - use pre-payment, 64 – only pay-by-link methods, 128 – instalment payment forms, 256 – wallets, 4096 - card, 8192 - blik, 16384 - all methods except blik

To activate the specific channels, their values should be summed up.

Example: transfer and traditional transfer: channel=6" type: integer enum: - 1 - 2 - 4 - 8 - 16 - 32 - 64 - 128 - 256 - 4096 - 8192 - 16384 shipping: description: Delivery cost type: integer transferLabel: description: "Description forwarded to transfer's description (not in every payment methods). A parameter can contain values only ​​in a range [a-z A-Z 0-9 ęółśążźćńĘÓŁŚĄŻŹĆŃ . /\ :- ]" type: string maxLength: 20 sdkVersion: description: Version of mobile library. Determines if transaction is mobile type: string sign: description:
Checksum of parameters:
{"sessionId":"str","merchantId":int,"amount":int,"currency":"str","crc":"str"}

calculated with the use of sha384

IMPORTANT!:
in case json_encode function is used, the following attributes should be added
"JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES" type: string encoding: description: "Coding system for characters sent: ISO-8859-2, UTF-8, Windows-1250" type: string cart: description: cart type: array items: $ref: '#/components/schemas/CartParameters' methodRefId: description: Special parameter for some payment flows e.g. BLIK and Card one-click. type: string CardPaymentPositiveNotification: type: object properties: merchantId: type: integer description: Merchant identification number posId: type: integer description: Shop identification number (defaults to merchant ID) orderId: type: integer format: int64 description: Transaction number assigned by P24 sessionId: type: string description: Unique identifier from merchant's system example: "c3b520e2-5429-11e8-a782-43fdbbec70f2" method: type: integer description: Payment method used by customer result: type: object description: Transactions details allOf: - $ref: "#/components/schemas/CardPaymentPositiveNotificationResult" sign: type: string example: "SHA384" description: Checksum of parameters calculated using SHA384. Details of sign calculation below. CardPaymentPositiveNotificationResult: type: object properties: error: type: string example: "0" description: Error code message: type: string description: Description of error example: "Correct Transaction" cardInfoData: type: object description: Detailed information about the card allOf: - $ref: "#/components/schemas/CardPaymentPositiveNotificationCardInfoData" CardPaymentPositiveNotificationCardInfoData: type: object properties: cardType: type: string description: Card type bank: type: string description: The bank issuing the card refId: type: string description: Card alias bin: type: string description: BIN number mask: type: string description: Card mask cardDate: type: string description: Card expiration date hash: type: string description: Card hash cardCountry: type: string description: Card issuing country code example: "PL" security: type: object description: "Information regarding transaction security" allOf: - $ref: "#/components/schemas/CardPaymentPositiveNotificationSecurity" CardPaymentPositiveNotificationSecurity: type: object properties: 3ds: type: boolean description: Flag indicating whether 3D Secure authorization was required frictionless: type: boolean description: Flag indicating frictionless occurrence risk: type: integer description: Risk level liabilityshift: type: boolean description: Liabilityshift flag traceID: type: string description: Global transaction ID 3dsMode: type: string description: 3D Secure authorization mode softDecline: type: boolean description: Transaction retry due to softDecline flag CardPaymentNegativeNotification: type: object properties: merchantId: type: integer description: Merchant identification number posId: type: integer description: Shop identification number (defaults to merchant ID) orderId: type: integer format: int64 description: Transaction number assigned by P24 sessionId: type: string description: Unique identifier from merchant's system example: "c3b520e2-5429-11e8-a782-43fdbbec70f2" result: allOf: - $ref: "#/components/schemas/CardPaymentNegativeNotificationResult" sign: type: string example: "SHA384" description: Checksum of parameters calculated using SHA384. Details of sign calculation below. CardPaymentNegativeNotificationResult: type: object description: Transaction details properties: error: type: string example: "0" description: Error code message: type: string description: Description example: "Incorrect Transaction" rejectReason: type: string description: Reason for rejection of the transaction example: "declined" behaviour: type: string description: Guidelines for further course of action in case of rejection or decline example: "abort" issuerResponseCode: type: string description: Response code from the bank ####end components#### ####descriptions#### tags: ####ADDITIONAL API#### - name: Transaction service API x-displayName: Transaction service API - name: Additional API functionality x-displayName: Additional API functionality - name: Notification x-displayName: Notification description:

Transaction result

Automatic transfer of transaction result

In case the first notification of the transaction result is not properly received by the merchant’s system (it is not correctly verified by the merchant's system), P24's system will send subsequent notifications. These will be sent after 3, 5, 15, 30, 60, 150 and 450 minutes (+/- 5 min.), unless the correct transaction verification will take place before that.

POST parameters are the same as in the case of the first notification.
- name: RefundNotification x-displayName: Refund Notification description:

Result of the refund

A refund notification is sent asynchronously to the URL provided in the transaction/refund, in the parameter urlStatus. If urlStatus value is not provided, the notification is sent to the default URL address configured in the P24 panel (if such address had been provided).

In order to configure the default URL address, contact Partner Support via contact form

- name: Payment Methods Use Cases x-displayName: Payment Methods Use Cases description: > ## PayPo The PayPo payment method is not the default payment method and is available after contacting our Merchant Success department via contact form. After starting the service on your account, you must register the transaction correctly in the request transaction register pass additional parameters that are optional by default: client, city, zip, address. The minimum amount sent in a request for PayPo method is currently PLN 5, its maximum value is PLN 5,000. PayPo payments are paid after receiving funds from the operator. By default, the merchant will receive the funds within 5 business days. ## PayPal For the PayPal method to work properly on your website, it must be activated for the account on the Przelewy24 website. In order to activate the PayPal method, please contact us using the e-mail address assigned to your account in the Przelewy24 panel via contact form. To correctly perform a transaction for the indicated method, it is necessary to send the full object cart with the required parameters sent in the request transaction register. - name: Calculating Sign x-displayName: Calculating Sign description: >
### Transaction register Below are code snippets for 4 programming languages, demonstrating the correct calculation of the sign checksum for a transaction registration request. To correctly calculate sign, remember about the correctness of the data (the merchantId and crc parameters are values ​​​​taken from the Przelewy24 panel, and the remaining values ​​​​are set individually for each transaction by the seller) and about the distinction of variable types (merchantId and amount are integer, the rest are string). IMPORTANT!
Please note that the components of the sign checksum differ for individual requests sent or received from Przelewy24. The sign parameter value that must be passed in the transaction registration request is different from the sign value passed for the transaction verification request.

Examples of calculating the sign checksum for a transaction registration request:

PHP
JavaScript
Java
Python
$params = [
          'sessionId' => 'unique-session-id', // Here you should put the unique generated session ID
          'merchantId' => 999999, // Here you should put the Seller ID from the Przelewy24 panel
          'amount' => 1234, // Here you should put the transaction amount in groszy, 1234 means PLN 12.34
          'currency' => 'PLN', // Transaction currency should be placed here
          'crc' => 'crc-z-panelu-p24', // Here you should place the CRC key downloaded from the Przelewy24 panel
      ];

      // Combining parameters into a string

      $combinedString = json_encode($params, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);

      // Hashing with SHA-384

      $hash = hash('sha384', $combinedString);

      echo 'The checksum of the parameters is: ' . $hash;

      
const params = {
        sessionId: "unique-session-id", // Here you should put the unique generated session ID
        merchantId: 999999, // Here you should put the Seller ID from the Przelewy24 panel
        amount: 1234, // Here you should put the transaction amount in groszy, 1234 means PLN 12.34
        currency: "PLN", // Transaction currency should be placed here
        crc: "crc-z-panelu-p24" // Here you should place the CRC key downloaded from the Przelewy24 panel
      };

      // Combining parameters into a string

      const combinedString = JSON.stringify(params);

      // Hashing with SHA-384

      const hash = crypto.createHash('sha384').update(combinedString).digest('hex');

      console.log('The checksum of the parameters is:', hash);

      
import hashlib

      # Parameters in JSON format

      json_string = '{"sessionId":"sessionId","merchantId":999999,"amount":1000,"currency":"PLN","crc":"crc"}'

      # Hashing with SHA-384

      checksum = hashlib.sha384(json_string.encode('utf-8')).hexdigest()

      print('The checksum of the parameters is:', checksum)      

      
import com.fasterxml.jackson.databind.ObjectMapper;

      import java.nio.charset.StandardCharsets;
      
      import java.security.MessageDigest;
      
      public class ChecksumExample {
            public static void main(String[] args) throws Exception {
            String json = createJson("sessionId", 999999, 1000, "PLN", "crc");
            String checksum = calculateChecksum(json);
            System.out.println("The checksum of the parameters is: " + checksum);
        }
      
        private static String createJson(String sessionId, int merchantId, int amount, String currency, String crc) throws Exception {
          return new ObjectMapper().writeValueAsString(Map.of(
              "sessionId", sessionId,
              "merchantId", merchantId,
              "amount", amount,
              "currency", currency,
              "crc", crc
          ));
      }

        private static String calculateChecksum(String json) throws Exception {
          byte[] hash = MessageDigest.getInstance("SHA-384").digest(json.getBytes(StandardCharsets.UTF_8));
          StringBuilder hexString = new StringBuilder();
          for (byte b : hash) {
                  hexString.append(String.format("%02x", b));
              }
          return hexString.toString();
          }
      }
      
      
### Transaction verification Special care should be taken when implementing the code to calculate the checksum for the transaction verification request and not only. The transaction verification request, unlike the transaction registration request, contains one new parameter, namely orderId. The orderId parameter is a parameter set by Przelewy24 and is a numeric transaction identifier (integer type). The orderId value can be captured from the notification, which is sent to urlStatus.

Examples of calculating the sign checksum for a transaction verification request:

PHP
JavaScript
Java
Python
$params = [
          'sessionId' => 'unique-session-id', // Here you should put the unique generated session ID
          'orderId' => 999999, // Here you should put the numeric transaction ID received e.g. from a notification
          'amount' => 1234, // Here you should put the transaction amount in groszy, 1234 means PLN 12.34
          'currency' => 'PLN', // Transaction currency should be placed here
          'crc' => 'crc-z-panelu-p24', // Here you should place the CRC key downloaded from the Przelewy24 panel
      ];

      // Combining parameters into a string

      $combinedString = json_encode($params, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);

      // Hashing with SHA-384

      $hash = hash('sha384', $combinedString);

      echo 'The checksum of the parameters is: ' . $hash;

      
const params = {
        sessionId: "unique-session-id", // Here you should put the unique generated session ID
        orderId: 999999, // Here you should put the numeric transaction ID received e.g. from a notification
        amount: 1234, // Here you should put the transaction amount in groszy, 1234 means PLN 12.34
        currency: "PLN", // Transaction currency should be placed here
        crc: "crc-z-panelu-p24" // Here you should place the CRC key downloaded from the Przelewy24 panel
      };

      // Combining parameters into a string

      const combinedString = JSON.stringify(params);

      // Hashing with SHA-384

      const hash = crypto.createHash('sha384').update(combinedString).digest('hex');

      console.log('The checksum of the parameters is:', hash);

      
import hashlib

      # Parameters in JSON format

      json_string = '{"sessionId":"sessionId","orderId":999999,"amount":1000,"currency":"PLN","crc":"crc"}'

      # Hashing with SHA-384

      checksum = hashlib.sha384(json_string.encode('utf-8')).hexdigest()

      print('The checksum of the parameters is:', checksum)      

      
import com.fasterxml.jackson.databind.ObjectMapper;

      import java.nio.charset.StandardCharsets;
      
      import java.security.MessageDigest;
      
      public class ChecksumExample {
            public static void main(String[] args) throws Exception {
            String json = createJson("sessionId", 999999, 1000, "PLN", "crc");
            String checksum = calculateChecksum(json);
            System.out.println("The checksum of the parameters is: " + checksum);
        }
      
        private static String createJson(String sessionId, int orderId, int amount, String currency, String crc) throws Exception {
          return new ObjectMapper().writeValueAsString(Map.of(
              "sessionId", sessionId,
              "orderId", orderId,
              "amount", amount,
              "currency", currency,
              "crc", crc
          ));
      }

        private static String calculateChecksum(String json) throws Exception {
          byte[] hash = MessageDigest.getInstance("SHA-384").digest(json.getBytes(StandardCharsets.UTF_8));
          StringBuilder hexString = new StringBuilder();
          for (byte b : hash) {
                  hexString.append(String.format("%02x", b));
              }
          return hexString.toString();
          }
      }
      
      
### Salt calculator
####END ADDITIONAL API#### - name: Additional services Mass Payments Transactions x-displayName: Mass Payments Transactions description: > Mass Payment Identification System is an easy way for a payer to make a payment to an individual bank account created. For a payer wishing to make a traditional transfer, an individual bank account is generated to which he makes the payment.

####BLIK#### - name: BLIK Use Cases x-displayName: BLIK Use Cases description: > # Introduction In addition to the standard payment based on redirection to P24 paymantwall, it is also possible to place Blik payments on the Merchant website. # How to place BLIK payment on the merchant's website? (BLIK level 0) Transaction may process with paymentMethod/blik/chargeByCode method. It's necessary to previously register transaction using transaction/register method. In this case only “token” and “blikCode” parameters are mandatory in paymentMethod/blik/chargeByCode method.


Blik OneClick


Blik # What is 1-click BLIK payment? As the name suggests the payment allows to make purchases with one click. It doesn't require entering the BLIK code, only simple one-click acceptance in the application.


Blik OneClick # How to get information about an alias? There are two ways to get information about an alias:

1. Acquiring information by handling asynchronous notification. (recommended)

2. In order to receive an alias for subsequent payments, call the getAliasesByEmail method.
The method returns a list of aliases (along with the type and status) created for a given e-mail address in the scope of a given merchant.
For Aliases registered with values call getAliasesByEmail{email}/custom

Due to the asynchronous character of the transaction status processing, the getAliasesByEmail method may return the current status of aliases within up to 60 seconds following a correctly performed transaction.
# How to register an alias for use in 1-click payment? Transaction may process with paymentMethod/blik/chargeByCode method. The service allows to assign individual alias value and alias label value in input parameters. If parameter “referenceRegister” = true during transaction registration process, the Alias registration request is transferred to BLIK and the Customer receives an invitation generated by the bank application to pay without the T6 code, in the merchant’s system. Once this method is called, the amount provided during transaction registration is charged and alias is registered in P24/BLIK system. Created alias may be used for processing OneClick payments. Once the alias is registered, the Customer will not be asked to provide T6 code during the next payments.


Blik


In order to register another mobile application in BLIK system, method paymentMethod/blik/chargeByCode should be used with a 6-digit BLIK code generated by the application. The transaction in P24 must be registered on the same customer’s e-mail address.

The alias is created based on the e-mail address provided during transaction registration process. This means that only one alias of a given type may be registered on this e-mail address unless “aliasValue” and “aliasLabel” parameters are used.

In order to register more than one alias for provided e-mail address, include the alias value and alias label. This way merchant would assure that aliases are unique. The list of merchant’s aliases for a given e-mail may be obtained by getAliasesByEmail method. It is possible to register the same alias defined by the merchant with several e-mail addresses. In this case, getAliasesByEmail returns the same alias value for each e-mail.
# How to make a 1-click payment (only 1-click)? ChargeByAlias is a one click payment method. It allows to charge customer using a previously obtained alias. Alias obtained must be provided in methodRefId parameter during transaction registration (transaction/register). Please use type=alias.


Blik
# How to handle two registered applications for one alias (only 1-click)? The method ChargeByAlias allows to charge customer using previously obtained alias and an “alternativeKey” key identifying customer’s mobile application. Additional parameter "alternativeKey" is used.

This method may be used only if chargeByAlias method returns „alias” type with error code 51 and http code 409 (the alias selected for the identification is ambiguous!) as well as the list of alternative keys identifying the customer’s mobile applications – "AliasAlternative".

The customer should select proper mobile application as a payment method. Alias should be selected from the "AliasAlternative" list.

This method is used with the "alternativeKey" type, only if the customer has more that one mobile application linked to the same UID type alias.

In case of receiving error 51, merchant should not record alternative keys and labels. These data are subject to change at the bank – by user in the bank application.


Blik
# How to handle with an expired token? (only 1-click) When a transaction is rejected due to error 68 (customer’s alias expired), you must re-register the transaction with a new alias - according to the information in section register an alias.
Blik
# What is BLIK recurring payment? BLIK recurring payment allows to make payments on the basis of a previously obtained alias. Merchant is the payment initiator.

There are 3 service models supported:

► **M** - merchant who wants to execute recurring transactions for a variable amount sends an invitation to create a recurring payment in the M model. Each recurring payment for a variable amount is authorized by the bank after it's confirmed by the User in the bank application.

► **A** - merchant who wants to execute recurring transactions for a fixed amount sends an invitation to create a recurring payment in model A with additional payment details. Each recurring payment for fixed amount is automatically authorized by the bank.

► **O** - merchant who wants to execute recurring transactions for a variable amount sends an invitation to create a recurring payment in model O with additional payment details. Each recurring payment for variable amount is authorized automatically by the bank.
# Requirements for implementing BLIK Recurring Payments In order to implement BLIK recurring payments, the following requirements must be met in accordance with BLIK Guidelines. # How to register an alias for recurring payments (PAYID)? Recurring invitation is called analogically to one-click – method paymentMethod/blik/chargeByCode - with additional “recurring” object. If the parameter "referenceRegister" = true is passed on transaction registration, the alias registration request will be sent to BLIK and the customer will receive invitation in the bank application to pay without the T6 code in the shop.

Blik Rej PAYID # How to set up payment frequency (only PAYID)? To define recurring payment frequency following data should be passed:
  1. Length of payment period, expressed in units of measurement.
  2. Units of measurement (D = Day, W = Week, M = Month, Q = Quarter, Y = Year).
  3. Type of day of payment execution (A = indicated day, N = next working day, P = Previous working day, W = Only working days).
  4. The day on which the first transaction will be initiated, counted from the date of sending the invitation (0 = the same day, 1=the next day, etc.). An „E” instead of number indicates the last day of a current period (point 2.).

  5. If designated day of recurring payment falls on day which not exist in present month (eg. 31st of April) payment is executed on last day of month (30th of April).

    Data provided in 3-4 are not automatic authorization criteria and are not presented to the User at the stage of creating an invitation. Data are used to supply “spending planners”.

    Examples:

    1MA0 - recurring payment will be executed every month at current day: 03.09.2019 (current day), 03.10.2019 (next payment)

    1MAE - recurring payment will be executed on every last day of month 30.09.2019, 31.10.2019, 30.11.2019 etc.
# How to make a recurring payment? ChargeByAlias is also a recurring payment method. It allows to charge customer using a previously obtained alias. Alias obtained must be provided in methodRefId parameter during transaction registration (transaction/register). Please use type=alias. recurring blik # How to change PAYID during payment referenced by alias (only PAYID)? You can change the PAYID during recurring payment. A new invitation is sent to the client which must be accepted.

Afterwards, the API request should send the entire content of the invitation, not just changed parts.

Use the method: ChargeByAlias with the “recurring” object. # How to test BLIK (white label) in Sandbox? To test the BLIK White label payment using the T6 code in the Sandbox environment, use the 6-digit BLIK code in the format 777XXX for a successful transaction, where X is any digit from 0-9. To simulate a failed transaction, use any 6 digits. We also recommend not using the same BLIK code in short intervals to ensure correct answers. # Transfer title visible in the client's application? By default a client in their bank application sees the P24 transaction number as the main title. Additional lines also show the information passed in the description parameter in the transaction/register request, as an auxiliary value.

The customer could see personalized value sent by the merchant instead of the main P24 transaction title. In this case, the transaction/register request should contain the transferLabel parameter, which rewrites the main payment title.
- name: BLIK Additional x-displayName: BLIK Additional Notification description: > For any of BLIK type transaction, additional payment status notification is provided.

Notification is sent to the url given in the "urlCardPaymentNotification" parameter, which must be added to the transaction/register method, or to a fixed address saved in the P24 account configuration. The value from the token, if it was sent, is paramount.

Note! Please note that for the BLIK Pay Later payment method, the P24 system does not send additional notifications. - name: Alias Update Notification x-displayName: Alias Update Notification description: > Additional notification may be sent to the specified URL, if the alias status is created or changed. The address is configured via the P24 service. The notification can be used as an alternative to the getAliasesByEmail method. ####END BLIK#### ####CARD#### - name: Card Description x-displayName: Card Use Cases description: >

Introduction

To implement standard card transactions processed via P24 paymentwall, it is enough to perform standard integration (payment service) and there is no need to implement the following solutions. The solutions described below are additional card functionalities.
Card featuers are not enabled by deufalt, the scope of the card functionality and testing methods depend on the Acquirer. Please contact the support stuff via contact form.
# How to make in-shop card payment In order to limit the number of steps in the payment process, it is possible to place the payment card form directly on the shop’s website. The implementation of the solution does not affect the processing of the credit card data – it is still run solely by Przelewy24, which allows to preserve all the safety requirements regarding the security of credit cards and to conform to the PCI DSS standard. Card Payment In order to carry out payments by payment cards, it is necessary to use the transaction/register method in order to register transaction in Przelewy24 and, subsequently, transfer the received transaction token for the call made by Przelewy24 JavaScript. The data provided in the form are transferred directly to Przelewy24, and, as a result, script on the shop’s part (indicated in the configuration) is activated.
A suitable contract is necessary for realisation of payments by payment cards on the shop’s website – please contact the Sales Department of Przelewy24 via contact form.

In-shop card payment process

card payment

- Transaction registration by transaction/register method, obtaining of a transaction token - Building DIV element on the merchant’s website for card payment form - Preparation of the JavaScript code which will be called on completion of the transaction

Field for card payment form

DIV element may be used to prepare the location on the website where the card payment form should be placed. The ID attribute of this element should be set to "P24FormContainer". Code should look as follow: ```html
``` Where: - {P24SIGN} – checksum, the same as the one used in transaction/register - {FinishpaymentFunction} – name of function called in case of a correct transaction with one input parameter – OrderID (integer) assigned by P24, - {PaymentErrorFunction} – name of function called in case of an incorrect transaction, the function returns one parameter - error code (integer), - {DICTIONARY JSON} – dictionary of terms used in the payment form, as stated below: A script generating internal form in DIV#P24FormContainer should be attached to the website:
GET https://secure.przelewy24.pl/inchtml/ajaxPayment/ajax.js?token={TOKEN}
Where the Token obtained as a result of the transaction/register method should be entered in {TOKEN}. Alternatively, individual CSS for the card registration form may be used.
URL for default styles:
https://secure.przelewy24.pl/inchtml/ajaxPayment/ajax.css In case of 3D-Secure required, link redirecting to new authorisation window will appear. After successful authorisation window will be closed and function for correct transaction will be called. The return address provided in "urlReturn" parameter should lead to the script placed in the same domain as the request script. It should enable the following function: ```javascript window.setTimeout(function(){ opener.P24_Transaction.threeDSReturn(window); window.close(); },1000); ``` # How to register a card or make a payment? 1. The card registration should be made as a normal payment. Card payment can be made in 3 ways: - p24 paymentwall - direct API (card / pay) - if card data is processed by Merchant resources, the solution requires PCI DSS Card Payment - form inside the store Card Payment 2. Then, by card/info or additional notification, you can get information about the card, including the reference number necessary for subsequent charges. 3. Then, depending on whether we want to accept the payment, we perform transaction/verify or transaction/reject, if it was only a sample payment, e.g. for 1 PLN. card pay # How to get card information? There are two ways to get information about a card: - Use method card/info - Use additional notification The notification can be used for any card transactions: - in the card/chargeWiths3ds, card/charge, card/pay processes for immediately displaying a message to a customer about a successful / failed transaction - in the RISK process on the part of the Partner to check the client's card and protect against fraud - when saving the card to the 1-click process, there is no need to ask for the card reference number OneClick

Card reference number must be provided during transaction registration in methodRefId parameter.

OneClick--> # How to make a 1-click card payment with 3DS? The dedicated card/chargeWith3ds method is used for this purpose.

Card reference number must be provided during transaction registration in methodRefId parameter.

The method will return a link to redirect the client and handle 3ds.

OneClick

OneClick 3ds # How to handle payments without customer participation (recurring)? The method card/charge enables recurrent card charging based on transferred reference number.

Card reference number must be provided during transaction registration in methodRefId parameter

The refId parameter value obtained from transactions paid through wallet methods (e.g., Google Pay, Apple Pay, VISA Mobile) cannot be applied to recurring payments. Attempting to pay such a transaction will result in an error and ultimately a failure to process the payment.

Customer’s participation is not required to initiate the process.

Recurring Charge

OneClick

# How to handle 3ds (including 3ds 2.X)? Both 3ds and 3ds 2.X are handled in the same way. 3ds is handled automaticlly for solutions based on p24 paymentwall or form inside the store. Merchant doesn't have to do anything.

During registration process 3D-Secure service may be enabled (disabled by default). In case it is enabled, additional notification containing the address for redirection to 3D-Secure (to be defined in the P24 panel) is sent.

In case using card/pay or card/chargeWith3ds method for this purpose, you should redirect customer to the URL obtained from the answer.

Remember that after 3ds, the client will always be redirected to urlReturn. Merchant must process customer’s return from the bank website on their own. The returned link is active for 15 minutes.

# How to register a card or pay in a mobile application? Card registration or payment in the mobile application can be done in two suggested ways. You can open a p24 paymentwall in WebView, preferably with forced payment method for given cards. Another way is to use the card/pay method. Remember that the card/pay method should be called directly from the application to P24 without the participation of Merchant servers. Otherwise, you'll need a PCI DSS certificate. # How to test cards in a Sandbox environment? To test card payments in a test environment, use the card numbers from the Saferpay documentation and any date as an expiry date from the future and a random 3-digit CVV.

To test Google Pay, we recommend joining the Google Google Pay API Test Cards Allowlist - Google Groups development group. After joining the group, several test card numbers (from Google) will be assigned to your Google account, selectable after pressing the Google Pay payment button. Please note that card services are not enabled by default for the production or sandbox environment. # Will the Merchant process full card details? PCI DSS certification is required to process full card data. P24 solutions support operations performed this way.

However, many solutions provide full card functionality, in which Merchant doesn't use full card data and therefore is no need to have PCI DSS. In such situations, Merchant only obtains the card's reference number (e.g. for later 1-click payments or recurring charges) and a set of insensitive data such as expiration date or BIN.


- name: Card Notification x-displayName: Card Additional Notification description: > Notification is sent to the url given in the "urlCardPaymentNotification" parameter, which must be added to the transaction/register method, or to a fixed address saved in the P24 account configuration. The value from the token, if it was sent, is paramount.

**For positive authorization** **For negative authorization** - name: Pre-authorization x-displayName: Pre-authorization description: > The card payment process is divided into two stages: - card authorisation/pre-authorisation – takes place when the card organisation verifies possibility of card payment. The organisation checks if cardholder has sufficient funds to process transaction. On positive verification, transaction is authorised and the amount is blocked on the account of the cardholder. The amount is not sent for clearing yet, so it is not transferred to merchant. Transfer takes place on completion of the authorisation process - completion of card authorisation/pre-authorisation (Capture) – takes place, when merchant sends confirmation to the card organisation that the transaction between merchant and customer has been concluded. Funds are transferred for clearing and paid to the merchant. Authorisation completion may not concern the full amount of transaction. In case the authorisation of a partial amount is completed, the remaining amount is released

In case the authorisation/pre-authorisation fails, following options are possible:

- cancellation of card authorisation/pre-authorisation – takes place when merchant does not send confirmation of concluded transaction to the card organisation. Funds are not transferred to merchant and the amount blocked on the customer’s card is released

The service allows to separate the following steps: Authorisation, Capture. ## Service implementation The implementation of the service is analogous to REST v1 standard process. ## Transaction registration CARD The transaction is registered by transaction/register method. ## Notification obtaining Notification obtaining proceeds as in the case of a standard transaction. Once the notification is sent, the card payment is only authorised, i.e. a blocked amount appears on the account of the cardholder. If verification is not successful, the payment will not be cleared and the blocked amount is released. In case of the above mentioned functionality, the system does not expect any return transaction verification. The transaction is considered as completed once merchant responds with code HTTP 200. If there is no correct response, the notification is re-sent at the same time intervals as in standard cases. ## Transaction verification Transaction verification is carried out with the transaction/verify method. The only difference is that it is possible to send smaller amount than amount of Pre-authorisation, (i.e. the amount provided during token registration). The amount must be higher than 0. The "sign" parameter is calculated based on the current value of "amount" parameter. Transaction amount is overwritten. As a result of a successful verification, authorisation completion (capture) including the amount of the verification is sent to the card operator. Requested amount is transferred for clearing and the remaining amount is released. Transaction status changes to 2 (completed). In case of an incorrect status on the card operator side, the P24 transaction changes its status to current and a relevant notification is generated in the API. ## Transaction rejection The release of funds (cancellation of authorisation) is carried out with the transaction/reject method. Transaction cancellation request is sent to the card operator and the P24 transaction changes its status to 3 (returned). In case of incorrect status on the card operator side, the P24 transaction changes its status to current, and a relevant notification is generated in the API. ## One-click and recurrence One-click and recurrence proceed analogically to the traditional payment. The process has been devided into two stages (authorisation and capture). Pre-authorisation process is available only in REST communication, which requires transaction verification. ## Collecting card details Collecting card details from pre-authorised transactions proceeds as in the case of the traditional payment so it is delivered by additional notification. It is also possible to use the REST Card/Info method. ####END CARD#### - name: Additional services Additional Notifications x-displayName: Additional asynchronous notifications for transactions description: > For payment methods (e.g., installments or PIS payments) that require additional information about the transaction, it is possible to obtain additional notifications. To declare the return address, pass the `urlNotify` parameter during the transaction registration request.

Output parameters

| Field name | Type | Description | |---------------|:---------------------|:----------------------| | orderId | INT| Transaction number assigned by P24 | | sessionId | STRING | Unique identifier from merchant's system | | method | INT | Payment method used by customer (e.g. for installment payments = 303)| | result | OBJECT | Transaction result object, individual for each method| | merchantId | INT | Merchant identification number | | posId | INT | Shop identification number (defaults to merchant ID)| | sign | STRING | Checksum of parameters calculated with the use of sha384:
({"merchantId":int,"posId":int,"orderId":int,"sessionId":"string","method":int,"result":"object", "crc":"string"}) |

Result object

| Field name | Type | Description | |---------------|:---------------------|:----------------------| | generalStatus | STRING | General status of transaction | | detailedStatus | STRING | Detailed status od transaction
the value depending on banks | | paymentId | STRING | Payment identification number | | provider | STRING | Installment provider (given only for installment payments) |

IMPORTANT! In case json_encode function is used, the following attributes should be added "JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES"

The notification for a correctly booked transaction

```json { "orderId":int, "sessionId":"string", "method":int, "result": { "generalStatus":"done", "detailedStatus":"string", "paymentId":"string", "provider":"string" }, "merchantId":int, "posId":int, "sign":"string" } ```

The notification for a transaction awaiting bank confirmation

```json { "orderId":int, "sessionId":"string", "method":int, "result": { "generalStatus":"done", "detailedStatus":"string", "paymentId":"string", "provider":"string" }, "merchantId":int, "posId":int, "sign":"string" } ```

The notification for a transaction accepted for execution by the bank

```json { "orderId":int, "sessionId":"string", "method":int, "result": { "generalStatus":"done", "detailedStatus":"string", "paymentId":"string", "provider":"string" }, "merchantId":int, "posId":int, "sign":"string" } ```

The notification for a rejected transaction

```json { "orderId":int, "sessionId":"string", "method":int, "result": { "generalStatus":"done", "detailedStatus":"string", "paymentId":"string", "provider":"string" }, "merchantId":int, "posId":int, "sign":"string" } ```

The notification for a pending transaction (waiting for execution by the bank)

```json { "orderId":int, "sessionId":"string", "method":int, "result": { "generalStatus":"done", "detailedStatus":"string", "paymentId":"string", "provider":"string" }, "merchantId":int, "posId":int, "sign":"string" } ```

The notification for a cancelled transaction

```json { "orderId":int, "sessionId":"string", "method":int, "result": { "generalStatus":"done", "detailedStatus":"string", "paymentId":"string", "provider":"string" }, "merchantId":int, "posId":int, "sign":"string" } ``` ####GPAY#### - name: GPay Description x-displayName: Google Pay Description description: > GPay Google Pay is fast and simple method of payments offered by Google. Card details are safely stored on Google servers. Service allows users to perform the payment process without manually filling card details or contact form.

Google Pay allows to obtain the customer’s encrypted card details which are required to charge it. In order to proceed Google Pay payment, customer first must save payment card details in Google account using any Google platform (e.g. purchasing an application in Google Play, paying for storage on Google Drive, etc.) or directly on https://pay.google.com

In order to use the service, a relevant contract with the card operator must be signed first. To enable this functionality, contact Partner Support via contact form

GPay ## Communication scheme Once the customer clicks „Pay with Google Pay” button, the Google Pay form is displayed. This form allows customer to confirm Google account and choose card to be used for payment process. At this stage card may be changed to a different one (previously saved) or new card may be added. Google Pay script displays encrypted card details using postMessage function which the shop must intercept, encrypt once again using the base64 function and send in "methodRefId" parameter along with the transaction data.

Merchant’s system may call the script available on Google’s website. Details available at:

https://developers.google.com/pay/api/web/guides/tutorial

In order to add P24, it is necessary to modify the processor’s data in the script call: ```javascript var tokenizationSpecification = { tokenizationType: 'PAYMENT_GATEWAY', parameters: { gateway: 'przelewy24', gatewayMerchantId: '[MerchantID from P24]' } } ``` ## Transaction registration In order to register Google Pay transaction, additional "methodRefId" parameter must be used. The parameter can be obtained from Google by **postMessage (paymentMethodToken.token)** and should be encrypted with base64 encryption.
POST https://secure.przelewy24.pl/api/v1/transaction/register
Additional **POST** call parameter | Field name | Type | Required | Description | |--------------|:--------------:|----------:|------------:| | methodRefId | STRING | Y |Token obtained from Google Pay and encrypted with base64 | Before sending the transaction request, transaction data must be saved in the merchant’s local database. In particular, the session ID and the transaction amount should be stored. ## Implementation for Android To implement Google Pay on Android devices see Google Pay API documentation: [https://developers.google.com/pay/api/android](https://developers.google.com/pay/api/android) ## Additional information In order to unify styles of website and mobile applications, a set of guidelines has been made available. [https://developers.google.com/pay/api/web/guides/brand-guidelines](https://developers.google.com/pay/api/web/guides/brand-guidelines) Guidelines for creating mobile applications are available at: [https://developers.google.com/pay/api/android/guides/tutorial](https://developers.google.com/pay/api/android/guides/tutorial) x-codeSamples: - lang: javascript source: | PayWithGoogle - name: GPay API x-displayName: Google Pay API ####END GPAY#### ####APAY#### - name: APay Description x-displayName: Apple Pay description: > ApplePay

Introduction

Thanks to Apple Pay, you don't have to set up any accounts or fill out long forms when shopping on websites opened in Safari on your iPhone, iPad or Mac. And because the Touch ID reader is also available in the MacBook Air and MacBook Pro, finalizing the transaction requires only a fingerprint and is faster, easier and safer than before.

APay ## Description During the shopping process, Apple Pay uses the number assigned to a specific device and a unique transaction code. As a result, your card number is never stored on your device or Apple servers. And at the time of payment, Apple never makes card numbers available to sellers.
The service requires prior signing of the contract with the card operator, for detailed information please contact the Sales Department of Przelewy24).
## Creating Merchant ID And Domain Certification Transaction processing via ApplePay requires the Seller to create a merchant and pass domain certification. The process is described at https://developer.apple.com/documentation/apple_pay_on_the_web/configuring_your_environment. ## Creating Apple Pay Payment Processing Certificate
Before proceeding with the process of creating a certificate, obtain a CSR file (for detailed information, please contact the Implementation Department of Przelewy24 via contact form/a>).

After logging in to your Apple Developer account: - select the Certificates, IDs & Profiles option, - select the Identifiers / Merchant IDs option, - select the Merchant ID created in the previous step and go to the Edit option, - select the Create Certificate option in the Apple Pay Payment Processing Certificate section, - select the Continue option, - upload the CSR file received from the Przelewy24 Implementation Department, using the Choose File option, - download the generated certificate and forward it to the Przelewy24 Implementation Department. ## Communication Scheme After clicking the "ApplePay" button, the Apple form appears on the screen, where the user can select a card saved on the device. The background script passes the encoded card data in the paymentData object, which the store must take over, and then encode via base64 again and send it in the methodRefId parameter together with the transaction data. The store on its website must call the script provided by Apple (details available at
https://developer.apple.com/documentation/apple_pay_on_the_web). The background script passes the encoded card data, which the store must take over, and then encode via base64 again and send it in the methodRefId parameter together with the transaction data. ## Transaction Registration In order to register Apple Pay transaction, additional "methodRefId" parameter must be used. The parameter can be obtained from Apple by **postMessage (paymentMethodToken.token)** and should be encrypted with base64 encryption.
POST https://secure.przelewy24.pl/api/v1/transaction/register
Additional **POST** call parameter | Field name | Type | Required | Description | |--------------|:--------------:|----------:|------------:| | methodRefId | STRING | Y |Token obtained from Apple Pay and encrypted with base64 | ## Additional Information To harmonize the style used on the website and in the mobile application, some tips should be followed when implementing the ApplePay service. Descriptions of styles and buttons for websites are available at https://developer.apple.com/apple-pay/acceptable-use-guidelines-for-websites/. - name: APay API x-displayName: Apple Pay API ####END APAY#### ## CARD PAYMENT 2.0 ####END APAY#### - name: Introduction x-displayName: Introduction description: >

Note!
To ensure proper implementation of the solution:
- for card methods method 241 or 242 is required to be enabled - in accordance with business arrangements
- for Google Pay method 264 or 265 is required to be enabled - in accordance with business arrangements
- for Apple Pay method 252 or 253 is required to be enabled - in accordance with business arrangements

- name: Form initialization x-displayName: Form initialization (SDK) description: > Card transaction processing is based on JavaScript downloaded from Przelewy24 server. Payment card transactions are effected by calling the iFrame window based on the ready-made SDK indicating the Przelewy24 library. The library contains all offered objects and related methods used for correct form integration. Library call: ```javascript ``` In order to generate the card form in iFrame, the method must be called in the following way, using the library implemented:
```javascript /* Initialize card form */ const P24 = new Przelewy24CardTokenization(merchantId,"sessionId","sign"); /* Render the iFrame form and additional styling settings */ const options = {}; P24.render("type", "#id", options); ``` In order for class P24 to be properly implemented, relevant values for the specific parameters must be provided during the implementation process, consistent with the scheme provided below:



In order for the card form to be displayed correctly on the page, you must call the method `P24.render("type", "#id", options)` where `"type"` means the type of the presented form, `"#id"` is the HTML identifier of the block , where the form is to be displayed, and `options`, which contains additional information about form styling. ## Styling and form options The `options` object, the third attribute of `P24.render()` method, accepts objects with the following values rendering the possibility of editing the card form and its layout freely. Additionally, the form allows to call `P24.clear()` method, to be used if a given field of the form is to be cleared. ```javascript /* Initialize card form */ const P24 = new Przelewy24CardTokenization(merchantId,"sessionId","sign"); /* Render the iFrame form and additional styling settings */ const options = {}; P24.render("type", "#id", options); /* Invoking card tokenization with the appropriate type after pressing the button */ const clearAll = document.getElementById("clearAll"); clearAll.addEventListener('click', function () { P24.clear(); }) ``` The `P24.clear()` function may have the following attributes:
`"card"` - clears the card number field,
`"cvv"` - clears the card CVV/CVC field,
`"exp"` - clears the card expiry date field,
`"cardholder"` - clears the cardholder details field.
Calling the function without function arguments results in clearing all the fields of the form. - name: Form initialization v2 x-displayName: Form initialization - SDK (in preparation) description: | Card transaction processing is based on JavaScript downloaded from Przelewy24 server. Payment card and Click to Pay transactions are effected by calling the iFrame window based on the ready-made SDK indicating the Przelewy24 library. The library contains all offered objects and related methods used for correct form integration and customization. Example view of card form without Click to Pay service disabled
Payment widget

Example view of the card form with Click to Pay enabled
Payment widget with Click to Pay

Within the Click to Pay service, for the moment there is no possibility to use the payer profile data to permanently enroll data that could later be used for oneClick transactions, recurrences, etc. ## Library Calling the library for the production environment: ```javascript ``` Calling a library for a sandbox environment: ```javascript ``` ## Class Przelewy24CardTokenization In order to generate a card form in an iFrame window, use the implemented library to define the Transfers24CardTokenization class and call the render method
```javascript /* Initialize card form */ const P24 = new Przelewy24CardTokenization(merchantId,"sessionId","userId","sign"); ``` Class `Przelewy24CardTokenization` parameters should be taken as:



## Method render The render method allows you to indicate in which HTML element you want the iframe to be built and to style it by passing an options object. ```javascript /* Initialize card form */ const P24 = new Przelewy24CardTokenization(merchantId,"sessionId","sign"); /* Render the iFrame form and additional styling settings */ const options = {}; P24.render("type", "#id", options); ``` Take as parameters of the `P24.render()` function: ## Styling and form options The `options` object, the third attribute of `P24.render()` method, accepts objects with the following values rendering the possibility of editing the card form and its layout freely.

In addition, there is a simulator that allows you to style the form yourself, then copy the finished code and paste it directly into your project.


Look of form for examples sent `options`: 1. View when the payer wasn't recognized in Click to Pay with a change of font, content for labels and one button from temporarily saving the card:
              
      {
        "lang": "pl",
        "c2p": "true",
        "psu": {
          "email": "Jan.Kowalski@gmail.com"
        },
        "labels": {
          "cardholder": "Imię i nazwisko posiadacza karty",
          "card": "Numer karty",
          "cvv": "Numer CVV/CVC karty",
          "exp": "Data ważności karty"
        },
        "buttons": {
          "tokenize_temporary": {
             "label": "Zapisz kartę"
          }
        },
        "styles": {
          "font": {
            "basic": {
            "size": "20px",
            "family": "Roboto"
            }
          }
        }
      }
            
Payment widget

2. View when the payer was recognized in Click to Pay with a change in content for placeholders, the terms and conditions of Przelewy24 and without the buttons available in the form:
              
      {
        "c2p": "true",
        "psu": {
          "email": "Jan.Kowalski@gmail.com"
        },
        "placeholders": {
          "card": "Podaj numer karty",
          "cvv": "Podaj numer CVV/CVC karty",
          "exp": "Podaj datę ważności karty",
          "cardholder": "Podaj imię i nazwisko posiadacza karty"
        },
        "agreement": {
          "contentEnabled": {
            "enabled": true,
           "checkboxEnabled": false
            }
          },
        "buttons": {
          "tokenize": {
             "label": "Zapisz kartę"
            }
          }
        }
              
            
Payment widget

3. View when Click to Pay isn't enabled, including the change of font, the color of the fields for entering card data, the terms and conditions of Przelewy24 requiring the Payer to mark, and the button for permanent card saving.
              
      {
        "placeholders": {
          "card": "",
          "cvv": "",
          "exp": "",
          "cardholder": ""
        },
        "agreement": {
          "contentEnabled": {
          "enabled": true,
          "checkboxEnabled": true
          }
        },
        "styles": {
          "font": {
            "basic": {
            "size": "20px",
            "family": "Roboto"
            }
          },
          "background": {
            "basic": {
            "color": "#F6F3FD"
            }
          }
        }
      }
              
            
Payment widget


## Method clear Form allows you to call the `P24.clear()` method to clear a given form field. No parameter will clear the whole form. ```javascript /* Initializing the card form */ const P24 = new Przelewy24CardTokenization(merchantId,"sessionId","sign"); /* Rendering of the iFrame form and additional styling settings*/ const options = {}; P24.render("type", "#id", options); /* Clear a particular field or the whole form */ const clearAll = document.getElementById("clearAll"); clearAll.addEventListener('click', function () { P24.clear(); }) ``` Available function parameters `P24.clear()`:
## Events Throughout the process, from creating the form to completing the data or clicking on the card data tokenization button, the appropriate events that match the situation will be passed. The addEventListener method can be used for this purpose. ```javascript /* Listening for an event with logging it into the consola */ window.addEventListener('message', (e.data) => console.log(e.data)) ```
  • loading event - sent at the beginning of the form rendering. If the options.loader: true parameter was passed in the render method, this is the moment from which the loader will be visible on the Merchant page.
    • start event - sent after the form is rendered. It is explicit to close the loader, which was started earlier.
      • ready event - sent depending on the status of the completed form by the Payer. Event indicates when a particular button embedded in Merchant's page can be activated. Buttons in the iFrame will automatically activate/deactivate depending on the situation.
        • success event - sent after the creation of a token allowing the Payer to charge the payment card
          • fail event- sent when problems are detected, e.g. the card number provided by the Payer is incorrect. Example message values for the error parameter:
            • minWidth370px - a smaller iframe width than is allowed is given
            • cardHolderLabelMaxLength40Chars - the allowed number of characters for the labels.cardholder parameter was exceeded
            • buttonTokenizeLabelRequired - no text specified for card data permanent write button
            • invalidCardHolder - payer entered incorrect data for cardholder field
            • aregulationsIsRequired - the payer did not accept the regulations after checking the checkbox
            • invalidTokenizationType - card data cannot be saved. An attempt to save Click to Pay profile data has occurred
          ## Tokenization Tokenization is possible via a button in the form or by using the tokenize() function.

          Tokenization is performed by calling the `P24.tokenize()` method in the JavaScript code. ```javascript /* Initialize card form */ const P24 = new Przelewy24CardTokenization(merchantId,"sessionId","sign"); /* Render the iFrame form and additional styling settings */ const options = {}; P24.render("type", "#id", options); /* Invoking card tokenization with the appropriate type after pressing the button */ const tokenizeTemp = document.getElementById("tokenizeTemp"); tokenizeTemp.addEventListener('click', function () { P24.tokenize("temporary") }) ``` The `P24.tokenize()` function can take two properties:
          • `"permanent"` - allows you to create a permanent token, which you can then use for oneClick or recurring payments,
          • `"temporary"` - Allows you to create a temporary token for one-time payments.
          The `P24.tokenize()` function can take two properties: `"permanent"` or `"temporary"`. The function does not need to be called by listening for the "click" event via addEventListener. It is possible to present a button in an iFrame form by adding a `"tokenize"` or `"tokenize_temporary"` object in the `"options"` object, according to the parameters described in the
          Styling and form options. ## Basic flow Below are the flows for the basic processes of saving card data with attention to the transmitted events. Flow of saving card data without Click to Pay. Only the buttons object was passed in options.
          During the creation of the iframe on the merchant page, the loading event will be sent. The start event will be passed as soon as the card form view is rendered. According to the assumptions, until the ready enent is passed with the status set to true, the buttons for saving card data must be inactive. Only after the card data (cardholder's name, card number, expiration date and cvv/cvc of the card) is correctly filled in, will an event be sent ready with the status set to true for both types of buttons (pernament and temporary). If the payer deletes any part of the required data then an event ready with a status of false will be sent. This means that the buttons for saving data must become inactive. Only after the data is correctly completed will the event ready with the status true be sent again. The buttons in the iFrame become active. When you click on one of the buttons, the P24.tokenize method will be called with the appropriate parameter. In response, you may see a fail event with an error message or a success event with the data needed to charge the payer. In order to process the payment later, you need to register the transaction and use a dedicated library for this. Read more
          Click to Pay payment flow
          Flow of enrollment of card data from Click to Pay. A buttons object and a c2p parameter with the value true have been passed in options. The payer has the Click to Pay profile stored in the device.
          During the creation of the iframe on the merchant page, the loading event will be sent. The start event will be passed as soon as the card form view is rendered. According to the assumptions, until the ready enent is passed with the status set to true, the buttons for saving card data must be inactive. Before the view in the iframe is rendered, the verification of the payer's login to Click to Pay by the stored device takes place. If the payer's login to Click to Pay succeeds, an event start will be sent and immediately an event ready with a status of true, but only for the temporary button. At the moment, within Click to Pay there is no possibility to save data pernamentally. When you click on the temporary button, the P24.tokenize method with the temporary parameter will be called. In response, you may see a fail event with an error message or a success event with the data needed to charge the payer. In order to process the payment later, you need to register the transaction and use a dedicated library for this. Read more
          Click to Pay payment flow - recognize the payer
          Flow of enrollment of card data from Click to Pay. The options passed a buttons object and a c2p parameter with the value true. The payer does not have the Click to Pay profile memorized with the device.
          During the creation of the iframe on the merchant page, the loading event will be sent. The start event will be passed as soon as the card form view is rendered.According to the assumptions, until the ready enent is passed with the status set to true, the buttons for saving card data must be inactive. Before the view in the iframe is rendered, verification of the payer's login to Click to Pay takes place. If it fails, the card form view with the option to log in to Click to Pay is rendered. The payer selects the option to log in to Click to Pay. He enters his email and then the OTP code. Only after the payer correctly logs into the Click to Pay profile will an event be transmitted ready with a status of true for the temporary button. At the moment, there is no way to save data permanently within Click to Pay. When the temporary button is clicked, the P24.tokenize method will be called with the temporary parameter. In response, you may see a fail event with an error message or a success event with the data needed to charge the payer. In order to process the payment later, you need to register the transaction and use a dedicated library for this. Read more
          Click to Pay payment flow - login by payer
          Flow of enrollment of card data from Click to Pay. The options passed a buttons object and a c2p parameter with the value true. The payer sets up a Click to Pay profile
          During the creation of the iframe on the merchant page, the loading event will be sent. The start event will be passed immediately after the card form view is rendered. The assumption is that until the ready enent is passed with the status set to true, the buttons for saving card data must be disabled. Before the view is rendered in the iframe, the payer's login to Click to Pay is verified. If it fails, the card form view with the option to log in to Click to Pay will be rendered. An event ready with a status of true for both types of buttons will be sent after the payer completes the required data (name of the cardholder, card number, expiration date and cvv/cvc of the card). In addition, there will be a checkbox with the option to save the card in Click to Pay. Once it is checked, an event ready will be sent with a status of false for both buttons. A 'next' button will appear in the iFrame. After the payer clicks it, an additional view will be presented asking for email address, phone number and country. Once it is completed correctly, an event ready will be sent with a status of true for the temporary button. At the moment, there is no possibility to save data permanently within Click to Pay. When you click on the temporary button, the P24.tokenize method with the temporary parameter will be called. In response, you may see a fail event with an error message or a success event with the data needed to charge the payer. In order to process the payment later, you need to register the transaction and use a dedicated library for this. Read more
          Click to Pay payment flow - new payer
          - name: Card payment flow x-displayName: Card payment flow description: > The Przelewy24 process allows you to execute card transactions based on standardized JavaScript. The system recognizes the method, userId and transaction registration used and executes the transaction according to them.

          flow procesu kartowego

          One-time payment - register a transaction using transaction/register method with the token that was passed in the refId parameter in the success type event after using cardTokenizationIframe.min.js library. The cardData.means.referenceNumber parameter should pass the refId value and the TransacationType should take the standard value. In the response, a transaction token will be passed, which must be passed when the script is executed: https://{{environment}}.przelewy24.pl/whitelabel/card/javascript/{{token_transakcyjny}} Recurring payment and oneClik - register a transaction using transaction/register method with the token that was passed in the refId parameter in the success type event after using cardTokenizationIframe.min.js library. In the cardData.means.referenceNumber parameter, the refId value should be passed and the TransacationType should take the initial value. In response, you will be given a transaction token, which you need to pass when executing the script: https://{{environment}}.przelewy24.pl/whitelabel/card/javascript/{{token_transakcyjny}}. Any subsequent use of the token from the refId parameter for subsequent transactions will require a corresponding change in the TransacationType parameter to a value of oneClick or recurring, depending on the type of transaction that will take place. JavaScript Callback: ```
          ``` - name: Recursion (doPayment) x-displayName: Recurrence description: > In order to register a recurring transaction, it is necessary to send transaction registration request first to /transaction/register endpoint. . For the transaction to be performed, the `“cardData”` object must be added in the transaction registration request. ```json { "cardData": { "means": { "card": { "pan": "1234123412341234", "expYear": "2027", "expMonth": "01", "clientName": "Name and surname", "securityCode": "123" } }, "transcationType": "recurring", "traceID": "" } } ``` Description of the specific parameters of the object: - the `"card"` object contains card data such as: - `"pan"` - 16-digit card number - `"expYear"` - card expiry year - `"expMonth"` - card expiry month - `"securityCode"` – CVV/CVC code - `"transactionType"` - takes the “recurring” value - `"traceID"` - initiating transaction reference number (required for recurring, if the following have been provided: card, schemeToken) Provided that all the parameters in the transaction registration request are correct, a token required for `transaction/doPayment` request is returned in response. - name: Card notification x-displayName: Card notification description: > In case of the forms of payment that require additional information on transaction progress, it is possible to obtain additional notification. In order to declare return address, provide urlNotify parameter during transaction registration ## Posivite notification In the case of a positive result of the transaction, where payment was made by card, the following notification will be provided: ## Negative notification In the case of a negative result of a transaction, where payment was made by card, the following notification will be provided: ## Calculation of sign for positive and negative notification Sign for card transaction notification is calculated based on the following: ```json {"merchantId":int,"posId":int,"orderId":int,"sessionId":"string","method":int,"result":"object","crc":"string"} ``` ## Notification with card tokenization data (in preparation) The following notification will be sent when there is a successful enrollment of card data in card ogranizations involving the receiving of a netwrok token. - name: Mobile payment (iOS) x-displayName: Mobile payment (iOS) description: > ## Introduction ### Adding the SDK to the project In the Podfile, add the following entry:
          ``` pod 'P24SDKAll', :git => 'https://github.com/przelewy24/p24-sdk-ios.git' ``` ### Initialization Before any action is performed, the following modules must be loaded at application startup: ```json P24.shared.install(modules: [ CardTokenizeModule(), CardChargeModule() ]) ``` - name: Mobile payment (Android) x-displayName: Mobile payment (Android) description: > ## Introduction P24 SDK is a mobile library for Android designed to facilitate various payment processes. It offers a few modules, including `core`, `card-tokenize` and `card-charge`. This documentation focuses on the integration and use of the card-tokenize module for the tokenization of card data with the use of a secure form. - `core` - basic functionalities required for SDK P24 - `card-tokenize` - allows card tokenization via the form - `card-charge` - allows cards to be charged Card Tokenization Module
          The `card-tokenize` module allows safe tokenization of card details by means of a nested form. The module provides an easy-to-use interface for collecting and tokenizing card information, which is crucial for ensuring PCI conformity and safe payment processing. ## Card tokenization ### Card tokenize initialization Download and import
          The SDK P24 pack is currently available in the form of a .zip file containing Maven repository. In order to add it to your project, perform the following steps: Download the SDK P24 .zip file from the source provided. Next, extract the .zip file to the requested location. Adding to Dependencies
          Add the local Maven repository to your build.gradle: ```json repositories { maven { url uri('/path/to/unzipped/repository') } } ``` Add the `core` and `card-tokenize` dependencies to your dependencies block: ```json dependencies { implementation 'pl.p24.sdk:core:1.0.0' implementation 'pl.p24.sdk:card-tokenize:1.0.0' } ``` ### Load module Before you make the first request, it is best to load the module at application startup: ```kotlin P24.install( CardTokenizeModule ) ``` ### Creating a Tokenize Card Request To initialize the card tokenization form, create a `TokenizeCardRequest` using the `TokenizeCardRequestBuilder`. Here’s how to set up and start the process in Kotlin:

          Step 1. Create the Request Builder ```kotlin val request = TokenizeCardRequestBuilder() .merchantId("your-merchant-id") .sessionId("your-session-id") .sign("checksum-signature") .allowedModes(setOf(TokenizationMode.Permanent, TokenizationMode.Temporary)) .environment(Environment.Sandbox) .formStyle(FormStyle()) // Example style, actual styles TBD .termsOfServiceConfig(TermsOfServiceConfig()) .callback(object : TokenizationCallback { override fun onStarted() { // Handle start of the tokenization process } override fun onSuccess(tokenizedCard: TokenizedCard) { // Handle successful tokenization } override fun onFailed(errors: List) { // Handle failure with error messages } override fun onCanceled() { // Handle user cancellation } }) .build() ``` Steo 2. Start the Tokenization Process ```kotlin request.start() ``` Parameters Explained: `merchantId` - Your unique merchant identifier.
          `sessionId` - The session ID for tracking the request.
          `sign` - A checksum or signature for request validation.
          `allowedModes` - Set of allowed tokenization modes (`TokenizationMode.Permanent`, `TokenizationMode.Temporary`).
          `environment` - Determines the API environment (`Environment.Production`, `Environment.Sandbox`).
          `formStyle` - Style of the form. More details provided in section: "Form styling"
          `callback` - Call back interface for managing various stages of tokenization.
          ### Form styling The `FormStyle` class is used for defining the layout of the card tokenization form. It allows to adjust various entry fields and buttons in order to adjust them to the app design and improve user comfort. Components of FormStyle - cardNumber: adjusts the style in the card number field. - cardHolder: adjusts the style in the cardholder field. - cvv: adjusts the style in the CVV field. - expiryDate: adjusts the style in the card expiry date field. - payButton: adjusts the style of the pay button. - saveAndPayButton: adjusts the style of the “Save and Pay” button.
          InputStyle and ButtonStyle The `InputStyle` i `ButtonStyle` classes define how the input fields and buttons are styled. Class `InputStyle`: - placeholder: text displayed in the field, the co-called placeholder. - label: text of the label displayed above or next to the entry field. - border: defines the border style, including the border color. - background: entry field background. Class `ButtonStyle`: - label: Text displayed on the button. - color: The background color of the button. - labelColor: The color of the button text.
          "Terms of service" configuration The `TermsOfService` class is used to define the behavior and visibility of the Terms of Service (ToS) checkbox in the card tokenization form. It allows customization in order to ensure that users proceed to the payment process only after they have accepted the terms. Components of `TermsOfServiceConfig`: - isVisible: Determines whether the Terms of Service info is visible to the user. The default value is `true`, meaning it will be shown by default. - checkbox: Customizes the behavior and initial state of the checkbox through the `TOSCheckbox` data class.

          The `TOSCheckbox` class provides further ToS checkbox adjustment options. - isUserAllowedToChange: indicates whether the user may change the checkbox status. In case the false value is selected, the checkbox will be displayed, yet not interactive. - isChecked: sets the initial state of the checkbox. The default value is false, which indicates that the checkbox is not initially checked. ## Card charge Please download the P24 SDK file `p24-repository.zip` from the provided source. Then, extract the .zip file to your desired location. Then add the repository in Gradle: ``` maven { url("/PATCH_TO_DIR_WITH_REPO/p24-repository") } ``` Then add a dependency in the `dependencies`` section: ```json implementation("pl.p24.sdk:card-charge:0.0.1") ``` Preparing a request for the SDK: ```json val request = P24.cardRequest() .token(p24Token) .environment(Environment.Sandbox) //default Environment.Production .callback { event -> ... } .build() ``` Launching: ```json request.start() ``` Process interruption: ```json request.cancel() ``` Event types: - ProcessStarted - Need3DS - ProcessCompleted - ProcessCanceled - ProcessError ####GPAY#### - name: Google Pay x-displayName: Google Pay description: > ## Communication scheme Once the „Pay with Google Pay” button is clicked, the Google Pay payment form will be displayed on the customer’s screen. The customer confirms their Google account and the card to be used for payment (at this stage, they may change the card to an earlier added one or add a new card). The background script transfers encrypted card data with postMessage function which the shop must receive and subsequently encrypt with Base64 function.

          On its website, the shop must call the script made available by Google. For details, see:

          https://developers.google.com/pay/api/web/guides/tutorial

          In order to add Przelewy24, modify the Processor data in the script call: ```javascript var tokenizationSpecification = { tokenizationType: 'PAYMENT_GATEWAY', parameters: { gateway: 'przelewy24', gatewayMerchantId: '[MerchantID from P24]' } } ``` ## Transaction registration Transaction registration with Google Pay involves adding two additional parameters in the transaction registration request in the `"cardData > means > xPayPayload"` object. The value obtained from Google via postMessage (paymentMethodToken.token) and encrypted with base64 function, as well as the `“type”` parameter with the `“googlepay”` value must be provided in the `“payload”` parameter.
          POST https://secure.przelewy24.pl/api/v1/transaction/register
          Additional POST call parameter | Field name | Type | Required | Description | |--------------|:--------------:|----------:|------------:| | cardData > means > xPayPayload | STRING | Y |Token obtained from Google Pay, encrypted with base64 function| | type | STRING | Y |Enter “googlepay” value in “type” parameter| Before sending the transaction request, the transaction data must be saved to the seller’s local database. In particular, information on session ID and transaction amount must be saved. In order to allow uniform website and mobile app design, a set of dedicated guidelines has been made available at https://developers.google.com/pay/api/web/guides/brand-guidelines Advice on developing mobile applications is available at https://developers.google.com/pay/api/android/guides/tutorial ####APAY#### - name: Apple Pay x-displayName: Apple Pay description: > ## Requirements Web domain certification: Transaction processing with ApplePay requires the Seller to register merchant ID and proceed to domain certification. The description of the process is available at https://developer.apple.com/documentation/apple_pay_on_the_web/configuring_your_environment.

          Creating Apple Pay Payment Processing Certificate:
          Before proceeding with the process of creating a certificate, obtain a CSR file (for detailed information, please contact the Implementation Department of Przelewy24 via contact form).
          After logging in to your Apple Developer account: - select the Certificates, IDs & Profiles option, - select the Identifiers / Merchant IDs option, - select the Merchant ID created in the previous step and go to the Edit option, - select the Create Certificate option in the Apple Pay Payment Processing Certificate section, - select the Continue option, - upload the CSR file received from the Przelewy24 Implementation Department, using the Choose File option, - download the generated certificate and forward it to the Przelewy24 Implementation Department. ## Communication Scheme Once the „ApplePay” button is clicked, the Apple payment form will be displayed on the customer’s screen. The customer selects the card saved in the device. The background script transfers encrypted card data in paymentData object which the shop must receive, subsequently encrypt again with base64 function and send in the transaction registration request. The store must run the script provided by Apple on its website (details available at: https://developer.apple.com/documentation/apple_pay_on_the_web ). The script in the background transfers encrypted card data which the shop must receive, subsequently encrypt again with base64 function and send in the payload parameter along with other transaction details. ## Transaction Registration Transaction registration with Apple Pay involves adding two additional parameters in the transaction registration request in `"cardData > means > xPayPayload"` object. The value obtained via postMessage (paymentMethodToken.token) and encrypted with base64 function, as well as the `“type”` parameter with the `“applepay”` value must be provided in the `“payload”` parameter.
          POST https://secure.przelewy24.pl/api/v1/transaction/register
          Additional **POST** call parameter | Field name | Type | Required | Description | |--------------|:--------------:|----------:|------------:| | cardData > means > xPayPayload | STRING | Y |Token obtained from Apple Pay, encrypted with base64 function| | type | STRING | Y |Enter “applepay” value in “type” parameter| ## Additional Information In order to allow uniform website and mobile app design, follow the provided guidelines in the course of implementing the ApplePay service. The description of the styles and buttons for websites is available at https://developer.apple.com/apple-pay/acceptable-use-guidelines-for-websites/. - name: Buttons and banners x-displayName: "Buttons and banners" description: > ### Instalments – Introduction BNPL solutions may be a way to increase the turnover and reduce the rate of abandoned carts at your shop. Yet, the activation of online instalments alone on the payment wall will not bring about the desired effect (... or the effect will be limited). It is the correct exposure on your shop’s website that allows to harvest the full potential of online instalments. This guide will let you find out how to go about it. Minimalism is a good practice in UX, but forget it if you want your customers to select instalment payments. If you want to reach the buyers who select this method to pay for their orders, make sure they learn about it before the order is finalised. Inform your customers that it is possible to divide the payment into instalments at each step of the shopping path:
          • on the main webpage,
          • on the list of products
          • on the product card and
          • at checkout
          Be aware of the fact that customers who choose to pay in instalments usually have limited funds at their disposal. While still determined to make the purchase, they are looking for the most advantageous offer. Post information on instalments on the main webpage. Use a slider or a top banner. raty-slider This is how you’ll reach a wide circle of customers. Newcomers will get the signal that they may pay in instalments. Add the instalments logo to the payment methods presented in the webpage’s footer. That’s one of the key spots where customers look for information on the payment methods available. raty-stopka If your website is internally complex (categories, subcategories), place the “Buy in instalments” button on the subpages as well. raty-tu-kupisz-na-raty Informing customers on the availability of payment in instalments on product cards serves to increase the conversion of this payment method by over 40%, while it is only 8% when the information is provided as late as at the cart stage or at checkout. The minimum option is static graphic ads. Thanks to them, you will let your customer know that Przelewy24 Instalments service is available. raty-karta-produktu List of products is yet another spot where you can attract your customers to make quicker shopping decisions or to add additional products to their carts. Basket / order summary - this is where placing information on instalments is a must. Home stretch. You don’t want your customer to abandon the cart at this point. Give a clear signal concerning the finalisation of instalment payments. Remember that at this stage the customer will already have selected the payment method, so make sure you keep telling them about instalments from the very start of their purchasing journey. raty-koszyk Checkout - place the instalment payment method at checkout. raty-checkout To find out how to display a given payment method, visit How to display the full selection of payment methods on the shop’s website? By default, the instalment method is available as method=303. Redirection should be done in compliance with the z guidelines All graphic materials are available here: (https://www.przelewy24.pl/storage/app/media/do-pobrania/p24_raty/p24_raty_materialy_graficzne.zip) - name: Widget x-displayName: Widget description: > Present the lowest possible instalment for a given product. raty-najnizsza Once customers click on the widget, any element may be displayed, for example a pop-up window with information on Przelewy24 I Instalments. In order to activate the widget, the following java script must be entered: MINI version raty-mini ```javascript
          ``` MAX version raty-max ```javascript
          ``` - name: Simulator x-displayName: Simulator description: > This is a way to increase user engagement. The calculator allows you to present more detailed information about the available installments. “Clicking through” different installment options will bring the customer closer to the next stage of the purchasing path. raty-symulator

          Przykłady gotowych kodów do prezentacji symulatora na stronie

          MINI version with click and call calculator in modal
          MAXI version with click and call calculator in modal
          Custom button with click and calculator call in modal

          MINI version with click and call calculator in modal

          ```javascript
          ```

          MAX version with click and call calculator in modal

          ```javascript
          ```

          Custom button with click and calculator call in modal

          ```javascript Custom button with calculator modal
          ```
          Parameters required to call the widget or the simulator: | Parametr | Description | |--------------|:----------------------| | sign | Calculated as sha384({„crc”:”string”,”posId”:int,”method”:int}) | | posId | Shop ID (by default Partner ID) | | method | By default 303 | | amount | Amount in grosz | | lang | Allowed: pl | | currency | Allowed: PLN | Parameters optional to call the widget or the simulator: | Parametr | Description | |--------------|:----------------------| | test | Allowed: true, false | When the test parameter is sent with the value `true`, the `sign`, `posId` and `method` fields are not validated, but must instead be passed in the `config` object.