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 A list of your applications means the key works. A
https://api.qa.tech/v1 with the key as a Bearer token: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: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
devicePresetShortIdto 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.