# Akinon Release Notes (04.27.2026)

## <mark style="color:$primary;">Omnitron</mark>

{% hint style="warning" %}
The following changes are available in Omnitron FE versions later than `v3.7.0` and Omnitron BE versions later than `v1.3.0`.
{% endhint %}

#### <mark style="color:red;">Resolved Issues</mark>

**Duplicate Product Objects Fixed in Channel Products Inserts Endpoint**

* In the `GET /api/v1/channel/{channel_id}/products/inserts/` endpoint, an issue where the same product object was returned multiple times in the response has been resolved. Each product object is now listed only once in the response, ensuring data integrity and consistency in the endpoint's output.

**Variant Attribute Consistency Validation Added for Offers Under the Same Simple Product**

* When a revision received via Seller Center was accepted, the offer was being updated while the parent simple product remained unchanged, resulting in sibling offers with conflicting variant attributes under the same simple product. To address this, the existing validation in product management has been extended to compare the variant attributes of all offers under the same simple product. If an inconsistency is detected when adding or updating an offer, the system now raises an exception, ensuring that all offers under a simple product maintain consistent variant attributes.

#### <mark style="color:red;">New Features</mark>

**Loyalty Refund Management Pages**

* A new configuration area has been introduced under **Sales Channel > Sales Channel Settings > Loyalty Refund Settings** to support more flexible loyalty refund scenarios. Two new pages are now available:
  * Loyalty Account Labels: Define and manage loyalty account labels
  * Loyalty Refund Rules: Configure refund rules based on different conditions
* The feature enables multi-loyalty refund flows, allowing refunds to be distributed across multiple loyalty accounts based on defined rules. Provides improved flexibility for advanced loyalty program management and refund handling.

<figure><img src="/files/JsINGrkIuvMnL0wJX1rX" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/Ta8509T7tMu01hbWptTm" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/RxgxRI29L9f1qIWCFV0U" alt=""><figcaption></figcaption></figure>

**AI-Powered Search – Suggest Search Plan with AI**

* A new “Suggest Search Plan with AI” feature has been added to the Search Plans page in AI-Powered Search. With this capability, users can automatically generate search plan suggestions based on the most searched Search Results. The AI generates recommendations including keywords, search queries, filters, and sorting types, allowing users to review and optionally edit these suggestions before adding them to their search plans.

<figure><img src="/files/PKcjmoJbSdmrX9r6l0Cb" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/3MhkyxG3jebBaAgNq2Ol" alt=""><figcaption></figcaption></figure>

#### <mark style="color:red;">Enhancements</mark>

**B2B Quotations Improvements**

* The B2B Quotations page has been enhanced with the addition of a “Channel Name” filter and a corresponding “Channel Name” column, allowing users to more easily filter and track quotations across different sales channels.

<figure><img src="/files/mECF86CnTx04s2K9Z7hR" alt=""><figcaption></figcaption></figure>

**Commerce Access Control & Validation**

* Validation has been introduced for required Commerce configurations such as username and password. When these credentials are missing, users are restricted from accessing Commerce-powered pages via Omnitron, and a clear warning message is displayed to guide them.&#x20;

<figure><img src="/files/U30k6fvkvb9YJCAKPKSZ" alt=""><figcaption></figcaption></figure>

**AI-Powered Search Export Capability**

* Export functionality has been added to the Search Results, Keyword, and Search Plans pages within AI-Powered Search. Users can now export data in “CSV” and “XLSX” formats, enabling easier analysis and external reporting.

<figure><img src="/files/mytPJC9IibUAvSzCaph1" alt=""><figcaption></figcaption></figure>

**Transaction Filter Enhancement**

* The Transaction page now includes a “Return Back” option in the Transaction Type filter, allowing users to more precisely filter and monitor return-related transactions.

<figure><img src="/files/H4jlmaw4HMRJlQltekev" alt=""><figcaption></figcaption></figure>

**Widget Management Table Improvements**

* The Widget Management page has been updated with sortable “Created Date” and “Modified Date” columns. This improvement allows users to organize and manage widgets more efficiently based on their creation and last update times.

<figure><img src="/files/kZHHEUzqsGvvhddWrMQl" alt=""><figcaption></figcaption></figure>

***

## <mark style="color:$primary;">Commerce</mark>

{% hint style="warning" %}
The following changes are available in **Commerce versions as of April 27, 2026.**
{% endhint %}

#### <mark style="color:red;">**Resolved Issues**</mark>

**Order Listing Performance Optimization**&#x20;

* Resolved an N+1 query bottleneck on the user orders endpoint. By implementing advanced prefetch strategies for stock and price lists, database query counts were reduced by approximately 84%, significantly decreasing page load times for customers with extensive order histories.

**Category Node Update Query Refactoring**&#x20;

* Fixed a performance issue where updating category nodes triggered redundant database requests for each localized URL. The update logic has been shifted to a batch processing model, ensuring stable performance during large-scale catalog management operations.

**Product Indexing Task Efficiency**&#x20;

* Addressed an N+1 query issue within the background product indexing service. Relationship lookups for attributes and parent products are now handled via optimized select-related queries, preventing worker timeouts and ensuring faster search index updates.

**Loyalty Card Gateway Error Handling**&#x20;

* Implemented graceful error management for scenarios where the promotion gateway is not configured or active. The system now prevents 500 internal server errors by validating gateway existence before processing loyalty interactions, returning user-friendly status responses instead.

**External Messaging Service Login Resilience**&#x20;

* Enhanced the push notification gateway to gracefully handle login failures from external providers. The system now logs connectivity issues as warnings rather than allowing unhandled exceptions to crash background notification tasks, ensuring higher overall system reliability.

**CRM Sync Data Type Validation**&#x20;

* Resolved a type error in the bulk CRM update service that caused crashes when processing single user identifiers instead of lists. The task now standardizes input formats, ensuring reliable user data synchronization across all integration scenarios.

**Internal Network Location Lookup Filter**&#x20;

* Fixed a recurring error in the location management service triggered by internal or private IP addresses. The service now identifies and filters out non-public IP ranges before querying external GeoIP databases, eliminating millions of unnecessary error logs.

**Product Deletion URL Conflict Management**&#x20;

* Updated the product deletion workflow to handle Pretty URL conflicts more effectively. When a product is deactivated, potential URL overlaps with sibling variants are now logged as warnings rather than critical errors, preventing integration blockages during catalog cleanups.

**Basket Offer Creation Attribute Safety**&#x20;

* Resolved an "AttributeError" occurring during the automated creation of basket offers when conditional data was missing. The service now includes fallback mechanisms to ensure discount items are processed correctly even when specific session metadata is absent.

**Multi-Region 3DS Redirect Logic**&#x20;

* Fixed a domain mismatch issue in multi-region checkout flows where 3D Secure authentication would incorrectly redirect users to the default domain instead of their local region. Redirection URLs are now generated dynamically based on the initiating request's domain.

**Mobile and Web Variant Selectability**&#x20;

* Resolved a synchronization issue affecting variant selectability in both mobile applications and web interfaces. Corrections in the variant tree logic ensure that color and size options are accurately displayed as selectable based on real-time availability.

#### <mark style="color:red;">**New Features**</mark>

**Multi-Credential Subscription Gateway Support**&#x20;

* Introduced a modular subscription architecture allowing a single commerce instance to support multiple external subscription providers with distinct credentials per region. This enables global brands to manage localized newsletter and user registration workflows seamlessly within one unified structure.

**Loyalty Rewards Support for Payment REST APIs**&#x20;

* Enhanced the payment integration layer to support reward and point-based queries through standardized REST APIs. This update allows customers to view and utilize their loyalty balances during the checkout process when using modern payment gateway protocols.

**Dynamic Extraction Strategy for Special Pages**&#x20;

* Upgraded the special page model to support dynamic product extraction strategies. Administrators can now override hard-coded default listing rules via a dynamic setting, allowing for more flexible merchandising on campaign and landing pages without requiring code changes.

**Enhanced SKU Selection for Static Merchandising**&#x20;

* Empowered category managers with full control over static product sorting. The system now allows the manual selection and prioritization of any SKU within a model, regardless of whether it is marked as the primary listable variant, providing total freedom in visual merchandising.

**Legacy SSO Backend Decommissioning**&#x20;

* Performed a major cleanup of unused Single Sign-On (SSO) backends and related legacy code. This structural refinement reduces technical debt, simplifies the authentication codebase, and improves overall system maintainability.

***

## <mark style="color:$primary;">OMS</mark>

{% hint style="warning" %}
The following changes are available in OMS versions later than `oms723.`
{% endhint %}

#### <mark style="color:red;">**Enhancements**</mark>&#x20;

**Shipment Tracking Synchronization Performance**

* A validation mechanism has been added to prevent the same barcode from being used in more than one package or more than once within the same request during the packaging process. This feature can be enabled or disabled via configuration and does not affect existing system behavior.

**Package Cancellation Source Tracking**

* A cancellation\_source field has been added to packages to record the reason behind each cancellation (e.g. customer request, out-of-stock replan, system sync). This makes it easier to distinguish cancellation types in reporting and downstream integrations.

**Cargo Label Query Fix for Akinon Shipments**

* The cargo label query in AkinonShipmentClient was using the package number instead of `shipment_id`. This has been corrected, resolving cases where labels could not be fetched.

**Trendyol Cargo Label Fetched from Omnitron**

* OmnitronShipmentClient now supports a fetch\_label configuration option. When enabled, the shipping label is retrieved from Omnitron's shipping info rather than generating a generic HTML label — ensuring the correct Trendyol carrier label is always used.

**Location Deactivation Blocked When Linked to Active Scenario**

* A validation check has been added so that deactivating a stock location assigned to an active fulfillment scenario is now blocked with a clear error message, preventing accidental misconfiguration.

**MultiCancellation - Duplicate Package and Rollback Crash Fixed**

* Missing a guard for already-cancelled packages, and rollback\_to\_previous\_states had a method name typo that caused a runtime crash on packages with transfer orders. Both have been fixed — the cancellation flow is now stable and free of duplicate package creation under race conditions.

**MultiCancellation - Concurrent Cancellation Plans for the Same Order Now Serialized**

* The Redis lock used during cancellation was scoped per plan, meaning two plans for the same order could run simultaneously and process the same package at the same time. The lock is now scoped per order, so concurrent plans are serialized while plans for different orders continue to run in parallel.

**MultiCancellation: Row-Level Lock Added to Package Queries**

* Active package queries in `complete_cancellation_plan` now use SELECT FOR UPDATE, preventing two concurrent threads from reading and processing the same package simultaneously — eliminating duplicate package creation in high-concurrency scenarios.

**PackageSyncOmnitronStatus Works for All Package States**

* The command that syncs a package's status to Omnitron was previously limited to `waiting_remote_action` and `cancellation_waiting states`. It now works for all valid package states, giving operations teams the ability to recover any out-of-sync package regardless of its current state.

**Split Package Flagging and API Filtering**

* Packages identified as split during fulfillment are now tagged with `split_package: true` in their metadata. The package list API has been extended to support dynamic JSON field filters, so split packages can be queried directly via `?extra_information__split_package=true`.

**Address Setup Supports Country-Based Filtering**

* The address setup service now accepts a country\_code parameter, scoping the sync check and migration to a specific country's data. This allows teams to set up or refresh address records for one country without triggering a full global sync.

**Order Tracking Number Update Service**

* A dedicated service has been introduced to update the tracking\_number field on an order, providing a reliable and consistent way to propagate tracking numbers to downstream integrations.

**Reservation Anomaly Auto-Correction**

* A new periodic Celery task has been added that automatically detects and corrects reservation quantity mismatches across all reservation types — including discrepancy reservations previously excluded from the existing fix task. This reduces the risk of silent stock discrepancies accumulating over time.

**Instaleap Webhook Processing Made Asynchronous**

* Instaleap webhooks were processed synchronously, causing delivery failures due to inter-service timeouts. Processing has been moved to asynchronous Celery tasks, ensuring reliable status updates for quick-commerce orders even under load.

**Shipping Label Upper Barcode Configurable per Brand**

* A new per-brand configuration option has been added to hide the order-number barcode printed at the top of OMS shipping labels. Brands experiencing carrier misreads that cause shipments to be returned can now disable this barcode without affecting any other brand's label format.<br>

***

## <mark style="color:$primary;">Instore</mark>

{% hint style="warning" %}
The following changes are available in Instore FE versions later than `acc-826` and Instore BEversions later than  `s156.`&#x20;
{% endhint %}

#### <mark style="color:red;">**Enhancements**</mark>

**Barcode List Overflow Fixed on Refund/Cancel Screen**

* The barcode display column on the refund/cancel screen was breaking the table layout when a product had a large number of barcodes (50+). Barcodes are now shown in a popup consistent with the package detail screen keeping the table intact regardless of how many barcodes a product has.

<figure><img src="/files/xCenIGnra0m5qsOqqpM2" alt=""><figcaption></figcaption></figure>

**Monist Cargo Label Displaying Incomplete on Instore Screens**

* The Monist cargo label was rendering clipped on Instore screens while displaying correctly in OMS. The rendering container has been fixed so that Monist labels now appear fully and consistently across both interfaces.

**Refund/Cancel Screen Button Visibility Controlled by Location Type**

* A new UI Setting has been added to show different buttons on the refund/cancel screen depending on the user's stock location type — store users see only the **Request** button, warehouse users see only the **Start Return** button. This is configurable per brand and does not affect brands that don't enable it.

<figure><img src="/files/iCMnOrGpGj6P9ZyWGXBR" alt=""><figcaption></figcaption></figure>

**Error Messages Now Displayed on Pay on Delivery and Order Selection Screens**

* API error responses on the Pay on Delivery and **Order Selection** screens were previously swallowed silently, leaving staff with no indication of what went wrong. Error messages are now shown directly on screen, making it easier to identify and resolve checkout issues.

<figure><img src="/files/VQgHkmmstjHimEsHCiX3" alt=""><figcaption></figcaption></figure>

***

## <mark style="color:$primary;">Marketplace Dashboard</mark>

#### <mark style="color:$primary;">Enhancements</mark>

**Product Create Task Update**

* The "Product Create" task on MPD-powered marketplaces now exclusively processes products that appear in Catalog Control. To be successfully created, a product must meet the following conditions:

  * The product must be included in the Stock and Price List
  * The product must have a Category assigned

  In summary: Catalog Control = the queue for the Product Create task. If a product is not being created or does not appear in the queue, Catalog Control should be your first point of investigation.

***

## <mark style="color:$primary;">Seller Center</mark>

{% hint style="warning" %}
The following changes are available in **Seller Center FE versions later than** `v.08.132` and **Seller Center BE versions later than** `v1.1.179`.
{% endhint %}

#### <mark style="color:red;">Resolved Issues</mark>

**Other Cargo Selection Issue**

* Resolved a critical error where 'Other Cargo' selections failed to update correctly in the system or user interface. Previously, the system displayed incorrect values or didn't register new selections upon submission, causing data integrity issues. The corrected logic now ensures all 'Other Cargo' inputs are accurately captured, validated, and consistently reflected across the system.

#### <mark style="color:red;">New Features</mark>

**Multiple Package Status Selection**

* Sellers can now select and filter multiple package statuses simultaneously on the **Packages** page. This enhancement makes it easier to manage large volumes of packages and quickly locate items in different shipment stages. Multiple package status can be seen in the pages related to **Orders and Packages** modules.

<figure><img src="/files/FV1ZQgPmikFC6OkuWAYd" alt=""><figcaption></figcaption></figure>

**Slider-based View for Offers**

* The **Approved Offers** page has been enhanced with a new slider-based view, allowing sellers to review and navigate approved offers more conveniently. Additionally, the **Pending Offers** page has been redesigned with a step-by-step interface, providing a clearer and more guided offer review and approval process.

<figure><img src="/files/HVsb3LxB7CintpnXulZ4" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/wGk1AxQYjnLu5odvYVHs" alt=""><figcaption></figcaption></figure>

**Email Masking**

* &#x20;Email masking has been enhanced to ensure more secure visibility of customer email addresses while maintaining access for authorized users. For more details, please refer to the [tutorial](https://docs.akinon.com/tutorials/seller-center/email-masking-feature-for-mpos).

**Rejected Offers Filters**

* Sellers can now more precisely identify and examine problematic or unsuccessful offers, thanks to an enhancement in the Rejected Offers filtering functionality. You can access this feature via **Offers > Rejected Offers.**

  <figure><img src="/files/Ui8EACzm0imccOriD1nQ" alt=""><figcaption></figcaption></figure>

#### <mark style="color:red;">Enhancements</mark>

**The Category and Attribute Mapping Refinement**

* The Category and Attribute Mapping page under **Settings > Attribute Category Mapping** is now fully responsive. This enhancement ensures a more consistent and user-friendly experience, regardless of the screen size or device used.

  <figure><img src="/files/faNUJX6qA3PchJHZIJpb" alt=""><figcaption></figcaption></figure>

**Revision Error Messages**

* Revision error messages now include explanatory tooltips, allowing users to better understand issues and take corrective action faster. Filter can be used in the **Products > Offer Actions > Rejected Offers** page.

  <figure><img src="/files/9vxLkwOEjneJq90B1vyF" alt=""><figcaption></figcaption></figure>

***

## <mark style="color:$primary;">App Maker</mark>

{% hint style="warning" %}
The following changes are available in **App Maker Environment version** `env6.6.0+`
{% endhint %}

### <mark style="color:red;">Mobile</mark>

#### <mark style="color:red;">New Features</mark>

#### **Platform-Specific Icon Config**

* Users can now configure iOS and Android icons independently under `ios.icon` and `android.icon`. The top-level icon.image remains required as the shared base icon and continues to work as before if you use the same icon on both platforms, no changes are needed. Platform-specific fields override the top-level config for their respective platform.

**Example:**

```json
{
  "icon": {
    "image": "./src/assets/images/icon.png"
  },
  "ios": {
    "icon": {
      "image": "./src/assets/images/icon.png",
      "darkImage": "./src/assets/images/icon-dark.png",
      "tintedImage": "./src/assets/images/icon-tinted.png"
    }
  },
  "android": {
    "icon": {
      "backgroundColor": "#FFFFFF",
      "foregroundImage": "./src/assets/images/icon-foreground.png",
      "monochromeImage": "./src/assets/images/icon-mono.png"
    }
  }
}

```

**Action Required**

* If you are using platform-specific icon fields (`darkImage`, `tintedImage`, `foregroundImage`, `monochromeImage`), move them from the top-level `icon` object to `ios.icon` or `android.icon` in `akinon.json`.

***

#### **iOS 26 Liquid Glass app icon (iOS Only)**

* `ios.icon.image` now accepts an `.icon` bundle created with [Apple Icon Composer.](https://developer.apple.com/documentation/xcode/creating-app-icon-with-icon-composer) The build script copies the bundle to the correct Xcode location and registers it in `project.pbxproj` automatically.

**Example:**

```json
{
  "icon": {
    "image": "./src/assets/images/icon.png"
  },
  "ios": {
    "icon": {
      "image": "./src/assets/images/AppIcon.icon"
    }
  }
}

```

* When using a `.icon` bundle:
  * `darkImage` and `tintedImage` are ignored
  * Appearance variants must be defined within Icon Composer

{% hint style="warning" %}
**Liquid Glass and Legacy IOS Icons**

When an image points to a .icon bundle, Xcode uses it as the primary icon source for all iOS versions. The asset catalog generated from the top-level icon.image is used as the PNG source but its output is overridden.

iOS 26 and later: The Liquid Glass icon from the .icon bundle is displayed.

iOS 18 and earlier: Xcode automatically generates a fallback icon from the .icon bundle. This fallback may differ visually from the original image you provided.

If you want the original icon to appear on iOS 18 and earlier, use a .png file instead. See [Creating your app icon using Icon Composer for details.](https://developer.apple.com/documentation/Xcode/creating-your-app-icon-using-icon-composer)
{% endhint %}

**Action Required**

* No action is required. You do not need to update your icon configuration,  asset catalog, or build settings. This change only applies if you adopt Apple Icon Composer to produce a `.icon` bundle for iOS 26 Liquid Glass.

***

#### **Browser session–aware deep link handling (Android Only)**

If a user is shopping on the mobile website while the mobile app is also installed, universal deep links cause the app to intercept navigation including the post-3D Secure checkout redirect. The app opens but cannot show the order success page because session lives in the browser, not the app.

When a deep link arrives from a browser, Android attaches the originating browser's package name to the intent. The framework now reads this value and, for URLs that match patterns you configure in `deepLinkConfig.openWithBrowser`, reopens the URL in that same browser instead of handling it as an in-app navigation.

To resolve this, configure the patterns below.

**Configuring `openWithBrowser`**

Add entries to the openWithBrowser array in `src/integrationMaps/deepLink.js.` Each entry needs a pattern (regex tested against the sanitized URL path) and an optional redirect.

**Example:**

```
export const deepLinkConfig = {
  extractPatterns: [],
  openWithBrowser: [
    {
      // Matches any URL containing "orders/completed".
      // No redirect — opens the original deep link URL in the browser.
      pattern: /orders\/completed/g,
    },
    {
      // Matches any URL containing "google/login/callback".
      // Redirect — opens a different URL in the browser instead.
      pattern: /google\/login\/callback/g,
      redirect: "https://akinon.com/auth/oauth-login"
    },
  ],
};
```

* `pattern` regex string tested against the path portion of the incoming URL. The first matching entry wins.
* `redirect` optional. When provided, this URL is opened in the browser instead of the original deep link URL. Useful when the deep link itself is an internal callback that shouldn't be visited directly in a browser.
* When no entry matches, or when the browser package name is not present (e.g. the link was opened from outside a browser), the deep link is handled with the normal in-app navigation flow.
* This behavior is Android only. IOS does not attach browser package information to universal links.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.akinon.com/release-notes/2026/april/akinon-release-notes-04.27.2026.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
