Skip to main content
Improvement
Labelled checkout address lines

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 →
New feature
Webhook management, signing, and delivery log

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.
Webhooks →
Fix
Fixed-duration calendar preview and pickup times

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 →
Improvement
Date-aware booking options

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 →
Fix
Collection filter retention

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 →
Fix
Line item edit availability

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 →
New feature
Discount code access control & 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 →
Improvement
Merchant account switcher search

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 →
Improvement
Collection card text colors

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 →
Improvement
Orders table Listings column

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 →
Deprecation
Check-in channel retired

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 →
New feature
Finance reports

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 shared Revenue_Row_ID column.Finance reports →
Improvement
Add-on booking period sync

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 →
New feature
Business address

Business address

Add your business address under Settings → Account. The address appears in accounting exports and on generated financial documents.Account settings →
Improvement
Deposit auto-expiry

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 →
New feature
Header bar theming

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 →
New feature
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 →
New feature
Checkout select fields

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 →
New feature
Starting at pricing

“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 →
Improvement
Line item price confirmation

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 →
New feature
Apple Pay & Google Pay

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 →
New feature
Order deadline

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 →
New feature
Custom URL slugs

Custom URL slugs

Listings and collections support custom storefront URL slugs, with automatic redirects from previous slugs so shared links keep working.Listing marketing →
Improvement
order.updated webhook

order.updated fires on child-table changes

The order.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 →
New feature
Before-booking buffer

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 →
New feature
Booking duration increment

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 →
New featureFix
Per-tab visibility & Unicode discount codes

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 like KESÄ15 work. Only genuinely unsafe characters are rejected.Discount codes →
New feature
Subscriptions

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 →
New feature
Fulfillment hours

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
The storefront enforces fulfillment hours when customers select booking times. Admin users can override them when adding or editing line items on an order.Configure locations →
Improvement
Translations coverage

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 →
New featureImprovement
Orders table, store selection, backdating

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 →
Fix
Translation completion

Real translation completion percentages

The Translations settings page shows actual per-language completion percentages, computed from what is translated versus translatable.Translations →
New feature
Canonical URLs & per-language templates

Canonical URLs on custom domains

Storefronts with a primary custom domain automatically emit canonical 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 →
New feature
Language selector

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 →
Release
v2.0

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
Customer profile fields let you collect built-in profile data at checkout: date of birth, billing address, shipping address, language, company name, tax ID, and customer type. Values write back to the customer profile automatically.Configure attributes →

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.
Configure domains →

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.
Manage store languages →

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 →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
Use the search bar at the top of the Orders table.

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
See the Roadmap for the full picture.