Each checkout address line carries its own label
Billing and shipping address fields in checkout label every line: Street address, ZIP / Postal code, City, and Country. Previously only the street line was identifiable — it carried the placeholder you configured for the field, while the postal code, city, and country inputs carried neither label nor placeholder, leaving the customer to infer them from position.The label you configure for the field now heads the group of four lines instead of sitting over the first input, and screen readers announce it as the name of the whole group.The street line still stands in for the address in the field’s configuration and in validation: it alone carries the configured placeholder, the required flag, and the inline error. The line labels are translatable alongside the rest of the checkout.Contact step fields →Manage webhooks in the admin, with signed deliveries and a delivery log
Webhooks are managed under Settings → Integrations & API → Webhooks. Create one by choosing an event type and an HTTPS endpoint, then enable, disable, or delete it from the table.The payload shape changed. A delivery body is now an envelope —eventId, eventType, eventTime, resource, resourceId, apiVersion, and the affected resource in data — instead of the bare Order object. Each webhook is pinned to the API version that was current when you created it, reported in apiVersion, so a later API version never changes the shape you already receive.Deliveries are signed. Every webhook has a signing secret prefixed whsec_, and each delivery carries an HMAC-SHA256 of the raw request body in the X-Twice-Signature header, formatted sha256=<hex>. Reveal, copy, and rotate the secret from the View signing secret row action.Every dispatched delivery is recorded. View deliveries opens the log for a webhook, filterable by result, event, event ID, trigger time, attempt count, and last response. Open a row for the attempt timeline, the exact payload that was sent, and Redeliver to send that payload to the target URL again.Webhooks created before signing existed have no secret, and their deliveries stay unsigned until you generate one with Generate secret in the signing-secret dialog.
Calendar preview and pickup times for fixed-duration options
Two fixes to the booking widget on the storefront listing page. Both apply to booking options with a fixed duration — the ones whose return is derived from the pickup instead of being picked separately.Hovering a day in the availability calendar now highlights the range that clicking it selects. The highlight is computed as the hovered day plus the option’s duration, the same way the click is. Previously it anchored to the return day already selected and showed a span the click would not produce.Pickup times are no longer disabled for fixed-duration options whose return falls on a later day than the pickup — an evening pickup of a 12-hour option returns the next day. Under evening-only fulfillment hours this could disable every slot in the pickup dropdown. Options with a customer-chosen return are unaffected: their pickup times are still checked against the selected return day.Online Store →Booking options reflect the selected date
On the storefront listing page, the Booking options dropdown now marks the options that can’t start on the selected date. Instead of failing only after selection, such an option renders greyed with the first day it can start — “Not available for selected dates — next available Mon 18.8”.The greyed options stay selectable: choosing one moves the start date to that option’s next startable day and the calendar follows.Booking options and the selected date →Filters and sorting persist when navigating between collections
The online store’s collection filters — booking dates, price range, category, and search — along with the sort choice, now carry over when you navigate from one collection to another, including via the “all products” and breadcrumb links. Previously these reset on every collection switch. Page number still resets, since a page number from one collection doesn’t carry meaning in another.Collections →A line item no longer blocks its own date edit
While you change a line item’s dates, the stock item reservation it already holds is released for the duration of the edit — the whole reserved footprint, buffer windows included. Previously the line item counted against itself: moving a return time an hour later on a stock item with a two-hour after-buffer failed with no explanation, and the only way through was to cancel the line item and rebuild it.This applies in the admin line item editor, where the release also covers the edited line item’s add-ons, and in the storefront cart edit flow. It covers the edited line item only — the other line items on the same order keep their reservations.Rental items already in a cart now hold their buffer windows against the rest of the cart, so two back-to-back rentals of the same stock item inside a buffer are no longer offered.Availability →Discount code access control and checkout link discounts
Discount codes now have an access setting: public (default) lets anyone with the code redeem it at checkout, and internal restricts redemption to staff and integrations — a customer who types an internal code at checkout sees it rejected as invalid. Internal codes show a Staff only chip in the discount codes table.Discount codes can now also be applied to checkout links — checkouts backed by an existing order — as long as the order has no existing codes and every eligible item is still fully unpaid.Discount codes →Search merchant accounts in the account switcher
If you belong to more than one merchant account, the account switcher now has a search field — filter by name or slug from the Switch Merchant Account profile menu item or from Profile → General → Merchant accounts. The field only appears once you have more than one account to choose from.Profile settings →Collection card text color customization
The Theme Editor’s Collection card panel gained Text and Text secondary color settings, controlling the collection title and description colors independently of the site-wide link color.Collection card settings →Listings column on the Orders table
The Orders table shows a Listings column with the distinct listing names from each order’s line items, filterable by selecting one or more listings from a dropdown.Orders table columns →In-store kiosk Check-in channel removed
The in-store kiosk Check-in sales channel is no longer generally available and its toggle has been removed from location settings. Other channels are unaffected.Sales channels on listings →Revenue and Payments finance reports
Two new finance reports replace the previous Accounting report under Reports > Finances.The Revenue report uses accrual-basis accounting — it shows what was earned in the period, regardless of when the customer paid. Choose a recognition basis (handover date or order creation date) to control when revenue is recognized. The report includes deferred revenue tracking (opening/closing balances and a month-by-month recognition schedule) and a reconciliation bridge that walks from accrual revenue to cash payments received.The Payments report uses cash-basis accounting — it shows money received in the period (sales, deposit captures, refund reversals) minus money returned (refunds, released deposits). Platform transaction fees are reported separately with their own tax breakdown.Both reports support multi-currency and location filtering, printable A4 financial statements, and CSV export with stable row IDs for idempotent import. The two exports join via a sharedRevenue_Row_ID column.Finance reports →Add-on booking periods follow the parent item
When you change a line item’s booking dates on an order, booking add-ons attached to it now update their period automatically to match the parent item’s new dates.Add-ons on orders →Business address
Add your business address under Settings → Account. The address appears in accounting exports and on generated financial documents.Account settings →Deposit authorization auto-expiry
Stripe deposit authorizations that reach their card-network expiry now show as Released (expired) on the order’s Payments tab, so you can tell an expired hold from one you released manually.Order payments →Header bar theme settings
The Theme Editor gained a dedicated Header bar panel — set background, text, and icon colors for the storefront’s top bar independently of the rest of the theme.Header bar settings →Stable footer DOM IDs
The storefront footer now exposes stable DOM element IDs, so custom scripts can inject content — such as a cookie-settings link — into a known location that survives theme updates.Custom scripts →Select (dropdown) fields at checkout
Checkout contact forms support select fields — define the options and customers pick one from a dropdown at checkout.Checkout steps →“Starting at” pricing (calendar-period billing)
Fixed-package prices can snap to calendar billing windows: a package that “starts at” a window boundary bills by the calendar period the booking falls into, rather than a rolling duration from the start time.Listing pricing →Price confirmation when editing line item dates
Editing a booking line item’s start or end date keeps its original unit price. On save, if that price no longer matches the catalog’s list price for the new dates, a confirmation dialog shows both prices and lets you apply the list price or keep the manual price.Order line items →Apple Pay & Google Pay on Stripe
Storefronts with Stripe payments now offer Apple Pay and Google Pay automatically at checkout — no configuration needed. Customers on supported devices see the wallet buttons alongside card payment.Payment settings →Order deadline for listings
Set an order deadline on a listing to stop accepting bookings a fixed time before the start — for example, require orders at least 12 hours before pickup.Listing limits →Custom URL slugs
Listings and collections support custom storefront URL slugs, with automatic redirects from previous slugs so shared links keep working.Listing marketing →order.updated fires on child-table changes
Theorder.updated webhook now also fires when an order’s child records change — line items, customers, comments, tags, documents, discounts, and attributes — not just the order row itself.Webhooks →Before-booking buffer time
In addition to the post-booking buffer, SKUs and stock items support a before-booking buffer — preparation lead time blocked ahead of each booking. The same inheritance model applies: set it on the SKU, override per stock item.Stock item fulfillment →Booking duration increment
Rate-based listings can enforce a booking duration increment — customers pick durations in whole steps (for example, full hours), combined independently with the existing minimum and maximum duration limits.Listing pricing →Per-tab “Show in UI” permissions
Custom roles can now hide individual in-page tabs, not just sidebar sections. Tab visibility uses intersection semantics across a user’s roles, independent of data-access permissions.Visible areas →Discount codes accept Unicode
Discount codes are no longer limited to ASCII — codes likeKESÄ15 work. Only genuinely unsafe characters are rejected.Discount codes →Subscriptions
Sell ongoing access to products with recurring billing. Configure subscription plans on Price Tables with per-cycle pricing, commitment periods, and auto-renewal. Customers select a plan and start date on the storefront, and TWICE handles the rest — storing the card at checkout, generating invoices each billing cycle, collecting payments off-session (Stripe or Adyen), and retrying failed charges on an escalating schedule.Subscription management in the admin includes status tracking (active, past due, failed, completed, cancelled), an invoices table on the Payments tab, and cancellation scheduling that honours both commitment and notice periods.Five lifecycle emails cover the subscription journey: payment upcoming, payment confirmed, payment failed, cancelled, and ending soon. Discount codes support subscription-specific durations (once, repeating, or forever).Set up subscriptions →Fulfillment hours
Configure separate pickup and return hours per service location, independent of the location’s opening hours.Three source modes are available on the Fulfillment tab of each service location:- Follow opening hours — pickup and return times match the location’s opening schedule
- Offset from opening hours — shift pickup or return availability by a buffer (e.g. last pickup 30 minutes before closing)
- Custom schedule — define fully independent regular, seasonal, and exception hours for pickup and return separately
More translatable content
The central translation editor covers more entity types: navigation item labels, add-on names and descriptions, product-page custom sections (heading and content), and policy document names — on top of listings, collections, locations, attributes, and variants.Translations →Orders table columns
The orders table gained an Earliest start date column (scoped to bookings and subscriptions) and a filterable Purchase Type column.Orders overview →Store selection settings
The Theme Editor controls how the storefront’s store-selection step appears — pickup availability cards, the cart store selector, and availability indicators are all themeable.Store selection →Backdating line items
Admins can set a line item’s start date in the past when editing an order — useful for recording rentals that already began. Overlapping reservations are clamped instead of rejected.Order line items →Real translation completion percentages
The Translations settings page shows actual per-language completion percentages, computed from what is translated versus translatable.Translations →Canonical URLs on custom domains
Storefronts with a primary custom domain automatically emitcanonical and og:url tags pointing at it, consolidating SEO signals when the store is reachable on both the TWICE subdomain and your own domain.Domains →Per-language email and document templates
Email and document templates can be edited per language. Resolution follows the customer’s language: per-language override → template content → default.Email settings →Storefront language selector
Stores with more than one enabled language show a language selector in the storefront top bar. The choice persists across navigation via the URL.Localization →TWICE Commerce 2.0 — a complete platform rebuild
TWICE 2.0 is a ground-up rebuild of the platform on new backend and infrastructure. It’s faster, more configurable, and built around the Operating System approach — connected data models with full lifecycle tracking, a table-first admin, a configuration layer for automation, and a public API powering every function in the product.New backend and infrastructure
- Rebuilt from the ground up for performance and reliability
- Designed around connected data models with full lifecycle tracking — every asset (stock items, listings, orders, customers) has consistent history, attributes, and relationships
- More configurable per workspace, with multi-location and multi-tax operations running in parallel
Customizable single-template online store
- A new whitelabel storefront powered by a single, configurable theme template
- Visual Theme Editor to customise colours, typography, layout, buttons, inputs, calendars, and listing cards
- Edit each page template visually — Home, About, Collection, Listing, Stores, Bag, Checkout
- Custom CSS for anything beyond the visual editor
Customizable checkouts
- Configure multiple Checkouts per workspace — different flows for B2B vs B2C, in-store vs online, or different markets
- Build the contact form, consents, delivery options, and a custom confirmation screen per checkout
- Choose the payment methods offered (including offline methods), with each checkout carrying its own styling
Serialised inventory & per-item ledger
- Stock Items are individually tracked — unique codes, lifecycle history, financials
- SKUs separate the product definition from individual units — one SKU can have many stock items
- Per-item article ledger captures income and expenses against every stock item
Listings, Collections, Price Tables
- Listings are the customer-facing product offerings — separate from inventory
- One SKU can power multiple listings (rental vs sale, B2B vs B2C) with their own pricing and channel rules
- Collections — manual or smart — for storefront merchandising
- Price Tables for reusable, shareable pricing logic
Activity logs everywhere
- Every core entity (orders, stock items, SKUs, listings, customers) has a complete Activity Log
- Every change is traceable — who, what, when
Public API and Webhooks
- Every Admin function is powered by the public REST API — see the API tab
- Webhooks emit order events (
order.created,order.updated,order.deleted) so external systems stay in sync
Workflow engine (API)
An automation engine for business processes: chain optional filters and delays with an action — send an email from a template or fire an HTTP request to an external system — into a pipeline that runs against an order payload. Available through the API; event triggers and a visual builder are in development.Discount codes
Create discount codes customers redeem at checkout — percentage off, a fixed amount off the order, or a fixed amount off each eligible item.Set an optional usage limit, a validity window (start/end date), and a separate rental-period window that restricts which item start dates the code applies to. Restrict a code to specific purchase types (booking, sale, subscription) or to specific listings and collections — leave a restriction empty to apply it to all.Manage codes under Catalog → Discount Codes. Applied codes show on the order with their per-item discount allocation.Order attributes & checkout profile fields
Capture custom data on orders — and collect built-in customer profile fields at checkout.Order attributes are custom fields you define per order (text, number, date, select, boolean, and more). Define them in Settings → Attributes & Tags → Orders, then add them to your checkout contact form under Settings → Checkouts → Add field. Captured values:- Appear on the order detail page under a dedicated attributes card
- Show as filterable, sortable columns in the orders table
- Render in the order confirmation email
Add-on management on orders
Attach add-on products to an order after it’s created — no need to cancel and rebuild the order.On the order page, click + Add and choose Add-on product. Pick an add-on, then select the line item it attaches to — for example, adding a helmet to an existing bike rental. Add-on line items carry their own price, which can differ from the add-on’s standalone catalog price.Per-location checkout configuration
Assign different Checkouts to different service locations, so customers see the right flow for where they’re ordering from.In the Storefront Editor, open the Checkout page and add a row under Location overrides: pick a checkout, then the locations it applies to. TWICE resolves which checkout to show a customer in this order: the location’s assigned checkout, then the storefront’s default checkout, then the tenant default. A checkout assigned to a location can’t be deactivated or deleted until you remove the assignment.Custom domains
Connect your own domain to your online store. Customers browse and check out under your brand instead of a TWICE subdomain.Go to Settings → Domains, click Connect a domain, and enter your hostname. TWICE shows the DNS records to add at your registrar — a CNAME for subdomains or an A record for apex domains. Once DNS propagates, TLS is provisioned automatically. Track domain status (needs setup → pending → active) and set one domain as primary.Custom domain availability depends on your plan. See pricing.
Post-booking buffer times
Block availability after a booking ends — for cleaning, inspection, or transit time between orders.Set a buffer time on a SKU to apply it to all its stock items by default. Override it per individual stock item when a specific unit needs a different window. The buffer extends the item’s unavailability without changing the order itself — customers see the blocked period as unavailable when browsing.Configure buffer time under the Fulfillment tab on a SKU or stock item.Storefront content translations
Translate your authored storefront content per language directly from the Theme Editor.Open the Theme Editor and switch to the Translations sidebar mode. Select a target language, then translate your hero text, page copy, section labels, and SEO metadata. Customers who browse in a supported language see the translated content automatically; untranslated fields fall back to the source language.Supported content: hero titles and subtitles, content block copy, About / Terms / Privacy page text, and SEO title and description fields.Checkout content has its own, separate translations editor under Settings → Checkouts — see below.
Checkout content translations
Translate your checkout content per language, separately from the storefront.Open a checkout configuration under Settings → Checkouts and switch to the Translations tab. Select a target language, then translate contact form labels, consent text, delivery and payment step copy, and the order confirmation screen. Customers who check out in a supported language see the translated content automatically; untranslated fields fall back to the checkout’s source language.Configure checkouts →Expanded calendar customization
The Theme Editor’s Calendar panel gained more controls over how availability looks on the storefront.Stock level colors now have separate background and text colors for Low, Limited, High, and a new Out of stock state, plus adjustable thresholds for when Low and Limited apply (defaults: Low ≤ 25%, Limited ≤ 60%). New sections cover the selected date’s colors, day cell corner radius, and today’s border color. A stock level legend can also show customers what each color means.Calendar settings →Expanded orders table search
The orders table search now matches across more fields.In addition to order number and status, it now searches:- All customers on the order — by first name, last name, full name, and company name
- Stock-item codes assigned to the order
File renaming in document tabs
Rename any uploaded file directly from its document tab — available on orders, customers, stock items, SKUs, and listings.Open the three-dots menu on a file row and select Rename. The dialog prefills the current name including the file extension. Edit the name and save. Only files you own (not inherited from a listing template) can be renamed.Coming soon
- Tasks — assign and track operational work across your team
- Additional third-party sales channel integrations
- Sustainability and composability tracking for stock items