# StoreConnect Support

New payment providers, POS print template improvements, and a large set of payment and sync bug fixes across eight patch releases from 13 May to 9 June 2026.

## Breaking changes and cautions

**Latitude POS: `storeMid` now resolved per outlet**

If your store uses Latitude Pay across multiple outlets without explicitly setting `pos_store_mid` in your Latitude payment provider configuration, each outlet will now send its own `merchantId` as the `storeMid` value — previously, all outlets sent the same shared provider-level value. This ensures correct per-outlet settlement remittance.

Review your Latitude configuration if you have a multi-outlet setup. If each outlet requires a different `storeMid`, you can set it explicitly per outlet using `pos_outlet_api_keys` to override the default.

## Enhancements

**StoreConnect Pay — new payment provider**

StoreConnect Pay is now available as a dedicated payment provider for stores using StoreConnect's hosted payment gateway (powered by NMI). It supports card and ACH payments under the StoreConnect Pay brand and routes production traffic to the StoreConnect gateway. Setup and checkout templates are identical to NMI — no template changes are required.

**NMI 3D Secure 2 authentication**

NMI card payments now support 3DS2 (3D Secure 2) authentication. When enabled, the checkout presents an in-page challenge after card tokenization. Passing 3DS shifts liability for eligible transactions to the card issuer. Authentication data is also forwarded on saved-card renewals and subscription billing.

**Westpac 3D Secure 2 payments**

Westpac Online Pay (Verifone) card payments now support 3DS2 as an opt-in feature, enabled via the `three_d_secure` and `threeds_contract_id` options in your payment provider configuration. The checkout performs device fingerprinting, a 3DS lookup, and an optional in-page challenge. Coverage extends to initial purchases, additional payments, and subscription billing.

**Adyen ACH refunds**

Adyen ACH payments can now be refunded from the StoreConnect admin. Full refunds, partial refunds, and item-level refunds are all supported, completing refund coverage across all major payment providers.

**Easyship shipment tracking**

Easyship is now supported as a shipment tracking provider. Stores using Easyship receive live tracking status updates via webhooks. When multiple tracking providers are active, the one matching the shipment's carrier is used by default.

**Afterpay: line items, discounts, and dual-tab payment guard**

Afterpay checkouts now send itemized product lines and discount entries to Afterpay, giving shoppers a clearer breakdown in the Afterpay payment UI. A safety guard prevents customers from being charged a stale amount when they modify their cart in another browser tab between starting and completing Afterpay payment.

**PayWay error messages now visible at checkout**

When a PayWay payment fails, the specific error message from the PayWay API is now displayed on the checkout form. Previously, failures were silent, leaving customers without feedback.

**Barcode tag for POS PDF print templates**

A new `{% barcode %}` Liquid tag is available in POS PDF print templates. It renders 1D and 2D barcodes directly into printed documents, supporting 14 symbologies including Code 128, QR Code, EAN-13, UPC-A, DataMatrix, and PDF417. Options for color, scale, rotation, and human-readable text are included.

**Font tag for custom fonts in POS PDF print templates**

A new `{% font %}` Liquid tag allows POS print template authors to load custom TrueType fonts by URL. Fonts are cached locally after the first use, so reprints do not require a network request. This enables custom branding or language-specific characters in printed receipts and labels.

**Site Builder Contents sidebar now available**

The Contents sidebar in the POS Site Builder editor is now enabled in all environments. It provides a structured view of page content blocks, making it easier to navigate and reorganize page layouts.

**Manage Data: clear and resync all records**

A new "Clear & resync all records" option is available under the More actions menu in POS Manage Data. This wipes all locally synced records and triggers a fresh full sync from the server — useful when resolving data drift across all tables without clearing them one at a time. The existing "Resync all existing records" option has been moved into this menu.

**Manage Data: record counts**

Manage Data now shows the full server-side record count alongside the local count for each object. A separate unsaved-record count per object is also shown, making it easy to see which records are pending upload before deciding to clear or resync.

**Linkly token auto-refresh and Quest Reconnect button**

Linkly bearer tokens now refresh automatically in the background 15 minutes before they expire, preventing the daily timeout that previously required cashiers to manually re-pair their terminal after overnight inactivity. For Quest Airpay TAP, a Reconnect button is now visible in terminal settings once the terminal is set up, providing a quick recovery path when the Quest session expires.

**End-of-shift reconciliation now correctly assigns refunds**

End-of-shift reconciliation now calculates expected drawer balances by summing payments against the shift in which they were taken. Previously, a refund processed in a later shift was counted against the original sale shift. Shifts now show accurate expected totals regardless of when refunds were applied.

**Articles can now be served in alternative formats**

Articles support alternative MIME-type rendering, matching the existing behavior for content pages. A URL like `/articles/feed.xml` or `/articles/data.json` now serves the correct content type and a layout-free body, as defined by the article's Liquid template.

**Theme resources larger than ~128KB now supported**

Theme resource files that exceed Salesforce's 131,072-character record limit can now be split into numbered parts and declared in `manifest.json` as an ordered array. StoreConnect assembles the parts transparently at render time.

**POS sync: improved reliability for dependent records**

The POS sync engine now detects when a record depends on a parent that has not yet been confirmed as synced and defers it until the parent is ready. This prevents the foreign key errors that were causing sync failures for cart-related records (carts, cart fulfillments, shipments). Bulk sync backfills also run as a background process so the forward sync channel stays responsive to new changes.

**PayPal hardened against lost responses and duplicate charges**

PayPal requests now include idempotency headers so a retried call after a connection failure deduplicates against the original rather than creating a new transaction. If a capture call returns no response due to a timeout, StoreConnect re-queries PayPal before marking the payment as failed — ensuring charges that completed on PayPal's side are always recognized.

**Product detail pages load significantly faster**

A performance regression was causing product detail page load times to spike from under 0.2 seconds to up to 30 seconds on stores with large catalogs. The product lookup query has been rewritten to restore fast load times on product detail pages.

**Checkout customer step renders much faster**

On checkout pages with many form questions, the customer information step was taking 3–4 seconds to render form errors. The root cause — reloading address validation configuration on every field check — has been fixed. The step now renders in under 30 milliseconds regardless of the number of form questions.

**Materialized view refreshes up to 7.8× faster**

Materialized view refresh performance has been significantly improved through SQL restructuring. Product search text vector generation is now pre-computed and stored, reducing the work done during each refresh. Changes deliver approximately a 3.7× speedup for the product view and a 7.8× speedup for the product text search view.

## Deprecated fields

No fields have been formally deprecated in this release.

## Fixed bugs

**PayPal charging customers without showing order confirmation**

In rare cases a PayPal capture succeeded but the response was lost before StoreConnect received it, leaving the customer charged without seeing a confirmation. StoreConnect now re-queries PayPal when a response is lost, so completed captures are always detected and the order confirmation is shown.

**Promotions and discounts causing over-refunding**

When an order included a promotional discount or negative adjustment item, the proportional allocation of payment amounts across order items was inflated. This caused refunds to include the promotion amount twice — for example, a $100 product with a $10 promotion would be recorded as $100 rather than $90, resulting in an over-refund. Both web and POS checkout paths have been corrected.

**Stores with path prefixes resolving to the wrong store**

On multi-store setups using domain path prefixes, the tenant lookup was returning the first matching store rather than the most specific match. This could cause requests to a path-scoped store to resolve to the wrong tenant.

**Custom object records returning empty JSON**

Using the `| json` or `| serialize` Liquid filters on a custom object (Record) drop was returning an empty object `{}`. Custom object fields are now correctly serialized.

**Content block links broken on path-scoped stores**

Content blocks with a `link_target` value that did not start with a `/` were generating malformed URLs on stores with a path prefix — for example, `/eusomepage` instead of `/eu/somepage`.

**Quest double-charge when retrying a payment**

Retrying a failed Quest Airpay TAP payment could charge the customer twice. Retries now correctly check for an in-progress transaction before initiating a new one.

**POS payment amount incorrectly capped at deposit total**

When taking a payment on an order with a deposit, the payment amount was capped at the deposit total in some cases, preventing the full balance from being paid at once.

**Delivery double charge from incomplete cart data**

Orphaned shipping cart items left over from an incomplete cart state could cause the delivery fee to be charged twice on POS orders. These items are now excluded from the delivery charge calculation.

**Pay By Link blocking the payment screen**

An active Pay By Link was preventing the POS payment screen from loading in some configurations, blocking staff from processing any payments.

**POS labels printing empty price and barcode**

Product labels printed via the POS label printer were showing blank price and barcode fields in certain configurations.

**Register shift not recovered correctly on POS boot**

On POS startup, the register shift was not always recovered correctly, which could leave the session in an inconsistent state.

**Liquid `| money` filter erroring on null values**

Using the `| money` filter on a null value was throwing an error instead of returning an empty or zero-formatted string.

**Price book entry currency not checked correctly in Liquid**

A Liquid currency check on price book entries was not evaluating correctly, which could cause incorrect pricing to be displayed in some template configurations.

**Adjustment items missing price book entry reference**

Adjustment line items on POS orders were not recording their price book entry ID, which could cause issues with downstream reporting and integrations.

**DataDrop camelCase field names not found**

Field lookups on a DataDrop using camelCase names were case-sensitive and would fail to find fields that existed under a differently-cased key. Lookups are now case-insensitive.

**Sync failures when cart records arrived before their parent contact**

Cart, cart fulfillment, and shipment records could fail to sync if they arrived at the server before their associated contact record was confirmed. The sync engine now defers these records until their dependencies are in place.

---

## Follow StoreConnect

- [Email Newsletter](https://getstoreconnect.com/c/lp-newsletter)
- [LinkedIn Newsletter](https://www.linkedin.com/build-relation/newsletter-follow?entityUrn=7444956928444862464)
- [YouTube](https://www.youtube.com/channel/UCngKdP2x8l1wcbAKW3tvU8g)
- [LinkedIn](https://www.linkedin.com/company/storeconnect)
- [X / Twitter](https://x.com/storeconnecthq)

## Popular Links

- [Partners](https://getstoreconnect.com/partners)
- [News](https://getstoreconnect.com/articles/news)
- [Events](https://getstoreconnect.com/articles/events)
- [Feature Comparison](https://getstoreconnect.com/how-we-compare)
- [Download a free trial](https://appexchange.salesforce.com/appxListingDetail?listingId=a0N3A00000FMkeKUAT)
- [Book a Demo](https://getstoreconnect.com/contact)

## Documentation

- [Help documentation](https://support.storeconnect.com/help-documentation)
- [Videos & tutorials](https://support.storeconnect.com/videos-tutorials)
- [Developer reference](https://support.storeconnect.com/developer-reference)
- [Release notes](https://support.storeconnect.com/release-notes)
- [Troubleshooting](https://support.storeconnect.com/troubleshooting)
- [Trust Center](https://trust.getstoreconnect.com/)
- [Status Page](https://status.storeconnect.com/)

## Contact

- info@getstoreconnect.com
- US +1 415 745 3230
- AUS +61 2 8365 2308

100 S Ashley Dr, Suite 600-2461
Tampa FL 33602-600 USA

Level 22, Sydney Place
180 George Street
Sydney, NSW, 2000, AUS

---

StoreConnect Support — https://support.storeconnect.com