Launches API
List and read the launches of a Qualflare project over the REST API and export a launch as a CTRF report, with filters, sorting and every launch field.
Last updated
The Launches API lets you list and read launches, and export one as a CTRF report, in a Qualflare project over REST at https://api.qualflare.com/api/v1/launches, authenticated with a project access token.
| Base path | /api/v1/launches and /api/v1/launch/{launchSeq} |
| Reads | Any token. Token creator: Viewer+ · project (requires the Viewer role or higher in the project) |
| Uploads | To create a launch, see Upload results with the API |
| Pages | 10 launches per page, newest first, as items and paging |
| Limits | Rate limits and request sizes |
| Errors | Errors and status codes |
| CLI | qf <identifier> launches list, qf <identifier> launch get <seq> (Launches commands) |
| MCP | list_launches, get_launch (MCP server reference) |
The three endpoints, each with its own section below:
| Endpoint | What it does |
|---|---|
GET /api/v1/launches | List launches |
GET /api/v1/launch/{launchSeq} | Get a launch |
GET /api/v1/launch/{launchSeq}/ctrf | Export a launch as CTRF |
List launches
List launches returns one page of the project's launches, newest first unless you sort them.
GET /api/v1/launches
Needs a project access token whose creator has the Viewer role or higher in the project.
| Name | Type | Default | Required | Description |
|---|---|---|---|---|
page | query, integer | 1 | No | Page number, 1 to 1,000 |
q | query, string | No | Text to look for in branch names, up to 255 characters | |
milestone | query, integer | No | A milestone number | |
platforms | query, string | No | android, ios, desktop, web or api. Repeat it for more, up to 20 | |
automation | query, string | No | automated or manual. Repeat it for both | |
environments | query, string | No | An environment identifier. Repeat it for more, up to 50 | |
languages | query, string | No | A language identifier, such as en. Repeat it for more, up to 50 | |
sortBy | query, string | createdAt | No | seq, branch, platform, os, milestone, environment, language, browser, createdAt or updatedAt |
sortDir | query, boolean | No | true sorts in descending order, false in ascending order. Left out, the list comes newest first without sortBy, and in ascending order with it |
curl -sS "https://api.qualflare.com/api/v1/launches?environments=staging" \
-H "Authorization: Bearer $QF_TOKEN"Returns 200: A page of launches: items and paging, 10 launches per page.
- Filters combine:
platforms,automation,environmentsandlanguagescan repeat;qsearches the branch.
Get a launch
Get a launch returns one launch by its number, with its result counts.
GET /api/v1/launch/{launchSeq}
Needs a project access token whose creator has the Viewer role or higher in the project.
| Name | Type | Default | Required | Description |
|---|---|---|---|---|
launchSeq | path, integer | Yes | The launch number |
curl -sS "https://api.qualflare.com/api/v1/launch/88" \
-H "Authorization: Bearer $QF_TOKEN"Returns 200: The launch.
{
"seq": 88,
"framework": "playwright",
"platform": "web",
"os": "linux",
"branch": "main",
"commit": "4f2c9a1e7b3d",
"status": "failed",
"automation": "automated",
"totalCount": 120,
"passedCount": 112,
"failedCount": 5,
"errorCount": 0,
"skippedCount": 3,
"timeoutCount": 0,
"abortedCount": 0,
"flakyCount": 2,
"retryCount": 4,
"properties": {
"build": "1432"
},
"environmentId": 3,
"environmentName": "Staging",
"languageName": "English",
"languageUid": "en",
"milestoneSeq": 3,
"milestoneName": "v2.4 release",
"browser": "chromium",
"metadata": {
"version": "0.4.0",
"timestamp": "2026-10-28T09:12:31Z",
"cliName": "qf"
},
"aiSummary": "Five checkout tests failed on the coupon step; the rest passed.",
"aiSummaryStatus": "completed",
"createdAt": "2026-10-28T09:12:33Z",
"updatedAt": "2026-10-28T09:14:02Z"
}- A number that isn't a launch of the project answers
404withlaunch not found.
Export a launch as CTRF
Export a launch as CTRF returns one launch as a CTRF JSON report, with the same token access as reading the launch.
GET /api/v1/launch/{launchSeq}/ctrf
Needs a project access token whose creator has the Viewer role or higher in the project.
| Name | Type | Default | Required | Description |
|---|---|---|---|---|
launchSeq | path, integer | Yes | The launch number |
curl -sS "https://api.qualflare.com/api/v1/launch/88/ctrf" \
-H "Authorization: Bearer $QF_TOKEN"Returns 200: The launch as a CTRF JSON document.
error,timeoutandabortedare written asfailed, with the exact status in the result'srawStatus(or in itsextraasqualflare.status, when the upload sent its ownrawStatus), so uploading the export again toPOST /api/v1/collect/ctrfrestores them.- A launch with 20,000 or more case results (or 200,000 steps, 50,000 retry attempts or 20,000 attachments) answers
400withlaunch is too large to export as a single CTRF document. - Public report URLs don't offer the export.
See Send CTRF reports.
Launch fields
Every launch the Launches API returns has these fields:
| Field | Type | Notes |
|---|---|---|
seq | integer | The launch number in the project |
framework | string | The test framework, such as playwright |
platform | string | android, ios, desktop, web or api |
os | string | The operating system |
branch, commit | string | The Git branch and commit, or null |
status | string | draft, passed, failed, skipped, error, pending, timeout or aborted (Launch statuses) |
automation | string | automated or manual |
totalCount | integer | The case results in the launch |
passedCount, failedCount, errorCount, skippedCount, timeoutCount, abortedCount | integer | The case results with each status |
flakyCount | integer | The case results marked flaky |
retryCount | integer | The retries across all case results |
properties | object | The key-value properties sent with the upload |
environmentId, environmentName | integer, string | The launch's environment |
languageName, languageUid | string | The launch's language, such as English and en |
milestoneSeq, milestoneName | integer, string | The launch's milestone, or null |
browser | string | The browser, or null |
metadata | object | What the uploading tool sent about itself, such as its cliName and version |
testPlanSeq | integer | The test plan the launch ran; left out when the launch has no test plan |
aiSummary | string | The AI summary of the launch, or null |
aiSummaryStatus | string | pending, completed, failed, skipped, unavailable or disabled |
aiAnalysisContext | object | On Get a launch only, when aiSummaryStatus isn't completed: a message that says why, and upgradeRequired when the subscription is the reason. Left out otherwise |
createdAt, updatedAt | string | RFC 3339 timestamps |
CLI and MCP equivalents
The qf CLI and the MCP server run the same reads, so they return the same JSON:
| REST | qf command and MCP tool |
|---|---|
GET /api/v1/launches | qf <identifier> launches list; list_launches |
GET /api/v1/launch/{launchSeq} | qf <identifier> launch get <seq>; get_launch |
GET /api/v1/launch/{launchSeq}/ctrf | No qf command or MCP tool |
Related
- Guides: Launches · Share and export results
- Reference: Upload results with the API · Errors and status codes
- CLI/API: Qualflare API
Cases and steps API
Read, create and update test cases and their steps over the Qualflare REST API, including a bulk create of up to 20 cases, with every parameter and field.
Test plans API
List and read the test plans of a Qualflare project and the test cases each one selects over the REST API, with paging, sorting and every field.