Skip to content
The docs are now organized by product area. Old links still work. Report a broken link

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}
ReadsAny token. Token creator: Viewer+ · project (requires the Viewer role or higher in the project)
UploadsTo create a launch, see Upload results with the API
Pages10 launches per page, newest first, as items and paging
LimitsRate limits and request sizes
ErrorsErrors and status codes
CLIqf <identifier> launches list, qf <identifier> launch get <seq> (Launches commands)
MCPlist_launches, get_launch (MCP server reference)

The three endpoints, each with its own section below:

EndpointWhat it does
GET /api/v1/launchesList launches
GET /api/v1/launch/{launchSeq}Get a launch
GET /api/v1/launch/{launchSeq}/ctrfExport 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.

NameTypeDefaultRequiredDescription
pagequery, integer1NoPage number, 1 to 1,000
qquery, stringNoText to look for in branch names, up to 255 characters
milestonequery, integerNoA milestone number
platformsquery, stringNoandroid, ios, desktop, web or api. Repeat it for more, up to 20
automationquery, stringNoautomated or manual. Repeat it for both
environmentsquery, stringNoAn environment identifier. Repeat it for more, up to 50
languagesquery, stringNoA language identifier, such as en. Repeat it for more, up to 50
sortByquery, stringcreatedAtNoseq, branch, platform, os, milestone, environment, language, browser, createdAt or updatedAt
sortDirquery, booleanNotrue 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, environments and languages can repeat; q searches 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.

NameTypeDefaultRequiredDescription
launchSeqpath, integerYesThe 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 404 with launch 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.

NameTypeDefaultRequiredDescription
launchSeqpath, integerYesThe 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, timeout and aborted are written as failed, with the exact status in the result's rawStatus (or in its extra as qualflare.status, when the upload sent its own rawStatus), so uploading the export again to POST /api/v1/collect/ctrf restores them.
  • A launch with 20,000 or more case results (or 200,000 steps, 50,000 retry attempts or 20,000 attachments) answers 400 with launch 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:

FieldTypeNotes
seqintegerThe launch number in the project
frameworkstringThe test framework, such as playwright
platformstringandroid, ios, desktop, web or api
osstringThe operating system
branch, commitstringThe Git branch and commit, or null
statusstringdraft, passed, failed, skipped, error, pending, timeout or aborted (Launch statuses)
automationstringautomated or manual
totalCountintegerThe case results in the launch
passedCount, failedCount, errorCount, skippedCount, timeoutCount, abortedCountintegerThe case results with each status
flakyCountintegerThe case results marked flaky
retryCountintegerThe retries across all case results
propertiesobjectThe key-value properties sent with the upload
environmentId, environmentNameinteger, stringThe launch's environment
languageName, languageUidstringThe launch's language, such as English and en
milestoneSeq, milestoneNameinteger, stringThe launch's milestone, or null
browserstringThe browser, or null
metadataobjectWhat the uploading tool sent about itself, such as its cliName and version
testPlanSeqintegerThe test plan the launch ran; left out when the launch has no test plan
aiSummarystringThe AI summary of the launch, or null
aiSummaryStatusstringpending, completed, failed, skipped, unavailable or disabled
aiAnalysisContextobjectOn 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, updatedAtstringRFC 3339 timestamps

CLI and MCP equivalents

The qf CLI and the MCP server run the same reads, so they return the same JSON:

RESTqf command and MCP tool
GET /api/v1/launchesqf <identifier> launches list; list_launches
GET /api/v1/launch/{launchSeq}qf <identifier> launch get <seq>; get_launch
GET /api/v1/launch/{launchSeq}/ctrfNo qf command or MCP tool