Added
Audit log
This version brings new filters and functionalities to Logs. Thanks to these changes, you can quickly find relevant logs for analytics or troubleshooting.New filters
Users with the Read events and technical logs permission can now find data quicker in the Audit logs thanks to the new filters:- Endpoint β Lists all logs for a specific endpoint, e.g.
POST_v1_vouchers_import_csv
. - User β Lists all logs for actions performed by a given organization user. Requires Access to Projectβs Users list permission.
- Server-side API key β Lists all logs performed with a given server-side API key. The filter uses the key name, so the key itself is protected. Requires Access Project Settings permission.
- Client-side API key β Lists all logs performed with a given client-side API key. The filter uses the key name, so the key itself is protected. Requires Access Project Settings permission.
Export API logs β API endpoint
You can now export API logs in a CSV file using thePOST /v1/exports
(Create exports) endpoint.Pass
"exported_object": "api_log"
in the request body.You can use the following parameters:- fields:
"id"
,"created_at"
,"status"
,"request_id"
,"channel"
,"method"
,"endpoint"
,"url"
,"user_email"
,"app_id"
,"client_app_id"
,"request_duration"
,"request_body"
,"response_body"
. filters
:created_at
(with$before
and$after
conditions),status
(with$is
and$is_not
conditions),channel
(with$in
,$not_in
conditions),app_id
andclient_app_id
(both with$in
,$not_in
,$is
, and$is_not
conditions).- order:
created_at
(ascending order),-created_at
(descending order).
Improved
Audit logs
- Logs for imports now include a downloadable file that was used in the import.
- Audit log now shows the async action ID, if applicable.
- Async action details now return the corresponding audit log ID.
- The Channel filter now only shows channels that were used and lists used SDKs as a channel source.
Fixed
- Campaign builder: Fixed an issue which prevented changing the redemption limit when editing a campaign.
- Async actions:
GET v1/async-actions/{id}
endpoint now returns theuser
andlog_id
. - Product CSV import: Fixed an issue which caused incorrect update of metadata for products in collections.
Added
Bundle Multiplication
Bundle Multiplication is now available for all users. It determines how many times a bundle can be applied within a single order, based on the number of complete sets of bundled items a customer adds to their cart.With bundle multiplication, the system automatically checks how many full bundles exist in the order and applies the discount that many times.What gets multiplied
- The discount value (for example, a $10 bundle discount becomes $20 if two complete bundles are found).
- Free items or discounted quantities linked to the bundle.
Example scenarios
- βBuy 2 T-shirts, get 1 hat free.β β The more T-shirts customers buy, the more hats they receive.
- βBuy a laptop and a mouse together for 10% off.β β Discount applies only to eligible products, up to the configured limit.
- βGet 20% off every second coffee mug (max 3 bundles per order).β β Maximum eligible bundles limit the number of discounted sets.
- βBuy 3 skincare products and pay only for 2.β β Item discount limit ensures only one item in each bundle is free.
- βBundle any 4 books and get $10 off the whole order (up to $50 total).β β Discount multiplies with each bundle up to the set cap.
Bundle Multiplication
The Discount Effect can now be multiplied by the number of bundles in the cart.Each bundle increases either the discount value or the discounted product limit, depending on the configured Discount Effect, up to the maximum eligible bundles limit.
Copy Bundle Button
Added an option to copy bundled items directly to discounted products with a single click.This feature works for all discount types except selected free product discounts.
Discount Tab
Updated the Discount tab with clearer sections for Bundled Items, Discounted Products, and Excluded Products in a simplified, read-only layout.A collection badge now indicates when a resource belongs to a product collection.
Bundle Discount Setup
Redesigned the setup flow for bundle discounts, making the configuration process more intuitive and streamlined.Fixed
Discount wizard validation
Fixed an issue where validation in the Discount Wizard did not persist across steps, which could allow saving incomplete or empty discounts.Removed
Timeframe
Removed the Timeframe section above Campaign and Voucher details, as this information is already displayed in its own dedicated section.Added
Areas and stores in the Management API
Added new endpoints for managing areas and area stores with the Management API. The endpoints allow you to:- List areas in your project:
GET /management/v1/projects/{projectId}/areas
- Get details about a specific area:
GET /management/v1/projects/{projectId}/areas/{id}
- Create a new area:
POST /management/v1/projects/{projectId}/areas
- Update an existing area:
PUT /management/v1/projects/{projectId}/areas/{id}
- Delete an area:
DELETE /management/v1/projects/{projectId}/areas/{id}
- List all area stores:
GET /management/v1/projects/{projectId}/areas/{areaId}/stores
- Get a specific area store:
GET /management/v1/projects/{projectId}/areas/{areaId}/stores/{storeId}
- Create a news area store:
POST /management/v1/projects/{projectId}/areas/{areaId}/stores
- Update an existing area store:
PUT /management/v1/projects/{projectId}/areas/{areaId}/stores/{storeId}
- Delete an existing area store:
DELETE /management/v1/projects/{projectId}/areas/{areaId}/stores/{storeId}
Improved
Areas and stores
- Improved navigation when selecting areas, stores, and all stores.
- Improved permission checking for Areas & Stores features, ensuring proper access control.
- Added areas and stores filters to the campaign list.
Fixed
Areas and stores
- Fixed an issue which failed to copy areas and stores assignments when cloning a campaign.
- Fixed an issue which failed store assignments to display in area details view.
- Fixed an issue which allowed the users without required permissions to see areas and stores tabs.
- Fixed an issue which prevented users from creating promotion campaigns.
- Fixed an issue which allowed restricted users to add and publish vouchers for campaigns that the restricted users could only view.
Improved
Time picker
The time picker has been updated to use a dropdown menu instead of a clock. The dropdown provides options every 30 minutes, and any valid time can also be entered manually. Some time inputs in metadata definitions are not yet affected by this change and still use the legacy picker.Fixed
Onboarding
Fixed the issue where the Demoshop onboarding flow stopped at step 5, so it now continues smoothly through all 8 steps.Metadata
- Fixed the issue where negative numbers could not be used in customer metadata and filters; negative values are now supported.
- Fixed the issue where metadata definitions were sorted by name length instead of alphabetically.
Added
Payload designer
We have introduced the Payload Designer for webhook integrations. It lets you choose between sending the full webhook payload or designing your own JSON structure with static values, dynamic Voucherify keys, and nested objects. It solves the main limitation of the previous approach by giving you greater control and clarity when shaping webhook data. The mapping will be visible in thedata
object in the webhook.Improved
Support widget update
Weβve refreshed the look of the support widget in the Dashboard and introduced a new support link. While the appearance is slightly different, you can continue to reach out to our support team in the same way as before.Added
Earning rules
Added a message that appears when customers reach the 100-rule limit. To add a new rule, you must first delete the existing one.Verification
Addedorg_id
field to the general tab in the My profile section. Users can use it for verification when requesting sensitive data.Improved
Validation rules
Updated the discount campaigns and referral campaigns by renaming the βValidation Rulesβ tab to βDiscountβ and aligning its UI with the promotion tier. The tab now displays bundles, included and excluded products, and all application rules.Delete resources
Updated the resource delete dialog with a clearer, simplified design. Users can now choose between moving a resource to the bin or deleting it permanently using a streamlined layout.Fixed
Vouchers
Fixed the issue where the loader kept spinning when manually adding a voucher to a campaign. The interface now shows a clear message and remains usable without errors.Added
Loyalty
Estimate how many loyalty points your customers will receive with a new endpoint:POST /v1/loyalties/{campaignId}/qualifications
.See the sample request and response:Point estimation
This endpoint returns only an estimation, not a precise point value.Also, this estimation works only for the Order paid earning rules. If a campaign includes tiers, mappings, and multiple earning rules, the calculation becomes more complex. During final calculation, a customer may change tiers and earn more or fewer points depending on other factors.Improved
Voucher import
Added support for start_date and expiration_date when importing vouchers with CSV. You can add the respective columns to a CSV file to import vouchers with these parameters.Management API
Added limit and page query parameters to GET management/v1/projects//users endpoint. You can set a limit of a maximum of 100 results and paginate them.Fixed
Product and SKU export
Fixed a bug which prevented a notification from being sent and displayed in the app when a product or SKU export was finished.Added
Export
Export products & SKUs directly from the dashboard! Grab all items or just your filtered view in seconds β no API needed. Files are ready in Exports in the Audit log for instant download. This makes sharing data or prepping lists for campaigns faster than ever, right from the dashboard.Earning rules
Added an option to search earning rules by name directly in the campaign dashboard. The search works across all earning rules, is not case sensitive, and shows only rules that match your text.Improved
Validation rules
Renamed βRedemption by code holderβ rule to βRedemption only by code holderβ to more accurately describe its function.JSON viewer
Improved how objects are shown in the dashboard. Empty objects and confusing property counts are no longer displayed, making the view clearer and easier to read.Fixed
Export
Fixed an issue where users without permission to export publication or redemption data could still see export buttons on the corresponding lists.Loyalty
Fixed an issue where users could not put 0 to βMonths after earning activity ruleβ.Added
Stacking rules
Weβve added a new limit for Stackable Discounts API: Limits per category. You can now set a limit (up to 10) of stacked incentives for individual categories.For example, if you have a three categories, Bronze, Silver, Gold, you can set up a limit of 2 for Silver, and 1 for Gold, while Bronze is limited by the Maximum count of valid promotions per category to apply in a request. This means that a maximum of 2 incentives from the Silver category and 1 from the Gold category can be validated or redeemed in one stackable API request.Improved
Segments
Changed the name of Dynamic segments to Active.Fixed
Audit logs
Fixed an issue which caused incorrect filtering for the API value with the βnot inβ condition for Channel.Loyalty programs
Fixed an issue that caused the loyalty balance to reset after changing the timeframe in the loyalty card.Improved
Dynamic discount
Added support for order item quantity, price, and product metadata in the βAmount Discount: Apply the full discount to each item unitβ.Fixed
Loyalty programs
Fixed an issue that triggered updates to all earning rules and loyalty tiers (even when no campaign changes were made) while updating a campaign.Bundle
Fixed an issue where creating a Bundle via API without specifying βtypeβ: βproduct_or_skuβ caused the product not to be shown in the UI.Discount value
Fixed an issue that caused [object Object] to be displayed as a discount value in orders.Log in page
Fixed an issue that caused users to log in automatically after selecting the Read more button in the carousel.Added
New expiration type for campaigns and earning rules
Weβve added support forFIXED_DAY_OF_YEAR
expiration type in Earning Rules. This new option gives you more control over loyalty point expiration, because you can set an exact month and day. This is a perfect option for seasonal promotions, loyalty program resets, or end-of-year expirations. For example, you can set an expiration date of 31 December for all loyalty points earned during the Black Friday sales.Also, to improve clarity, expiration descriptions now display with short month names and a clearer date format.New drawer view for distribution details
Distribution details now open in a drawer view across the app, including when accessed through a direct URL address. The drawer includes complete distribution data, tabs, status controls, and a redesigned actions menu. Access is available to users with Read Distributions and Publications permissions.Improved
Improved the analytic tab to look consistent with other drawers across the app.Fixed
Audit log
The filter label for Webhook sendouts has been updated. The field previously shown as ID is now displayed as Sendout ID.Publications
Fixed an issue where users could view the publication history tab without proper permission.Stacking rules
Fixed an issue that caused stacking rules to be visible to users without the proper permission.Improved
Rewritten the ResourceLink component to the new Angular version.
We rewrote the ResourceLink component to the new Angular version, ensuring resource displays and tooltips are now consistent across the app. We also made detail navigation work smoothlyβopening in drawers or new tabs with our new drawer layouts.Fixed
Approvals
- Fixed an issue where voucher details were missing in the approval request preview when multiple vouchers were selected.
- Fixed an issue which caused the campaign templates not to work correctly with approval requests.
Custom events
Fixed custom event schema filters so they now update correctly when the condition changes.Distributions
Fixed an issue where changing the trigger for the distribution caused the campaign assignment to reset and allowed saving the distribution without a campaign assigned.Drawers
Fixed an issue that caused products from static collections to open in the same window instead of a new tab.Earning rules
Fixed an issue that caused a collection ID to be displayed instead of its name when multiple products or collections were selected.Referral campaigns
Fixed a bug which caused the criteria in the Custom conversion event to change upon saving.ResourceLink
Fixed an issue that caused the validation ruleβs name in the resource link not to refresh automatically after editing.User interface
Adjusted spacing in the campaign view between the tabs and the timeframe.Loyalty programs
Fixed an issue that triggered updates to all loyalty cards (even when no campaign changes were made) while updating a campaign.Added
Stacking rules
We have added a new setting to Stacking rules: Sorting rule for grouped redeemables. You can now define a general order in which redeemables are applied when stacked discounts (validations or redemptions) include discounts with categories assigned to Joint and Exclusives.This rule has two options:- Apply Joint categories last: This is a default setting and the current behavior of the Stacking rules. In this scenario, Exclusive categories are applied first and then the Joint categories.
- Apply Sorting rule to combined Joint and Exclusive categories: This is a new setting. In this scenario, Stacking rules combine the discounts assigned to Joint and Exclusive categories into one group and apply the discounts according to the Sorting rule setting β request order or hierarchy.
Added
Refreshed UI for the Publications history tab inside the discount coupon campaign view
Weβve refreshed the UI for the Publication history tab inside the discount coupons campaign view to match the recent UI changes. The refreshed look provides a compact overview of key details matching our latest UI style for improved usability and a smoother experience.Fixed
Validation rules
Fixed an issue that did not allow the use of negative values when creating validation rules based on number metadata fields.UI
Fixed an issue where voucher codes incorrectly appeared as βno codeβ in the history tab following bulk publication in discount coupon campaigns.Filters
Incentive filtering in the Validations has been split into two separate filters for better usability:- Number of stacked incentives β allows conditions such as βhas exactlyβ, βhas more thanβ, or βhas less thanβ to filter based on the number of applied incentives.
- Incentive name β uses the βincludesβ condition to filter by specific incentive names.
Added
Refreshed UI for Voucher tabs inside the Campaign view
Weβve refreshed the UI for Vouchers, Referral codes, and Loyalty cards tabs inside the Campaign detail view to match the recent UI changes. The new tabs provide a compact overview of key details matching our latest UI style for improved usability and a smoother experience.Refreshed Drawer Layout for Segments and Collections
Weβve updated the UI for drawers used in Customer Segments and Product Collections, delivering a cleaner and more consistent experience. This update also includes enhancements to breadcrumb navigation links, ensuring better usability and clarity.Fixed
Approvals
- Fixed an issue where the non-existent record with draft status briefly appeared before the page loaded the approvals list.
- Fixed an issue where users with limited permissions could not delete vouchers with an approval request.
Import
Fixed an issue where the redeemed amount property appeared during the field mapping step when importing referral or discount vouchers. The redeemed amount property is not relevant for these voucher types.UI
Fixed an issue where a segment and collection drawer could not open in a new tab from the segments and collections list view respectively.Added
Discounts - new value limits for products
This feature can be enabled for you on demand. Contact Voucherify support to enable it.
- Amount discount: Apply the full discount to each item unit
- Percent discount: Apply the discount to item subtotal
- New price: Apply the discount to item subtotal
- Maximum units per customer in campaign: limits the number of discounted item units that one customer can receive in a given campaign. For example, the limit is set to 2 for a T-shirt from the Adventure brand. One customer can only discount 2 units of this T-shirt.
- Maximum units per campaign: limits the number of discounted item units that all customers can receive in a given campaign. For example, there are 10 Adventure T-shirts that can be discounted. The 10 discounted T-shirts are available to all customers and the customer who buys the 11th T-shirt wonβt receive a discount.
- Maximum units per campaign for a product in a collection: limits the number of discounted item units of a given product in a collection that all customers can receive in a given campaign. For example, the limit is set to 5 for the βAdventure-brandβ collection consisting of T-shirts, beanies, and posters; this means that maximum 5 T-shirts, 5 beanies, and 5 posters will be discounted. The limit isnβt split between products; each product has its own limit of 5 item units.
- Maximum units per customer for a product in a collection: limits the number of discounted item units of a given product in a collection that one customer can receive. For example, the limit is set to 5 for the βAdventure-brandβ collection consisting of T-shirts, beanies, and posters; this means that maximum one customer can get a discount on a maximum of 5 T-shirts, 5 beanies, and 5 posters. The limit isnβt split between products; each product has its own limit of 5 item units.
- Maximum units per promotion tier: limits the number of discounted item units that all customers can receive in a promotion tier. For example, there are 10 Adventure T-shirts that can be discounted. The 10 discounted T-shirts are available to all customers and the customer who buys the 11th T-shirt wonβt receive a discount under a given promotion tier.
- Maximum units per customer in promotion tier: limits the number of discounted item units that one customer can receive in a given promotion tier. For example, the limit is set to 2 for a T-shirt from the Adventure brand. One customer can only discount 2 units of this T-shirt under a given promotion tier.
- Maximum units per promotion tier for a product in a collection: limits the number of discounted item units of a given product in a collection that all customers can receive in a given promotion tier. For example, the limit is set to 5 for the βAdventure-brandβ collection consisting of T-shirts, beanies, and posters; this means that maximum 5 T-shirts, 5 beanies, and 5 posters will be discounted. The limit isnβt split between products; each product has its own limit of 5 item units under a given promotion tier.
- Maximum units per customer in promotion tier for a product in a collection: limits the number of discounted item units of a given product in a collection that one customer can receive in a given promotion tier. For example, the limit is set to 5 for the βAdventure-brandβ collection consisting of T-shirts, beanies, and posters; this means that maximum one customer can get a discount on a maximum of 5 T-shirts, 5 beanies, and 5 posters. The limit isnβt split between products; each product has its own limit of 5 item units.
Added
New referral tier builder
Weβve introduced a new referral tier builder in the fifth step of the referral campaign creation process.Improved
Rewards
Added a dropdown to the reward step in the loyalty campaign creation process.Fixed
Discount
Fixed an issue with missing fields in the βcapped byβ option for:- Product discount > Percent discount: Apply the discount to item subtotal
- Bundle with Product discount > Percent discount: Apply the discount to item subtotal
Metadata
Fixed an issue with the metadata schema update that caused the schema to be cached.Earning rules
Fixed an issue with overlapping values in the Earning rules.Added
Loyalty campaigns
You can now define multiple products and collections in the following rules in the Order has been paid earning rule, proportional calculation: Pre-discount amount spent on items, Amount spent on items, Quantity of items in the cart.Multiple products and collections are also supported in the API. A new parameter called applicable_to can be added to the following PROPORTIONAL earning rules:ORDER_ITEMS_QUANTITY
, ORDER_ITEMS_AMOUNT
, ORDER_ITEMS_SUBTOTAL_AMOUNT
.The parameter replaces the object and id fields with an array of objects, which contain an id and an object with a type product, sku, or products_collection.You can also define a dynamic formula for earning loyalty points. The configuration works in a similar way to a dynamic discount formula.The dynamic formula is also supported in the API. Thereβs a new points_formula field that defines the dynamic calculation of loyalty points.Added
Commercetools connector
Weβve introduced a Gift Card connector for Commercetools that allows using Voucherifyβs gift cards during checkout. This connector features an enabler module to flexibly embed frontend components and a processor module that integrates Voucherify with checkout and payment flows.Distributions
- You can now select which fields Voucherify will send in the webhook distribution channel. All fields are pre-selected by default.
- You can also map the fields to custom values, for example you can change fields customer.source_id to any keys required by your system, like user.id.
- Added detailed webhook summaries to the distributions, showing the number of mapped fields, used headers, and the precise target URL.
Improved
Audit logs
Requests and responses are now displayed side by side in the drawer view.Distributions
For webhook distributions, limited the set of the characters to lowercase letters, numbers, and dashes in the additional HTTP headers.Filters
Clicking on the background while using filters now closes only one window at a time, instead of the entire filter panel.Fixed
Loyalty
Fixed a bug which prevented the timeframe for individual loyalty cards from being adjusted through the UI.Deprecated
- The Magento extension plugin has been deprecated.
- The Cockpit feature is going to be deprecated β all related links and sections have been removed from the Voucherify dashboard.
Improved
User interface
Drawers now remember the previously selected tab, filters, and page when navigating back.Fixed
Bundles
- Fixed an issue where bundle effect discounts were not retained for the draft campaigns.
- Fixed an issue that caused input validation to prevent saving a discount in specific contexts.