For the correct configuration of notification sending, enter the appropriate notification URL in the imoje administration panel.
To add an address, log in to the imoje panel, go to the Shops tab, select the shop where the integration is performed, and click on Details. Then go to the Integration data section and edit the Notification address field.
Notifications are sent from IP addresses in the following ranges: 5.196.116.32/28, 51.195.95.0/28, 54.37.185.64/28, 54.37.185.80/28, 147.135.151.16/28
Notifications are sent to the default HTTP (80) and HTTPS (443) ports.
When the transaction status changes, imoje servers send notifications to the URL specified in the administration panel.
The merchant's server (e.g. shop) is required to respond with status 200 OK with body {'status':'ok'}, which will indicate that the notification has been correctly received and processed by the merchant's server.
Notifications are sent in the following cycle:
- 3 times every 10 seconds, then
- 5 times every 5 minutes, then
- 5 times every 60 minutes, then
- 5 times every 360 minutes, then
- 5 times every 720 minutes.
If the merchant's server returns a 200 OK status, or the notification is not received by the end of the entire cycle, imoje servers will stop resending the notification.
If two identical notifications are received from imoje servers, the first one should be handled in accordance with the section notification signature verification method, while the second one (duplicate) should be ignored.
The notification may consist of the following objects:
transaction- contains information about the transaction if it was created after the payer selected the payment methodpayment- contains information about the payment link createdaction- contains information about the data used to redirect to the external bank websitepaymentProfile- contains information about the created Oneclick/Recurring card profile
The payment object will be the only object sent when the payment link expires or is manually cancelled.
Notification parameters
Parameters for the transaction object:
| Parameter | Type | Description |
|---|---|---|
id |
string(36) | Transaction identifier UUID v4 |
type |
string | Type of transaction, allowed values: sale, refund |
status |
string | Transaction status, allowed values: new, pending, settled, cancelled, rejected |
source |
string | Transaction source, allowed values: api, web |
created |
integer(10) | Transaction creation date |
modified |
integer(10) | Transaction modification date |
notificationUrl |
varchar(300) | Notification address |
serviceId |
string(36) | Service identifier UUID v4 |
amount |
integer(9) | Transaction amount, maximum value: 999999999 |
currency |
string(3) | Transaction currency in ISO 4217 |
title |
string(255) | Order title, allowed characters: A-Za-z0-9#&_-"',./ and space character(0x20) and characters in the UNICODE range 00C0 - 02C0 (including Polish diacritics) |
orderId |
string(100) | Order number, allowed characters: A-Za-z0-9#_-./ and space character(0x20) and characters from the UNICODE range 00C0 - 02C0 (including Polish diacritics) |
paymentMethod |
string | Order fulfilment method |
paymentMethodCode |
string | Indication of payment channel |
statusCode |
string(24) | Card transaction status code |
statusCodeDescription |
string(113) | Card transaction status code description |
Parameters for the payment object:
| Parameter | Type | Description |
|---|---|---|
id |
string(36) | Order identifier UUID v4 |
title |
string(255) | Order title, allowed characters: A-Za-z0-9#&_-"',./ and space character(0x20) and characters in the UNICODE range 00C0 - 02C0 (including Polish diacritics) |
amount |
integer(9) | Order amount, maximum value: 999999999 |
status |
string | Order status, allowed values: new, pending, settled, cancelled, rejected |
created |
integer(10) | Order creation date |
orderId |
string(100) | Order number, allowed characters: A-Za-z0-9#_-./ and space character(0x20) and characters from the UNICODE range 00C0 - 02C0 (including Polish diacritics) |
currency |
string(3) | Order currency in ISO 4217 |
modified |
integer(10) | Order modification date |
serviceId |
string(36) | Service identifier UUID v4 |
notificationUrl |
varchar(300) | Notification address |
ipksef |
string | KSeF payment identifier |
Parameters for the action object:
| Parameter | Type | Description |
|---|---|---|
type |
string | Redirection type, allowed values: redirect, transfer |
url |
string(2083) | Redirection address |
method |
string | Redirection method, allowed values: POST, GET |
contentType |
varchar(100) | Data format type |
contentBodyRaw |
text | Redirection parameters |
ban |
string(26) | Bank account number, returned for Wire Transfer payment method |
Parameters for the paymentProfile object:
| Parameter | Type | Description |
|---|---|---|
id |
string(36) | Profile identifier UUID v4 |
merchantMid |
string(20) | Merchant identifier |
merchantCustomerId |
string(36) | Customer identifier, allowed characters: A-Za-z0-9 and dash (0x2D) |
firstName |
string(100) | Payer first name, allowed characters: A-Za-z0-9#&_-"',./ and space character (0x20) and characters from the UNICODE range 00C0 - 02C0 (including Polish diacritical marks) |
lastName |
string(100) | Payer last name, allowed characters: A-Za-z0-9#&_-"',./ oand space character (0x20) and characters from the UNICODE range 00C0 - 02C0 (including Polish diacritical marks) |
maskedNumber |
string(16) | Partially masked payment card number |
month |
string(2) | Card validity - month |
year |
string(4) | Card validity - year |
organization |
varchar(30) | Payment card organisation |
isActive |
integer(1) | Card profile activity status. 1 - active, 0 - inactive |
profile |
string | Card profile type |
statusCode |
string(24) | Oneclick/Recurring transaction status code |
statusCodeDescription |
string(113) | Oneclick/Recurring transaction status code description |
Example content of the notification BODY
{
"transaction": {
"id": "07938437-cae3-4d46-877d-e1b9d6e6c58f",
"type": "sale",
"status": "pending",
"source": "api",
"created": 1666339083,
"modified": 1666339083,
"notificationUrl": "https://yourshopdomain.com/notification",
"serviceId": "a33f331b-23fc-42b0-9fd1-67f310028b46",
"amount": 1000,
"currency": "PLN",
"title": "yourTitle",
"orderId": "yourOrderId",
"paymentMethod": "blik",
"paymentMethodCode": "blik"
},
"payment": {
"id": "07980a69-a884-46f7-ad16-216c88a13b98",
"title": "yourTitle",
"amount": 1000,
"status": "pending",
"created": 1666339083,
"orderId": "yourOrderId",
"currency": "PLN",
"modified": 1666339083,
"serviceId": "a33f331b-23fc-42b0-9fd1-67f310028b46",
"notificationUrl": "https://yourshopdomain.com/notification"
},
"action": {
"type": "redirect",
"url": "https://paywall.imoje.pl/07980a69-a884-46f7-ad16-216c88a13b98",
"method": "GET",
"contentType": "",
"contentBodyRaw": ""
}
}
Notification header content
Additionally, the following parameters are included in HTTP headers:
Accept: "text/plain",
User-Agent: "imoje",
Content-Type: "application/json; charset=UTF-8",
X-Imoje-Signature: "merchantid={merchantid};serviceid={serviceid};signature={signature};alg={alg}"
where:
merchantid- customer IDserviceid- shop IDsignature- notification signaturealg- hash function algorithm, acceptable values:sha224,sha256,sha384,sha512
Example of an X-Imoje-Signature header
X-Imoje-Signature: "merchantid=6yt3gjtm9p7b8h9xsdqz;serviceid=63f574ed-d4ad-407e-9981-39ed7584a7b7;signature=20cdc8646eb268ea754842bdf0db1df21a2cf0b1c6e3e16e74ef7f7cca8f5450;alg=sha256"
Notification signature verification method
Verification of the notification signature is a critical element of authenticating the information sent in the notification package.
The header containing the notification signature has the following form:
X-Imoje-Signature: merchantid=[...];serviceid=[...];signature=[...];alg=[...]
To authenticate the origin and verify the integrity of the notification message, perform the following steps:
- From the headers of the incoming package to the notification address, retrieve the content of
X-IMoje-Signature. - Then retrieve the values of the
signatureandalgparameters. Depending on the hash function algorithm specified in the
algparameter, calculate the appropriate hash function:string incoming_signature = x_imoje_signature[signature] string body = notification_body string own_signature = hash(body + service_key, alg)The calculated value of
own_signatureshould be compared with the value ofincoming_signature, which was retrieved from the header.If the values of
own_signatureandincoming_signatureare identical, it means that the notification message is valid and comes from a trusted source.
Transaction statuses should only be changed once the signature has been successfully verified.
Example of notification signature verification
The header contains the imoje signature:
X-Imoje-Signature: merchantid=mdy7zxvxudgarxbsou9n;serviceid=a33f331b-23fc-42b0-9fd1-67f310028b46;signature=b73321c9e8bcc414b8c08198db4084dafb1b4dc252f512ffe71b1fbce857fd23;alg=sha256In the notification package, you receive
JSON:
{
"transaction": {
"id": "07938437-cae3-4d46-877d-e1b9d6e6c58f",
"type": "sale",
"status": "pending",
"source": "api",
"created": 1666339083,
"modified": 1666339083,
"notificationUrl": "https://yourshopdomain.com/notification",
"serviceId": "a33f331b-23fc-42b0-9fd1-67f310028b46",
"amount": 100,
"currency": "PLN",
"title": "",
"orderId": "Zamowienie test",
"paymentMethod": "pbl",
"paymentMethodCode": "ipko"
},
"payment": {
"id": "07980a69-a884-46f7-ad16-216c88a13b98",
"title": "",
"amount": 100,
"status": "pending",
"created": 1666339083,
"orderId": "Zamowienie test",
"currency": "PLN",
"modified": 1666339083,
"serviceId": "a33f331b-23fc-42b0-9fd1-67f310028b46",
"notificationUrl": "https://yourshopdomain.com/notification"
},
"action": {
"type": "redirect",
"url": "https://paywall.imoje.pl/07980a69-a884-46f7-ad16-216c88a13b98",
"method": "GET",
"contentType": "",
"contentBodyRaw": ""
}
}
Calculate the signature:
service_key:PIcMy86ssE5wuNHAuQn5zPKf6hCAwX3Oxvjwown_signature = sha256(body + service_key)own_signature:b73321c9e8bcc414b8c08198db4084dafb1b4dc252f512ffe71b1fbce857fd23Compare the calculated signature with the one received in the notification header:
const crypto = require('crypto')
let body = "{...}";
let headerSignature = "b73321c9e8bcc414b8c08198db4084dafb1b4dc252f512ffe71b1fbce857fd23";
let serviceKey = "PIcMy86ssE5wuNHAuQn5zPKf6hCAwX3Oxvjw";
let mySignature = crypto.createHash("sha256").update(body + serviceKey).digest("hex");
if (mySignature === headerSignature) {
// Notification verified correctly. Continue processing.
} else {
// Notification verified as negative. Ignore notification.
}
Notifications for reports
For scheduled reports, it is possible to receive notifications about the availability of the finished report.
To do this, after logging in to the imoje administration panel, go to the Reports tab, and then in the Scheduled reports section, select the Add report option. In addition to filling in the desired parameters in the form, you must also enter the Notification address, which will receive notifications about the availability of the report.
Notifications for reports are sent as a JSON object using the POST method and have the following form:
{
"id": "57526046-db6a-45f9-8288-284337129a8f",
"status": "generated",
"fileExt": "owi1",
"created": 1540382655,
"modified": 1705398343,
"url": "https://imoje.ing.pl/351e2776166edaf0e867e3231e518111b17580baa650c90764e671de57465e08c90ef7751600ef7107cdf7628ffced66bd85360776bf0b713881cbc9b9230c83"
}
IMPORTANT! Notifications for reports do not contain signatures.
The notification may consist of the following parameters:
| Parameter | Type | Description |
|---|---|---|
id |
string(36) | Report identifier UUIDv4 |
status |
string | Report status, acceptable values: generated |
fileExt |
string(5) | Report format, acceptable values: csv, owi1, mt940 |
created |
integer(10) | Date of report creation |
modified |
integer(10) | Report modification date |
url |
string(2083) | Redirect address |
Refund notifications
By default, we do not send return notifications.
However, if you would like to receive them, please contact us at kontakt.tech@imoje.pl. In your email, please include the ID of the shop for which you would like to enable return notifications.