What's new at Zeal
Everything we've shipped across the Communicator SDK, ECR SDK, and Acquirer API. Subscribe via RSS or follow @zealdev for live updates.
Send the Payment Account Reference with par
Every card-bearing action now takes an optional par — the EMV Payment Account
Reference. Zeal forwards it to the Zeal backend alongside the loyalty_token.
- Available on
AfterCardDetectedRequest,DigitalReceiptRequest,RefundTransactionRequest,MarkAsRefundRequestandMarkAsReverseRequest. - Optional everywhere. Leave it
nulland the field is omitted from the payload — existing integrations need no change. - Send it once on
afterCardDetectedand Zeal reuses it for the rest of the transaction, so later actions may omit it.
Acquirer API is generally available
The Zeal Acquirer API is now GA. Distributors and payment providers can manage their
full estate of branches and terminals over a single REST surface, authenticated via
the API-KEY header.
- Merchant lifecycle: create, list, fetch, archive.
- Terminal lifecycle: create, list, update, reassign, archive, restore, delete.
- Lookup endpoints for payment providers, distributors, acquirers, and payment apps.
Refund and reverse actions are now first-class
flowHandler.refund() and flowHandler.reverse() are now exposed in FlowHandler
with dedicated request/response models — no more wrapping BaseResponse by hand.
RefundTransactionRequestaccepts an optionaltransaction_idto link standalone refunds to a sale.MarkAsReverseRequesttakes an optional reversal payment reference.
ECR SDK 1.0.4 — coroutine-first transaction surface
The ECR SDK ships a single object — ZealSDK — exposing initialize,
listTerminals, syncCatalog, startTrx, and showDialogs as suspending Kotlin
functions.
- Real-time transaction state via Pusher;
startTrxreturns a typedTrxResponsewhen the terminal completes. - 60-second hard timeout — surfaced as
TimeoutException. - Built-in dialogs for processing / success / decline.
DigitalReceipt now returns a payment_reference
DigitalReceiptResponse now carries a payment_reference string so downstream
MarkAsReverse calls can link cleanly to the original sale.
NotRegisteredFlowException for unregistered receivers
When the target application has not registered a manifest receiver for an action,
subscribe now surfaces NotRegisteredFlowException instead of a generic timeout
— letting your payment app fall back gracefully.
Kotlin DSL Gradle support + faster broadcast routing
- Added
build.gradle.ktsinstall instructions. - Broadcast routing latency between the payment app and Zeal is now ~40% lower on supported terminals.
- Fixed a race where
afterCardDetectedcould fire twice for chip + contactless fallback.
Communicator SDK 1.2 — typed responses everywhere
All seven flow actions now have dedicated request and response classes that extend
BaseResponse. The legacy untyped return from FlowHandler is removed — see the
API reference for every model.