Terminal Terminal

New version of Terminal API now available

We have moved to a new version of Terminal API, which includes many new features, and some minor breaking changes. We have done this to ensure that our solution is easier to support moving forward, reducing time between support requests and resolutions.

Please check in the release notes of each version if there are new features or breaking changes that you need to consider, here is a small migration checklist that may help you with the process.

Migration checklist (v1 → v2)

  1. Switch the URL prefix from /api/v1/... to /api/v2/....
  2. Generate a UUID for Header.ExchangeIdentification on every request.
  3. Add a Header.SalesSystemInfo block (IntegratorId + at least one SaleSoftware with Type and Status.VersionNumber). Request the new values from your contact within Worldline
  4. Read successful payloads from body.data.
  5. Read errors from body.message; remove any body.code lookup.
  6. Handle 202 Accepted for async requests and consume the webhook payload from data.
  7. Move Card Acquisition currency / tipAmount / totalAmount into TransactionDetails.
  8. Move SaleTerminalData into Context.SaleContext.
  9. Send ProtocolVersion: "5.1-WL2.x.x" in the request header.

Update history

Release date: August 5, 2026

This release adds new UI and payment-request capabilities, tightens request validation, and fixes a number of mapping and error-handling issues.

Features

Accessibility settings on payment requests

Accessibility settings can now be supplied on a payment request through the AccessibilitySettings extension on PaymentTransaction , and are applied to the payment flow on the terminal.

Seamless ECR-initiated flows

ECR-initiated flows now render every step on a single, state-driven screen instead of opening a new screen per step, removing the visible flash between steps. Set ShowProcessingScreen in the request body to display a processing spinner between steps for up to 30 seconds.

Secondary button on image screens

Image screens now support a secondary action button, enabling richer interaction flows.

Reconciliation receipt format handling

Reconciliation flows now support both structured JSON receipts and formatted receipt content.

Text field on info screens

Info screens now support a dedicated text field.

Updates

TransactionReference validation and normalisation

Payment requests with a null, empty, or literal "Null" NEXO TransactionReference are now rejected, and valid references are trimmed before they are forwarded.

Empty ProtocolVersion validation

Requests with an empty NEXO ProtocolVersion are now rejected with a protocol-version error instead of being processed.

Bug fixes

Multi-option screens require unique IDs

Multi-option selections now accept only unique option IDs, preventing ambiguous selections.

Card Acquisition response mapping

Card Acquisition responses now return the response ServiceContent values ( FinancialCardAcquisitionResponse ) instead of echoing the request values ( FinancialCardAcquisitionRequest ).

Keep-alive UI after reboot

Keep-alive UI state is now retained correctly after a device restart.

Clearer missing mandatory field errors

Validation errors for missing mandatory fields are now formatted more clearly.

Expanded error reasons

Added missing reasons for invalid password, internal error, invalid key, transaction timeout, and encryption failures, so more error conditions now return an accurate reason.

Response service type fallback

The response service type is now resolved with a correct fallback when it is missing from the WPI response.

Graceful handling of missing payment-app envelope fields

When the payment app returns a response with missing fields, those failures are now converted into Nexo-friendly rejection responses instead of surfacing raw errors.