Are you looking for test card numbers?

Would you like to contact support?

Point-of-sale icon

Event notifications

Receive terminal-generated event notification webhooks on your cash register.

From time to time, your payment terminal encounters an issue, or needs to perform maintenance. When this happens, the terminal generates an event notification. You can use event notifications on your cash register to inform your staff of the terminal's availability and state.

If your integration uses asynchronous cloud communications, you must set up event notifications. We then send the Terminal API responses to your event notifications endpoint.

Here we describe how to set up event notifications. You then receive webhooks that include a Terminal API EventNotification and, if applicable, a Terminal API asynchronous SaleToPOIResponse. You can use the received information to show a message on your cash register.

Set up event notifications

To get event notifications and, if applicable, asynchronous Terminal API responses, you need to make sure you can receive HTTP callbacks (webhooks) on a specific endpoint. Then you need to provide the URL to that endpoint in your Customer Area.

  1. Prepare your system. It needs to have:

    • An endpoint that can receive JSON messages.
    • For the test environment: an open TCP port for HTTP traffic (80, 8080, or 8888) or HTTPS traffic (443, 8443, or 8843) with TLSv1.2.
    • For the live environment: an open TCP port for HTTPS traffic (443, 8443, or 8843) with TLSv1.2.

  2. Log in to your test Customer Area.

    The live Customer Area is still using an older UI. Soon we will replace this with the new UI described here.

  3. Switch to the merchant account, store, or terminal that you want to set up notifications for.

  4. Go to Point of sale > Terminal settings > Integrations.

  5. In the Terminal API section, select Decrypted.

  6. Under Event URLs, select Add new.

  7. Select the pencil icon next to the field that appears.
    The Add URL dialog opens.

  8. Enter the details:

    • URL: the URL of the endpoint where you want to receive event notifications.
    • Username and Password (optional): the basic authentication credentials you set up on your server. We include these details in the header of the notification to authenticate with your server.
    • Public: select this option if the specified URL is on a public network.
    • Local: select this option if the specified URL is on a Local Area Network.

  9. Select Add URL.

  10. Select Save.

Event notifications will now be sent to the endpoint you specified. If you are using cloud communications with an asynchronous result, the Terminal API responses are also sent to this endpoint.

Event notification types

Each notification contains an EventToNotify value. You can use this to show a message on your cash register informing your staff of the terminal's state.

Event Description
Shutdown The terminal is shutting down.
BeginMaintenance Terminal maintenance is starting.
EndMaintenance Terminal maintenance is finishing.
OutOfOrder The terminal is out of order.
Initialised The terminal has been initialised and is ready for transactions.
Reject A request was rejected. The EventDetails element contains an explanation of the error.
SaleWakeUp The terminal is starting a payment request. The EventDetails element contains the reference number that was entered on the terminal.

Event notification examples

Shutdown

{
   "SaleToPOIRequest":{
      "EventNotification":{
         "EventDetails":"newstate=IDLE&oldstate=START",
         "EventToNotify":"Shutdown",
         "TimeStamp":"2019-08-07T10:16:10.000Z"
      },
      "MessageHeader":{
         "SaleID":"POSSystemID12345",
         "ProtocolVersion":"3.0",
         "MessageType":"Notification",
         "POIID":"V400m-324688179",
         "MessageClass":"Event",
         "MessageCategory":"Event",
         "DeviceID":"1517998561"
      }
   }
}

BeginMaintenance

{
   "SaleToPOIRequest":{
      "EventNotification":{
         "EventDetails":"newstate=IDLE&oldstate=START",
         "EventToNotify":"BeginMaintenance",
         "TimeStamp":"2019-08-07T10:16:10.000Z"
      },
      "MessageHeader":{
         "SaleID":"POSSystemID12345",
         "ProtocolVersion":"3.0",
         "MessageType":"Notification",
         "POIID":"V400m-324688179",
         "MessageClass":"Event",
         "MessageCategory":"Event",
         "DeviceID":"1517998562"
      }
   }
}

EndMaintenance

{
   "SaleToPOIRequest":{
      "EventNotification":{
         "EventDetails":"newstate=IDLE&oldstate=START",
         "EventToNotify":"EndMaintenance",
         "TimeStamp":"2019-08-07T10:16:10.000Z"
      },
      "MessageHeader":{
         "SaleID":"POSSystemID12345",
         "ProtocolVersion":"3.0",
         "MessageType":"Notification",
         "POIID":"V400m-324688179",
         "MessageClass":"Event",
         "MessageCategory":"Event",
         "DeviceID":"1517998561"
      }
   }
}

OutOfOrder

{
   "SaleToPOIRequest":{
      "EventNotification":{
         "EventDetails":"newstate=IDLE&oldstate=START",
         "EventToNotify":"OutOfOrder",
         "TimeStamp":"2019-08-07T10:16:10.000Z"
      },
      "MessageHeader":{
         "SaleID":"POSSystemID12345",
         "ProtocolVersion":"3.0",
         "MessageType":"Notification",
         "POIID":"V400m-324688179",
         "MessageClass":"Event",
         "MessageCategory":"Event",
         "DeviceID":"1517998563"
      }
   }
}

Initialised

{
   "SaleToPOIRequest":{
      "EventNotification":{
         "EventDetails":"newstate=IDLE&oldstate=START",
         "EventToNotify":"Initialised",
         "TimeStamp":"2019-08-07T10:16:10.000Z"
      },
      "MessageHeader":{
         "SaleID":"POSSystemID12345",
         "ProtocolVersion":"3.0",
         "MessageType":"Notification",
         "POIID":"V400m-324688179",
         "MessageClass":"Event",
         "MessageCategory":"Event",
         "DeviceID":"1517998564"
      }
   }
}

Reject

{
   "SaleToPOIRequest":{
      "EventNotification":{
         "EventDetails":"newstate=IDLE&oldstate=START",
         "EventToNotify":"Reject",
         "TimeStamp":"2019-08-07T10:16:10.000Z"
      },
      "MessageHeader":{
         "SaleID":"POSSystemID12345",
         "ProtocolVersion":"3.0",
         "MessageType":"Notification",
         "POIID":"V400m-324688179",
         "MessageClass":"Event",
         "MessageCategory":"Event",
         "DeviceID":"1517998565"
      }
   }
}

SaleWakeUp

{
   "SaleToPOIRequest":{
      "EventNotification":{
         "EventDetails":"0123456789",
         "EventToNotify":"SaleWakeUp",
         "TimeStamp":"2019-11-15T10:16:10.000Z"
      },
      "MessageHeader":{
         "SaleID":"POSSystemID12345",
         "ProtocolVersion":"3.0",
         "MessageType":"Notification",
         "POIID":"V400m-324688179",
         "MessageClass":"Event",
         "MessageCategory":"Event",
         "DeviceID":"1517998561"
      }
   }
}

Asynchronous Terminal API responses

If you use cloud communications and send your Terminal API requests to an asynchronous endpoint, we send the Terminal API responses to your event notifications endpoint (provided you have set that up). These responses are exactly the same as the responses you'd receive in a Terminal API integration using local communications, or using cloud communications with a synchronous endpoint.

The example below is a payment response.

{
  "SaleToPOIResponse": {
    "MessageHeader": {
      "MessageCategory": "Payment",
      "MessageClass": "Service",
      "MessageType": "Response",
      "POIID": "V400m-324688170",
      "ProtocolVersion": "3.0",
      "SaleID": "POSSystemID12345",
      "ServiceID": "200"
    },
    "PaymentResponse": {
      "POIData": {
        "POIReconciliationID": "1000",
        "POITransactionID": {
          "TimeStamp": "2021-07-13T13:18:27.000Z",
          "TransactionID": "CWf3001626182307000.NC6HT9CRT65ZGN82"
        }
      },
      "PaymentReceipt": [
        {
          "DocumentQualifier": "CashierReceipt",
          ...
          "RequiredSignatureFlag": false
        },
        {
          "DocumentQualifier": "CustomerReceipt",
          ...
          "RequiredSignatureFlag": false
        }
      ],
      "PaymentResult": {
        "AmountsResp": {
          "AuthorizedAmount": 45.08,
          "Currency": "EUR"
        },
        "OnlineFlag": true,
        "PaymentAcquirerData": {...},
        "PaymentInstrumentData": {
          "CardData": {
            "CardCountryCode": "826",
            "EntryMode": [
              "Contactless"
            ],
            "MaskedPan": "541333 **** 9999",
            "PaymentBrand": "mc",
            "SensitiveCardData": {
              "CardSeqNumb": "33",
              "ExpiryDate": "0228"
            }
          },
          "PaymentInstrumentType": "Card"
        }
      },
      "Response": {
        "AdditionalResponse": "AID=A000000004101001&tid=47314497&transactionType=GOODS_SERVICES&...B&posAuthAmountValue=4508",
        "Result": "Success"
      },
      "SaleData": {
        "SaleTransactionID": {
          "TimeStamp": "2021-07-13T13:18:27.846Z",
          "TransactionID": "772"
        }
      }
    }
  }
}

Next steps