API: App builds
App builds: List builds, Get a build, Start a build upload, Upload a build part, Complete a build upload, Delete a build.
List builds
The app builds uploaded to a project (Android .apk, iOS Simulator .app zipped), newest first, with the largest size and part size for uploads.
| Path |
|---|
projectIdstringrequired |
Returns { builds: [{ id, status, fileName, size, platform, appId, appName, version, versionCode, minOs, abis, warnings, label, createdAt, readyAt }], maxBytes, partBytes }
curl https://app.testsy.dev/api/v1/projects/p_8f2k/builds \
-H "Authorization: Bearer $QA_AI_API_KEY"Get a build
One build: its app id, version, status and any warnings.
| Path |
|---|
buildIdstringrequired |
Returns { build: { id, projectId, status, fileName, size, platform, appId, appName, version, versionCode, minOs, abis, warnings, sha256, label, createdAt, readyAt } }
curl https://app.testsy.dev/api/v1/builds/ab_q3 \
-H "Authorization: Bearer $QA_AI_API_KEY"Start a build upload
Start uploading a build: returns its id, the part size and the number of parts. The command-line tool does all three steps: qa-ai build upload.
| Path |
|---|
projectIdstringrequired |
| Body (JSON) |
|---|
fileNamestringrequired |
sizenumberrequired |
labelstring |
Returns 201 { id, partBytes, parts }
curl -X POST https://app.testsy.dev/api/v1/projects/p_8f2k/builds \
-H "Authorization: Bearer $QA_AI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"fileName":"app-debug.apk","size":41943040}'Upload a build part
Upload one part: the raw bytes as the body (partBytes each, the last one shorter). Returns its etag.
| Path |
|---|
buildIdstringrequired |
partNumberstringrequired |
Returns { partNumber, etag }
curl -X PUT https://app.testsy.dev/api/v1/builds/ab_q3/parts/1 \
-H "Authorization: Bearer $QA_AI_API_KEY" \
--data-binary @part-1.binComplete a build upload
Finish the upload with every part's etag. The build is checked (app id, version, whether our devices can run it) and returned.
| Path |
|---|
buildIdstringrequired |
| Body (JSON) |
|---|
partsobject[]required |
Returns { build }: the checked build, or 422 build_rejected with what our devices cannot run
curl -X POST https://app.testsy.dev/api/v1/builds/ab_q3/complete \
-H "Authorization: Bearer $QA_AI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"parts":[{"partNumber":1,"etag":"…"}]}'Delete a build
Delete a build. Runs that used it keep their results; a build a test pins cannot be deleted.
| Path |
|---|
buildIdstringrequired |
Returns { ok: true }
curl -X DELETE https://app.testsy.dev/api/v1/builds/ab_q3 \
-H "Authorization: Bearer $QA_AI_API_KEY"