API reference
Everything the app does with tests and runs, over HTTPS. Each endpoint is also an MCP tool with the same name and parameters.
Base address and keys#
curl https://app.testsy.dev/api/v1/me -H "Authorization: Bearer $QA_AI_API_KEY"- Base address:
https://app.testsy.dev/api/v1. - Send your key as
Authorization: Bearer qa_…(orX-API-Key: qa_…). Create keys in Settings → API keys; see API keys. A key acts for its workspace. - Send JSON bodies with
Content-Type: application/json. File uploads send the raw bytes. - Any origin may call the API from a browser (CORS), with the key in the header.
What a key may do#
| Key | May |
|---|---|
| Run tests and read results | Read everything below, start and stop runs, create and turn off share links, upload app builds. |
| Also create and edit tests | All of that, and create, change and archive projects and tests, draft plans, add test files, sign-in accounts, endpoints and schedules, delete builds and set the browsing country. |
Each endpoint below says which key it needs. A key that may not gets 403 scope.
Errors#
Errors answer with a status and a JSON body: { "error": "What went wrong, in words", "code": "plan_limit" }. The common codes are in Errors and limits.
Retrying safely#
Starting runs (POST /tests/{testId}/run, POST /projects/{projectId}/run) accepts an Idempotency-Key header: 8 to 200 characters of letters, digits and _ . : -. A retry with the same key within 24 hours gets the first answer again, with Idempotent-Replayed: true, and starts nothing new. Only successful answers are kept, so a failed attempt can be retried.
Rate limit#
300 requests a minute per key. Above that: 429 rate_limited; wait and retry.
Ids#
| Prefix | |
|---|---|
p_ | Project |
t_ | Test |
j_ | Run |
ab_ | App build |
s_ | Schedule |
sh_ | Share link |
cr_ | Sign-in account |
ep_ | Endpoint |