These endpoints upload, list, and delete the iOS and Android app builds you run on a device. Authentication, error shapes and rate limits are covered in the REST API overview.
Upload App
Upload a new application binary. Supported formats: a compressed .app simulator bundle (.zip/.tar.gz/.tgz archive) for iOS, and .apk for Android. Maximum file size: 500 MB. The file content is validated against expected magic bytes.
POST /api/v1/apps/upload
Auth: Bearer token required. Developer role or above.
Request: multipart/form-data
| Field | Type | Required | Description |
|---|---|---|---|
file | file | Yes | App binary (.zip/.tar.gz/.tgz iOS simulator bundle, .apk for Android) |
name | string | No | App display name (auto-detected) |
package_name | string | No | Package identifier (auto-detected) |
platform | string | No | ios or android (auto-detected from extension) |
note | string | No | Optional note stored on the new build (hard cap 500 chars; 200 recommended) |
Response:
{
"id": 1,
"name": "My App",
"package_name": "com.example.myapp",
"platform": "android",
"icon_url": "/uploads/apps/icon.png",
"created_at": "2025-01-15T10:30:00"
}
List Apps
GET /api/v1/apps/
Auth: Bearer token required. Viewer role or above.
Query parameters:
| Parameter | Type | Description |
|---|---|---|
platform | string | Filter by ios or android |
Response:
[
{
"id": 1,
"name": "My App",
"package_name": "com.example.myapp",
"platform": "android",
"icon_url": "/uploads/apps/icon.png",
"last_started_at": "2025-01-20T14:00:00",
"updated_at": "2025-01-20T14:00:00",
"created_at": "2025-01-15T10:30:00"
}
]
Get App
Returns app details including all builds.
GET /api/v1/apps/{app_id}
Auth: Bearer token required. Viewer role or above.
Response:
{
"id": 1,
"name": "My App",
"package_name": "com.example.myapp",
"platform": "android",
"icon_url": "/uploads/apps/icon.png",
"last_started_at": null,
"latest_version": "1.2.0",
"latest_build_number": "42",
"latest_uploaded_at": "2025-01-20T14:00:00",
"builds": [
{
"id": 1,
"version": "1.2.0",
"build_number": "42",
"file_size": 15728640,
"uploaded_by": "dev@example.com",
"uploaded_at": "2025-01-20T14:00:00",
"tags": [],
"min_sdk_version": "21",
"target_sdk_version": "34",
"permissions": ["android.permission.INTERNET"],
"metadata": {}
}
]
}
Delete App
DELETE /api/v1/apps/{app_id}
Auth: Bearer token required. Developer role or above.
Response:
{
"status": "deleted"
}
Upload Build
Upload a new build for an existing app.
POST /api/v1/apps/{app_id}/builds
Auth: Bearer token required. Developer role or above.
Request: multipart/form-data
| Field | Type | Required | Description |
|---|---|---|---|
file | file | Yes | App binary |
version | string | No | Version string (auto-detected) |
note | string | No | Optional note stored on the new build (hard cap 500 chars; 200 recommended) |
Response:
{
"id": 2,
"version": "1.3.0",
"build_number": "43",
"file_size": 16000000,
"uploaded_at": "2025-01-21T09:00:00",
"note": "Fix login crash — hotfix for ticket #1234"
}