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

Public reports and badges

Embed the badge, banner and social images of a published Qualflare report, and read its launches as JSON with no token: every URL, state and cache time.

Last updated

The data and images of a published Qualflare report are served without a token at https://api.qualflare.com/p/<project-identifier>/: a README badge and banner, social images, and read-only JSON for its launches.

Which projectsProjects with Public report on (Publishing a Report). A report is published from an Open Source workspace, and stays public if the workspace later leaves the plan
TokenNone; the URLs are public
Base URLhttps://api.qualflare.com/p/<project-identifier>
Report pagehttps://reports.qualflare.com/p/<project-identifier>/launches
Rate limitRequests per IP address
CTRF exportNot on public URLs: use the Launches API with a token

Public URLs

Each path follows the base URL, and <n> is a launch's number. The last column gives the browser max-age and the edge s-maxage, in seconds.

PathReturnsCached (browser / edge)
/badge.svgThe badge, an SVG60 / 60
/banner.svgThe banner, an SVG60 / 60
/og.pngThe launches page's social image, a PNG300 / 1,800
/launches/<n>/og.pngOne run's social image, a PNG300 / 1,800
/metaThe project and its newest launch30 / 120
/launchesThe project and its launches, newest first30 / 120
/launches/<n>One launch (fields)finished 300 / 3,600; running 10 / 30
/launches/<n>/failuresThe launch's failed testsas /launches/<n>
/launches/<n>/casesEvery test of the launchas /launches/<n>
/launches/<n>/cases/retriedIts retried tests, most retries firstas /launches/<n>
/launches/<n>/cases/slowestIts slowest testsas /launches/<n>
https://api.qualflare.com/p/projectsEvery published project30 / 120

Badge

The badge shows the newest launch of the report, with the label qualflare.

ValueColorWhen
<n> passedgreenThe newest launch finished and nothing failed; <n> is all its tests, skipped ones included
<n> failingredThe newest launch finished with failed, error, timed-out or aborted tests, added up
runninggrayThe newest launch's status is pending: it holds pending tests and nothing failed
no testsgrayIt finished with no tests
no runsgrayThe report has no launch yet, or the project isn't published

The badge always loads: an unknown or private project shows no runs, never a broken image. GitHub shows README images through its own image proxy, which can keep an older badge for a while. To add it to a README, see Embeddable badge.

banner.svg is a 1280 × 232 image with the project name (or the linked owner/repo), pass rate, run count, flaky-case count, last-run time and a grid of recent runs. An unknown or private project gets a plain banner. For the Markdown and the light and dark note, see Embeddable banner.

Social images

Slack, Discord and X show og.png when someone shares the launches page, and launches/<n>/og.png for one run: 1200 × 630 PNG cards. The launches card sums up the 60 newest launches. A missing project or run gets a generic card.

Read launches as JSON

Launches

/launches returns the project (slug, name, description, and githubUrl when a repository is linked) and its launches, newest first. limit takes 1 or more, 25 by default, and counts anything over 100 as 100. offset takes 0 or more.

curl -sS \
  "https://api.qualflare.com/p/<project-identifier>/launches?limit=10"
{
  "project": { "slug": "myapp", "name": "My App", "description": "End-to-end tests", "githubUrl": "https://github.com/my-org/myapp" },
  "launches": [
    {
      "seq": 42, "status": "failed", "framework": "playwright", "platform": "web", "os": "linux",
      "browser": null, "language": "en-US", "branch": "main", "commit": "4f1c2ab",
      "ciProvider": null, "ciBuildNumber": null, "ciPrNumber": null,
      "totalCount": 120, "passedCount": 115, "failedCount": 2, "errorCount": 0, "skippedCount": 3,
      "timeoutCount": 0, "abortedCount": 0, "flakyCount": 1, "retryCount": 4,
      "startedAt": "2026-11-02T09:14:03Z", "endedAt": "2026-11-02T09:18:41Z"
    }
  ]
}

Launch fields

FieldWhat it holds
seqThe launch's number in the project
statusThe launch's status, such as passed, failed or pending
framework, platform, os, browser, languageWhat the upload reported; platform is web, api, android, ios or desktop
branch, commitThe Git branch and commit
ciProvider, ciBuildNumber, ciPrNumberThe CI system, its build number and the pull request number
totalCountAll tests, skipped ones included
passedCount, failedCount, errorCount, skippedCount, timeoutCount, abortedCountTests with each status
flakyCount, retryCountFlaky tests, and retries added up
startedAt, endedAtWhen the first suite started and the last one ended (UTC); without suite times, when the launch was created and last updated

browser, branch, commit and the three CI fields are null when the upload didn't send them. Public answers leave out a launch's properties, metadata, AI summary, environment, milestone, test plan and CI run URL.

Failures and cases

  • /failures returns {"failures": […], "truncated": false}: the failed, error, timed-out and aborted tests, at most 200.
  • /cases returns {"cases": […], "truncated": false}: every test, at most 500, by suite and name.
  • truncated is true when the list was cut.
  • Each test has suite, test, seq (the test case's number), status, durationMs, failure (null unless it failed), flaky, retries, priority and automated. /cases/retried also gives attemptStatuses, each attempt's status in order, when the upload recorded attempts.
  • /cases/retried and /cases/slowest return the same cases list, 6 tests by default. limit takes 1 or more and counts anything over 20 as 20.

Project and latest launch

/meta returns the project's slug, name and description, its githubUrl when a repository is linked, and latest: its newest launch, or null while the report has no launch.

Caching

Qualflare's edge caches these answers. A running launch is cached for 30 seconds, a finished one for up to an hour, the badge and banner for a minute. Cached pages can stay visible for up to about an hour. This applies after you unpublish too: Turning it on. Every other API route sends Cache-Control: no-store.

Errors

StatusCode and messageWhen
400common.invalid_input: invalid limit or invalid offsetlimit or offset isn't a number in range
400common.invalid_input: invalid launch sequence<n> isn't a number of 1 or more
404project.not_found: project not foundThe project doesn't exist or isn't published, or it is suspended
404launch.not_found: launch not foundThe report has no launch with that number
429common.rate_limitedToo many requests from your IP address

The badge, banner and social images answer 200 with a generic image for a missing, private or suspended project, or a bad run number. Every status: Errors and status codes.

Search engines

reports.qualflare.com lists each report's launches page in its sitemap and lets search engines index it; single-run pages are noindex.