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

# Generate Upload Presign

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

## Request

- Base URL: `https://api.brandbooster.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.brandbooster.ai/api/v1/quick-spaces/uploads/presign`
- Auth: HTTP bearer

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/brandbooster-api.md) - [All operations](https://skmtc.dev/brandbooster/apis/brandbooster-api/llms.txt) - [OpenAPI document](https://skmtc.dev/brandbooster/apis/brandbooster-api/revisions/02d28bde684c?raw)
