Mobile Apps
Use the mobile apps API to upload project binaries for mobile runs and webhook-triggered batches.
Upload a mobile app
POST /projects/{projectId}/mobileSend multipart/form-data with:
| Field | Type | Required | Description |
|---|---|---|---|
file | binary | Yes | .app.zip, .app.tar.gz, .zip, .tgz, or .apk |
removeAfter | integer seconds | No | Auto-delete the upload after this many seconds |
Example
curl -X POST https://tester.army/api/v1/projects/{projectId}/mobile \
-H "Authorization: Bearer <YOUR API KEY>" \
-F "file=@MyApp.app.zip" \
-F "removeAfter=3600"Response
{
"app": {
"id": "<YOUR APP UPLOAD ID>",
"platform": "ios",
"filename": "MyApp",
"bundleId": "com.example.app",
"appVersion": "1.2.3",
"buildVersion": "45",
"fileSize": 123456789,
"source": "api_upload",
"expiresAt": "2026-04-05T12:34:56.000Z",
"removeAfter": 3600,
"createdAt": "2026-04-05T11:34:56.000Z"
}
}If removeAfter is omitted, the upload is permanent.
If the expiration time is reached while queued or running tests are still using the app, cleanup waits until those runs finish.
List mobile apps
GET /projects/{projectId}/mobileExample
curl https://tester.army/api/v1/projects/{projectId}/mobile \
-H "Authorization: Bearer <YOUR API KEY>"Response
{
"apps": [
{
"id": "<YOUR APP UPLOAD ID>",
"platform": "ios",
"filename": "MyApp",
"bundleId": "com.example.app",
"appVersion": "1.2.3",
"buildVersion": "45",
"fileSize": 123456789,
"source": "api_upload",
"expiresAt": null,
"removeAfter": null,
"createdAt": "2026-04-05T11:34:56.000Z"
}
]
}Delete a mobile app
DELETE /projects/{projectId}/mobile/{appId}Example
curl -X DELETE https://tester.army/api/v1/projects/{projectId}/mobile/{appId} \
-H "Authorization: Bearer <YOUR API KEY>"Response
{
"deleted": true
}Use with group webhooks
After uploading, trigger a mobile group webhook with the uploaded app's appId or bundleId.
By app ID (recommended when multiple builds share the same bundle ID):
curl -X POST https://tester.army/api/v1/groups/webhook/{id}/{secret} \
-H "Content-Type: application/json" \
-d '{
"mobile": {
"appId": "<YOUR APP UPLOAD ID>"
}
}'By bundle ID (resolves to the latest upload matching that identifier):
curl -X POST https://tester.army/api/v1/groups/webhook/{id}/{secret} \
-H "Content-Type: application/json" \
-d '{
"mobile": {
"bundleId": "com.example.app"
}
}'Only one of appId, bundleId, or artifactUrl can be provided per request. See Group Webhooks for full details.