• Updated the look&feel of the hosted payment page. Along many small improvements, the main features are:

    • Endusers are now always redirected to the checkout.pay.nl domain regardless of which core is handling the transaction.
    • Listing of sub brands when grouping is enabled for giftcards and Card payment methods.
  • Added split payments. This gives you the ability to transfer a part of the captured amount to another service id. This service id can also belong to another merchant. We will explain more about the details of this function later. For now, please check out optimize.splitPayment input of the Order:Create. There you can provide us with json input like below to split a payment between multiple services:

  • {
      "serviceId": "SL-2222-2222",
      "fee": "sender",
      "amount": {
        "value": 1000,
        "currency": "EUR"
      }
    }
  • Added the Voucher:info and Voucher:payment API. The Voucher:info API can be used to validate a giftcard to check the balance and brand information of a voucher before charging it. The Voucher:payment API can then be used to actually charge the voucher. Please note that the Voucher API's support both the POS and eCommerce route.

  • Brite: Fixed an error where cancelling a Brite payment would not cancel the TGU payment.

  • Brite: Fixed an issue where the enduser was redirected with the wrong country_id, resulting in the enduser getting the bank selection screen with banks from another country.

  • Bank transfer: Fixed an issue where the bank transfer email sent to the enduser would contain a different IBAN number than the hosted payment page was showing.

  • ECR: Correctly handle starting an ECR transaction that returns a busy state.

  • ECR: Added support for credit payments.

  • Wero: Fixed a case where the payment would get status pending when returning from Wero after cancelling the payment.

  • Wero: Added support for EventDependent payments.

  • FlyingBlue: Reduced the expire time of a FlyingBlue payment to prevent them from staying pending for too long.

  • SprayPay: Reduced the expire time of a SprayPay payment to prevent them from staying pending for too long.

  • Pin: Made sure the signature field will return true for credit payments.

  • Pin: It is now allowed for an alliance submerchant to start a pin transaction on a terminal of the Alliance Partner.

  • Pin: Update pin incident code mapping to map code 2627 and code 2623 to status denied.

  • Pin: Fixed the billingLineId not being determined for Yomani / Yoximo terminal transactions.

  • PayPal: Fixed a communcation error when the shipping data ended up being empty.

We have released new endpoints;

  • Exchanges (aka payment state logs); we have released new endpoints to give you insights in the exchange calls that we sent to your system. More information regarding our exchange handling kan be found here;
  • Transactions:Instore; get insights in your instore (card present) transactions;
  • Tokenization; with the Tokens:Delete endpoint you are now able to delete a stored token. More information regarding tokenization / recurring credit card transactions can be found here;
  • Refunds; with the Refund:Delete endpoint you can delete a submitted refund which has not been processed yet;
  • We also introduced List endpoints for some merchant related objects; with these 'list' endpoints you can retrieve (without pagination) a list of objects (only code, name and if applicable a status). E.g. a list of services linked to a merchant; a list of licenses linked to a merchant etc. We will introduce more of these list endpoints in the future. For now the Services:List and Licenses:List are available.

Later this week, we will be releasing v1.2.36 for all our PAY.POS platforms. Here is a list of all the change made since version 1.2.20:

  • iOS-only: When using Service injection during App2App, the payment will show the correct tradename on screen
  • Added support for PAX A8700
  • Small bugfixes for terminal activation using PayNL account
  • Small bugfixes for LocalECR & CloudECR
  • Small maintenance to the app
  • Added the Voucher:info and Voucher:payment API's to handle voucher payments. The getCard API returns the balance of a card, as well as the brand name and icon. The payment API can then be used to charge the card. Both API's implement the pointOfInteraction parameter to support both cardPresent and cardNotPresent payments.
  • Updated the iDEAL logo to the combined iDEAL/Wero logo.
  • Add support for jsonp output to the legacy API support layer.
  • Brite: Fixed a case where a cancelled payment would stay in the pending state.

  • The Order:Create API will now return an error when the order amount is zero.
  • Updated the Hosted Payment Page to better format the order amount and currency based on the locale of the enduser.
  • Wero: fixed issue where some payments would be stuck on the in_transit state
  • Giftcards: Added support for POS transactions for giftcards.
  • Pin: Update the hosted payment page to poll an internal TPU url to prevent issues with the external URL requiring credentials.
  • Pin: Added a setting for the hosted payment page to enable automatically redirect to the return URL after a set amount of time.
  • MBWay: Fixed case where the order would stay at status denied even if we later receive an IPN with status paid.
  • Fixed an issue where the ARN for refunds was not correctly set

Full Changelog:

  • 🎨 Small UI fixes to improve layout consistency
  • 🔄 Switched TH-code and version placement in the user interface for better visibility
  • 🔧 Minor fixes for devices with hardware pinpads to improve interaction
  • 🔧 Minor fix for return url, where query params were added multiple times

We will be releasing v1.2.16 next Monday (22-12-2025) containing small bugfixes:

  • App2App: PAY.POS will now open the correct screen after deeplink everytime
  • Refund: Switching to refund payment will now show the correct state in the top right corner
  • PAX: Small kernel fix

We released a few updates in the last weeks:

  • In the Merchant:Info API we now return a decline reason and a decline date if a document (on company level or on account level) is declined by our boarding department;
  • In the Service:GetAvailablePaymentMethods API you get all available payment methods that are applicable for your service. If a payment method requires a boarding we also return the boarding status. We now also return an object code (BO code) which reflects your boarding request. You can use this code if you contact our boarding department;
  • The Merchant:UpdateSettings API now support setting a default value for the layout (look and feel templates). This default value will be used if a service location is created and you do not specify a specific layout;
  • The Terminals:Browse / Terminals:Get now also returns a terminalServer object which gives you information to which server the terminal (non-SoftPos) is connected to.

In this post, we want to let you know that v1.2.15 is the new release for all of the PAY.POS platforms. While the v1.2 updates introduced a lot of big internal changes, we wanted to focus on some small changes this release:

  • Improved screen orientation support -> It is now possible to lock your screen in every rotation, or use the orientation sensor. This improvement was very much needed for better support on the Sunmi CPad series
  • Improved performance
  • Several smaller bugfixes
  • Added the Order:Retry API. With this API you can reset the status of a failed order so the enduser can attempt to complete the order. Please note that the order type will be changed to paylink and the point of interaction will be changed to ecommerce. The second chance has been updated to use this API when a second chance is triggered for an order that has been processed on the TGU. This should fix an issue where the TGU is not aware of a second chance that has been paid and will still return the failed endstate.
  • Fixed an issue where the second chance email was sent in english where dutch was expected.
  • Payment/Donation screen: Fixed an issue where endusers would get an Invalid URL error on the payment/donation screen.
  • Add support for replace variables in the exchangeUrl. Several values will be replaced with the actual value set on the order, so you are able to pass an exchange URL without knowing these values beforehand:
    • #action#
    • #order_id#
    • #tool#
    • #info#
    • #object#
    • #domain_id#
    • #ip_address#
    • #amount#
    • #extra1#
    • #extra2#
    • #extra3#
    • #enduser_id#
    • #payment_session_id#
    • #payment_profile_id#
    • #payment_method_id#
    • #starttime#
    • #stoptime#
    • #customer_id#
    • #customer_key#
    • #country_id#
    • #country_code#
    • #is_sandbox#
  • Wero: Fixed a problem when refunding a wero payment.
  • Pin: Fixed an error where pin terminal offline messages were not processed resulting in terminals incorrectly being shown as online in the admin.