# 2026

### May 2026

**🔔 WalletBalanceUpdated Webhook**

A new `WalletBalanceUpdated` webhook event fires whenever a member's wallet balance changes, enabling real-time downstream integrations to stay in sync without polling.

**Why it matters:** Any system that tracks points balances externally — mobile apps, CRMs, data warehouses — can now react instantly to wallet changes instead of polling or reconciling.

👉 [Learn more about Webhooks](/main-features/webhooks/what-triggers-a-webhook.md)

<details>

<summary>More May updates</summary>

**⚙️ Enhanced**

* **"Show legacy campaigns" toggle** — Campaigns listing now defaults to hiding migrated legacy campaigns; use the toggle to show them when needed
* **Spanish translations** — Missing Spanish UI strings have been added across the admin panel

**🛠️ Fixed**

* Pagination reset sort order to oldest-first when navigating to next page across multiple list views
* Validation message not shown on invalid Custom Attribute keys on member profile
* "Name" filter on Tier Sets list was not working correctly

</details>

***

### &#x20;April 2026

**⏱️ Unit Transfers Mass Actions — Set/Delete Expiration Date**

Admins can now set or remove expiration dates on multiple unit transfers at once using mass actions, directly from the transfers list.

**Why it matters:** Managing expiry across large member bases previously required individual edits. This change makes bulk expiry management practical at scale.

👉 [Learn more about Managing Unit Transfers](/main-features/wallets/unit-transfers/managing-unit-transfers.md#bulk-actions)

<details>

<summary>More April updates</summary>

**🆕 Added**

* **"Copy to different tenant" for Challenges** — Quickly replicate challenge configurations across tenants from the Challenges listing
* **"Challenges" tab in Config duplication** — Challenges are now included in the Global Management config duplication workflow
* **"Download JSON" for Challenges** — Export challenge configurations as JSON directly from the listing view
* **Card number field hint** — When LCN auto-generation is enabled, the card number field displays as disabled with an explanatory hint in Member form
* **Global validation for Custom Attributes** — Empty values are now blocked on save across all Custom Attribute inputs

**⚙️ Enhanced**

* **"Migrated" pill moved to Name column** — In the Campaigns listing, the pill indicating a migrated Referral campaign now appears next to the campaign name (with a tooltip link to the corresponding Challenge)
* **Hide Custom Fields section** in Member form when no custom fields are configured
* Badge icon updated in Badges empty state view
* Migration Guide documentation for Achievements → Challenges

**🛠️ Fixed**

* Event frequency limit displayed incorrectly on single Challenge view when set to "1 in total"
* Transaction UUID shown instead of Document Number on single transaction view
* Empty string values were incorrectly accepted for Labels in PATCH Member API
* Challenge progress not refreshed after adding a transaction for a migrated achievement campaign
* Incorrect calculation of cumulative earned units in Tier Progress for member
* Missing date interval filter on member's custom events view
* Wallet Type detail view now displays the correct wallet name
* Challenge campaigns no longer incorrectly shown in direct campaign list with broken editing
* Fixed reward coupon creation/editing with "on a specific date" expiration rule
* Fortune Wheel import option no longer selectable (not supported, but was available in UI)

</details>

***

### March 2026

#### **🔄 Achievements → Challenges Migration & Navigation Redesign**

The major Achievements-to-Challenges rebranding continues with migration tooling, new navigation layout, and enhanced challenge management. A completely redesigned top navigation bar improves the overall admin panel experience.

**Why it matters:** The transition from "Achievements" to "Challenges" provides clearer terminology and improved management workflows. The new navigation makes it faster to find what you need.

👉 [Learn more about Challenges](/main-features/challenges.md)

#### **🔐 HMAC Webhook Signatures**&#x20;

Webhook security gets a major upgrade with HMAC signature support for verifying webhook authenticity.&#x20;

**Why it matters:** HMAC signatures let you cryptographically verify that webhook payloads genuinely come from Open Loyalty, protecting against spoofed events.

👉 [Learn more about HMAC Webhook Signature](/main-features/webhooks/hmac.md)

#### **🏅 Badges Integration with Campaign Effects**

Badges system integrates with campaign effects, allowing badges to be automatically awarded through campaign rules. Challenges also get enhanced visibility controls and migration readiness improvements.

👉 [Learn more about Badges Integration with Campaign Effects](/main-features/campaigns/campaigns-and-referral-campaigns/creating-campaigns.md#add-rules-conditions-and-effects)

#### **🔢 Loyalty Card Auto-Generator**

A new configuration option enables automatic generation of Loyalty Card Numbers (LCN) for members, removing the need for manual entry or external systems.

**Why it matters:** Reduces friction in member enrollment and eliminates duplicate or invalid card numbers.

👉 [Learn more about Loyalty Card Auto-Generator](/main-features/members/configuration.md)

<details>

<summary>More March updates</summary>

**🆕 Added**

* **Date validation on API ingestion** — Prevents future-dated or invalid timestamps from entering the system
* **Issued Reward references in Unit Transfer webhook and API** — Unit transfer webhooks now include associated reward details
* **High-precision timestamps for Points History** — Deterministic sorting with sequence fields for transfer records
* **Active Campaign limits per Tenant** — Configure maximum active campaigns per tenant with exclusions for gamification modules
* **Per-store wallet creation limit** — Prevent unlimited wallet type proliferation
* **Optional Comment Field for Admin P2P Point Transfers** — Admins can add context when performing peer-to-peer transfers
* **Soft delete for Badges** — Badges can now be soft-deleted with feature flag for incremental badges

**🛠️ Fixed**

* Custom Events: Fixed incorrect mapping of attributes to 'false' instead of text value
* Fixed `unitPluralName` incorrect value in GET /api/points response
* Fixed race condition allowing multiple redemptions of the same QR code
* DateTime display fix on `purchasedAt` column in transactions
* Fixed Allow spaces in Custom Attributes keys during points import and member PATCH updates
* Missing "Find by badge name" translation restored
* Fixed reward image upload limit (2MB enforced correctly)
* Fixed incorrect documentType field mapping in S3 Transaction exports
* Fixed reward webhook payload size issue when updating coupons

</details>

***

### February 2026

#### **🎮 Challenges Rebranding**

The full rebranding from "Achievements" to "Challenges" lands across the UI, API, and data model. Admins can now manually edit member challenge progress.

**Why it matters:** The "Challenges" terminology better communicates the feature's purpose. Manual progress editing lets support teams resolve edge cases without workarounds.

👉 [Learn more about Challenges](/main-features/challenges.md)

#### **📝 Custom Attributes for Manual Unit Transfers**

Manual unit transfers can now carry custom attributes— opening up integration possibilities for external systems.

**Why it matters:** Custom attributes on transfers let you tag point movements with metadata (e.g., reason codes, campaign IDs).

👉 [Learn more about Custom Attributes for Manual Unit Transfers](/main-features/wallets/unit-transfers/managing-unit-transfers.md#edit-custom-attributes)

<details>

<summary>More February updates</summary>

**🆕 Added**

* **Partial Custom Attributes Updates via PATCH** — Member custom attributes can be partially updated without overwriting others

**⚙️ Enhanced**

* Achievement progress export refactored with improved date tracking
* Challenge progress endpoint filtering improvements
* Password recovery copy updated
* Webhook contract unified

**🛠️ Fixed**

* Fixed reward webhook payload size issue
* Fixed expired unit transfer created past expiry date upon unlocking
* Fixed static segment recalculation
* Fixed leaderboard calculation bug in February
* Fixed reward webhook payload overflow when updating coupons

</details>

***

### January 2026

#### **📦 Campaign Code Import**

A new import feature for external redemption codes brings campaign codes into the platform.

**Why it matters:** Campaign code import allows you to use the generated list of codes (e.g., already printed out on your products).

👉 [Learn more about Campaign Code Import](https://help.openloyalty.io/whats-new/pages/SRo81A5dFHGeogQiRBKA#id-2.-imported-codes-csv-upload)

<details>

<summary>More January updates</summary>

**🆕 Added**

* **Tiers from Targeted Tiersets in Rewards** — Add tiers from any targeted tier set to reward targeting selection

**⚙️ Enhanced**

* Navigation tabs renamed: Achievements → Challenges (main nav and single member view)
* Segments protected against empty conditions
* Added `updatedAt` and `createdAt` columns to Segment Export files
* Transfer list filtering logic aligned with mass actions payload
* Segment criterion names updated to challenge terminology
* Analytics/dashboard data display and chart fixes

**🛠️ Fixed**

* Fixed 400 error when creating Segment with Achievement Completion condition
* Fixed missing conditions display for Achievement Completion campaigns
* Fixed incorrect error message for Transaction target attribute validation in Goals
* Fixed rewards targeted to non-default TierSet tiers not visible for members
* Fixed static segment recalculation
* Fixed Fortune Wheel Internal Server Error when unit effect exceeds wallet limit
* Fixed inconsistency in Members List Filtering UI — estimated count from API now displayed on frontend

</details>

***

*This page covers 2026 releases. For earlier releases, see What's New in 2025.*


---

# 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://help.openloyalty.io/whats-new/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.
