BLIK Recurring
BLIK Recurring lets you charge the buyer without their involvement (MIT – Merchant Initiated Transaction). First, the buyer makes a payment (CIT – Customer Initiated Transaction) that registers a PAYID payment token.
To activate the service, sign an annex to your agreement.
Before integrating, read the documentation and requirements on the BLIK Recurring Payments page.
The buyer can delete the token in their bank. A deleted token no longer appears in the list of available tokens.
General Information about BLIK Recurring Payments
After the PAYID token is saved, the merchant can initiate recurring transactions and decide on their frequency and amount. In this model:
- The merchant can initiate transactions with variable amounts and frequencies.
- The maximum amount of a single transaction is PLN 2,000. Transactions above this limit are automatically declined.
- If the buyer has insufficient funds, a limit is exceeded, the bank does not support recurring payments, or another technical issue occurs, the system returns an appropriate error and the payment is not retried automatically – the merchant is responsible for retrying the payment.
In this model, the merchant assumes responsibility for potential fraud. The merchant confirms this by setting the recommendedAuthLevel parameter to NO_CONFIRMATION.
Currently, you cannot register a recurring payment with a zero amount. If the activation involves charging the buyer and it is not a fee for a service, the merchant must refund the activation charge.
Security Requirements and Recommendations
Before integrating the service, read the requirements and recommendations from our security experts. They help you protect against fraud.
BLIK Recurring Payment with PAYID Token Registration
To register a PAYID token, extend the standard order with a buyer section containing the extCustomerId and email fields, and with a payMethods section containing the blikData object with register set to true. In blikData, also include the recurring object that specifies the payment type.
{
...
"buyer": {
"extCustomerId": "<buyer identifier in the merchant system>",
"email": "<buyer email address>"
},
"totalAmount": <activation amount>,
"payMethods": {
"payMethod": {
"type": "BLIK_AUTHORIZATION_CODE",
"value": "<BLIK authorization code>",
"blikData": {
"aliasLabelProposal": "<recurring payment title>",
"register": true,
"recurring": {
"type": "O",
"initializationDate": "<first MIT transaction date>",
"expirationDate": "<PAYID token expiration date>"
}
}
}
}
}
For details about the parameters, see the Create an Order section in our API Reference.
If you manage your buyers' tokens yourself, include the generated PAYID token value in the registerTokenValue field. Otherwise, omit this parameter during token registration – PayU generates a unique value automatically.
The initializationDate and expirationDate parameters are optional.
The aliasLabelProposal value should be easy for the buyer to recognize and clearly refer to the specific recurring transaction.
You can include the optional authorizeDespiteRecurringNotSupported parameter (default: false). It specifies whether the BLIK transaction should be processed even if the buyer's bank does not support BLIK recurring payments.
If the request is sent for a bank that does not support BLIK recurring payments, PayU returns the AUTH_TOKEN_TYPE_NOT_SUPPORTED_BY_ISSUER error (see the table below).
| HTTP Status | Description | |
|---|---|---|
400 | ERROR_AUTHORIZATION_CODE / AUTH_CODE_EXPIRED | The authorization code has expired. |
400 | ERROR_AUTHORIZATION_CODE / AUTH_CODE_LIMIT_EXCEEDED | The authorization code limit has been exceeded. |
400 | ERROR_AUTHORIZATION_CODE / AUTH_CODE_CANCEL | The authorization code has been canceled. |
400 | ERROR_AUTHORIZATION_CODE / AUTH_CODE_USED | The authorization code has already been used. |
400 | ERROR_AUTHORIZATION_CODE / AUTH_CODE_INVALID | Invalid authorization code. |
400 | ERROR_VALUE_MISSING / MISSING_AUTHORIZATION_CODE | Validation error. The BLIK T6 authorization code is required for authorization. |
400 | ERROR_VALUE_INVALID / INVALID_BLIK_CODE | Invalid BLIK authorization code. It must consist of 6 digits. |
400 | ERROR_VALUE_INVALID / INVALID_AUTHORIZATION_CODE_USAGE | The authorizationCode field cannot be used in this context. |
400 | ERROR_VALUE_INVALID / INVALID_RECOMMENDED_AUTH_LEVEL_USAGE | The recommendedAuthLevel field cannot be used in this context. |
400 | ERROR_VALUE_INVALID / INVALID_APP_KEY_USAGE | The appKey field cannot be used in this context. |
400 | ERROR_VALUE_MISSING / MISSING_REGISTER_TOKEN_VALUE | The registerTokenValue field is required for merchants who manage their own tokens. |
400 | ERROR_VALUE_MISSING / INVALID_CURRENCY_CODE | Invalid currency code. |
400 | ERROR_VALUE_MISSING / MISSING_BUYER_EMAIL | Validation error. The email field is missing in the buyer section. |
400 | ERROR_VALUE_MISSING / MISSING_BUYER_EXT_CUSTOMER_ID | Validation error. The extCustomerId field is missing in the buyer section. |
400 | ERROR_VALUE_INVALID / INVALID_COUNTRY_CODE | Validation error in the countryCode field of the blikData section. An unsupported country code was used. |
400 | ERROR_VALUE_INVALID / INVALID_BLIK_RECURRING_TYPE | Validation error in the type field of the recurring section. An unsupported type was used. |
400 | ERROR_VALUE_INVALID / MISSING_ALIAS_LABEL_PROPOSAL | Validation error. The aliasLabelProposal field is missing in the blikData section. |
400 | ERROR_VALUE_INVALID / INVALID_INITIALIZATION_DATE | Validation error in the initializationDate field of the recurring section. The date cannot be later than the expirationDate value. |
400 | ERROR_VALUE_INVALID / INVALID_EXPIRATION_DATE | Validation error in the expirationDate field of the recurring section. The date cannot be in the past or earlier than the initializationDate value. If set, it cannot be more than 10 years in the future. |
400 | ERROR_TOKEN / AUTH_TOKEN_EXISTS | The token registration failed because the token already exists. |
400 | BUSINESS_ERROR / RECURRING_TOKEN_PAYMENT_NOT_ALLOWED | PayU has not enabled the recurring payment service for you. |
400 | ERROR_TOKEN / AUTH_TOKEN_TYPE_NOT_SUPPORTED_BY_ISSUER | The token cannot be registered because the selected bank does not support recurring payments. |
BLIK Recurring Payment with PAYID Token
To initiate a subsequent BLIK recurring payment, extend the standard order with a payMethods section containing the PAYID token and the blikData object. In blikData, include the bank application identifier appKey and the recurring object that specifies the request type.
If the response to the request for available payment methods does not include the bankApplicationReferences field for the BLIK token (type="PAYID"), do not send the appKey field when creating a payment with this token.
Include the appKey field only if the response for the PAYID token contains the bankApplicationReferences array and its objects include the key field. In that case, use the key value as the appKey value in your payment creation request.
{
...
"payMethods": {
"payMethod": {
"type": "BLIK_TOKEN",
"value": "<PAYID token value used for authorization>",
"blikData": {
"appKey": "<identifier of the bank mobile application chosen by the buyer>",
"recommendedAuthLevel": "NO_CONFIRMATION",
"recurring": {
"type": "O"
}
}
}
}
}
For details about the parameters, see the Create an Order section in our API Reference.
By setting the recommendedAuthLevel parameter to NO_CONFIRMATION, the merchant confirms that they assume responsibility for potential fraud.
| HTTP Status | Description | |
|---|---|---|
400 | ERROR_TOKEN / AUTH_TOKEN_NOT_FOUND | The token does not exist. |
400 | ERROR_TOKEN / AUTH_TOKEN_NOT_ACTIVE | The token is not active. |
400 | ERROR_VALUE_MISSING / INVALID_CURRENCY_CODE | Invalid currency code. |
400 | ERROR_VALUE_INVALID / INVALID_COUNTRY_CODE | Validation error in the countryCode field of the blikData section. An unsupported country code was used. |
400 | ERROR_VALUE_MISSING / MISSING_APPKEY | Validation error. The appKey field is missing in the blikData section. |
400 | ERROR_VALUE_INVALID / INVALID_ALIAS_LABEL_PROPOSAL_USAGE | The aliasLabelProposal field cannot be used in a token payment when PayU manages the tokens. |
400 | ERROR_VALUE_MISSING / MISSING_ALIAS_LABEL_PROPOSAL | The aliasLabelProposal field is required in a PAYID token payment when the merchant manages the tokens. |
400 | ERROR_VALUE_INVALID / INVALID_REGISTER_TOKEN_VALUE_USAGE | The registerTokenValue field cannot be used in a PAYID token payment. |
400 | ERROR_VALUE_MISSING / MISSING_AUTHORIZATION_CODE_OR_TOKEN | Validation error. Authorization data is required – the token is missing. |
400 | ERROR_VALUE_INVALID / AMBIGUOUS_AUTHORIZATION_USAGE | Two authorization methods were provided. To pay with a token, fill in only the value field with the token. |
400 | ERROR_VALUE_MISSING / MISSING_BUYER_EMAIL | Validation error. The email field is missing in the buyer section. |
400 | ERROR_VALUE_MISSING / MISSING_BUYER_EXT_CUSTOMER_ID | Validation error. The extCustomerId field is missing in the buyer section. |
400 | ERROR_VALUE_INVALID / INVALID_BLIK_RECURRING_TYPE | Validation error in the type field of the recurring section. An unsupported type was used. |
400 | ERROR_VALUE_INVALID / INVALID_INITIALIZATION_DATE_USAGE | The initializationDate field cannot be used in a token payment. |
400 | ERROR_VALUE_INVALID / INVALID_EXPIRATION_DATE_USAGE | The expirationDate field cannot be used in a token payment. |
400 | ERROR_VALUE_INVALID / TOTAL_AMOUNT_REQUIRE_SCA | The totalAmount value cannot exceed the threshold set for merchant-initiated transactions. |
400 | BUSINESS_ERROR / RECURRING_TOKEN_PAYMENT_NOT_ALLOWED | PayU has not enabled the recurring payment service for you. |
400 | ERROR_VALUE_INVALID / INITIALIZATION_DATE_NOT_MET | Validation error in the initializationDate field of the recurring section. The transaction was attempted before the defined date. |
400 | ERROR_VALUE_INVALID / EXPIRATION_DATE_NOT_MET | Validation error in the expirationDate field of the recurring section. The transaction was attempted after the defined date. |
400 | ERROR_VALUE_INVALID / NO_CONFIRMATION_AUTH_LEVEL_REQUIRED | Validation error in the recommendedAuthLevel field of the blikData section. The field must be set to NO_CONFIRMATION. |