---
title: "Generate Upload Presign"
method: POST
path: "/api/v1/quick-spaces/uploads/presign"
tags: ["quickSpaces", "quickSpaces"]
---

# Generate Upload Presign

`POST /api/v1/quick-spaces/uploads/presign`

Sign a direct browser->bucket PUT URL (QuickAds aRole-style). Client PUTs the bytes to the
returned `url`, then calls /uploads/register (or /uploads/register-to-space).

## Request body

- UploadPresignRequestDTO — Ask the backend to sign a direct browser->bucket PUT URL for an upload (mirrors the QuickAds aRole/generate-presigned-url flow). The bytes never stream through the backend.
  - `filename` string, required
  - `content_type` string, required

## Response `200`

Successful Response

- UploadPresignResponseDTO — Signed direct-upload envelope (same shape as the QuickAds aRole presign response).
  - `asset_id` string, required
  - `file_key` string, required
  - `public_url` string, required
  - `url` string, required

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.dev/brandbooster/apis/fastapi.md) · [All operations](https://skmtc.dev/brandbooster/apis/fastapi/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/brandbooster/fastapi/revisions/624917d53409/schema)
