What's New
Everything that changed in the latest release — new APIs, improvements, and fixes — with direct links to each updated section.
v1.0.7 (Current)Current
July 12, 2026 — released across all platforms: Android native (com.edfapay:sa-edfapay-revamp:1.0.7.7), Flutter (edfapay_softpos_sdk 1.0.7 on pub.dev), and React Native (edfapay-softpos-sdk-rn 1.0.7 on npm, first stable after 1.0.6-beta.1).
Breaking Changes
buyNowPayLater() → invoicePayment()
The BNPL-specific surface is now a generic invoice checkout API. checkoutLinkApi() was removed and invoiceRefund() added for invoice refunds. InvoiceRequest split into InvoicePaymentRequest and InvoiceRefundRequest; BnplResponse renamed to InvoicePaymentResponse.
BnplProvider → PaymentMethod
The provider enum is now PaymentMethod with lowercase values (tamara, tabby, checkout, contactless, unknown) and a factory that maps native names — TAMARA_POS, TABBY_POS, PAYMENT_GATEWAY → checkout, SOFT_POS → contactless.
theme().setPoweredByImage() Deprecated
No longer effective and will be removed in a future release. Remove it from your theme configuration.
Action Required Before Upgrading
The BNPL API was renamed to the invoice payment API. Flutter removes the old methods entirely; React Native keeps deprecated aliases. Review the migration steps in the Changelog before updating.
New Features
invoicePayment() and invoiceRefund() cover BNPL (Tamara, Tabby) and Checkout payment methods with a single invoice-based API.
searchTxnApi(parameters) queries transactions by arbitrary search parameters; pgTxnStatusApi(sessionId) checks the status of a payment-gateway transaction.
Extension.generateOnlineReceipt(type, id) returns a hosted receipt URL and Extension.openOnlineReceipt(type, id) opens it in the browser — for both transactions and reconciliations via the new ReceiptType enum.
Extension.unbindTerminal() releases the terminal binding from the current device so it can be bound elsewhere.
New Utils helpers for reliable background reconciliation: notification permission (Android 13+), exact alarms (Android 12+), unrestricted battery, and OEM autostart checks and requests.
theme().setReconciliationNotificationSounds(success, error, processing) sets base64-encoded sounds for background reconciliation notifications; pass null to mute a kind.
EdfaPayCredentials gains an apiKey field with chainable setApiKey() (Android/Flutter). Env.REVAMP and Env.DEMO environments added on all platforms.
Improvements & Fixes
Callback Routing Hardened
Native callbacks are routed by a unique per-invocation id instead of by method name — concurrent or repeated calls to the same method (e.g. sequential refund()) no longer overwrite each other's handlers.
Permission Requests No Longer Crash
Utils.requestNotificationPermission and requestLocationPermission previously threw IllegalStateException (LifecycleOwner attempting to register while RESUMED). The launcher now registers via ActivityResultRegistry.
Host App Type Reporting
initiate() now reports the host app type (Flutter / ReactNative) to the native SDK for diagnostics.
React Native Parity
The React Native SDK moves from 1.0.6-beta.1 to a stable 1.0.7 with the full native/Flutter API surface, including all features listed above.
Full Details
See the Changelog page for the complete v1.0.7 release notes and migration guide.
v1.0.6
March 29, 2026
Highlights
Both methods accept List<String> parameters directly instead of a TxnParams object, on all platforms.
edfapay_flutter → edfapay_softpos_sdk. Update pubspec.yaml and all import statements.
Full email/password authentication flow via EdfaPayPlugin.Extension, complementing loginWithToken().
Encrypted persistent key-value storage built into the SDK.
Interactive in-SDK login dialog and partial credential entry constructors.
Bug Fixes
Flutter Bridge API Corrections
enableLogs() is a method; RemoteChannel timeout is Double (seconds); Pagination uses pageNumber/pageSize; reconciliationDetail/reconciliationReceipt use id:; Transaction.withRRN takes positional args with DateTime?; showMessageDialog uses onClose:; setShufflePinPad requires the shuffle: named parameter; onTerminalBindingTask receives a TerminalBindingTask object; changePin/activateCard timer and cancel callbacks are required.
Older Releases
For a full history of all releases, visit the Changelog page.
On this page
Downloads
Coming SoonSample apps, release bundles, and more content will be available here soon.