Talon.One releases new features, fixes bugs and implements product improvements regularly. This change-log is a curated list of relevant changes designed to inform technical users and those integrating Talon.One.
We also share more detailed posts tailored for our end users on our Update Feed, which you can also access from your account.
- Integration API V2: The update customer profile API endpoint now has an optional flag "runRuleEngine" that allows you to evaluate campaigns during a customer profile update. Additionally, we also added the "dry" flag so that this campaign evaluation does not persist to the database.
- Campaign Priority: We redesigned the campaign priority page to be easier to use and make better use of the available horizontal space.
- Coupon Discount Limits: Fixed some rounding issues when the discount limit is a decimal number.
- Roles: Fixed a bug where assigning users while creating a new role would not work.
- Campaign Copy: When copying campaigns to different applications, we now ensure that any loyalty programs used in the campaign are also available in the new application.
- Events: Fixed an issue where we would throw an error if an events search would include both a campaign and a rule name.
- Loyalty: The management API endpoint to add loyalty points now correctly respects program defaults if no value is provided for the start date.
- Cancelled Sessions: When cancelling a customer session, we now also roll back coupons and limit counters from campaigns that are disabled/expired.
- Coupon Search: Fixed an issue where searching for coupons over API would return non-rounded floating point numbers if a coupon has a decimal discount budget.
- Coupon Search: Fixed an issue where coupon search results would include the same limit values for multiple coupons.
- Loyalty Points Start Date: In addition to the "points validity", you can now also specify when points should become valid.
- Loyalty Program Settings: You can specify the default start date of points
- Rule Builder: In the add loyalty points effect, you can override the default value of the program
- Customer Details Page: When awarding loyalty points manually here, you can now also specify start date and validity
- Integration API: When querying a customer's loyalty ledger, we now return the points grouped by pending, valid and expired
- Coupon Import: Fixed an issue where imported codes had no redemption limit by default. This has been corrected to "1" in alignment with the text on the import coupons page.
- Coupon Budgets: You can now enter a decimal number when setting a discount limit on a coupon
- Rule Builder: Fixed an issue where "list of numbers contains X" conditions and filter steps would not work. Please delete and recreate these conditions/steps to fix the issue.
- Rule Builder: We no longer force a space before/after a variable in the body of the notification effect.
- Campaign Manager Redesign: We have significantly revamped the UI language of our Campaign Manager to better align with the colors and fonts used on our website and in our marketing materials.
- Wider Tables: Tables such as the campaign list and the coupon list will now stretch to fit the entire width of your screen.
- New Top Bar: The top bar includes context of where you are (breadcrumbs) and primary action buttons.
- Improved UI for Location input: We redesigned the location input UI to make it easier to use.
- Sandbox/Live Applications: When creating a new application, you can now specify if it is a Sandbox- or Live Application. Additionally we have exposed the count of sandbox/live applications in the account overview page. Now the metrics on this page will align with 100% with the restrictions in your contract. All "old" applications are defaulting to "live" application. Please go into the application settings of your sandbox applications to correctly label them as such.
- Rule Engine: Fixed an issue where a successfully closed session would not cause a coupon usage counter increment if the campaign triggered both an accept and a reject coupon effect at the same time.
- Rule Engine: Fixed an issue with floating point arithmetic that prevented certain coupons with a discount budget from being redeemed.
- Coupon Creation UI: Fixed an issue where you could not enter decimal values when adding a discount budget to a coupon
- Loyalty Ledger: Fixed a rare bug where we would only display 1 points addition if a session triggered 2 point additions with the exact same name.
- Customer Profile API V2: Fixed an issue where the profile creation date was not populated in the response.
- Customer Details Page: Fixed an issue where people without admin rights saw a blank page when trying to view customer details.
- Effects Export: Fixed an issue where exported effects will not show the coupon id for effects on revoked sessions.
- Loyalty: Improved point expiry options in the "add loyalty" effect.
- Rule Builder: Fixed a regression in the formula input which would lead to issues with certain formulas.
- Integration API V2: Exposed the "additional costs" configuration page for all admins under the account section.
- API Keys: You now need to re-enter the name of an API Key to confirm its deletion.
- Loyalty: Fixed an issue where we did not store the Customer Session ID in the ledger when loyalty points were subtracted.
- Rule Builder: Re-added campaign ID to the palette as it was needed for some use cases.
- Loyalty: Fixed a bug where loyalty points were applied on customer session updates, in stead of during session close.
- Rule Builder: When using the create coupon effect, you can now create coupons that are not tied to a specific customer profile.
- Coupon Budgets: When creating coupons, you can now specify a discount budget for each coupon. Use this in stead of a redemption limit to set up "gift card" use cases where the coupon is a voucher with credit. See this article for more information.
- Notification Effects: When you use number-type attributes in notification effects, we will now round the number to 2 decimal points.
- Loyalty: When loyalty points are added in the Campaign Manager or through the management API, we now record which user added those points in the loyalty ledger.
- Integration API V2 Customer Profile Update: We introduced a V2 of our customer profile update endpoint. Currently, this V2 does NOT run the rule engine whenever an update is done. This will be added as an option later. By not running the rule engine on profile updates, we can drastically improve performance under high load situations (up to 3x throughput). If you do not rely on triggering effects when executing customer profile updates, we strongly encourage you to update to this new endpoint.
- Segment Integration (Beta): Improved performance and max throughput of the segment integration.
- Redesigned Main Navigation: We moved the main navigation to a side bar. This makes better use of screen real estate on wide displays. Additional improvements are a quick application switcher and direct access to different subsections of settings screens.See this article for more information.
- Home Page: Fixed the display of campaign statistics for each application
- Integration API: Improved performance when many customer session updates are triggered at the same time.
- Coupon Search: Fixed some regressions and minor bugs that should lead to faster coupon searches in some cases.
- Integration API Dry Runs: When calling an integration API endpoint that triggers the rule engine (customer_sessions, customer_profiles, events) you can now pass a query parameter "dry=true". This will trigger a dry run of the rule engine, meaning that nothing gets saved to the database.
You will still receive all effects as expected, but we do not generate an actual customer session/ event on out side. You can use this in scenarios where you are creating "fake" customer sessions and don't care about persisting the outcome to database. This should come with a significant performance improvement. (up to 20ms better response time depending on scenario, leaner sessions/events tables meaning real customer sessions will maintain better performance over time).
- Rule Builder: Fixed an issue that caused the "bundle" step for cart item filters not work as expected.
- Campaign Copy: When copying a campaign, we now also respect the campaign priority setting of the copied campaign.
- Rule Builder: We removed many more irrelevant attributes from the attribute palette.
- Rule Engine: Fixed an edge case where we would return a 500 error when a campaign has 2 rules that both increment the same limit counter and the limit would get overshot by rule 2.
- Rule Builder: The attribute palette no longer has a section for Account attributes, as these are not relevant for building campaigns
- Campaign Priority: We can now change the default priority of new campaigns on a per-application level, however this is not yet exposed in the UI. If your use-case requires campaigns to not be universal by default, but rather be exclusive or stackable, please contact support so we can make the change for you.
- Integration API/Customer Inventory: Added a flag for coupons to the customer_inventory endpoint. When you pass this flag, we will return all coupons that were reserved for this customer (including all coupons where the recipientintegrationid is set for this customer)
- Campaign Insights: Improved how we calculate "redeemed referral codes" in the Insights tab. The numbers should now reflect actual occurences of the "redeemReferral" effect.
- API V2/ Additional Costs: Added a UI in the developer section where you can configure your additional costs. This is hidden by default. If you want to start working with API v2 and need to configure additional costs, please contact our customer success team.
- Rule Engine: Fixed an issue where campaigns that mixed coupon-related rules with rules that do not require coupons would sometimes have effects triggered twice
- Effects Export: Exported effects now have a coupon ID, this indicates which coupon was responsible for triggering this effect.
- Loyalty/Rule Engine: Loyalty points can now also be added and subtracted using custom events and customer profile updates.
- Customer Profile Page: The Session IDs in the loyalty ledger overview table are now clickable.
- Coupon Creation: Fixed an issue where the "allowed characters" could not be changed from the default option.
- API Tester: Fixed an issue where we didn't send the cart items when triggering a request from the API tester.
- Campaign Copy: Fixed an issue that did not allow you to edit attributes of a copied campaign if the original campaign did not have any attributes.
- Customer Sessions: You can now search customer sessions by referral code. This is way faster than searching events by referral code, so please use this page for debugging in the future.
- Coupon Generation: When creating multiple coupons, you can now optionally change the separator character from hyphen (-) to underscore (_) or no character at all.
- Developer Section: For security reasons, the API tester now requires you to enter an API Key for the generated request. Additionally, you can now fire request from inside the UI and see the response right on the page.
- Referrals: Fixed pagination on the referrals table in referral campaigns.
- Campaign List: Fixed display of "last activity" date.
- Customer Sessions in UI: We have added a "customer sessions" section on the application level in the Campaign Manager UI. Here you can search for sessions by customer profile id, coupon code, and much more. Additionally, when looking at a coupon in the coupon finder, there will be a link at the bottom that takes you straight to all sessions where this coupon was used.
- Data Tracking Message: Fixed an issue where the "anonymous data tracking" message would re-appear after every log in.
- Events: You can now search for events by "coupon" or "referral" code. This will show all events where the specific code was used.
- Loyalty: When using the "add loyalty points" effect, you can now optionally specify how long these points are valid. This will overrule the default validity of the loyalty program.
- Rule Builder: Fixed an issue where you could search for campaign & application attributes for the "update an attribute" effect.
- Rounding: When entering a formula in any number field, you now have the option to round the formula or any part of it.
- Coupon Import: Fixed an issue where imported coupons that have no attributes could not be searched for in the coupon finder
- Notifications: Fixed an issue where we would trigger a "campaign has been disabled" notification for campaigns that were freshly created and were never active.
- Application-specific attributes: When creating a new attribute, you can now specify for which applications this attribute should be available. This allows you to e.g. hide coupon attributes that should only be used in 1 application in your other applications.
- API Keys: Admins will now receive an e-mail whenever an API Key is about to expire.
- User permissions: Users with read-only permissions will no longer see the "create application" and "add attribute" buttons on certain pages.
- Notifications: We added an option to your use profile to enable notifications on a per-application basis. Enable this feature to receive an e-mail whenever campaigns get disabled, expire, get created.
- Rule Builder: We added a new condition that allows you to check if a coupon code is valid without implicitly redeeming the coupon on session close. You can use this condition to trigger a notification in a secondary rule whenever a condition of your "happy path" rule is not met.
- Campaign Budgets: Whenever you update a pre-existing per-profile or per-coupon budget in the campaign settings, we will now attempt to retro-actively update all pre-existing limit counters for profiles/customers that have already triggered this campaign.
- API Log: Improved the performance for fetching request/response logs for high-traffic integrations.
- Integration API: Added a
GET v1/customer_profiles/$ID/inventoryendpoint that enables querying of all data related to a customer profile. For this release, only customer profile data and associated referral codes are supported.
- Coupon Creation: We now show a warning when the user attempts to create a coupon with start and end dates that do not fit in the campaign schedule
- Management API: The endpoints for creating and updating attributes are now exposed to our customers
- Integration API: Fixed an issue where a coupon could not be redeemed if there was more than 1 limit counter associated with it.
- Integration API: Fixed a bug where sessions could not be canceled if new campaign budgets were added to a triggered after the session was closed.
- Account Page: Fixed the rendering of account-specific limits (for real this time).
- Mandatory Attributes: In application settings, we have renamed the default campaign budget section to Campaign Configuration and added options to control which campaign and coupon attributes are mandatory in this application.
- Mandatory campaign attributes: If a campaign has a missing mandatory attribute, it will remain in draft and can not be activated until all mandatory attributes are given values.
- Mandatory coupon attributes: Coupons can not be created if no value is set for all mandatory attributes
- Account details: Fixed the display of the maximum values for the account metrics.
- Rule Builder: Adding a bundle cart item filter step no longer crashes the page
- Integration API: When canceling a customer session, we now also roll back campaign-wide budget & limit counters. This comes with a new RollbackDiscount effect in the API response.
- Integration API: When an effect can not be applied due to a race condition with another request, we now return response code 409 instead of 500.
- Account Analytics: We added a metric that keeps track of how many rules are running in active campaigns
- Coupon Import: Improved error reporting for malformed csv files.
- Account Analytics: Fixed an issue where the account page would display total campaigns in stead of active campaigns.
- Coupon Creation: Fixed a bug where coupons could not be created when you had added and then removed a custom attribute from the page.
- Rule Builder: Fixed an issue that would lead to the increment/decrement attribute value; effect not working as expected.
- Application Creation: It is no longer possible to create 2 applications with the exact same name.
- Campaign Limits: We have added amount of discount effects triggered as an action that can be limited. This will allow you to limit campaigns on how often a discount triggers, rather than on the total monetary amount of the discounts.
- Integration API: Fixes an issue where we accidentally returned an empty coupon object in the response of a customer profile update API call.
- User invitation E-mails: Should work again now.
- Rule Builder: We have added an option to duplicate a rule within the same campaign.
- Integration API: We now return the full coupon object with all details whenever a coupon was used on a customer session. This means no extra API calls are needed anymore to find out coupon details after a customer uses a coupon.
- Integration API: Improved performance of rule evaluation for rules with a large amount of cart item filters.
- Rule Builder: The 'update an attribute value' effect will no longer show list-type attributes in the palette.
- Coupon Edit: Resolved an issue that prevented a small percentage of coupons from being edited.
- Rule Builder: We have added an option to duplicate a rule within the same campaign.
- Management API: We have improved the /v1/changes endpoint so you can now query recent changes by application and date range.
- Braze Coupon Generation: We have relaxed our internal rate limiting for coupon generation via Braze by a factor of 4
- API Tester: We have slightly redesigned the API tester page and improved error handling so it is now less likely that you generate invalid API calls here.
- Coupon Creation: The response to a coupon creation API call now returns the correct values for coupon limits
- Default Campaign Budgets: Fixed an issue where we would add coupon/referral related budgets to campaigns that do not have the corresponding feature enabled.
- General UI: Select inputs have aligned across the whole Campaign Manager. Rule Builder adjusted to use new inputs and improved user experience.
- Campaigns Priority: Disable UI when the user has no permissions to edit the Application’s campaigns priority.
- Rule Builder: Consistent warning indicators for values left empty by the user.
- Coupons Import: Fix potential bug when importing big batches of coupons. Enhanced error reporting.
- Application Settings: Fix bug where user couldn’t update Application’s custom attributes after its creation.
- Webhooks: Fix potential bug in webhooks internal execution by limiting its exhaust potential to our Databases.
- Rule Builder: Allow cart items filter’s name to be edited even when there is a conflict upon creation.
- Coupon Import: Re-factored the coupon import mechanism for increased reliability.
- Coupon Reservation: Whenever you create/edit coupons for a specific customer, the coupon will now be automatically reserved for that customer.
- Rule Builder: Fixed an issue where the summary of certain conditions would show [Object object] in stead of the attribute name.
- Campaign Budgets: Added options for per-coupon and per-referral budgets.
- Application Creation: Removed the legacy HMAC Application Key from the application creation screen.
- Application Creation: Fixed an issue that made it impossible to create 2 applications in a row without refreshing the page.
- Customer Details Page: Improved performance of fetching customer sessions.
- Rule Builder: Fixed an issue with the + button dancing around on formula input fields.
- Integration API: In addition to the rejectionReasons for coupons, we now also return rejectionReasons when attempting to redeem a referral code.
- Session Details Page: Redesigned the session details page so it offers more relevant information. You can now see all session attributes and the given discounts.
- Loyalty: We now return a useful error message when trying to delete a loyalty program that is currently used in active campaigns.
- Rule Builder: We have merged the conditions to check if a built in event occurs and to check if a custom event occurs.
- Rule Engine: Resolved an issue where previous session data was not properly loaded from the database when executing a custom event within an exisiting session.
- Attribute Deletion: We have completely reworked our logic around deciding if attributes can be deleted or not. This should resolve common issues where attributes could not be deleted even though they were no longer actively used in campaigns.
- Braze Coupon Creation: We have temporarily made our rate limiting more aggressive to avoid server issues during high-load scenario's. We are actively working on optimization of our coupon generation to increase throughput without impacting general performance. For now, we strongly recommend to only run Braze coupon generation outside of your peak traffic times.
- Default Campaign Budgets: We added a section to the application settings which allows you to configure default campaign budgets that will be applied to every newly created campaign within the application. These budgets can be overwritten in the campaign settings afterwards. See our help center for more info
- Campaign Budgets: Redesigned and simplified the UI of campaign budgets to make the different options more clear.
- General: We optimized our frontend build pipeline to reduce the amount of data that is loaded whenever you visit your Talon.One instance by up to 40%.
- Campaigns: Resolved an issue where updates to campaign rules would not always be visible in the UI after a page refresh.
- Rule Builder: Fixed the behavior of the cancel button when opening/editing cart item filters.
- Customer Details: Use loyalty program display names in stead of internal names where applicable.
- General UI: We upgraded to a new library for our select/multi select input fields. This should make them a bit more reliable and pleasant to use.
- Rule Builder: Fixed a display bug with collapsed loyalty effects
- Rule Builder: Fixed the behavior of the "number is between" condition
- Copy Campaigns: Disable the submit button while a copy is in progress. This should prevent accidentally creating 2 copies of a campaign
- Campaign/Coupon deletion: Fixed a (hard to track down) bug that caused coupon deletion to get very slow. This would lock the database and caused other operations to stall.
- Loyalty: Added the option to create loyalty programs with "sub ledgers", meaning the points that users collect can be grouped by specific "entities.
- Rule Engine: Time-type attributes can now be updated in effects again.
- Application Priority: Fixed an issue where it was impossible to leave the page with unsaved changes.
- Coupon Import: Fixed further issues with race conditions and deadlocks when importing coupons.
- Attribute Creation: When changing the type of an attribute in the attribute creation form, we no longer reset the other fields in the form.
- Events: Fixed an issue where campaign names could not be loaded when expanding an event. Also made the page horizontally scrollable if the content gets too wide.
- Campaign Priority: Fixed an issue where the campaign priority would always be updated when navigating away from the page.
- Coupon Import: Fixed issues when trying to import coupons that used attributes that were never previously used.
- Rule Builder: Fixed an issue with checking if a date is in a list of dates. Previously we would check for the exact timestamp, now we correctly check for the actual date.
- Attributes: We now more consistently use the display name of an attribute in the UI, rather than the internal name.
- Rule Builder: When comparing dates using e.g. "is 2 days after/before", we will now check for 2 calendar days, not 48 hours.
- Braze Coupon Creation: You can now set a usage limit when creating coupons using Braze.
Rule Evaluation and Limits: Before, whenever a rule evaluated to true but a campaign limit was reached, the rule engine would not apply the effects that would violate the limit. However, the rule as a whole was still considered as "evaluated to true".
Now, whenever a campaign limit is reached, and effects can not be applied as a consequence, the rule will evaluate to false.
This fixes a lot of unintended behavior, such as:
- Coupons will now be rejected whenever any campaign limit was reached
- Campaign priority will not consider exclusive campaigns as "triggered" whenever limits are reached
- Emails: We have changed our back-end infrastructure for sending the e-mails for password reset and user invitations. This should make sending these e-mails more reliable.
- Coupon Generation: Disallow leading/trailing whitespaces in coupon patterns.
- Braze Coupon Creation: Coupons generated in Braze now respect case sensitivity of the application.
- Coupon Reservation: Fixed a server panic when trying to reserve a non-existing coupon (we now return a 404 in stead)
- Coupon Reservation: We now return all information on the reserved coupon whenever a reservation was successful.
- Rule Builder: When trying to leave the rule builder with unsaved changes on the page, the prompt will now allow you to save changes before leaving.
- Rule Builder: Fixed an issue where we would sometimes display the wrong attribute name in the collapsed state of the "update a value" effect.
- Rule Builder: Fixed an issue where not all campaigns would show up in the "create coupon" effect.
- Rule Engine: Fixed a bug where floating-point attribute values would be overridden if they were used in a discount formula. This also fixes the mis-calculated discounts in these cases.
- Rule Engine: Fixed rule evaluation when the campaign has cart item filters that try to do operations on an empty list.
- Campaigns List: Re-added "created by" column
- Account Details Page: Improved formatting of numbers.
- Coupon Wallet: Changed coupon reservation endpoint to work with coupon values in stead of coupon IDs
- Rule Builder: Fixed an issue where you could not use cart item filters whose name starts with a number.
- Coupons UI: Fixed an issue where clearing the value of an attribute field would delete the field.
- Rule Builder: Added a description to all conditions, effects and cart filter steps. Multiple other small UI improvements.
- API Tester: Added support for session identifiers
- Integration API: Fixed an issue where the server would panic when sending cart item attributes with a null value.
- API Keys: Fixed an issue where an application could not be deleted if it had API keys.
- Coupon Edit: Fixed an issue where attributes couldn't be deleted when doing a batch edit.
- Referrals: Improved performance of referral code generation.
- Customer Profile Page: Added filtering by state and coupon value to the customer sessions tab.
- Campaigns Overview: Added a column which shows the current total discounts given for each campaign, in addition to the limit value (if configured).
- Campaigns: Removed front-end restrictions on the maximum amount of campaigns that can be in an application.
- Bundles: Added an effect to communicate bundle metadata to your back-end.
- Cart Item Filters: Fixed an issue where attributes of type date and location were not working as expected in filter steps.
- Campaigns: Increased the maximum amount of campaigns per application to 2500.
- Account Details Page: We now show the limits of your plan and how far away you are from reaching them. Contact Talon.One support if you have any further questions.
- Campaign Priority: Refreshed the UI. Added buttons to move campaigns between different sections.
- Campaigns Overview: Added a column which shows the current total discounts given for each campaign, in addition to the limit value (if configured)
- Coupons: Fixed an issue where coupons created through the Braze Integration could not be deleted.
- Customer Sessions: Fixed an issue where session updates for anonymous sessions were not always persisted to the database.
- Rule Builder: Improved behavior when entering a value in certain text fields and then clicking outside of the field.
- Attribute Input Redesign: We redesigned the UI for entering attribute values on Coupons and Campaigns. Empty attributes are omitted from the list, and we now also show attribute type and description.
- Rule Builder: Expose "current day", "current month" and "current year" as built-in integer attributes.
- Application-level attributes: You can now create attributes that exist on an application-level. Define a value for an attribute in the application settings, and then re-use this attribute (and its value) across all your campaigns. See our help center for more information.
- Integration API - Coupon Wallet: We are adding some new endpoints to our integration API that will allow you to reserve coupons for specific customers, and display any reserved coupons in your customer-facing UI. See our developer documentation for more information.
- Campaign Manager: Fixed some edge cases where certain pages (like the rule builder or coupon creation) would fail to load.
- Referrals: Resolved an issue where the "create referral" effect created unusable referral codes.
- Integration API: Fixed an issue where we returned an invalid couponRejectionReason in rare instances.
- Location Attributes: Location Picker will now open centered on your current location (this requires a web browser permission)
- Campaign Dashboard: If you have campaign-wide budgets configured, we will now show the budget counters on the dashboard.
- Rule Engine: "Closed Sessions" and "Total Sales" Profile attributes will now be correctly incremented after rule evaluation on session close events.
- Rule Builder: Built-in cart item attributes can now be used in product bundles.
- Integration API: Fix a race condition when multiple incoming requests are trying to update the same customer profile.
- Rule Builder: Cart Item Filters that are in use will no longer be fully locked for editing. We still prevent changing the name and the output type of the filter, as this would break the rule.
- Rule Builder: Display the "output type" of a cart item filter. We now display if a filter resolves to a list of cart items, or a number, or a string, etc.
- Rule Builder - Product Bundling: Added a new experimental cart filter step for product bundling. This is disabled by default. Contact Talon.One support if you want access to this experimental feature.
- Rule Builder - Geolocation Conditions: Added support for Geolocation based conditions in rules. Create attributes of type "location" and use them in your campaigns to check if the user is/is not in a certain location. Check out our help center article to learn more about this feature.
- Rule Builder: Fix an issue with using custom cart item attributes in set discount effects.
- Campaigns: Fixed issues when trying to create more than 1000 campaigns in 1 application
- Applications: Simplified the process of creating a new application. Removed the "applications overview" in the developer section, and moved all functionality here to a new "Settings" tab on the application
- Campaigns: When trying to navigate to a non-existing campaign, the user will now be redirected to the campaigns overview and receive an error message.
- Create Coupons: Improve performance of coupon creation endpoint.
- Management API - Braze: Introducing a new endpoint for single coupon generation using Braze. This endpoint can be used in the connected content feature in Braze. Contact Talon.One support for more information
- Copy Campaigns: Fixed a bug where the new global cart filters were not copied during a campaign copy
- Integration API: Fixed issues with using time-type Campaign and Coupon attributes in rule evaluation
- Coupon Creation: Disallow spaces in coupon patterns, prefix, suffix (UI only for now)
- Coupons: Added a UI to import coupons via csv file
- Customers Overview: Removed filtering/sorting by last activity date and created date. For performance reasons, this is not supported by our backend.
- Coupon Finder: If the search query has an "exact match", this exact match will be shown on top of the search result list, before any partial matches.
- General UI: Fixed a critical bug regarding date pickers not working
- Coupon Finder: Fixed overflow of really long attribute values
- User Management: Fixed a bug that could cause admins to accidentally remove all roles assigned to a user
- General: Added anonymous user behavior tracking with Hotjar
- Integration API: More robust handling of campaign priority errors: the Integration API will no longer return errors when an error occurred during the update of a campaign set.
- Coupon Finder: Bugfix for the customer profile link on the search result
- User Invite: more descriptive error message when user was already invited
- Profile Page: fixed bug that caused any assigned roles to disappear when the user edited his details
- Rule Builder De-couple cart item filters from rules, allowing them to be re-used across rules.
- Applications/Customers: Redesign customer overview, customer details page
- Integration API: adding 2 new couponRejectionReasons to the meta object: campaignLimitReached, ProfileLimitReached
- Campaigns: Design refresh of campaign settings
- UI: Fix rendering of date-type attributes
- Campaign settings: Fix toggling features on/off
- Campaign Limits: Enable a limit for couponCreation effects
- Management API: Improve performance of GET Campaigns endpoint
- Campaign dashboard: Re-arrange archive/delete/copy campaign functionality
- Attributes: Enable "list of dates" attribute type
- Rule Builder: Add support for "list of dates" in the rulebuilder ("Date is one of"-condition)