Edit customer emails faster in the redesigned editor
Managing customer emails is now faster and easier in a redesigned two-pane editor. Browse emails by activity with clear on/off states, then edit the selected email without navigating a long list of templates.Each language version saves independently, and a searchable Liquid variables panel makes personalization easier. Test-email and example-content actions stay close at hand, while an unsaved-changes warning helps protect work in progress. Klaviyo-connected projects keep their event and JSON payload workflow in the same refreshed layout.Understand why a tiered discount is inactive
Applied tiered discounts remain visible on subscription details when the subscription no longer meets a tier’s requirements. The discount is clearly marked as deactivated with an explanation, so merchants can see why it is not currently applied.Switch projects easily on large accounts
The project switcher now stays compact for accounts with access to many projects. It shows up to five projects, then provides a clear link to the complete project list with the number of additional projects available.Select command palette results reliably with the mouse
Moving the pointer over command palette results now updates the active selection. The highlighted result always matches the page or action that will open when clicked.Navigate the admin portal with a consistent new layout
The admin portal now has a consistent page layout with breadcrumb navigation, sticky headers, and table footers that keep key actions, status notices, result counts, and pagination within reach while you work.Subscription and invoice views also show status counts directly in the view switcher, while refreshed buttons and spacing make pages easier to scan across the portal.Pause and resume links open smoothly in Customer Portal
Customers can open pause and resume links directly in Customer Portal without extra URL tokens. This keeps the subscription journey clean and consistent.Trigger recovery workflows when subscriptions become non-paying
Merchants can respond faster to payment issues with a newsubscription_marked_non_paying webhook event. Use it to start timely recovery workflows as soon as the status changes.The same event is available as a Shopify Flow trigger for projects using Firmhouse Flow triggers.Target Shopify discounts by customer segment
Merchants can offer Shopify checkout discounts to selected customer segments, making promotions more relevant for groups such as VIP or churn-risk customers. Everyone outside the chosen segments remains ineligible for the discount.Remove subscription products in bulk
Merchants can remove selected products from active subscriptions in one batch, making product delisting faster when no replacement is needed. Shopify synchronization and commitment checks remain consistent with removals from an individual subscription.Learn more in the subscription products documentation.Keep product availability aligned with Shopify deletions
When a product is deleted in Shopify, Firmhouse now updates the matching product automatically. Products are archived when possible or kept clearly unavailable when active subscriptions still depend on them, helping merchants maintain an accurate catalog without manual cleanup.Learn more in the Shopify product sync documentation.Clearer contract details for dynamic subscriptions
Dynamic subscriptions now show contract details that match their actual commitment terms. When no maximum commitment is configured, customers no longer see an inapplicable contract end date.See period totals directly in Insights graphs
Merchants can now see a summed total for the selected period directly on Insights trend graphs. Cancellation, signup, order, and revenue reporting is easier without manually adding daily values.Learn more in the metrics dashboard documentation.See VAT exemption status on subscription details
Merchants can see a customer’s VAT exemption status directly on subscription details. This makes B2B tax checks quicker after information such as a VAT number is added or corrected after checkout.Consistent product access for Firmhouse checkouts
Projects using Firmhouse checkout now follow their intended product-access settings. Product availability stays consistent with each merchant’s checkout configuration instead of adopting Shopify-specific access rules.Set ordered product type when adding products through GraphQL
ThecreateOrderedProductV2 GraphQL mutation now accepts the ordered product type. API integrations can choose whether a newly added product should be recurring or a one-off add-on without switching to a separate mutation.Learn more in the storefront app guide.Prevent stale Adyen payment responses from being reused
Firmhouse now ignores stale Adyen payment responses when a checkout switches payment methods or retries an active payment. This prevents an older response from being reused for a different payment attempt.Fix Adyen invoice error notifications
Adyen invoice charges now handle error notification details more reliably. This prevents payment-processing errors from producing confusing or incomplete invoice error notifications.Workflows can update plan commitment dates
Script execution workflows can now update a subscription plan’s minimum commitment, maximum commitment, and grace cancellation dates. This makes it possible to automate cases like 6-month commitment cycles with monthly billing, where workflows already update related subscription dates but also need to keep commitment dates in sync.Learn more in the script execution documentation.Skip usage tracking for capped order promotions
Order promotions that are already capped no longer record extra usage when scheduled orders are generated. This prevents valid one-time-per-customer Shopify discounts from blocking subscription creation after the checkout order has already used the discount.Skip failed-payment notifications for on-session payment attempts
Firmhouse no longer sends failed-payment notifications for on-session payment attempts that are still being handled in checkout. This avoids confusing emails while the customer is actively completing the payment.Send accurate order values for SEPA renewal Shopify orders
Shopify orders created for SEPA renewals now receive the correct order values from Firmhouse. This keeps Shopify order totals aligned with the Firmhouse invoices behind those renewals.Send accurate order values for prepaid follow-up Shopify orders
Shopify follow-up orders for prepaid subscriptions now receive the correct prorated order values from Firmhouse, instead of only showing shipping costs. This keeps Shopify and connected accounting exports aligned with the prepaid subscription invoices behind those shipments.Split imported Shopify subscriptions by order line attribute
Merchants can now split imported Shopify subscriptions using a configurable order-line custom attribute. This keeps products with the same selling plan in separate Firmhouse subscriptions when their attribute values differ—for example, when each line has its own shipment date.Leave the setting empty to keep the existing import behavior. Learn more in Shopify app settings.Cancel failed order payments from the admin portal
Merchants can now cancel failed pending orders directly from Firmhouse when an order should no longer be shipped or retried.Firmhouse cancels the order, cancels the failed payment, and creates a credit invoice for the failed invoice. This helps teams resolve failed orders cleanly and can clear non-paying status once no other outstanding invoices remain.Learn more in the orders documentation.Allow replacements between product variants
Customers can now replace a subscription product with another variant from the same Shopify product group.Previously, the replacement flow hid the whole product group when one variant was already selected. It now only excludes the current variant, so the other available variants remain selectable.Control Shopify scheduled order holds
Merchants using Shopify Subscriptions can now disable fulfillment holds for scheduled Shopify orders from the app configuration.Holding scheduled Shopify orders stays enabled by default, so existing setups keep working the same way. Disable the setting when your Shopify fulfillment flow should handle scheduled orders without Firmhouse placing a hold.Learn more in Shopify app settings.Configure shipment recovery after non-paying status is resolved
Payment Dunning settings now let merchants with plan-based projects, or order-based projects with plan support, choose whether missed products should ship immediately, whether only recently missed products should ship immediately, or whether recently missed products should be scheduled for tomorrow once a subscription’s payment issue is resolved. Merchants can also configure how many days after a subscription becomes non-paying still counts as recent.For longer non-paying periods, missed products resume from their next regular shipment date instead of sending an old shipment right away. This helps merchants recover recent missed orders while avoiding surprise shipments after a long payment gap.Ordered product metadata on Shopify line items
Ordered product metadata is now sent to Shopify as line item custom attributes when Firmhouse creates Shopify orders. This helps teams pass product-level details such as bundle, profile, or fulfillment metadata through to Shopify order lines.For native Shopify subscriptions, editing ordered product metadata also updates the matching Shopify subscription contract line, so future Shopify billing attempts keep the same metadata in sync.Script Execution can update ordered product metadata
Script Execution workflows can now update metadata on active ordered products.The newupdate_ordered_product_metadata action lets scripts store product-specific values such as fulfillment metadata, warehouse or ERP references, and configuration copied from order events directly on the subscribed item. This makes it easier to connect Script Execution workflows with downstream processes that need item-level context instead of only subscription-level data.Read more in the docs: Script Execution.Report generation progress for large exports
Large reports now give clearer feedback while Firmhouse prepares the export. Instead of waiting on an open-ended spinner, merchants can see when a report is being generated and follow progress for larger exports from the Generated reports table.This makes long-running reports feel less like a black box: merchants can refresh the page without losing progress, understand that the export is still moving forward, and download the file once it is ready.We’ve also updated the Generate reports and exports documentation with what to expect when larger reports take longer to prepare.Export large GraphQL query results with bulk operations
Integrations can now use GraphQL bulk operations to run large connection-based queries in the background and download the completed result as a JSONL file.This helps with exports, reporting jobs, and external syncs where a normal paginated API request is not the right fit. Firmhouse can also send agraphql_bulk_operation_finished webhook when the operation is ready. See the GraphQL bulk operations guide for the supported query shape and JSONL processing tips.Customer Portal v2 minimum order amount warning
Customer Portal v2 now has a native minimum order amount warning for dynamic subscriptions. When the next order preview subtotal is below the configured minimum order amount, customers see a clear message explaining that the order needs more products before it can ship.The default dashboard template includes the warning, and custom templates can place it with{% minimum_order_amount_warning %}. See the dashboard template documentation for details.Keep anchor-based billing dates on cadence after order generation
Anchor-based subscriptions now keep their next billing date on the expected cadence when recurring orders are generated.This prevents the next billing date from moving an extra interval forward when a generated order’s shipment date is adjusted before the billing date is recalculated.New invoice Liquid fields for order templates
Order Liquid objects now include the related finalized invoice throughorder.invoice. When an order has an invoice, templates can use existing invoice fields from the order context, such as the invoice number, status, and customer-facing payment link.This gives teams more flexibility in custom Liquid templates, including Customer Portal v2 order pages, order-based messages, and webhook payloads, without changing the default Customer Portal template.Assign plans to existing subscriptions
Teams can now add a plan to an existing subscription that does not have one yet, as long as the project supports plans.This makes it easier to clean up subscriptions that were created before plans were required, without recreating the subscription or changing customer details. For one-frequency projects, recurring products must already ship on the billing cycle before a plan can be assigned.Warn when important notification emails are not configured
The Notifications page now shows a warning when a project has no email address configured for important alerts.Merchants also see a small warning hint in the sidebar, making it easier to spot that high severity notifications are visible in Firmhouse but are not being sent by email yet.Show discount values on order previews
Customer Portal v2 and the admin portal now show the discount percentage or fixed amount when a single discount is applied to an upcoming payment or order preview.This makes the customer’s savings clearer before the order is placed. When multiple discounts apply, the label stays unchanged to avoid showing an ambiguous combined value.Project-specific default sender addresses for subscriber emails
Transactional emails sent to subscribers now automatically use the project name and a project-specificstore+PROJECT_ID@mail.firmhouse.com sender address whenever no custom sender domain is configured.This gives every project a clear default sender without extra setup. Existing projects that only had a From handle configured, such as notifications, now also use the project-specific Firmhouse sender. Custom handles are only used together with a custom sender domain; without one, subscriber emails use the project-specific Firmhouse sender while any configured From name is still respected.Customer Portal dashboard exposes Shopify product IDs for templates
ImprovementCustomer Portal
June 26, 2026
Customer Portal dashboard exposes Shopify product IDs for templates
The Customer Portal v2 dashboard{% product_listing %} and {% product_listing_filtered %} Liquid components now render data-shopify-product-id and data-shopify-variant-id on each ordered product row when those IDs are available. Custom dashboard templates can use these attributes to fetch Shopify product details without relying on title matching, which can break when Firmhouse and Shopify titles differ.Cancel Shopify orders in Firmhouse
When an order is cancelled in Shopify, the matching Firmhouse order is now marked as cancelled too.This keeps order status in sync and helps teams avoid acting on orders that were already cancelled in Shopify.Filter products by order schedule
Merchants using order-based subscriptions with plan support can now filter Products by order schedule.This makes it easier to find products that ship once, follow the billing cycle, or use a custom schedule.Keep signup-based billing dates when activating subscriptions
When teams activate subscriptions from the admin portal, the next billing date now keeps the cadence from the customer’s signup date.This fixes Shopify checkout subscriptions that are created before their first delivery and activated later, so the activation form shows the correct upcoming billing date instead of reusing an outdated signup-time date.Template editor confirmations now respect Cancel
Publishing, deleting, resetting, or starting from the default Customer Portal v2 template now stops correctly when you choose Cancel in the confirmation dialog.This prevents accidental changes from going through after a merchant decides not to continue.Control payment retries per subscription
Merchants can now choose whether failed payments should be retried for a specific subscription. Each subscription can use the project default, always allow automatic retries, or disable retries.This helps teams handle higher-risk payment situations where repeated retry attempts can lead to costly chargebacks, while keeping normal retry behavior unchanged for everyone else.Split mixed Shopify fulfillment orders
Shopify orders that contain both subscription items and regular one-off items now keep those items in separate fulfillment orders.This prevents a scheduled subscription hold or reschedule from also blocking one-off items that should ship right away.Add dynamic dates to Shopify order tags
Merchants using Shopify can now include Liquid date filters in the custom Shopify order tag setting. This makes it possible to generate tags like18-06-26 firmhouse-plants for recurring orders when they are created in Shopify.The validation message now matches the Liquid syntax that can be saved, so tags using date filters can be configured from the Shopify (Legacy) configuration page.Filter invoices by payment status
Merchants can now see invoice counts by payment status and overdue state directly on the Invoices page and click a filter to update the list.This makes it quicker to find invoices that need attention, such as failed, pending, or open invoices.Fix hidden variant selector across the Customer Portal catalog
Catalog templates that sethide_variant_selector now hide variant options everywhere in the Customer Portal catalog, including both the add-products and replacement flows.Search subscriptions by customer details in GraphQL
Merchants and integrations can now search the GraphQLsubscriptions connection by customer details such as name, email, token, customer reference, or company name.This makes it easier to find the right customer record in phone-driven support and logistics workflows without needing the subscription ID first.Keep anchor-based signup orders on the right cadence
Anchor-based Shopify signups now allow the next delivery anchor when its billing cutoff date is today, while still skipping deliveries scheduled for today.This keeps anchored plans on the correct cadence when customers sign up on an anchor cutoff date.Customer Portal v2 replacements keep quantity by default
Customer Portal v2 replacement flows now focus on swapping the product while keeping the existing quantity. Customers can select a replacement or remove their selection, but they no longer change the quantity during replacement.Templates can also hide replacement prices from the catalog and confirmation step withhide_replacement_price on product_listing_filtered. See the dashboard template documentation for details.Configure Intrum settings per country
Merchants using Intrum can now override key Intrum settings per country, while keeping one default value for all other countries.This makes it easier to use the right creditor reference, credentials, service, and customer type for each market. Password values are masked by default in the admin and can be revealed when needed.Show empty state in filtered product listing component
The Customer portal v2product_listing_filtered liquid tag now supports a show_empty_state parameter. When set to true, the component renders even when there are no matching products, allowing you to display a custom empty state message to customers.By default the parameter is false, preserving the existing behaviour where the component is hidden when the product list is empty.Block Firmhouse checkout while keeping the Customer Portal available
ImprovementCustomer Portal
June 10, 2026
Block Firmhouse checkout while keeping the Customer Portal available
Projects can now disable the Firmhouse checkout without turning off the Customer Portal. This is disabled by default for Shopify installations, helping those merchants keep the Customer Portal available while blocking checkout pages and cart endpoints that should no longer be used.When Firmhouse checkout is disabled, admin checkout shortcuts are hidden too, so product and plan menus no longer point merchants to blocked checkout or cart URLs.Confirm orders through the GraphQL API
Merchants and integrations can now confirm an order through the GraphQL API with the newconfirmOrder mutation.The mutation uses the same confirmation flow as the admin action, records the confirmation timestamp, and returns the updated order with validation errors when confirmation cannot be completed.Customer Portal v2 dashboard pause and resume actions
The default Customer Portal v2 dashboard now includes pause and resume actions for eligible subscriptions when subscription pausing is enabled for the project.Active subscriptions show a pause callout near the subscription products, while paused subscriptions show a clear paused state with a resume action near the top of the dashboard. On mobile, the pause action stays compact and appears with the other subscription actions.See the dashboard template documentation for the Liquid tag and customization options.Hide Firmhouse invoice numbers for Shopify customers
Merchants using Shopify Subscriptions can now hide Firmhouse invoice numbers from customer-facing invoice lists.When this setting is enabled, customers see the Shopify order reference instead of the Firmhouse invoice number where one is available. The Firmhouse invoice number stays available internally and on the invoice detail page.Group Customer Portal products by shipment schedule
Customer Portal v2 dashboard templates can now split active products into recurring and one-time groups with theproduct_listing_filtered tag. This makes it easier to build dashboards where subscription products and one-time products are shown separately.The filter is optional and based on the product’s shipment schedule, so existing filtered product lists keep working unless shipment_schedule is added.Control upcoming order notice webhooks for paused subscriptions
Merchants can now choose whether upcoming order notice webhooks should also be sent for paused subscriptions.The option is enabled by default, so existing webhooks keep their current behavior. Merchants can turn it off per webhook when paused subscriptions should be skipped.Delete Customer Portal template versions
Merchants can now delete saved Customer Portal Liquid template versions from the template editor when they are no longer needed.Published versions are protected from deletion, so merchants need to publish another version first before removing an older live version.Clear paused date when cancelling subscriptions
Cancelling a paused subscription now clears its paused date at the same time. This keeps cancelled subscriptions from showing stale pause information.Control upcoming billing webhooks for paused subscriptions
Merchants can now choose whether subscription upcoming billing webhooks should also be sent for paused subscriptions.The option is enabled by default, so existing webhooks keep their current behavior. Merchants can turn it off per webhook when paused subscriptions should be skipped.More reliable next billing date updates
Merchants can now update a subscription’s next billing date even when unrelated subscription details need attention.The customer portal also shows clearer validation feedback when a date change cannot be saved.Script Execution can mutate recurring orders before confirmation
Script Execution workflows can now mutate recurring orders before they are confirmed.Projects can use scripts to confirm an order, skip it, or update its order lines by adding, removing, or replacing products before the order continues through the normal recurring order flow.Read more in the docs: Script Execution.Forecast reports can exclude non-paying customers
Forecast reports now include an option to exclude customers marked as non-paying.This helps merchants compare their regular forecast against a more conservative view that leaves out subscriptions that are currently not paying.Customer Portal v2 add products opens the new catalog
Customer Portal v2 now always sends customers to the newer catalog-style add products flow, so they get the same browsing experience without needing an extra feature flag enabled.Stale Adyen redirects no longer overwrite paid payments
Adyen redirect callbacks that arrive after a payment already succeeded no longer change the payment back to failed or cancelled.This keeps invoices and orders in the correct paid state when an old customer redirect is received after the successful payment update.Show the latest retried payment status in payment history
The subscription payment history now shows the latest retry attempt as the main payment row.When an original payment failed but a retry later succeeded, merchants can immediately see the successful status without expanding the retry history first.Option to recalculate plan billing dates during API activation
The API activation mutation can now recalculate the subscribed plan’s next billing date from the activation date when needed.This gives API integrations a way to keep delayed activations aligned with the expected billing cycle length while leaving the default activation behavior unchanged. See Activate a subscription with a recalculated billing date in the developer docs for setup details.Search notifications by message content
Merchants can now search project notifications by words in the notification message, not only by notification or subscription ID.This makes it easier to find related payment, integration, or order issues when the exact record ID is not at hand.Keep paused anchor-based plans on correct cadence
Paused anchor-based subscriptions now skip to the next full billing cycle instead of rescheduling to the closest available anchor date.Create SEPA mandates via GraphQL API
You can now create SEPA Direct Debit mandates for existing subscriptions through the GraphQL API with the newcreateSepaMandate mutation.This helps backend integrations attach known SEPA mandate details to subscriptions without manual admin work. The mutation updates the subscription payment method to SEPA Direct Debit when mandate creation succeeds and returns a validation error when the subscription’s payment provider does not support SEPA mandate creation.Upcoming order notices for rescheduled shipments
When enabled in Email configuration, Firmhouse can now send an upcoming order notice when an active product is rescheduled into the upcoming order notice window.In the admin shipment date form, teams can still skip the notice for special cases where they plan to contact the customer another way.Preview Customer Portal template packages
Customer Portal template editors can now preview the latest saved versions of all templates together before publishing. The preview runs in the current browser for one hour, shows a preview banner when it differs from the live portal, and makes it easier to review changes that span multiple portal pages.The Customer Portal Agent can also share the package preview link, rename saved template versions, and publish a confirmed template version from chat. See the Customer Portal templates documentation for details.Fixed next delivery date in Shopify customer accounts
Shopify customer accounts now show the customer-facing delivery date for anchor-based subscriptions. This keeps the subscription card aligned with the Customer Portal when billing happens a few days before delivery.Customer Portal template updates can set version titles
Developers using the GraphQL API can now pass atitle to updateSelfServiceCenterTemplate. The mutation still saves and publishes the template body in one step, and the new title is stored on the published template version so it is easier to recognize later in Firmhouse.See the Customer Portal templates documentation for details.Preview unpublished Customer Portal templates
Customer Portal template versions can now be previewed before they are published. This lets teams open a saved draft in the portal, including its generated styling, and check the result before making it visible to customers.This builds on Customer Portal template versioning, where templates can be saved as drafts, given clear titles, reviewed later, and published only when ready. See the Customer Portal templates documentation for details.Customer Portal template versioning
Customer Portal templates can now be saved as versions before they are published. This lets teams prepare template changes, give versions clear titles, review older drafts, and publish a chosen version only when it is ready for customers.The template editor also makes it clearer what customers currently see, and templates can be reset to the Firmhouse default without deleting saved versions. Developers can manage versions through the GraphQL API withsaveSelfServiceCenterTemplateVersion, publishSelfServiceCenterTemplateVersion, and resetSelfServiceCenterTemplateToDefault.See the Customer Portal templates documentation for details.Clearer progress and details for generated reports
Generated reports now show clearer progress while exports are being prepared. The generated reports table shows row-based progress, an estimated time to finish, and the filters and fields used for the export without expanding the row or hiding the action buttons.Once a report is ready, the table shows how many rows were exported and keeps the download and delete actions available in the same row. Filters and fields are shown as compact pills, with longer values available on hover.Customer Portal v2 shows public discount description
When a subscription has one active discount, Customer Portal v2 shows that promotion’s public description in the order summary instead of a generic label. Merchants can set this label in a new Public description field on Discounts. Multiple active discounts, or a promotion without a public description, still use the default discount label.Notifications are now visible on subscription details
Subscription detail pages now show related Notifications above the audit log.This gives support teams a quicker way to spot payment, order, and invoice errors that are linked to a subscription without opening separate project error pages first. Each error includes the key details and links back to the related records, making subscription troubleshooting easier from one place.Keep Firmhouse discounts in sync when removing Shopify discounts from subscriptions
ImprovementShopify
May 22, 2026
Keep Firmhouse discounts in sync when removing Shopify discounts from subscriptions
When an applied discount is removed from a Shopify subscription, we now also clean up the matching Firmhouse applied promotion and unused discount code (if any).This keeps subscription discounts consistent after admin portal changes, and the order preview now recalculates correctly once a Shopify promotion is removed.Customer Portal v2 shows shipment schedules for legacy subscriptions
ImprovementCustomer Portal
May 19, 2026
Customer Portal v2 shows shipment schedules for legacy subscriptions
Customers managing legacy subscriptions without a plan can now see each product’s shipment frequency on the Customer Portal v2 dashboard and update the next shipment date for each active product directly from the product row.The product-level controls are only shown when the subscription has no plan and the product is not following a plan schedule, keeping plan-based subscriptions on the existing shared date controls.Hide empty Customer Portal v2 plan cards for subscriptions without a subscribed plan
Bug FixCustomer Portal
May 19, 2026
Hide empty Customer Portal v2 plan cards for subscriptions without a subscribed plan
The Customer Portal v2 dashboard no longer shows empty delivery date and delivery frequency cards for subscriptions that do not have a subscribed plan.Rental subscription guide
We’ve published a new Rental subscriptions guide in our documentation.The guide explains how to set up rental propositions for durable physical products with monthly billing and minimum rental periods. It covers two common setup scenarios:- A small rental catalog where each product can have its own exact monthly prices per commitment period.
- A large rental catalog where each rental product uses its Shopify product price as the monthly rental price, with Firmhouse plans applying percentage or fixed-amount discounts for longer commitments.
Edit grace cancellation dates from subscriptions
Teams can now adjust the grace cancellation end date directly from a subscription, making it easier to extend a customer’s try-out period or account for delayed shipments.The GraphQL API also acceptsgraceCancellationEndsAt on updateSubscribedPlan, so integrations can keep the grace cancellation date aligned with admin portal changes.Choose the ReferralCandy campaign used by Firmhouse
ReferralCandy integrations can now be configured with a specific Campaign ID when you have multiple campaigns. When no campaign is selected, Firmhouse keeps using ReferralCandy’s default campaign selection.Read the ReferralCandy setup documentation.Set a minimum invoice amount for order discounts
Order discount promotions can now keep invoices above a configured minimum amount. Firmhouse still applies the discount, but caps it so the final invoice total does not drop below the configured floor.This is separate from the existing minimum order amount rule, which only decides whether a discount is eligible to apply based on the checkout subtotal.Current Customer Portal v2 locale is now available in Liquid templates
ImprovementCustomer Portal
May 11, 2026
Current Customer Portal v2 locale is now available in Liquid templates
Custom Customer Portal v2 Liquid templates can now use the current rendered portal locale through thelocale variable.This makes it easier to customize text or conditional template sections based on the language the customer is currently viewing, instead of relying on the subscription’s stored locale.For example:Ensure configured billing cadence for anchor-based plans
For anchor-based plans with cutoff days, next billing dates now follow the plan’s configured billing interval after each order.This prevents billing from drifting to anchor frequency while still using anchors to schedule shipments and cutoff timing.Customers can choose a prepaid renewal payment date in the Customer Portal
ImprovementCustomer Portal
May 8, 2026
Customers can choose a prepaid renewal payment date in the Customer Portal
The Customer Portal now gives customers with an upcoming prepaid renewal a clearer renewal flow.Customers see the prepaid renewal reminder on the Customer Portal v2 dashboard, where it is placed alongside the main subscription details instead of spanning the full page. From the Customer Portal v2 renewal options page, customers can either keep the automatic prepaid renewal as-is or update the renewal payment date without changing their renewal option.The date picker updates the prepaid renewal payment date directly from the renewal flow, while regular prepaid dashboard date changes remain unavailable outside this context.Customer Portal v2 respects delivery frequency change settings
ImprovementCustomer Portal
May 8, 2026
Customer Portal v2 respects delivery frequency change settings
Customer Portal v2 now respects project settings and subscription restrictions when showing delivery frequency changes. When customers cannot switch frequency, the dashboard shows their current delivery frequency in a read-only state instead of offering a selector.Customer Portal v2 dashboard now includes a ReferralCandy sharing banner
ImprovementCustomer Portal
May 8, 2026
Customer Portal v2 dashboard now includes a ReferralCandy sharing banner
The default Customer Portal v2 dashboard template now includes a ReferralCandy banner when a subscription has a personal ReferralCandy invite link.Customers can open their ReferralCandy invite page from the dashboard or copy their personal sharing link directly. When Firmhouse can determine the configured advocate reward for the subscription, the banner also shows the reward amount. Otherwise, it falls back to a generic referral message.Custom dashboard templates can usesubscription.referral_candy.url and subscription.referral_candy.advocate_reward_discount to add a similar referral block.Customer Portal v2 dashboards now have a dedicated state for prepaid subscriptions
ImprovementCustomer Portal
May 7, 2026
Customer Portal v2 dashboards now have a dedicated state for prepaid subscriptions
Customer Portal v2 dashboard templates now better reflect what customers can do when their subscription is on a prepaid plan by default. You can also also usesubscription.on_prepaid_plan? to tailor prepaid dashboard states in your custom Liquid template.For prepaid subscriptions, the dashboard no longer shows customer actions that are not available for prepaid plan type, such as skipping deliveries, changing the next billing date, swapping, replacing, deleting or changing changing product quantities.Address and payment method cards show the customer information in read-only state.Edit subscription metadata in admin
Teams can open Edit in the Metadata section of a subscription detail page to update supported metadata, including Shopify shipping notes.Clarified shipment vs billing dates in admin subscription details
ImprovementSubscriptions
May 1, 2026
Clarified shipment vs billing dates in admin subscription details
Subscription details now clearly separate shipment and billing timing for all subscriptions with plans.- We now show both Next shipment and Next billing for anchor-based plans.
- We updated the date-change modal wording to use consistent billing labels for billing-based cases, and shipment wording where the date is truly shipment-based.
Edit commitment dates from the admin portal and API
Teams can now adjust plan and product commitment dates directly from a subscription, making contract corrections and extensions straightforward.For products with commitments, the contract-term labels now open the edit flow when the product is eligible. The GraphQL API also accepts commitment end dates on subscription plan and ordered product updates, so integrations can keep those dates aligned with portal changes.Keep subscription assets linked to the right product
Asset updates through the API now reliably preserve the subscription owner while linking the asset to the intended ordered product. Invalid reassignments continue to return a clear validation error, keeping asset data consistent.Prepare for upcoming subscription billing with a new webhook
Order-based projects with plan management can now use thesubscription_upcoming_billing webhook to prepare customer communications or operational workflows before the next charge. Choose a lead time from one to five days; Firmhouse checks eligible subscriptions nightly.Customer Portal v2 dashboard now shows a payment issue banner for non-paying subscriptions
ImprovementCustomer Portal
April 22, 2026
Customer Portal v2 dashboard now shows a payment issue banner for non-paying subscriptions
The Customer Portal v2 dashboard now shows a dedicated banner when a subscription is marked as non-paying, explaining what happens next and linking customers to their invoices to settle the outstanding payments.When recurring orders are disabled for non-paying subscriptions, the banner explicitly states that new recurring orders will not be created until the payment issue is resolved.For custom Customer Portal v2 templates, the{% non_paying_banner %} tag also supports optional customizations:Subscription audit log now includes extra field answer changes
ImprovementSubscriptions
April 22, 2026
Subscription audit log now includes extra field answer changes
Updates to subscription extra field answers are now visible in the subscription audit log so it’s now easy to view history of all changes.Case-insensitive email matching for Shopify customer account extension
The Shopify customer account extension now matches subscriptions to the logged-in customer even when the email stored on the subscription and the email returned by Shopify differ only by letter casing (for examplecustomer@example.com vs Customer@Example.com).Before this fix, those addresses were treated as different, so customers could see an empty subscription list in the extension even though their subscription used the same address with different capitalization.More filters for subscription products batch operations
Subscription product batch operations now support extra filters for subscription status, products without a custom price, and an Added At date range.The selected filters also stay in place when you use select all matching or start a batch operation, so it is easier to review and process the right set of subscription products in one go.Refresh outdated Shopify draft orders from Firmhouse
Teams can now recreate an outdated Shopify draft from the Firmhouse order page so checkout uses the latest order details. Firmhouse removes the old draft and queues an up-to-date replacement in Shopify.The option only appears when the draft is past a safe age and the order is not already being sent to Shopify, so you are less likely to interrupt work in progress.Added order_scheduled outgoing webhook event
Firmhouse now supports a neworder_scheduled outgoing webhook event.This event is triggered whenever an order enters the scheduled state, including new orders created as scheduled and existing orders that transition to scheduled later.Added subscription discount applied, updated, and deleted webhook events
ImprovementShopify
April 14, 2026
Added subscription discount applied, updated, and deleted webhook events
Three outgoing webhook events are now available:subscription_discount_applied, subscription_discount_updated, and subscription_discount_deleted.Use subscription_discount_applied when a discount is first added to a completed subscription. Use subscription_discount_updated for subsequent discount changes, including deactivation (active=false) and usage updates. Use subscription_discount_deleted when a discount is removed, including Shopify subscription discount removals from the Applied discounts section.Full Shopify checkout support for Pay by Bank and Trustly through Mollie
New FeatureShopify
April 14, 2026
Full Shopify checkout support for Pay by Bank and Trustly through Mollie
Pay by Bank and Trustly are now fully supported for subscription checkouts on Shopify when you use Mollie as your payment provider.This makes it easier to offer more local bank-based payment methods in Shopify checkout while keeping the recurring subscription flow working correctly.Bundles & Boxes documentation
We’ve published a new Bundles & Boxes guide in our documentation. It explains how to set up a box builder proposition using three Firmhouse features:- Tiered Discounts — automatically increase discounts when customers add more items to their subscription.
- Fixed Bundle Sizes — configure minimum and maximum product quantities on a plan so orders are only generated when the box is complete.
- Billing Cutoff & Delivery Anchors — set fixed delivery dates and a deadline for customers to finalize their selection.
Shopify shipping rate selection now prefers the best available match
When Firmhouse refreshes shipping costs for a subscription, it now keeps the best matching Shopify shipping rate instead of dropping the selection when there is a low-confidence title match.For subscriptions with no previous shipping-rate title to compare against, the first available rate is still used as a safe default.Products page now uses dropdown filters for availability and collections
ImprovementProducts
April 8, 2026
Products page now uses dropdown filters for availability and collections
The admin portal Products page now uses compact dropdown filters instead of filter-pill rows for both Availability and Collection.This keeps the page UI consistent and easier to use, while preserving the same filtering behavior.Pay by invoice now cleanly migrates Shopify subscriptions
Support teams can now switch native Shopify subscriptions to Pay by invoice from the payment method update flow.When this happens, we now try to cancel the Shopify contract and still continue the migration to Firmhouse billing if Shopify returns an error. Any Shopify cancellation error is logged as a project notification so teams can follow up without blocking the customer move.iDEAL and Bancontact checkout button skips Shop Pay
When shoppers used the iDEAL or Bancontact subscription checkout button on a Shopify storefront, Shopify could still send them into the Shop Pay accelerated flow—even when they were already logged in to Shop Pay. That made it impossible to reach the standard Shopify checkout where local payment methods (iDEAL, Bancontact) show up as expected.That same button now opens regular Shopify checkout with Shop Pay skipped, including for customers who are signed in to Shop Pay, so they can choose local payment methods instead of being routed through Shop Pay.This applies to the SEPA Plan Support theme extension. Available payment options continue to follow each store’s payment settings.Workflows now also run on order confirmation
Journeys and workflows now evaluate on both subscription activation and order confirmation events.This means a workflow can start when a subscription is activated, and it can also run again when a later order is confirmed. Existing Journey instances are reused, so the workflow executes on the new event without creating a duplicate Journey instance for the same subscription.Any workflows that are currently active in a merchant project will now also run on order confirmation events.One-off add-ons are now included in the next order preview calculations
ImprovementOrders
April 3, 2026
One-off add-ons are now included in the next order preview calculations
Next order preview now includes active one-off add-on product lines, counted as part of the one-time subtotal. Customers see amounts that match what will be charged on the upcoming order correctly.Configure Shopify Flow triggers from outgoing webhooks
You can now configure Shopify Flow trigger deliveries directly from the Firmhouse outgoing webhooks UI.This allows merchants to enable Flow triggers per webhook event and send their own trigger payload values through the existing outgoing webhook setup.Previously, a common workaround was to listen to Shopify’s order created trigger and add a fixed delay before checking whether Firmhouse metadata or tags had been added to that order.With this update, merchants can trigger flows directly from Firmhouse webhook events instead. This makes Flow automations easier to implement and less brittle, because they are no longer dependent on timing assumptions or fixed wait periods.Product search keeps availability and collection filters
On the admin products index, search could drop or misapply your availability and collection filters compared to what the filter pills showed. Search now keeps those filters applied correctly when you search.Shopify selling plans now include bundle size as an extra option when configured
ImprovementShopify
April 1, 2026
Shopify selling plans now include bundle size as an extra option when configured
When Shopify plans in a plan group have a minimum bundle size configured, Firmhouse now adds that bundle size as an extra option on both the Shopify Selling Plan Group and the individual Shopify Selling Plans. For example, a storefront can now receive option pairs likeDelivery Frequency and Minimum bundle size instead of only the frequency.This is mainly relevant for merchants and developers who use Shopify selling plan groups and selling plan options in custom storefront logic or theme integrations. It makes plan combinations with the same frequency but different bundle sizes distinct in Shopify, and keeps the option data closer to the actual plan setup in Firmhouse.Exempt Shopify subscriptions now keep shipping free on generated orders
Bug FixShopify
March 31, 2026
Exempt Shopify subscriptions now keep shipping free on generated orders
Subscriptions that are marked as exempt from shipping costs already stay shipping-free in Firmhouse, even when the selected Shopify shipping rate would normally charge shipping.Firmhouse now also applies a free shipping discount code during order generation so the Shopify order matches that exemption and shows free shipping too.Merchants can now share an authorization payment link to recover stuck Shopify subscriptions
ImprovementShopify
March 31, 2026
Merchants can now share an authorization payment link to recover stuck Shopify subscriptions
Merchants can now copy an authorization payment link from the admin when a Shopify subscription needs a little extra help moving forward.This is designed for support moments where the Shopify contract payment method cannot be updated, or when a customer wants to move from Shopify billing to a local payment method in Firmhouse. Once the verification payment succeeds, the subscription continues in Firmhouse with the customer’s local payment method.Faster, smoother report exports
CSV reports now prepare related information more efficiently, helping larger exports complete more smoothly when they include subscriptions, plans, invoices, or project settings.Keep cart quantities correct after iDeal or Bancontact checkout
Customers who return to their cart from an iDeal or Bancontact checkout now keep the intended item quantities, even when other Shopify apps update the cart at the same time. Firmhouse processes the related cart changes in sequence to prevent duplicate line items.Collections management moved to a separate admin page
Shopify Product Collections settings have a dedicated Collections page under Products in the project sidebar. Manage which collections customers can order from in one clear place, next to your product catalog.The Collection link on the Products page points to the new page for quick access. If you use this feature, follow the updated steps in Allow customers to add products.Filter products that are not in any collection on the Products page
ImprovementCustomer Portal
March 26, 2026
Filter products that are not in any collection on the Products page
When your project uses Shopify product collections for the portal, the admin Products page now includes a Not in any collection filter next to your other collection filters. Use it to quickly list products that are not part of any synced collection—handy for housekeeping and for catching products that would not be orderable in the Customer Portal through those collection rules.It works together with search and availability filters like the other collection pills.Keep Shopify collection membership synchronized
Product collection membership now stays aligned with Shopify even when several collection changes arrive close together. This keeps collection-based catalog availability current without manual correction.Ensure firmhouse-order-id is synced on initial Shopify orders
Initial Shopify subscription orders now consistently include theirfirmhouse-order-id custom attribute. This makes the related order and invoice easier to identify across Firmhouse and Shopify.Show only orderable collection products in the customer catalog
Bug FixCustomer Portal
March 25, 2026
Show only orderable collection products in the customer catalog
For projects using Shopify Product Collections, the Customer Portal now offers products only when they belong to a collection with Allow ordering products from this collection enabled.This is applied in addition to existing eligibility checks like product availability in the Customer Portal and plan eligibility. If the Shopify collections feature is disabled for a project, or if no collections are synced yet, catalog behavior remains unchanged.Read more in the docs: New add products flow in Self Service Center.Manage scheduled orders via GraphQL API
You can now manage scheduled orders through the GraphQL API with two new mutations:cancelScheduledOrder and rescheduleScheduledOrder.This lets integrations cancel scheduled orders or move their shipment date without using the admin portal, while keeping behavior in sync with existing scheduled-order flows.Set a display label for extra fields
Extra fields now support a dedicateddisplay_name.This lets you keep an internal field name for operational use, while showing a cleaner label to customers in checkout and Customer Portal flows.See one-off add-ons across the Customer Portal and admin portal
ImprovementCustomer Portal
March 23, 2026
See one-off add-ons across the Customer Portal and admin portal
Merchants and customers can now see active one-off add-ons alongside other subscription products in both the Customer Portal and admin portal. Once an add-on has shipped and is removed from the subscription, it no longer appears.Customer Portal v2 dashboards now show a dedicated cancelled subscription state
ImprovementCustomer Portal
March 19, 2026
Customer Portal v2 dashboards now show a dedicated cancelled subscription state
Customer Portal v2 dashboard templates now include a simple dedicated cancelled-subscription state.When a subscription is cancelled, customers now see a clear cancelled status with localized messaging and cancellation date instead of the active-subscription controls and product management blocks.This keeps the dashboard state consistent with the subscription lifecycle and avoids showing actions that are no longer relevant after cancellation.Replace product flow in Customer Portal v2 dashboard is now available as opt-in
ImprovementCustomer Portal
March 19, 2026
Replace product flow in Customer Portal v2 dashboard is now available as opt-in
The Customer Portal v2 dashboard replace-product action is now opt-in: customers will only see it when their project theme explicitly enables it.Useshow_replacement_button on product_listing and product_listing_filtered to turn the button on; it still renders only when replacement options exist for that line item.Delete unused discounts from the admin edit screen
Merchants can now delete unused discounts directly from the discount edit screen in the admin.If a discount has already been used, is linked to discount codes or plans, or is configured for referrals, the delete button stays visible but disabled so it is clearer why that discount cannot be removed.Update payment method from Shopify draft invoice page
Customers can now update their payment method directly from the public invoice page when a Shopify subscription payment fails. If a draft invoice charge doesn’t go through (e.g. card declined or expired), the invoice page shows clear options: retry the payment right away, or send themselves an email with a link to update their card in Shopify. After updating their payment method, they return to the invoice page and retry—no need to contact support or hunt for a separate payment settings page.The flow works the same for any failure reason, with a straightforward layout that highlights the retry action and keeps the “need to update your card?” option easy to find. We’ve also added translations for all supported languages.Display product images with accented filenames reliably
Product images whose filenames contain accented characters now load reliably instead of returning an access error. This keeps catalog and subscription visuals available without requiring merchants to rename existing files.Subscription options card layout now supports required plan selection
ImprovementSubscriptions
March 17, 2026
Subscription options card layout now supports required plan selection
The Subscription Options widget card layout now supports a required plan selection flow with a placeholder option in the plan selector.When Require plan selection confirmation is enabled, customers must select a plan before they can subscribe. Until a plan is selected, clicking Add to cart shows an inline error message in the subscription card and highlights the plan selector.After a valid plan is selected, the error state is cleared and checkout can continue normally.You can configure this flow with the Required plan selection placeholder text and Required plan selection error message block settings.Show skipped timestamps in subscription email overview
The subscription email overview now showsSkipped at <timestamp> (in italic) when an email notification has skipped_at set.This makes it clear that an email was intentionally skipped (for example through SKIP_EMAIL) instead of simply not sent.If an email notification has neither sent_at nor skipped_at, the table still shows Not yet sent.Access extra field answer and field IDs in subscription Liquid templates
ImprovementDevelopers
March 16, 2026
Access extra field answer and field IDs in subscription Liquid templates
Subscription Liquid templates now expose a newsubscription.extra_fields_v2 array that includes each extra field answer with both its answer ID and related extra field ID.This makes it easier to build integrations that need stable identifiers in addition to values, while keeping the existing subscription.extra_fields mapping available for simple key/value lookups.Clear feedback when a Shopify product cannot be removed
When a subscription product cannot be removed from Shopify, Firmhouse now shows the reason clearly so teams know what to resolve next.Admins now see the underlying Shopify error details when available, which makes it easier to understand why the removal failed and what to fix next.Remove Shopify subscription products even when line data is missing
Merchants can now remove an ordered product from a Shopify subscription when its stored Shopify line ID is missing. Firmhouse safely completes the local update instead of leaving the product stuck on the subscription.When there is no Shopify line to remove, Firmhouse now completes the local removal instead of failing the action.See payment retry progress immediately
The payments table now refreshes as soon as a retry starts and prevents another retry while the current attempt is processing. Teams get immediate feedback and avoid accidental duplicate payment attempts.The admin now updates immediately after a retry starts, and the same payment can no longer be retried multiple times by accident.Protect checkouts while payments are processing
Checkout reset actions are now unavailable while a payment is still processing, keeping the active payment flow intact and reducing the risk of conflicting payment attempts.This prevents unnecessary checkout rebuilds and avoids edge cases where orders or invoices could go missing during confirmation.Manage Shopify free shipping app discount from Shipping settings
Previously, merchants had to contact Firmhouse support to enable the Shopify free shipping discount for subscription products. Now they can enable and manage that discount themselves directly from Shipping settings.Skip showing plan switch option for subscriptions without a plan
Bug FixCustomer Portal
March 9, 2026
Skip showing plan switch option for subscriptions without a plan
The Customer Portal and Customer Portal v2 dashboards no longer show the plan switch block for subscriptions without a plan, so the view no longer breaks if the flow is enabled for legacy subscriptions without a plan assigned.Manual order confirmation for order-based projects
You can now manually confirm pending orders from the admin portal interface. The “Confirm” action is available on the order detail page and in the order dropdown on a customer’s subscription when an order is pending.This helps when an order-based project has a pending order that needs to be confirmed manually—for example after resolving a payment issue or completing manual processing.Previously it only appeared for plan-based projects; it now appears for all project types. See Manual order confirmation in the docs for more details.Hide duplicate iDeal | Wero when iDeal is shown at checkout
When both iDeal and iDeal | Wero payment methods were available during one-time purchase checkouts on Shopify, customers would see both options—which are essentially the same payment method. We now display only the first available method and hide the later one, so only one option is shown. This makes the payment selection less confusing.Allow merchants to add products to subscriptions outside the assigned plan group
ImprovementCustomer Portal
March 5, 2026
Allow merchants to add products to subscriptions outside the assigned plan group
When adding a product to a subscription from the admin portal, merchants can now select and add products that are not allocated to the subscription’s plan group. Previously, only plan-group-eligible products appeared in the search. The same exception is now supported forcreateOrderedProductV2 mutation with skipPlanGroupCheck: true option.Products outside the plan group are labeled “Not eligible for this subscription’s plan” in the product search dropdown. When a user selects such a product, a warning explains that customers cannot add it in the Customer Portal, but it can still be added manually. The warning includes a link to update plan group eligibility if needed.This gives merchants flexibility to add one-off or exceptional products without changing plan group configuration or guides them to adjust assignment if necessary.Customer Portal v2 swap button now follows swap scope and project setting
Bug FixCustomer Portal
March 5, 2026
Customer Portal v2 swap button now follows swap scope and project setting
We aligned swap button visibility in Customer Portal v2 with the same swap eligibility rules used by the swap flow itself.This includes two fixes:- Swap scope alignment: for projects using
full_catalog, the Customer Portal v2 “Change option” button now appears when any swap-eligible product exists, even if there are no alternatives in the current product group. - Project setting alignment: Customer Portal v2 now also respects the Allow customers to swap products setting (
self_service_center_product_swap_enabled). If this setting is disabled, the swap button is hidden.
Subscription options and subscription first widgets now support HTML in Shopify currency format
Bug FixShopify
March 4, 2026
Subscription options and subscription first widgets now support HTML in Shopify currency format
Both the subscription options and subscription first theme widgets now properly render HTML tags in the Shopify currency format. Previously, HTML (e.g. for bold text, strikethrough, or custom styling) would appear as raw markup instead of being rendered. Merchants can now use HTML in their currency format settings and have it display correctly in the theme preview and on the storefront.Updated iDEAL payment method to iDEAL | Wero branding
All user-facing references to “iDEAL” have been updated to “iDEAL | Wero” to reflect the new payment method branding. This includes display names, descriptions, tooltips, onboarding copy, and documentation across all supported languages. The payment method icon has also been replaced with the official iDEAL | Wero lockup.Subscription First block now supports matching variants by commitment period via variant metafields
New FeatureShopify
March 2, 2026
Subscription First block now supports matching variants by commitment period via variant metafields
The Subscription First theme block now supports matching variants to selling plans that include minimum commitment terms. This is done by configuring the Firmhouse Minimum Commitment variant metafield (firmhouse.min_commitment). When set on a variant (e.g. 12_months), the block matches it to plans whose minimum commitment period matches this value.This is particularly useful for rental merchants where variants represent different minimum commitment periods (e.g. 3 months, 12 months) and the variant’s price reflects the monthly amount to pay. By setting the minimum commitment metafield on each variant, the block automatically links each variant to the correct selling plan.Plan metadata (including minimum commitment) is synced to Shopify. See the Subscription First setup documentation for full configuration steps.Important: After deploying this update, you must force-sync your plans via the Shopify subscriptions settings (Sync Plans button) so the minimum commitment data is included in the plan metadata synced to Shopify. Without re-syncing, the commitment matching will not have the data it needs.Scheduled orders filter on Orders page
The Orders page in the admin now includes a Scheduled status filter tab. You can quickly filter for orders with the scheduled status, in the same way you filter by Confirmed, Pending, Fulfilled, or Cancelled.The Scheduled tab is only shown when the project has scheduled orders.Products available to order now respect plan group eligibility
When a subscription has an active plan that belongs to a plan group, the products available to order (including add and swap flows in the Customer Portal) are now filtered to only include products allocated to that plan group. This prevents customers from adding or swapping to products that are incompatible with their current plan.If the subscription has no plan or the plan has no plan group, behavior remains unchanged.Price column and subscription links in subscription products batch operations
ImprovementSubscriptions
February 26, 2026
Price column and subscription links in subscription products batch operations
In subscription product batch operations, the table now shows a Price column and each subscription ID links directly to the subscription details page.This makes it faster to validate pricing context and jump into a subscription when reviewing large product lists.Keep repeated Shopify line items separate on subscriptions
Shopify subscriptions can now include the same product more than once while preserving each line item’s quantity, metadata, and identity. Firmhouse creates a separate ordered product for every Shopify contract line, keeping fulfillment and subscription management accurate.Subscription creation now correctly handles each Shopify line item as a separate subscription ordered product, matching by line item ID first, then metadata, and falling back to product-only matching. This fix is scoped to Shopify flows and does not affect other subscription creation paths (i.e. legacy Firmhouse checkout).Retry failed payments via GraphQL API
You can now retry failed payments through the GraphQL API with the newretryFailedPayment mutation.This helps you recover failed charges directly from your own systems without manual steps in the dashboard.When a payment cannot be retried, the API now returns a clear validation error so your integration can handle it gracefully.Refund payments by invoice ID in GraphQL
TherefundPayment GraphQL mutation now supports invoiceId as an alternative lookup key.If you provide id (payment ID), that value is used and invoiceId is ignored. If you only provide invoiceId, the API looks up the latest refundable paid payment for that invoice, which also covers payment retry flows where the final paid attempt has a different payment ID.If neither id nor invoiceId is provided, the mutation returns a validation error.Human-readable shipping rates in audit log
Shipping rate changes in the subscription audit log now display human-readable values like the shipping title and price instead of raw encoded identifiers.This makes it much easier to review shipping rate changes when looking at subscription history in the admin.Set subscriptions to Pay by invoice from payment method updates
Support teams can now set a subscription to Pay by invoice directly from the payment method update flow in admin.This helps when a customer should move to invoice-based billing but doesn’t complete a payment method update link themselves. This option is only available for projects where the Shopify Subscriptions app is configured, and it is hidden when the subscription is already on Pay by invoice.Note: this currently does not support native Shopify subscription contracts (shopify_subscription), so the action is hidden for those subscriptions.Ordered product type option in Add product form
When adding products to a subscription in the admin, you can optionally set the product as “One-off add-on”. For one-off add-ons, the shipment date field is no longer available since these products are automatically included in the next order and then removed from the subscription.This makes it easier to add one-off add-ons manually without needing to pick an arbitrary shipment date. See One-off add-on products in the docs for more details.Sync Shopify products that share the same name
Shopify product sync now completes reliably when multiple products have the same or similar names. Firmhouse assigns each product a unique identifier during creation and updates, so the full catalog stays synchronized without naming conflicts.Skip adding mandatory products for Shopify Checkout subscriptions
We now skip automatically adding mandatory products for customers who sign up via Shopify Checkout, since these products aren’t visible during checkout.Additionally, when “Automatically add on signup” is enabled, we now show a clear note explaining that this setting does not apply to subscriptions created through Shopify Checkout.Shopify plan fixed discounts no longer create negative product prices
Bug FixShopify
February 23, 2026
Shopify plan fixed discounts no longer create negative product prices
When a Shopify plan uses a fixed-amount discount that is higher than a product price, ordered product prices are now capped at €0 instead of becoming negative.This prevents invalid negative order line prices from being sent to Shopify contracts.Order preview in Customer Portal and skip/snooze are now generally available as New Feature
New FeatureCustomer Portal
February 20, 2026
Order preview in Customer Portal and skip/snooze are now generally available as New Feature
Customers can now preview their upcoming order in the Customer Portal before choosing to skip or snooze it. Merchants can enable these controls for any project from the New Features menu, giving customers clearer context and more control over their subscription schedule.Add invoice_reminder_sent webhook event
A new outgoing webhook eventinvoice_reminder_sent is available. It fires when an invoice reminder email is sent, so you can react in your own systems—for example to track reminders or sync with a CRM. See Invoice reminder sent in the webhook documentation.Manual position sorting for Cancellation Reasons
You can now reorder Cancellation Reasons by dragging the handle on the left of each row. The order you set is used when showing reasons to customers in the Customer Portal, so you can put the most common or important options first.See accurate actors in audit logs
Audit logs now identify the responsible team member for administrative console changes instead of attributing them to System, giving teams a clearer and more dependable change history.Direct links for active products on subscription details
In subscription details, Active and Inactive products sections now let you click the product title to jump straight to that product’s edit page.This keeps the same link look and hover behavior as product links on order details, so navigation is faster without changing the table’s visual style.Applied promotions now auto-deactivate when usage is manually set to the maximum
Bug FixOrders
February 19, 2026
Applied promotions now auto-deactivate when usage is manually set to the maximum
When editing an applied promotion’s usage through the admin UI, setting the current usage equal to the maximum usage now automatically deactivates the promotion. Previously, this only happened when the promotion reached its limit through the normal order or invoice flow.Subscription first widget now works on any page with a product form
ImprovementSubscriptions
February 19, 2026
Subscription first widget now works on any page with a product form
The subscription first widget can now be used within a product form on any page, not just the product details page. This gives you more flexibility in where you surface subscription options—whether that’s on collection pages, landing pages, or custom layouts—so customers can choose to subscribe or buy one-time from wherever they add products to cart.Allow to filter by all relevant subscription statuses for project
ImprovementSubscriptions
February 19, 2026
Allow to filter by all relevant subscription statuses for project
The Status filter on the subscriptions overview now only shows statuses that exist in your project. Statuses with zero subscriptions are hidden, so you see a shorter, relevant list. For example, if you only have Activated, One-time purchase, and Cancelled subscriptions, those are the only options in the filter.More dependable custom styling across customer experiences
ImprovementCustomer Portal
February 18, 2026
More dependable custom styling across customer experiences
Custom utility classes now remain available across the Portal, Customer Portal, and checkout after the styling pipeline upgrade to Tailwind 4. Firmhouse also detects classes used in custom head and body content, helping merchant themes render consistently after updates.Reliable invoice processing for imported one-time purchases
Invoices for imported customers with one-time purchase subscriptions now process reliably, keeping their payment records on track.Better timeout errors for GraphQL API requests
GraphQL API requests that hit a server timeout now return a clearer, structured timeout response instead of a generic server error.Timeout responses now use HTTP408 Request Timeout and include the TIMEOUT error code in GraphQL extensions, so API clients can detect timeout failures reliably and handle retries or fallbacks more predictably.Shopify order status filter on Orders page
The Orders page in the admin includes pills to filter whether an order exists in Shopify.You can switch between All, With order in Shopify, and Without order in Shopify to quickly find orders that are still pending sync. Orders that still need to be pushed to Shopify — including those created as draft orders — appear under Without order in Shopify.These pills are shown below the search bar for Shopify-connected projects (legacy or Subscriptions app). The pills are self-descriptive and shown without a separate Shopify label for a cleaner filter row.Referral banner and page in Customer Portal now available for fixed amount discounts
Bug FixCustomer Portal
February 17, 2026
Referral banner and page in Customer Portal now available for fixed amount discounts
The referral banner in the Customer Portal now appears when you use fixed amount referral discounts, not only percentage-based ones. The default copy on the referral page has also been updated so it correctly describes fixed amount rewards.Automatic recovery for interrupted Mollie signups
Paid Mollie signups on the legacy checkout can now recover automatically when checkout is interrupted, helping customers receive their order and subscription without waiting for manual support. Firmhouse restores the related payment and order data and resumes normal invoice and webhook processing when the records can be recovered safely.Updating next billing date from portal is now generally available
New FeatureOrders
February 13, 2026
Updating next billing date from portal is now generally available
Changing a subscription’s next billing or shipment date is now available for all projects (for users with permission to update subscriptions).We’ve also improved the modal to clearly explain the impact of the date change. For example, if applicable, the minimum commitment date or planned cancellation date will be updated based on your project setup.Keep one-time Shopify checkout choices intact
The Credit Card and PayPal checkout button now reliably keeps regular selling plans when redirecting customers to Shopify checkout. This also works when Use Ajax API for cart updates is disabled in the SEPA Plan Support app embed.The checkout button injector now correctly converts SEPA subscription plans back to regular plans when the regular checkout button is used.Sync Shopify product type to Firmhouse
Products now include a “Shopify product type” field that syncs the product type from Shopify’s Product organization settings. This is useful for categorizing products.The field is automatically populated during Shopify product sync and can also be manually edited in the admin product form for legacy products. It’s available through the GraphQL API as well.Shopify line item custom attributes are now preserved on imported products
ImprovementCustomer Portal
February 11, 2026
Shopify line item custom attributes are now preserved on imported products
When subscriptions or one-time purchases are created from Shopify orders, custom attributes on each Shopify line item are now copied into Firmhouse and stored onordered_products.metadata as key-value pairs.For developers, this metadata is available through the OrderedProduct metadata field in the GraphQL API, and in Customer Portal templates through subscription.ordered_products where each ordered product exposes metadata. In Customer Portal v2 components, this can be used directly for behavior like metadata-based filtering (for example with ProductListingFilteredComponent and filter_by/filter_value).In the admin UI, this metadata is now shown on the subscription detail page in the Active products section, directly underneath each product title and price, so support teams can see line item context like delivery preferences or gift notes.Availability filter on products index
The products index in the admin now has an availability filter. You can quickly switch between viewing all products, only available products, or only unavailable ones.The filter works alongside the existing search and collection filters—when you change availability, your current search term and collection selection stay in place. By default, the list shows available products only, so you see the most relevant products first when opening the products index.Import one-time purchases from tagged products (Shopify Subscriptions)
New FeatureShopify
February 11, 2026
Import one-time purchases from tagged products (Shopify Subscriptions)
You can now automatically import Shopify orders as one-time purchases when they contain products tagged withFIRMHOUSE_ONE_TIME. This is controlled by a new setting in the Shopify Subscriptions app configuration: “Import one-time purchases from tagged products”.When enabled, each time an order is created in Shopify that includes line items with the FIRMHOUSE_ONE_TIME tag (and no selling plan), a one-time purchase subscription is created in Firmhouse. This works well for add-on products, one-off purchases, or buyback items that you want to track alongside subscriptions.The setting is disabled by default, so you can opt in per project when you’re ready to use it.Keep subscription options in sync with dynamic product forms
The subscription options widget now follows variant changes when a Shopify theme replaces the product form after the page loads. Customers continue to see the correct subscription choice and price as they switch variants.Upgraded code editor for templates and config in admin
The code editor for HTML, JSON, and Liquid templates has been upgraded across the admin. You’ll notice improved syntax highlighting, better formatting, and a smoother editing experience when working with Customer Portal content, preferences, webhook templates, Picqer config, and similar fields.Prevent duplicate product groups during Shopify sync
Product groups are now unique per Shopify product per project. Now we ensure we don’t create duplicate product groups which previously could sometimes result in variants of the same product grouped in separate product cards in the Customer Portal product catalog.Enhanced subscription filters with multiple status selection and additional options
ImprovementSubscriptions
February 9, 2026
Enhanced subscription filters with multiple status selection and additional options
The subscriptions overview now supports more flexible filtering options. You can select multiple subscription statuses at once using the new multi-select dropdown, making it easier to view subscriptions across different statuses in a single view.Additionally, two new checkbox filters are available: “Marked as non paying” and “With overdue invoices”. These filters can be combined with status filters to quickly find subscriptions that need attention, whether you’re looking for payment issues or overdue invoices across any subscription status.Subscriptions can no longer have future signup dates
Subscriptions now validate that thesignup_completed_at date cannot be set to a future date. This makes sense in general since a signup can only be completed in the past or present, not in the future.This validation also prevents unwanted side-effects like skewed metrics. A subscription with a future signup date was causing the metrics rollup to break, resulting in incomplete signup data in dashboards.Fresh Shopify prices are now fetched when creating orders
When creating orders for subscriptions with Shopify prices enabled, the system now fetches fresh prices from Shopify before calculating order line amounts. This prevents orders from showing incorrect prices (like €0) when the Shopify price hasn’t been cached yet.This fix applies to ordered products that don’t have a custom price set and where Shopify prices are enabled for the project.Company favicon now generally available
You can now upload a custom favicon for your project in the Branding settings. The favicon appears in browser tabs and bookmarks, helping customers identify your brand when they visit your checkout and Customer Portal.To upload your favicon, go to Settings > Your business and scroll to the Branding section. Upload a square PNG image (max 1MB), with a recommended size of 96x96 to 256x256 pixels. Note that a custom favicon requires a custom domain to be set up for your project.Use the correct address in billing templates
Billing template fields now return the shipping address when a subscription uses the same address for billing and shipping. Templates can use thebill_to_* fields directly, while different_billing_address remains available when custom logic needs to distinguish the two cases.SEPA checkout now preserves cart line item properties
The SEPA checkout redirect flow now preserves cart line item properties when redirecting customers to checkout. Previously, any custom properties added to cart items (like gift messages, personalization options, or custom attributes) would be lost during the SEPA plan swap process.Line item properties are now properly URL-encoded and included in the cart update URL, ensuring all custom data attached to cart items is maintained throughout the checkout flow.Find all subscription notifications in one search
Searching notifications by subscription ID now returns every related notification, including messages primarily associated with an order. Teams can review the full communication history without needing to know how each notification was recorded.Update price when swapping products in the Customer Portal
Swapping a product in the Customer Portal now refreshes the ordered product price based on the replacement. This keeps the price in sync with the new product without requiring any extra steps.Product swap now generally available in Customer Portal
Product swap is now generally available for all order-based projects. Customers can swap products in their subscription directly from the Customer Portal, choosing between different variants in the same product group or from your full catalog depending on your configuration.You can enable this feature in Settings > Self Service Center by checking “Allow customers to swap products”. When enabled, customers will see a swap option next to their products, and the price automatically updates to reflect the new product they select.Fixed price pricing strategy for plans
You can now set a fixed price for products purchased on a plan, regardless of their original price. This is ideal for membership propositions where customers pay the same amount each billing cycle to access your services or products.To use this, go to the Pricing strategy section when editing a plan and select “Fixed price”. Then enter the amount you want to charge for all products on this plan.Cancellation reason available in Liquid templates
You can now access the cancellation reason in Liquid templates for webhooks and emails. This is useful when you want to customize your cancellation confirmation messages based on why the customer cancelled.A new Liquid tag is available on the subscription object:cancellation_reason returns the title of the churn reason selected by the customer.Add change set data to subscription address changed webhook
The subscription address changed webhook now includes a change set that exposes the before and after values for each updated attribute. This makes it easier to build precise notifications or audits without additional lookups.You can iterate over the change set or access specific fields to show exactly what changed in webhook-based workflows.Example liquid:Minimum overdue invoices threshold for Intrum auto-collections
You can now set a minimum number of overdue invoices required before a subscription is automatically pushed to Intrum for debt collection. This helps reduce noisy or premature collection pushes by only sending accounts with a meaningful number of overdue invoices.The new “Minimum overdue invoices” setting is available in the Intrum settings page when automatic invoice push is enabled. Set it to 3, for example, to only send subscriptions to Intrum once they have at least 3 eligible overdue invoices. Set to 0 to disable the threshold entirely.If a subscription already has an active collection case, new eligible invoices will still be pushed regardless of the threshold setting. The “Push all overdue invoices” option continues to work as before: when enabled, once a subscription meets the threshold, all overdue invoices for that subscription will be sent together.Add product quantity and custom price when adding products to subscriptions
ImprovementSubscriptions
January 29, 2026
Add product quantity and custom price when adding products to subscriptions
You can now set the quantity and override the price when adding products to subscriptions from the admin interface. The add product form now includes quantity controls with increment/decrement buttons and an optional custom price field that lets you override the default product price for that specific order.This makes it easier to add multiple units of a product or apply special pricing for individual orders without needing to modify the product’s base price.Match Adyen transactions to Firmhouse payments more easily
Adyen merchant references now consistently include the Firmhouse payment ID, making reconciliation and payment lookup more dependable.The merchant reference now always includes the payment ID, ensuring merchants can easily identify and reconcile payments with their corresponding Adyen charges.Create one correct order when activating on a shipment date
Manually activating a subscription on its planned shipment date now creates only the intended order. This keeps fulfillment accurate when activation happens exactly one billing cycle after signup.We will no longer create automatic orders during manual activation if subscription already has an initial order, preventing duplicate order creation.Keep successful Adyen retries correctly marked as paid
Successful Adyen retries now remain paid even when an earlier failed-attempt webhook arrives afterward. Customers can switch payment methods after an unsuccessful attempt with confidence that Firmhouse will retain the final successful result.Manual subscription import now available
Merchants can now manually create subscriptions directly in the Firmhouse portal. The “Create subscription” button is now always visible in the subscriptions page, making it easy to import existing customers, handle phone orders, or set up subscriptions for customers who signed up through alternative channels.Documentation for manually creating subscriptions is available in the product docs under Manage > Subscriptions.Default Shopify activation next billing date to tomorrow when needed
When activating Shopify subscriptions with a start date of today, we now default the next billing date to tomorrow. This is because Shopify contracts need a start date in the future.Non-Shopify subscriptions still default the next billing date to the start date, so existing behavior stays the same.Auto-recovery for SEPA selling plans paid with Shopify Payments
In edge cases, customers could checkout with SEPA selling plans using their credit card (via Shopify Payments). Previously, this would create a subscription without a Shopify contract, leaving it in an inconsistent state.We’ve added an auto-recovery path that detects when a SEPA selling plan order was paid via Shopify Payments and automatically converts the subscription to a native Shopify subscription with a proper contract. This ensures these subscriptions are properly managed and billed through Shopify’s subscription system.The recovery happens automatically when the SEPA workaround job runs and detects that no payment can be found in the payment provider (because it was actually paid via Shopify Payments), and the original order used Shopify Payments as the gateway.Fix customer ID handling when switching Mollie payment provider accounts
Bug FixPayments
January 23, 2026
Fix customer ID handling when switching Mollie payment provider accounts
When customers update their payment method and the system switches to a different Mollie payment provider account (for example, when their country changes), we now properly clear the old customer ID before creating a payment. This prevents errors where Mollie would reject the payment because it doesn’t recognize the customer ID on the new account.The system now creates a new Mollie customer for the new payment provider account and updates the subscription’s customer ID when the payment is successfully processed. This ensures customers can seamlessly switch between different Mollie accounts without encountering payment errors.Clone subscription when importing
You can now clone an existing subscription when importing a new one using theimportSubscription mutation. Pass cloneFromSubscriptionId to copy customer details like name, address, billing information, and contact details from the source subscription.Any values you explicitly pass to the mutation will override the cloned values, so you can easily create variations of existing subscriptions. The cloned subscription will be associated with the same subscription account as the source subscription.This is especially useful for merchants who want to create multiple subscriptions for the same customer with different products or plans.Filter source products to recurring only in product swap automation
ImprovementProducts
January 20, 2026
Filter source products to recurring only in product swap automation
When setting up product swap automations, the source product search now only shows recurring products. This makes it easier to find the right products to swap, since product swaps are typically used to replace recurring products with other products.The target product selector still shows all products, so you can swap recurring products with any product type as needed.Product groups admin interface for non-Shopify merchants
Non-Shopify merchants can now create and manage product groups directly from the admin interface. Product groups bundle variants of the same product together in the Customer Portal, making it easier for customers to see and compare different options.You can access product groups from the sidebar, create new groups with a title, and assign products using the multi-product search selector. A product can only belong to one group at a time—if you assign it to a new group, it’s automatically removed from the previous one.For Shopify merchants, product groups continue to be automatically created and managed during product syncs, so no manual setup is needed.Fix default next billing date calculation during subscription activation
Bug FixSubscriptions
January 19, 2026
Fix default next billing date calculation during subscription activation
When activating a subscription, the default next billing date now correctly uses the subscription’s plan’s trial period to calculate the correct default start date, instead of using the reactivation logic (which rightfully uses the current date by default).Remove Shopify subscription discounts from admin portal
Teams can now remove discounts from a Shopify subscription directly from its subscription detail page. Each discount in Applied discounts has a Remove action that updates the Shopify subscription contract.This makes it easy to clean up discounts that were applied incorrectly or are no longer needed.Default multi-country taxes configuration for new Shopify stores
New projects created from the Shopify app installation now get a multi-country tax rate with common EU VAT rates pre-configured instead of a static 21% Netherlands rate. The default includes rates for Netherlands (21%), Germany (19%), France (20%), Belgium (21%), Austria (20%), Spain (21%), and Italy (22%).This means tax rates on Firmhouse-generated invoices are automatically applied based on the customer’s country, reducing the need for manual tax rate configuration after installation. Note that for orders placed directly in Shopify, the Shopify tax engine still determines the applicable tax rates.Show warning when subscription next order is below minimum order amount
ImprovementOrders
January 19, 2026
Show warning when subscription next order is below minimum order amount
We now display a warning banner on subscription detail pages when the next scheduled order’s subtotal is below the project’s minimum order amount. This helps you quickly identify why certain subscriptions haven’t received orders yet—the order won’t ship until the minimum threshold is reached.The warning shows both the next order’s subtotal and the required minimum amount, making it easy to see how much more needs to be added to the order before it can ship.Update Shopify payment method from admin
Customer support can now update the payment method used for Shopify subscriptions directly from the admin portal. On the subscription detail page, a new “Payment method” section shows the current payment method (card brand, last 4 digits, expiry date) and lets you switch to any other payment method the customer has on file in Shopify.Keep cancellation offers available without an upcoming order
Customers can now continue through the cancellation flow even when their subscription has no products or next shipment date. Firmhouse offers the pause option in that situation instead of interrupting the experience.Product group API mutations for non-Shopify merchants
Product groups can now be created and managed via the GraphQL API, making them available to merchants who aren’t using Shopify. Previously, product groups were only created automatically during Shopify product syncs.You can now create product groups withcreateProductGroup, update them with updateProductGroup, and remove them with destroyProductGroup. When creating or updating a product group, you can optionally associate products by passing their IDs. Products can also be assigned to product groups using the productGroupId argument in createProduct and updateProduct mutations.The ProductGroup type includes fields for id, title, imageUrl, products, and project. The Product type now also exposes a productGroup field so you can see which group a product belongs to.Payment retries continue even when invoice reminders are sent
Payment retries for insufficient funds now continue even after invoice reminders are sent. Previously, sending an invoice reminder would cancel all scheduled retries, which prevented customers from being marked as non-paying and broke downstream processes like debt collection and non-paying customer overviews.Customers can now manually pay their invoice when a retry is scheduled for a future date. However, manual payment is still blocked when a retry has already been initiated and is waiting for bank confirmation (like SEPA payments that take 1-2 days to process). If a customer pays manually, any scheduled retries are automatically cancelled.Fixed amount discounts now available for referral programs
Referral programs can now use fixed amount discounts for both referee and referrer rewards. Previously, only percentage-based discounts were available for referral settings. This gives you more flexibility in how you reward referrals—for example, offering a flat €10 off instead of a percentage discount.When you select a fixed amount discount, you’ll see a warning reminding you to check that the discount doesn’t exceed your product prices. This helps prevent accidentally creating orders that end up being free if the discount is larger than the order total.Review prices safely when changing a subscription country
Teams can change a subscription country when country-specific pricing is enabled and receive a clear reminder to review the affected products and prices.The warning only appears when the country is actually changed, and disappears if the admin changes it back to the original value. This helps prevent accidental price mismatches while still allowing necessary country updates when needed.Product type API field now reflects actual behavior
TheproductType field in the GraphQL API now consistently reflects whether a product is recurring or one-time, regardless of project type.For plan-based projects, it follows the configured product type. For dynamic subscriptions, it reflects the product’s shipping schedule. Integrations can rely on one consistent value across project types.