---
title: "Get presigned upload URL"
method: POST
path: "/v1/apps/{app_id}/deploy/upload-url"
tags: ["Apps"]
---

# Get presigned upload URL

`POST /v1/apps/{app_id}/deploy/upload-url`

Generate a presigned S3 PUT URL so the CLI can upload a bundle zip directly.
Pass the returned `bundle_s3_key` to the deploy endpoint.

## Path parameters

- `app_id` string, required

## Request body

- UploadUrlRequest
  - `filename` string, required — Zip filename (e.g. 'my-app-v2.zip')
  - `content_type` string

## Response `200`

Successful Response

- UploadUrlResponse
  - `upload_url` string, required — Presigned S3 PUT URL
  - `bundle_s3_key` string, required — S3 key to pass back in DeployRequest
  - `expires_in` integer — URL expiry in seconds

## Other responses

- `400` — Bad Request
- `401` — Unauthorized
- `403` — Forbidden
- `404` — Not Found
- `422` — Validation Error
- `500` — Internal Server Error

## Changes

- **2026-08-09** `5d4c905106b4` — 1 info
  - the endpoint scheme security `BearerAuth` was added to the API

[Change history](https://skmtc.dev/mixpeek/apis/mixpeek-api/changes/v1/apps/:app_id/deploy/upload-url/post.md)

---

[API](https://skmtc.dev/mixpeek/apis/mixpeek-api.md) · [All operations](https://skmtc.dev/mixpeek/apis/mixpeek-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/mixpeek/mixpeek-api/revisions/0c7a1c6ab9c0/schema)
