Skip to main content
Start from a test plan. Use the API when you do not run GitHub Actions, GitLab CI, Bitrise, or Envoyer. Bitbucket, Azure DevOps, CircleCI, Jenkins, and a script on a server all work.

Set it up

Start Run API

POST /v1/run with testPlanShortId, plus URL or device overrides.

Wait for the result

Poll the run and fail the job when the result is not passed.

CLI

qatech run calls the same API. qatech status waits for the result.
1

Create an API key

Go to Organization Settings → API Keys. Create a key and copy it when it is shown. It is not displayed again. Store it as a masked secret in your CI, for example QATECH_API_TOKEN.A project-scoped key is bound to one project, so requests can omit projectShortId. An organization-scoped key needs projectShortId on project-scoped endpoints. See Authentication.
2

Send an authenticated request

Every request goes to https://api.qa.tech/v1 with the key as a Bearer token:
A list of your applications means the key works. A 401 means the key is missing, mistyped, or revoked.
3

Get the project short ID

Copy proj_… from the project URL or Settings (for example proj_abc123). Org-scoped keys need this on POST /v1/run. See Understanding Different IDs.
4

Get the test plan short ID

Open the plan under Test Plans and copy pln_… from the URL (for example pln_abc123). See Find the test plan short ID.

Find the IDs you need

The full list of ID types is in Understanding Different IDs.

What works over the API

Patterns

Start a test plan

Mobile build

Upload the APK or simulator .app, then pass applicationBuildShortId instead of a URL. How application builds work is on Mobile regression testing. The shared upload script is on API pull request testing.

Blocking

Poll the run and fail the job when the result is not passed:
See Get run for polling details.

What you can override on a run

  • Preview or staging URL: set applications[].environment.url. See Preview Environments.
  • Environment custom headers: attach auth or protection-bypass headers with customHeaders. See Environment custom headers.
  • Device preset: pass devicePresetShortId to test mobile, tablet, or desktop without another test plan. See Start Run API.
  • Slack channel: send results for one run to a different channel. See Per-run overrides.
  • Post-run automation: poll Get run to update a status page, call a webhook, or send an alert when the run finishes.

What this does not do

  • It does not post a pull request review. Use API pull request testing for that.
  • It does not require GitHub, GitLab, Bitrise, or Envoyer. Those guides are convenience wrappers around this call.
  • It does not schedule itself. Manage Schedules on the test plan runs it with no CI at all. See Manual and scheduled runs.