Shift Happens

RSS

Week of Sep 21, 2026

·

7

new

·

23

improved

·

21

fixed

Find which customers received an offer through the API

Shipped

Areas

Subscriptions, Developers, Payments, Orders

Find which customers received an offer through the API

You can now identify exactly which customers received, accepted, or declined a promotional offer through the API. Use offerDefinitions to discover your offer configurations, then filter subscriptions or promotionalOffers by offer, event type (issued, accepted, rejected, or viewed), and a date range, including subscriptions that have since cancelled. Viewed events reflect only offers where a first view was recorded, so treat that signal as partial rather than a complete view history. promotionalOffers also works without any offer filter, so you can pull the full offer history for a single subscription on its own.

New

Developers

Query a subscription’s assigned assets through the API

You can now find which assets are currently assigned to a subscription through the API. Filter the assets query by subscriptionId, or fetch a subscription’s assets directly through getSubscription or subscriptions. Only assets that are currently assigned are returned; assets that have been returned or unassigned are excluded automatically.

New

Developers

Track retention outcomes from your own Customer Portal cancellation flows

If you’ve built a custom cancellation flow in Customer Portal v2, you can now record when it retains a customer so the outcome shows up in Firmhouse’s Churn Prevention reporting. Two authenticated endpoints let your flow start or reuse a cancellation request and mark it as prevented with an optional feedback note, and a small window.Firmhouse.churnRequests helper handles the calls for you.

New

Developers

Replace multiple subscription products in one API request

The GraphQL API’s replaceSubscriptionProducts mutation lets you replace up to 100 active products on a subscription in a single request, so several products on the same subscription can be swapped together instead of one call at a time.

New

Developers

Create fixed-amount discounts in any Shopify store currency

You can now create fixed-amount discounts in any currency your Shopify store supports, in addition to your project’s existing currencies. The discount form automatically adds your Shopify store’s available currencies to the list, so newly supported Shopify currencies show up without extra setup.

New

Discounts

Set free shipping thresholds per country

You can now set a different free shipping threshold for each country instead of one threshold for your whole shop. For example, offer free shipping from €19 in the Netherlands and €35 in Belgium, or turn off threshold-based free shipping for specific countries entirely. Any country without an override keeps using your existing shop-wide threshold. You’ll find this under Settings > Shipping.

New

Settings

Maximum and fixed commitment terms for order-based plans

Order-based plans can now use maximum commitments and fixed terms, the same options already available for plan-based subscriptions. A calendar maximum ends the subscription once its configured term has run its course, while a billing-cycle maximum counts the paid signup invoice as the first cycle and each paid recurring invoice afterward toward the limit. If the subscription has a matching Shopify subscription contract, Firmhouse cancels that contract before ending the subscription.

New

Subscriptions

Improvements

·

23

Retry a failed script execution from its notification

Failed script execution notifications now include a Retry script execution button, so you can rerun the script for the same trigger without leaving the notification. Review the script’s output in the linked outgoing webhook, make any needed fixes, and retry directly from there. The button disappears once the retry succeeds.

Improved

Developers

Filter subscriptions by service channel

You can now filter the Subscriptions overview by service channel directly from the filter menu, on projects that use service channels. Like any other filter, it appears as an active filter and carries through to saved views and CSV exports. Previously the only way in was through a service channel’s own menu.

Improved

Subscriptions

Preview what Clear non-paying status actually does

The manual action to resolve a non-paying subscription is now called Clear non-paying status, and it shows a preview before you confirm. The preview explains that clearing the status only removes the flag and recovers any skipped products. It doesn’t settle outstanding invoices, cancel queued reminder emails, or prevent a later payment failure from marking the subscription non-paying again. It also shows the next order Firmhouse will attempt.

Improved

Subscriptions

See when subscriptions were paused from the overview

When you filter the Subscriptions overview to paused subscriptions, you can now see and sort by a Paused at column, so you don’t need to open each subscription to check how long it’s been paused.

Improved

Subscriptions

Clearer alerts with fewer repeated notifications

Notification errors are now easier to read in your admin and high-severity emails. Shopify shipping alerts name unavailable products so you can reconnect or replace them; View full payload remains available for technical details.

Improved

Notifications

Add custom headers to outgoing webhooks

You can now add custom HTTP headers to an outgoing webhook, such as an authentication token your receiving system expects. Add one header per line under Custom HTTP headers when you configure the webhook. This works for standard HTTP, Shopify Admin, and Shopify Flow deliveries; Klaviyo metric webhooks don’t support custom headers.

Improved

Developers

Offer Pay by Bank through Adyen

You can now offer Pay by Bank as a payment method through Adyen, on both hosted checkout and Sessions checkout. Turn it on in your Adyen payment method settings to let customers pay directly from their bank account.

Improved

Payments

Manage and recover payment methods

When you record a manual invoice payment for a subscription with an unhealthy payment method, Store this payment method for future payments is checked by default. A successful payment replaces the unhealthy method, helping the next recurring charge succeed.

Improved

Payments

Offer your own snooze durations on upcoming-order links

You can now choose which snooze durations customers see on an upcoming-order snooze link by adding a snooze_options parameter with comma-separated day counts, for example 7, 14, and 28. Links without this parameter keep the default seven-day option.

Improved

Orders

Let customers swap across your full product catalog

The Swap scope setting in your Customer Portal settings now lets you offer your entire product catalog for swaps, including catalogs with more than 100 available products.

Improved

Products

More flexible Shopify order tags

You can now use payment details and full Liquid logic in custom Shopify order tags, including conditions, filters, and arithmetic. Tag orders by payment provider or method to help organize fulfillment and accounting exports.

Improved

Settings

Minimum invoice amounts apply to Shopify subscription discounts

Your configured minimum invoice amount for discounts now also applies to Shopify-billed subscriptions. Discounts stay in sync as subscription products change, with automatic retries if a billing attempt starts before the update is complete.

Improved

Discounts

Set a separate billing address for Shopify-native checkout subscriptions

If your project uses Shopify-native checkout, you can now set a billing address on a subscription that’s different from its shipping address, the same option already available to non-Shopify projects. It’s available from customer details in your admin, and in the Customer Portal.

Improved

Payments

Trace invoice and payment history through the API

The GraphQL API now exposes more detail about an invoice or payment’s history. Invoices include a chargedBackAt timestamp alongside paidAt, so you keep a record of when an invoice was paid even after it’s later charged back.

Improved

Developers

Send customers straight to the right Customer Portal page

You can now link customers directly to a subscription by adding subscription_id to the Customer Portal login URL or passing it when generating a login token through the API. Customers must already have access to that subscription; invalid or inaccessible targets use the normal login flow.

Improved

Customer Portal

Choose whether to bill when confirming an order

When confirming an order in your admin, you can choose to confirm it only or Confirm and process billing. Billing runs only when you select that option and the order is eligible and has not yet been billed.

Improved

Orders

Add house number suffixes on any project

Every project can now record a house number suffix, such as “A” or “2 hoog,” using the house number addition field in the API or subscription preferences in your Firmhouse Portal. Use address2 for other additional address details.

Improved

Subscriptions

Turn off checkout availability for a product without hiding it elsewhere

You can now turn off a product’s availability in checkout separately from its availability in the Customer Portal. This is useful when you want to retire an old or direct checkout link for a product while keeping it available to existing customers, or while it stays visible in the Customer Portal.

Improved

Products

Custom cancellation and pause pages can skip the extra confirmation step

If you’ve built a custom cancellation or pause page for Customer Portal v2 that already confirms the customer’s choice, it can now complete the request directly instead of sending the customer through an additional Firmhouse confirmation step.

Improved

Customer Portal

See cohort history all the way back to your project’s start

Cohort Analyses and Lifetime Value in Insights can now show data going all the way back to when your project started, instead of stopping after a fixed number of months.

Improved

Analytics

Find subscriptions and cases by collections status

You can now filter subscriptions by Sent to collections, alongside Marked as non paying, to find customers who still need follow-up.

Improved

Subscriptions

Show one clear reactivation offer in the Customer Portal

The Customer Portal dashboard no longer shows a duplicate reactivation prompt when a customer already sees a reactivation offer. When an eligible offer would reactivate a cancelled subscription or resume a paused one, the standard reactivation or resume prompt stays hidden until that offer is no longer available.

Improved

Customer Portal

Clearer status for Script Execution webhooks

Script Execution webhook runs that succeed on the first try no longer show a misleading retry label. You can still check each run’s Queued, Completed, or Failed status and view its output to see exactly what happened.

Improved

Developers

Fixes

·

21

Shared plan schedules stay in sync when editing a shipment date

Changing a recurring product’s ship date directly, instead of through its subscribed plan, could quietly drift that product out of sync with the plan the rest of the subscription follows, which could then trigger an extra, unintended order a few days later. A product-only date change on a shared plan schedule is now blocked, pointing you to the subscribed plan instead, so the schedule stays in sync.

Fixed

Subscriptions

Reliable Shopify sync when a selling plan’s billing policy changes

Shopify doesn’t allow an existing selling plan to switch between fixed and recurring billing or delivery. When a plan changed policy type this way, the update was previously rejected and the entire selling plan group, including its product associations, stopped syncing. Firmhouse now recreates the selling plan when its policy type changes instead of updating it in place, so the rest of your Shopify sync keeps working.

Fixed

Shopify

Ensure correct invoice numbers in Mollie payment descriptions

Mollie payment descriptions now always show the real invoice number, instead of occasionally showing a placeholder like #000000 when an invoice was finalized before its number was assigned. Firmhouse now waits for the actual invoice number before updating Mollie, and repairs the stored description for any invoices this already happened to.

Fixed

Payments

Correct tax treatment on Shopify renewal order prices

Shopify renewal orders with a price override could previously be priced incorrectly, because Firmhouse relied on a shop-wide tax setting instead of checking each order, which could make Shopify treat a net price as tax-inclusive and undercharge the customer. Firmhouse now checks the actual tax treatment of each renewal order before applying a price override, so the customer is always charged the correct total.

Fixed

Shopify

More accurate payment failure details for invalid mandates

When Mollie rejects a payment because it can’t find a suitable mandate for the customer, Firmhouse now classifies it with the specific invalid-mandate reason instead of a generic payment failure. The payment_failed webhook also always includes the retry date now, instead of sometimes sending it empty.

Fixed

Payments

Order previews now work for external checkout subscriptions with promotions

Order previews for subscriptions created through external checkout now load correctly when a percentage-based promotion is applied, instead of failing with an error.

Fixed

Discounts

Order release follows payment and subscription status

If a payment retry succeeds after a subscription has been cancelled, the linked pending or snoozed order now stays pending. You receive an alert about the payment and can confirm the order manually if you choose to ship it.

Fixed

Orders

More reliable Ship now orders

Using Ship now advances the shared shipping schedule correctly for single-product subscriptions, so the next regular shipment is not sent separately as an extra order.

Fixed

Orders

Recovered recurring orders keep their original shipment details

Recovering a recurring order after a Shopify shipping cost error now creates the order with its original date and products, helping you fulfill the shipment as planned.

Fixed

Orders

Clearer payment retries and recovery

Payment recovery now handles more retry situations with clear next steps:

Fixed

Payments

Churn feedback remains visible for archived subscriptions

Review feedback from archived subscriptions in Analytics > Metrics > Churn Prevention, including the products recorded with that feedback. CSV exports continue to exclude archived subscriptions.

Fixed

Analytics

More reliable Customer Portal order details and quantity updates

Customer dashboards and order details now load reliably, including orders containing deleted products. Order details retain the original product title, and upcoming-order previews display correctly in the Customer Portal and your admin.

Fixed

Customer Portal

Checkout prevents duplicate payments from overlapping attempts

When a customer submits checkout more than once for the same subscription—for example, from two browser tabs—only the first attempt can proceed while it is in progress. This prevents overlapping attempts from creating duplicate payments and orders. A new checkout can start once the original attempt finishes.

Fixed

Payments

Customer content uses the correct language

Emails, webhooks, Customer Portal pages, and other templated content now consistently use the language of the relevant subscription or request. This also keeps translated promotion names in the customer’s language when templates use a fallback language setting.

Fixed

Notifications

Smoother payments with Adyen checkout

Adyen checkout now shows the payment methods available for the customer’s country, currency, and amount, filtered by your configured selection. This restores eligible methods such as iDEAL and Bancontact; SEPA Direct Debit remains available for initial payments only.

Fixed

Payments

Shopify orders carry their matching Firmhouse references

Shopify orders now use their own Firmhouse order, invoice, subscription, and payment IDs, even when imported subscription metadata contains references from an earlier order. This helps you match orders with the correct records in Firmhouse.

Fixed

Shopify

Free shipping discounts apply correctly to Shopify draft orders

Eligible customers now receive free shipping on Shopify draft orders for projects without a Shopify selling plan group, typically older projects not using Shopify’s native subscription billing. Firmhouse-generated free shipping codes apply correctly, allowing these orders to proceed with the intended shipping discount.

Fixed

Discounts

Required Extra Fields appear when creating subscriptions manually

The manual subscription creation form in your admin now includes your project’s required Extra Fields, so you can enter the necessary information and complete the subscription.

Fixed

Subscriptions

More accurate and reliable upcoming-order notices

Upcoming-order emails and webhooks now include active one-off add-ons alongside scheduled products, giving customers a complete preview of their next shipment. Add-ons leave the preview once the order is created.

Fixed

Notifications

Product ownership stays in sync with Shopify

When a customer takes ownership of a one-time product, the subscription’s ownership status now stays aligned between Firmhouse and Shopify. Affected subscriptions pause when the last remaining product is owned, or continue with the other products kept in sync.

Fixed

Subscriptions

Customer Portal template edits stay visible after saving

Your Customer Portal template edits stay visible after saving, including when a validation error needs your attention.

Fixed

Settings

Start selling on repeat, or talk to us about your setup

Pricing that grows with you

Plans for every stage of repeat commerce. No lock-in.

Start selling on repeat, or talk to us about your setup

Pricing that grows with you

Plans for every stage of repeat commerce. No lock-in.

Start selling on repeat, or talk to us about your setup

Pricing that grows with you

Plans for every stage of repeat commerce. No lock-in.