BLIK POS
Your account must be enabled for this feature.
Only supported for limited acquirers in Poland.
This guide explains how to submit an in-person BLIK sale through the Payments REST API using PaymentTerminalSaleTransaction.
Availability and onboarding
BLIK at the point of sale must be enabled for the merchant, store, terminal, and acquiring route. Confirm that the target environment includes terminal BLIK support before starting certification or production traffic.
This flow is different from an e-commerce BLIK payment submitted as ApmSaleTransaction. For a terminal-originated BLIK sale:
- use
PaymentTerminalSaleTransaction; - identify the payment method with
paymentMethod.apmType: BLIK_POS; - send the BLIK code through
consumerData; - set
transactionOrigintoRETAIL; - do not send card data, a dummy card number, or a dummy expiry date.
Endpoint
POST {baseUrl}/payments
Sale request
The following example represents an online BLIK sale where the cardholder enters the BLIK code on the payment device.
{
"requestType": "PaymentTerminalSaleTransaction",
"transactionAmount": {
"total": 125.00,
"currency": "PLN"
},
"paymentMethod": {
"apmType": "BLIK_POS"
},
"consumerData": [
{
"item": "BLIK_CODE",
"value": "777153"
},
{
"item": "ONE_TIME_CODE_ENTRY_MODE",
"value": "CARDHOLDER_ENTERED"
}
],
"merchantTransactionId": "BLIK-POS-20260831-0001",
"transactionOrigin": "RETAIL",
"storeId": "<store-id>",
"terminalId": "10012002",
"merchantId": "MERCH12345678",
"terminalRequestData": {
"posEntryMode": "MANUAL",
"cardPresentIndicator": false,
"cardholderPresentIndicator": true,
"onlineReason": "TERMINAL_FORCED",
"attendanceContext": "ATTENDED"
},
"pointOfSaleDevice": {
"terminalProvider": "CASTLES",
"model": "S1P2",
"serialNumber": "191252354736",
"capabilities": {
"cardReadingCapabilities": [
"MANUAL"
],
"pinCapability": "HARDWARE"
}
}
}
Replace all identifiers and device values with the values assigned to, or reported by, the actual merchant and terminal. onlineReason must describe why the terminal sent the transaction online; use the value agreed for the terminal integration rather than copying the example without verification.
Request fields
| JSON path | Presence | Description |
|---|---|---|
requestType | Required | Must be PaymentTerminalSaleTransaction. |
transactionAmount.total | Required | Sale amount as a JSON number. |
transactionAmount.currency | Required | ISO 4217 currency code. BLIK POS integrations normally use PLN. |
paymentMethod.apmType | Required | Must be BLIK_POS. The property name is case-sensitive and uses lowercase apmType. |
consumerData[].item: BLIK_CODE | Required | The six-digit code generated in the cardholder's BLIK-enabled banking application. |
consumerData[].item: ONE_TIME_CODE_ENTRY_MODE | Required | How the BLIK code reached the terminal. See the values below. |
transactionOrigin | Required | Must be RETAIL. Other origins are rejected for terminal transactions. |
terminalId | Required | Terminal identifier assigned during onboarding; 6 to 32 characters. |
terminalRequestData.posEntryMode | Required | Use MANUAL for the BLIK code-entry flow. |
terminalRequestData.cardPresentIndicator | Required for this flow | Use false because no payment card is presented. |
terminalRequestData.cardholderPresentIndicator | Required for this flow | Use true for an in-person cardholder. |
terminalRequestData.onlineReason | Required for an online transaction | Select the reason that accurately describes why the terminal sent the transaction online. |
terminalRequestData.attendanceContext | Recommended | Use the actual terminal context, such as ATTENDED. |
pointOfSaleDevice | Required | Identifies the device. terminalProvider, model, and serialNumber are required. |
pointOfSaleDevice.capabilities | Required | Send the terminal's actual card-reading and PIN capabilities. Do not copy capabilities the device does not support. |
merchantTransactionId | Recommended | Merchant-generated reconciliation reference, up to 40 characters. |
storeId | Conditional | Required when the application can submit transactions for more than one store, or when required by the onboarding setup. |
merchantId | Conditional | Merchant identifier expected by the configured acquiring route. |
Do not include paymentMethod.paymentCard, paymentMethod.paymentCardProtected, a dummy PAN, a dummy expiry date, or EMV card data for this BLIK flow.
BLIK code entry modes
| Value | Use |
|---|---|
MERCHANT_ENTERED | A merchant employee entered the BLIK code on the point-of-sale device. |
CARDHOLDER_ENTERED | The cardholder entered the BLIK code on the payment device. |
SENT_VIA_NFC | The BLIK code was transferred to the terminal through NFC. |
Transaction response
A response can contain the following data. Fields unavailable for a particular transaction can be omitted.
{
"type": "transactionResponse",
"clientRequestId": "d8c30e6d-83a2-4aa1-a415-7f0cc5bc4212",
"apiTraceId": "<api-trace-id>",
"ipgTransactionId": "838916029301",
"orderId": "<order-id>",
"merchantTransactionId": "BLIK-POS-20260831-0001",
"transactionType": "SALE",
"transactionOrigin": "RETAIL",
"transactionResult": "APPROVED",
"transactionState": "CAPTURED",
"transactionAmount": {
"total": 125.00,
"currency": "PLN"
},
"approvedAmount": {
"total": 125.00,
"currency": "PLN"
},
"additionalDetails": {
"additionalResponseData": {
"blikTransactionId": "153047856"
}
},
"processor": {
"responseCode": "00",
"responseMessage": "APPROVED",
"authorizationCode": "<authorization-code>"
}
}
BLIK transaction reference
The BLIK transaction reference is returned only as additionalDetails.additionalResponseData.blikTransactionId:
{
"ipgTransactionId": "838916029301",
"additionalDetails": {
"additionalResponseData": {
"blikTransactionId": "153047856"
}
}
}
Transaction inquiry
Use transaction inquiry after a timeout, communication error, non-final result, or whenever the sale outcome is uncertain:
GET {baseUrl}/payments/{ipgTransactionId}
Alternatively, you can use the /orders endpoint.
Updated about 14 hours ago