Root release notes | April 2026

We’re committed to keeping you fully up to speed with all of the features, enhancements and fixes we ship at Root. Here are all of the updates and improvements we shipped over the last month 🛠️

Features

We’re working on new features to expand what you can do on Root:

  • Email fallback for 2FA OTP delivery: Support was added for automatic email fallback when SMS delivery of a two-factor authentication code fails. This improves login reliability for cases where phone number or provider constraints prevent SMS delivery, while keeping OTP delivery secure.
  • Disable payment batching per product module: A new setting was added to product module billing configuration that allows pending payments on a specific module to be excluded from payment batching. This gives you more control over how collections are handled per product. Read the docs.
  • New home page with unified search and recent activity: We’re working on a new home page that gives agents a personalised starting point, including quick actions, unread notification visibility, cross-entity search across policies, claims, applications, policyholders, and complaints, plus a recent activity feed for quickly reopening recently viewed items.
  • TypeScript product module support: Work has begun on supporting TypeScript for product modules. This is not yet available for client use.
  • Workbench CLI 2.0.0: A major Workbench CLI update is now available, rebasing the CLI on a modern Node toolchain. Highlights include a Node 20+ requirement, removal of legacy sandboxing libraries with known vulnerabilities, parallel API calls and progress spinners on push, pull, publish and clone, and clearer error messages with suggested fixes. Some commands and short flags have been removed. See the CLI changelog for the full list of breaking changes.
  • OpenAPI (Swagger) docs for product modules: Support was added for generating OpenAPI v3 (Swagger) documentation for product modules, with a new command available in the Workbench CLI to action this. Read the docs.
  • New error class for product module code: Support was added for a new ProductModuleCodeError class that product module code can throw with a custom message and optional JSON payload, which is then surfaced in the API response. This is available in the root-node-24 environment. Read the docs.

Platform Enhancements

  • Performance Enhancements

    We’ve introduced enhancements to improve stability, efficiency, and visibility across Root:

    • Root Web upgraded to Node 20 with faster build tooling: Root Web has been upgraded from Node 16 to Node 20, and the build toolchain has been migrated to a modern framework. This brings significantly faster build times and improved local development performance. No user-facing behaviour changes are expected.
    • Improved platform throughput and reliability: Backend improvements were made to how internal jobs are processed, allowing higher throughput and reducing idle time during peak workloads. Alongside this, error logging for incomplete jobs was improved to surface relevant details more quickly.
    • Faster data store entity lists and reads: Listing and read operations for data store entities were optimised to reduce database work.
    • Improved product module code reliability: Updates were made so that un-awaited promises in product module code no longer cause subsequent invocations to crash, improving overall reliability of product module execution.
    • Handlebars upgraded: The Handlebars dependency was upgraded across the platform to address eight published advisories. Both direct and transitively pinned copies were updated to the patched version.
  • Billing Enhancements

    We’ve made several improvements to increase reliability, accuracy, and automation across Root’s billing processes.

    • Improved billing run accuracy and monitoring: Updates were made to reduce false flags in the billing run payment review process and improve how payment statuses are monitored, helping surface genuine issues more reliably.
    • Collection module improvements: Updates were made to improve collection module reliability, log watching and policy-based filtering in Workbench now work correctly in watch mode, and collection module cloning is more resilient when internal deployment resources are missing.
    • Continued work on the policy ledger: We're continuing to make improvements to the policy ledger, including more granular transaction types for refund payout requests and fixes to prevent database conflicts under concurrent writes. This work remains in development.
    • Faster bank response file processing: Processing of Vision bank response files was refactored to handle large files in parallel batches, eliminating timeouts on files with thousands of lines. Files that previously took many minutes now complete in seconds.
    • Only Active DebiCheck mandates treated as approved: Updates were made so that only DebiCheck mandates with Active status are treated as approved for collection. Suspended, rejected, cancelled, and other non-active statuses now correctly fall through to the fallback payment path instead of attempting a DebiCheck collection that would fail at the bank.
  • Bug fixes

    We’ve addressed key issues to improve system reliability:

    • Missing type definitions for product module actions: Added missing type definitions for CancelPolicyAction and ArchiveAlterationPackageAction in the product module type declaration files. These actions were already supported at runtime but were missing from the type definitions shipped to product module developers, potentially causing errors in development tools.
    • Cancel reason now persisted from Embed: Resolved an issue in the Embed Management cancellation flow where the cancel reason was not being sent through to the platform.
    • Policy list count now matches filtered list: Resolved an issue on the list policies endpoint where x-total-count did not match the filtered list when a userGroupId was supplied by a caller not in a metadata-restricted user group.
    • Billing bug fixes: Several issues were resolved to improve accuracy across billing and payment processing.
      • Fixed an issue where DebiCheck mandate creation used the policyholder's identification instead of the account holder's, causing mandate rejections when a third-party payer was involved.
      • Resolved a bug where the billing month was not recalculated when a billing day change was applied during payment method setup, which could result in yearly policies billing in the wrong calendar month.
      • Fixed a bug where policies whose billing day matched their start date were being charged twice on day one, once for the pro-rata premium and again by the daily billing job.
      • Resolved an issue where retried payment updates could create duplicate ledger journal entries due to a mismatch in how values were compared in the idempotency check.
      • Fixed a bug where, for yearly policies, the billing month was not recalculated when a billing day change was applied during payment method creation. This could cause billing to run in the wrong calendar month after a billing day change.
      • Resolved an issue that caused the server to overwrite the client-provided failure_action field on payment updates with status failed.
      • Arrears split no longer double-collects on retried failed premiums. Resolved an issue where a second arrears collection could be raised for the same underlying debit when a failed recurring premium had a failed retry. Retry chains are now correctly walked when excluding payments that have already been recovered.

If you have any suggestions or feedback, please share them with your Client Success Manager or submit them via the Root product roadmap to make sure we always know what’s top of mind for you.