---
title: "Create a presigned upload"
method: POST
path: "/v1/workspaces/{workspace}/files/sign"
---

# Create a presigned upload

`POST /v1/workspaces/{workspace}/files/sign`

## Request

- Base URL: `https://api.uploads.sh`
- URL: `https://api.uploads.sh/v1/workspaces/{workspace}/files/sign`
- Auth: HTTP bearer

## Request body

- SignRequest
  - `key` string, required
  - `contentType` string, required
  - `maxSize` integer
  - `expiresIn` integer: Seconds until the signed URL expires. Capped at 900 for SVG and XML content types (issue #929).
  - `replace` boolean

## Response `200`

Presigned upload details.

## Other responses

- `400`: Invalid request.
- `401`: Missing or invalid credential.
- `403`: The credential lacks the required scope or role.
- `409`: The request conflicts with current resource state.
- `429`: The workspace rate limit or upload budget was exceeded.

---

[API](https://skmtc.dev/uploads/apis/uploads-sh-api.md) · [All operations](https://skmtc.dev/uploads/apis/uploads-sh-api/llms.txt) · [OpenAPI document](https://skmtc.dev/uploads/apis/uploads-sh-api/revisions/6df242babacd?raw)
