Gift Vouchers
Marzipan now sells and manages gift vouchers: stored-value codes a customer buys and somebody else spends later.Sell them from a voucher product, which behaves like any other product but issues a code instead of shipping something. Set the amounts on offer, let buyers enter their own, choose an expiry, and optionally restrict what a voucher can be spent on. A voucher belongs to one market, and the buyer picks who it goes to, what the message says and the day it should arrive.A new Gift Vouchers area lists every code you’ve issued, with the unspent balance, what was issued and redeemed this month, and what’s expiring in the next 30 days. Every voucher has a full ledger of its movements alongside an activity trail, and can be resent, adjusted or voided. Codes are masked to their last four characters everywhere, and revealing one is a deliberate step that asks why and records it.Customers spend a voucher in the same box as a discount code. It can pay for goods, delivery and subscriptions, in part or in full, over as many orders as it takes, though never for another voucher. Refunding an order puts the value back on the code.- Issue by hand - for goodwill or a phone order, emailed to the recipient or handed over yourself
- Liability report - issued, redeemed, lapsed and outstanding, month by month, under Insights
- Emails - four new templates under Settings > Notifications, in a Gift Vouchers group
- Expiry - off by default, with a warning email before a balance lapses
Gift Checkout
Customers can now send an order to somebody else. Checkout asks who the order is for, and a gift adds a step for the message, the recipient’s details, a date not to deliver before, and a date to tell them on.The reveal date is a real promise: nothing reaches the recipient before it, and the email goes out at eight in the morning in your own timezone. Deliver after now holds the parcel itself rather than only showing on the order page, so a gift bought in September for Christmas stays put.Billing stays with the buyer and delivery goes to the recipient. Where a gift needs an account, as a subscription does, the recipient is created as an ordinary customer, and an existing customer gifted something at their office never has their own delivery address repointed.Turn it on with Let customers buy gifts under Settings > Cart & Checkout, and reword every question under Branding & Web Components. See Gift orders.Gift Subscriptions
A subscription can now be sold as a prepaid gift: a fixed number of deliveries, charged once, that never auto-renews.The giver and the recipient are held separately, so billing email stays with the person who paid and the person receiving it is never charged. At the end of the term the giver chooses what happens (hand it over, stop, or keep gifting it), and both people are told at different times, the giver first so they get the chance to renew before the recipient hears anything.Cancelling a gift stops the renewal, not the deliveries. Six new email templates cover the whole life of a gift, under Settings > Notifications in a Gift group.See Gift subscriptions.Recurring Events in Separate Date Ranges
A recurring event can now run in separate date ranges while keeping one weekday pattern and one set of times. A venue that only opens during school holidays previously had to create an event per holiday, which split its ticketing, waitlist and reporting across events that were really one product.Set the ranges under Dates on the event form. A range masks the pattern rather than restarting it, so a monthly event keeps its day of the month across a gap and a weekly one still lands on the weekdays you picked. Removing a range keeps any dates that have already sold tickets.See Recurring events.Ticket Sales Cut-Off on Recurring Events
The sales cut-off was measured from a recurring event’s first date, so once that date passed the gate stayed shut: every later date reported sales as closed and refused to add to the cart, however far off it was and however many tickets were left.The cut-off now counts from the date being bought. A series is only closed once every remaining date has passed its own cut-off. See Create.Two API endpoints have been removed:
GET /v1/events/{event}/availability and GET /v1/events/{event}/check-dates. Both were served by a second recurrence generator that ignored the weekday selection and never matched a date on a recurring event, so they only ever worked for one-off events. Use Check Occurrence Availability instead, which is scoped to a single date.Reward Points and Vouchers
Buying a gift voucher never earns points, and by default neither does the part of an order a voucher paid for. Turn Exclude voucher payments off under Settings > Rewards to let redemptions earn. See Earning and redemption.Payment Links
Send a customer a link to pay an order themselves, rather than taking their card details over the phone. Send payment link sits alongside Process payment on any draft or held order that settles through Stripe, and emails the customer a link to a secure Marzipan payment page.While a link is out the order is locked: its items can’t be edited and payment can’t be taken another way, so it can’t be paid twice or paid for something that has since moved. Resend issues a fresh link, and Cancel hands the order back to you.Links expire after seven days by default, set under Settings > Payments and overridable per send. The payment page carries your button colours and corner radius, works whatever your website is built with, and handles collection orders by showing where to collect from.Payment links can also be sent and cancelled from the Marzipan mobile app. See Payment links.EzyPro
A new integration exports your orders to EzyPro on a schedule, as a CSV delivered over SFTP. Each market gets its own file, folder and product-code mapping, since EzyPro keeps a separate database per market. Runs are logged with a downloadable copy of every file sent, so you can answer whether a particular day’s export went. See EzyPro.Manual Orders
The create order form has been reordered so items are added before delivery, which means shipping rates and free-shipping thresholds are quoted against a basket that actually has something in it.- One-off items - sell something your catalogue has never held, such as corkage or a delivery surcharge, without creating a product for it
- No shipping needed - a third option beside Delivery and Collection, for orders that are digital, comped, or handed over across the counter
- Discount suggestions - the discount section now lists the discounts an order already qualifies for, best first, with what each is worth against that basket
Purchase Options on Product Pages
A product with upsells can now offer them as priced boxes showing every option’s price at once, rather than a dropdown that hides all but the selected one. Collection cards show a See options button opening the same chooser, where each option reports its own stock so a shopper can’t pick a sold-out case. See Product.Shoppers Pick Their Billing Frequency
A subscription package sold at more than one billing frequency now asks the shopper which they want, as boxes or a dropdown, with your default pre-selected. Previously only pick & mix offered the choice. See Packages.Add-to-Cart Confirmation
Adding to the cart without redirecting now shows a short confirmation where the shopper is, rather than relying on a cart icon that may be scrolled out of view. Choose Redirect, Notify or Nothing per storefront, and set the confirmation’s style and position under Branding & Web Components.Stores that never set a redirect preference pick up Notify as the new default. Stores that did set one keep what they had.
London City Bond - Goods Received
Turn on Record goods received to add stock as soon as London City Bond book goods in, at midday and 7pm, rather than waiting for the nightly sync. It also closes off the stock transfer the goods were for, and covers supplier deliveries as well as your own transfers. See Integrations.Cancelled Orders Return Their Stock
Cancelling an order now puts its stock back, to the location it came off. Previously the units were simply gone, except where a London City Bond sync happened to paper over it.Branding & Web Components
Settings > Web Components is now Settings > Branding & Web Components, since those settings brand the payment page as well as your storefront components. Nothing has moved. Only the name has changed.Custom Checkout Questions
Ask your own questions on the checkout details step, such as a reciprocal club’s membership number. Set them up in Settings > Cart & Checkout, optionally restricted to particular markets, and choose whether each one is required. Answers appear on the order and the customer, fill themselves in for a returning customer, and can be added to the orders CSV export. A question can carry an auto-tag applied to the customer once it’s answered. See Cart & Checkout.Create an Account from the Order Confirmation
Guests are now offered a single password field on the order confirmation, turning the order they just placed into an account without retyping anything. A verification code is emailed straight away. The wording is editable in Settings > Branding & Web Components > Checkout. See Checkout.The confirmation page has been rebuilt to match the checkout’s split layout, with an order summary alongside the receipt and reward points shown as a banded statement.Referral Question on the Confirmation
The “how did you hear about us?” question can now be asked again on the confirmation page when a customer skipped it at checkout, which costs no conversion and fills in a good share of the gaps. Off by default. See Customisation.Newsletter Opt-In Wording
Set the wording shown beside the checkout newsletter checkbox, and whether it starts ticked. Marzipan records what each customer was actually shown, so editing the wording later never rewrites consent already given.Stock Valuation Report
A new Insights report values the stock you hold at cost price, with a headline total, a breakdown per location and a sortable product table. It’s market aware, exports to CSV, and counts products holding stock with no cost price separately so an understated total is visible rather than silent. See Sales reports.Inventory
- Adjust stock in bulk from a slide-over panel, correcting several products in one go with one location, reason and note across the batch. See Inventory settings.
- Export the inventory list to CSV, with a column per location.
- The Trade adjustment reason is now called Wholesale, and an adjustment can name the trade customer it was made for.
- Bundles can derive their stock from constituent items, so a case assembled from bottles you already hold stays accurate on its own. See Product inventory.
- Overselling now takes an optional limit, so you can sell a set number beyond the figure on screen rather than sell indefinitely.
Per-Market Product Images
Individual product images can be scoped to the markets they belong in, for the same SKU needing different imagery per market, usually because the physical label differs. An image with no markets set shows everywhere. Historical orders keep showing the image the customer actually bought. See Markets.Stripe Processing Fees
Marzipan now captures what Stripe charged you to take each payment. Processing fee and Net amount are available as opt-in columns on the orders CSV export. See Orders.Explaining a Restricted Collection
A collection restricted to certain markets can carry a message and a page to link to, so a storefront can say why there’s nothing to show instead of rendering an empty grid. See Collections.Tasks and Roles
Tasks now sit behind role permissions, including who can assign work to someone else and who can see other people’s tasks. Reading the task list and completing your own tasks stay open to everyone.Free Shipping Minimums
A shipping method’s minimum order value is measured on the goods total after discounts, with no shipping and no tax. Previously the shipping charge itself counted towards the minimum that would remove it. Both shipping screens now describe the rule as it actually works. See Shipping.Flows and POS Orders
Flows on theorder.paid trigger now skip point-of-sale orders by default, since a till sale has no delivery address and uses the shared walk-in customer. Flows that want every sale opt back in with Include POS orders. See Flows.Google Merchant Center Improvements
Product categories are now picked from Google’s own taxonomy, each sync is recorded with a browsable history, and disconnecting offers to take your catalogue down at the same time. The default sync interval is twice a day. See Google Merchant Center.London City Bond
- Every stock sync is now recorded, including runs where nothing moved, with the last ten shown on the integration page and unmatched SKUs named.
- Per-item minimum stock levels let you set transfer triggers for the lines that move at a different rate, with
0excluding an item entirely. See Integrations.
Going Live Clears Test Data
Turning off test mode to go live now clears test-mode customers and their test artifacts, so you start selling with a clean slate. Going live is a one-way switch.All-Day Event Improvements
All-day events now carry their all-day setting and recurrence days through to the storefront and API, so listings display correctly.Recurring Events Reorganised
Everything about a recurring event except its shared details belongs to a date, and the app now reflects that. A recurring event’s own page is about the series: the dates it runs on and a way into them, while attendees, activity, the waitlist and ticket counts live on each date. Dates can be marked out of stock or unavailable so they stay listed but can’t be bought, and a series is only finished once its last date has passed. See Recurring events.Waitlists per Date
Each date of a recurring event keeps its own waitlist, and a customer can wait on more than one date of the same event. Seats freed on a date are offered to that date’s queue, and a claimed place produces a ticket for the right day. See Events.Subscription Shipment Windows
Variable packages can now date their shipments as an availability window instead of fixed processing and shipping dates. Subscribers bill on their own anniversary and receive whichever window covers that date, so a package that sends “whatever is in the box right now” no longer needs a dated shipment for every renewal. See Packages.Cheapest Item Free
A new discount type takes the cheapest qualifying item already in the cart off the total. One unit, not the whole line. Discounts also gain a minimum number of items condition, for offers framed by count rather than value. See Create a discount.Checkout Requirements
Set a minimum item count for the cart, and optionally require full case quantities so physical items are ordered in whole multiples of it. Both are enforced everywhere a cart can be paid for, including express checkout and any storefront built on the API. Bundles count the items inside them. See Cart & Checkout.Market-Aware Collections
Product collections can now be restricted to particular markets, and ordered differently in each one, so each region leads with what sells there. See Collections.Google Merchant Center
A new integration lists your products on Google Shopping, pushing prices, stock and availability automatically whenever a product changes. Each market becomes its own feed with its own currency and target countries. See Google Merchant Center.Referral Sources on Orders
The referral source a customer gives is now snapshotted onto the order, shown on both the customer and the order, and available to Mailchimp as an acquisition-source merge field.Point of Sale
The till can now search for a member by name or email, apply a percentage or fixed discount to the sale, and offer a newsletter opt-in when taking the customer’s email. See Point of Sale.Flows
Add a step into the middle of a flow by hovering the line between two nodes and clicking the + at its midpoint. See Flows.London City Bond
Subscription shipments are now submitted to London City Bond over the API, batched into a single call, replacing the bulk order spreadsheet. Orders shipping later are held and released through the day.Team Management
Administrators can now manage the Team by default. Editing roles stays owner-only.All-Day & Multi-Day Events
Events can now be marked as all-day, and weekly recurring events can span multiple days. Editing a recurring event propagates your changes across occurrences while preserving any occurrence times you’ve customised. See the Events guide.Product Barcodes (GTIN)
Physical and bundle products now have a barcode / GTIN field, accepting EAN-13, UPC-A, EAN-8 and ITF-14 with live format validation. See Products.Web Component Labels Tab
Storefront text labels are now consolidated into a single Labels tab in Settings > Web Components, including new Sales Closed and Back in Stock button labels. You can also choose how subscription frequencies read: worded (“quarterly”) or interval (“every 3 months”). See the Customisation guide.Customisable Button Text Colour
Set the text colour for primary buttons, including a separate hover colour, from the Web Components styling settings.Product Image Options
New product-image settings let you position thumbnails to the side or bottom and enable a zoom overlay, with a separate corner radius for product images.Order Improvements
- The order page now updates its activity feed live, so entries written by background jobs appear automatically.
- Editing an order now shows bundle constituent items when you add a bundle.
Markets
Carts now follow the resolved market precedence (customer choice, then saved market, then location) instead of forcing a single assigned market.Forms
Form auto-reply emails are now sent from a customisable notification template, so you can tailor the subject and message per form. See Forms.Point of Sale - Walk-In Customers & Receipts
Point of Sale sales can now be taken for a shared walk-in customer and turned into a named customer later. Email a POS receipt after a sale (sending it links the walk-in order to that customer), or assign a walk-in order to a customer from the order’s Actions menu. Tap to Pay payments now capture and display the card brand and last four digits.Event Attendees Export
The event Attendees tab now has a CSV export, a price column, and clickable links back to each attendee’s order. See Events.Subscriptions - Cancelled/Expired Filter
Filter the subscriptions list by when subscriptions were cancelled or expired using a date range.Order Shipping Dates
The order shipping-date picker now blocks past dates, and changing the date on an order held for London City Bond dispatch reschedules and logs that hold.Customers
Set a customer’s default payment method, and archived customers are now hidden from the main list by default.Marzipan Mobile App (Beta)
Introduced the Marzipan mobile companion app for managing your store on the go. It covers orders, customers, subscriptions, tasks, and dashboard metrics, with a secure sign-in flow and push notifications to your device.Point of Sale & Tap to Pay (Beta)
Added in-person selling through the mobile app: build a sale with Quick Pay and take card payments with Tap to Pay on iPhone via Stripe Terminal. In-person sales appear in the web app under the POS channel. See Point of Sale.Subscription Payment Safeguards
Marzipan now detects blocked Stripe payments and halts renewal retries, with team notifications for blocked payments and renewal errors that members can opt into.Order Improvements
- Added a Free payment-status filter and excluded free orders from the pending total.
- Bulk shipment CSV import can now capture a comments column.
Platform
Upgraded the underlying platform to Laravel 12.Rewards & Loyalty Programme
Introduced a complete loyalty programme with tiered rewards, point earning, and checkout redemption.Customers earn points on every order based on configurable earning rates. Points accumulate towards reward tiers, and each tier can offer perks like percentage discounts, free shipping, early access to products, and event invitations. Customers can see their current tier, points balance, and progress to the next tier from their account page.Points can be redeemed at checkout for a discount, with configurable redemption rates and maximum discount caps per currency. Tier membership is managed automatically based on lifetime spending, with optional notifications for tier upgrades and downgrades.Added a dedicated rewards insights dashboard showing tier distribution, revenue breakdown by tier, and programme performance trends.Rewards data (tier name, points balance) syncs to Mailchimp as merge fields for targeted email campaigns.Multi-Currency & Markets
Added support for selling in multiple currencies from a single store. Markets define regional pricing, currency, exchange rates, and payment provider availability.Products and subscription packages can have per-market pricing set manually, or prices can convert automatically using exchange rates. Shipping methods support per-market rates. Reports and insights can be filtered by market. The web components automatically display prices in the customer’s local currency.Inventory Locations
Expanded stock management to support multiple inventory locations with a complete audit trail. Each location tracks stock independently, and every movement is recorded with a reason (order, received, write-off, stock take, transfer, return) and optional notes.Added bulk stock adjustment for updating many products at once, low stock alert emails with configurable thresholds, and inventory rules that determine which location fulfils orders based on conditions like shipping country.London City Bond stock levels now sync automatically to a dedicated inventory location.Shipping Zones
Shipping methods now support zone-based pricing for more accurate delivery charges. Built-in zones are available for the UK (Mainland, Highlands & Islands, Northern Ireland, Isle of Man, Channel Islands) and South Africa (Major Cities, Remote Areas). Rates are automatically determined based on the customer’s postcode, with support for weight-based pricing bands.PayFast Payment Gateway
Added PayFast as a payment gateway option, supporting credit cards, instant EFT, and local South African payment methods. Includes sandbox mode for testing, webhook-based payment confirmations, and integration with the global test mode system.ScrubBill Fulfilment Integration
Added ScrubBill as a fulfilment provider for third-party logistics. Orders can be forwarded to ScrubBill automatically or manually from the order detail page. Webhook notifications automatically update order status when ScrubBill confirms dispatch.Order Attribution & UTM Tracking
Track where your orders come from with automatic UTM parameter capture (source, medium, campaign, content, term) and configurable referral source questions at checkout. A new Attribution insights page shows orders and revenue by traffic source, campaign, referral channel, and landing page with period comparison.Website Analytics
For Marzipan-hosted sites, web traffic stats are now available directly in the insights section. See pageviews, unique visitors, and traffic breakdowns by page, referrer, country, browser, device, and UTM parameters.Global Test Mode
Added a global test mode toggle under a new Developer Settings page. When enabled, all payment gateways automatically use their test/sandbox credentials. Store both live and test API keys for each gateway and switch between them with a single toggle. Turning off test mode automatically restores all live credentials.Email Domain Management
Added a new email settings section for registering and verifying custom sending domains. View required DNS records (MX, SPF, DKIM) and their verification status. Email delivery now uses dual providers for improved reliability, with automatic email suppression for bounces and complaints.Web Component Customisation
Significantly expanded the Settings > Web Components page with new options for customising your storefront without code:- 25+ colour settings covering buttons, text, backgrounds, borders, badges, status messages, and account accents
- Product display options including quick attributes on cards, configurable accordion sections on product pages, and related products
- Collection options for card style (minimal, bordered, elevated, filled), text alignment, and image corners
- Cart options for background/border styling, free shipping notifications, and related product recommendations
- Checkout options for split-panel background colours, logo positioning and size, phone requirement, and referral source questions
- Account options for subscription upsell sections
Forms
Create custom forms directly in the dashboard with configurable field types including text, email, phone, textarea, select, checkbox, radio, date, and hidden fields. Form submissions trigger notifications and auto-reply emails.A new<marzipan-form> web component renders forms dynamically by slug, replacing the old hardcoded <marzipan-contactform> component. Fields, validation, and layout are all driven by the API, so no code changes are needed when forms are updated.Bidirectional Messaging
Two-way email conversations with customers via Lettermint inbound processing. Replies from customers are threaded into per-customer conversation threads in the messages inbox. An inbound email status banner and UX improvements make it easy to manage ongoing conversations.Customer Segments
Segment customers by conditions such as type, created date, order count, lifetime revenue, subscription status, reward tier, market, and form submissions. Segment membership is evaluated and cached for performance. Segments sync to Mailchimp as tags for targeted campaigns.Back-in-Stock Notifications
Customers can subscribe to out-of-stock products to receive email alerts when stock is replenished. Back-in-stock settings are configurable per market.Free Checkout
Carts with a zero total value can now complete checkout without requiring a payment step.Roles & Permissions
Granular access control for admin users. Assign roles with specific permissions to control who can view and manage different areas of the dashboard.Per-Market Product Visibility
Control which products are visible in each market, allowing you to tailor your catalogue by region.LCB Blocked Items
Added support for blocked items in the London City Bond integration, preventing specific products from being sent to LCB for fulfilment.Improvements
AppSubscription packages now have per-market pricing tabs for setting prices in different currenciesAppAdmins can now edit the scheduled renewal date for a subscriptionAppTasks now support @mentions linking to customers, orders, subscriptions, and eventsAppTasks can be filtered by multiple assigneesAppTask mentions appear as activity on linked recordsAppPinned notes feature for important task notesAppPhone numbers are now automatically formatted to international E.164 standardAppPhone number can be required at checkout (configurable)AppMailchimp integration now syncs customer address fields and reward data as merge fieldsAppCustomer profiles in Mailchimp update automatically when addresses change in MarzipanAppNew subscription orders within the LCB fulfilment cutoff window are no longer sent immediatelyAppLCB stock levels sync automatically to inventory locationsAppProduct attributes can now be marked as private (hidden from customers)AppFulfilment actions are now restricted to the relevant shipping countriesAppFree shipping display threshold is now applied server-side for accuracyAppAdded tenant management to the admin panelWeb ComponentsCart displays free shipping progress notificationsWeb ComponentsCart supports related product recommendationsWeb ComponentsCart supports background colour and border customisationWeb ComponentsCollection pages support background colourWeb ComponentsCheckout supports split-panel background coloursWeb ComponentsProduct cards show quick attributesWeb ComponentsProduct pages have configurable accordion sectionsWeb ComponentsReferral source question available at checkoutWeb Componentswhat3words field support for eventsAppEmails tab on customer detail pageAppRGBA/hex-alpha colour support and button border styling optionsAppPer-market free shipping messagesAppEmail log timelines show queued_at timestampsAppDomain change handling for store email with unverified domain warningsAppCancellation email controlAppForm submissions consolidated viewWeb ComponentsDynamic form component with API-driven field renderingWeb ComponentsBack-in-stock notification form on out-of-stock productsWeb ComponentsThemed button border CSS variablesWeb ComponentsFree checkout supportWeb ComponentsBundle optimisation with lazy loading and DOM-conditional loadingWeb ComponentsMarket switcher (renamed from currency switcher)
Bug Fixes
AppFixed customer archive referencing non-existent subscribed columnAppFixed duplicate route names breaking route cachingAppFixed market pricing on event depositsAppFixed subscription auto-renewal when no linked planAppFixed discount errors on checkoutAppFixed Apple Pay pickup order issuesAppFixed handling of duplicate order constraint on payment retryAppFixed pick & mix renewal pricing calculations for per-item subscriptionsAppFixed subscription renewal items in cart price recalculationAppFixed cart currency for shipping method price formattingAppFixed Mailchimp webhook field mapping for subscription and address dataWeb ComponentsFixed cart display threshold currency inputsWeb ComponentsFixed checkout customer mismatch when switching accountsWeb ComponentsFixed shipping method validation for flat rate methodsAppFixed case-insensitive email uniqueness enforcementAppFixed invalid UUID route parameters returning 500 instead of 404AppFixed Stripe charge using incorrect stripe_id fieldAppFixed message compose state, unassigned filter, and select all toggleAppFixed loading button size shift during loading stateAppFixed Fathom API rate limitingAppFixed tenant context in queued jobsWeb ComponentsFixed account modals overflowing viewport on smaller screensWeb ComponentsFixed billing details showing “same as shipping” for event-only cartsWeb ComponentsFixed white background on AddToCart componentWeb ComponentsFixed Rewards tab showing when rewards aren’t enabledWeb ComponentsFixed back-in-stock form layout below out-of-stock buttonWeb ComponentsFixed cart member pricing, buy again button, and subscription date modalsWeb ComponentsFixed MarketSwitcher dropdown showing empty

