Early Access release track date: 6-Oct-2026
Default release track date: 14-Oct-2026
TestRail 10.9 expands API capabilities for automation and integration workflows while delivering performance, stability, and data-integrity improvements across TestRail. The release introduces new APIs for rerunning tests, updating runs, retrieving current test states, and synchronizing data more efficiently, alongside automatic user deactivation and 40+ fixes.
🔌 API & Integration Improvements
New APIs for automation workflows
Rerun plans and runs
POST /rerun_plan/{plan_id} · POST /rerun_run/{run_id}
Rerun an existing plan or run with a single API request, with optional support for copying assignees. This removes the need to reconstruct plans and runs through multiple API calls. Learn more: Plans and Runs.
Add cases to an existing run
POST /add_cases_to_run/{run_id}
- Append cases directly to an existing run without retrieving and resubmitting the full case list. Updates are handled atomically, reducing the risk of conflicting changes in multi-user workflows. Duplicate IDs are ignored, and the updated run object is returned. Learn more: Runs
Get current test states for a run
GET /get_test_states_for_run/{run_id}
- Retrieve the latest result for each test in a run without fetching its complete result history. This supports dashboards, milestone summaries, CI reporting, and other workflows that only need the current state of each test. Learn more: Results.
Count cases before retrieving them
GET /get_cases_count/{project_id} · GET /get_bdds_count/{project_id}
- Retrieve the number of cases matching the same filters supported by
get_casesandget_bddswithout fetching the full dataset. This can be used to plan pagination or display accurate counts before loading results. Learn more: Cases and BDDs.
Incremental sync for runs, plans, and milestones
- The updated_after filter, introduced for test cases in TestRail 10.8, is now supported by get_runs, get_plans, and get_milestones. Integrations can retrieve only records changed since their previous synchronization instead of repeatedly fetching complete datasets.
- Adding a new test result also updates the associated run's updated_on timestamp, ensuring result-driven changes are included in incremental synchronization.
Test case version and AI metadata
Test case version information
- Test case version information is now available through get_case, add_case, get_run, and add_run, giving integrations programmatic access to version information previously available only through the TestRail UI.
AI-generated and AI-automated test cases
- Test cases generated or automated using AI now include is_ai_generated and is_ai_automated flags in API responses. Integrations can use these fields to identify and filter AI-generated or AI-automated test cases.
Delete attachments from closed and archived runs
- Admin users can now delete attachments associated with closed and archived runs and plans through the API. Previously, attachment deletion was blocked for these entries regardless of the user's permissions. Learn more: Attachments.
👥 Automatic User Deactivation
Admins can now automatically deactivate users after a configurable period of inactivity. Administrators can enable or disable automatic deactivation, define the inactivity threshold, and configure how frequently the process runs.
This helps organizations keep user access current and reduces the administrative effort required to identify and deactivate inactive accounts.
Admins can check the new settings at Admin > Site Settings > Application.
⚡ Performance Improvements
Database query optimizations improve performance and reduce database load for large TestRail instances, particularly when working with test runs, archived case labels, and attachments.
🐞 Fixes and Improvements (44)
- TR-10160: Fixed incorrect styling for embedded tables within shared test steps
- TR-12020: Fixed test cases not appearing in a run when the configuration they belonged to had not been active in a previous run for the same project
- TR-12219: Fixed dashboard charts not respecting the user's locale date format setting
- TR-12904: Fixed a 500 error when exporting test cases in certain projects
- TR-13733: Fixed an error when embedding a TestRail Dashboard widget in Confluence
- TR-14994: Fixed the dashboard activity feed showing an excessive number of entries and loading blank pages
- TR-16108: Fixed the "Assigned To" filter not sorting correctly
- TR-16603: Fixed user suggestions when assigning a test run not being scoped to project members
- TR-16929: Fixed an API error when retrieving plan details for entries that had no description
- TR-18502: Fixed the custom date range picker on Windows selecting a narrower range than chosen
- TR-19142: Fixed a 400 error returned by the global search function
- TR-19144: Fixed Jira defect ID autocomplete suggestions not appearing when logging a reference
- TR-19201: Fixed reports failing to generate due to an internal function error
- TR-19285: Fixed search failing for terms containing Unicode or special characters when loading more results
- TR-19301: Fixed an error when copying sections between suites caused by a duplicate label ID
- TR-19336 : Fixed garbled encoding in "Assign To" email notifications for French, German, and Spanish locales
- TR-19746: Fixed an irrelevant message appearing on the dashboard in TestRail Cloud
- TR-19970: Fixed shared Property Distribution and Automation reports returning an error
- TR-20158: Fixed an incorrect test case count displayed for baseline projects
- TR-20186: Fixed admin users being unable to delete certain attachments in TestRail Cloud
- TR-20196: Fixed an access error when printing a test plan that contained no assigned tests
- TR-20345: Fixed a crash when clicking the View Case button on certain test cases
- TR-20367: Fixed the session timeout timer not resetting when a user was actively editing a test case
- TR-20454: Fixed several data inconsistencies in Cross-Project Report generation
- TR-20515: Fixed the AI test case generation button appearing disabled for users who had the required permissions assigned through a group
- TR-20560: Fixed an error when viewing shared test steps
- TR-20871: Fixed a 500 error when opening certain test runs
-
TR-20913: Fixed the
get_projectsAPI returning a count and page size of 0 despite active projects existing - TR-20950: Fixed test case exports generating files with missing content
- TR-21005: Fixed the Status and "Assigned To" columns not populating in the print view of a test suite
- TR-21374: Fixed an issue where custom labels were unexpectedly removed across all projects
- TR-21385: Fixed automated and scheduled run closures showing an incorrect "Closed By" value
- TR-21393: Fixed an unexpected error when adding a comment or attachment to a test
- TR-21396: Fixed an error when clicking the Copy icon on a report
- TR-21732: Fixed an issue where updating a test case via the API did not correctly convert Markdown content to the rich-text format displayed in the UI
- TR-21738: Fixed pushing a defect to an integrated tracker failing with an HTTP 302 redirect error
- TR-21748: Fixed "Select All" when adding a test result applying to all tests in the run instead of only the currently filtered subset
- TR-21761: Fixed the Save button on custom field configuration pages not redirecting correctly after saving
- TR-21771: Fixed test case steps not saving due to a SQL parsing error
- TR-21790: Fixed Preconditions content sometimes not being retained when a test case was updated
- TR-21805: Fixed an error when editing a custom field configuration
- TR-21825: Fixed property distribution and automation reports failing to generate
-
TR-21850: Fixed a 500 error returned by the
add_caseAPI endpoint - TR-21866: Fixed a database inconsistency that could occur after certain upgrades, causing a background cleanup job to loop and test case pages to time out