---
title: "Upload an app to storage"
method: POST
path: "/v1/storage"
tags: ["Storage"]
---

# Upload an app to storage

`POST /v1/storage`

Uploads an APK or IPA to TestingBot storage. Either send the binary as multipart `file` or pass a public `url` that TestingBot will fetch. The returned `app_url` (`tb://<appkey>`) can be set as the `app` capability on subsequent mobile sessions. Metadata (version, min_device_version, thumb) is extracted asynchronously: poll GET /storage/<appkey> until its `state` is `DONE` before reading those fields.

## Request body

- PostV1Storage — Upload an app to storage
  - `file` unknown
  - `url` string — Public HTTPS URL TestingBot will download the binary from.

## Response `201`

Upload an app to storage

- TestingbotEntitiesStorageUpload — Testingbot_Entities_StorageUpload model
  - `app_url` string, required — TestingBot storage URL (`tb://<appkey>`). Pass as a capability to reference this app in mobile tests.

## Other responses

- `400` — Missing file or url
- `401` — Authentication required
- `403` — Account is read-only

---

[API](https://skmtc.net/testingbot/apis/testingbot-rest-api.md) · [All operations](https://skmtc.net/testingbot/apis/testingbot-rest-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/testingbot/testingbot-rest-api/versions/eff607a49246/schema)
