---
title: "Create a signed upload target"
method: POST
path: "/v1/uploads"
---

# Create a signed upload target

`POST /v1/uploads`

## Request

- Base URL: `https://api.uploadcheck.app`
- URL: `https://api.uploadcheck.app/v1/uploads`
- Auth: HTTP bearer

Creates a signed upload reservation. Stored workspace API keys force server-side workspace, owner, and key metadata onto the upload, ignoring client-supplied workspace fields.

## Request body

- object
  - `filename` string, required
  - `content_type` string, required
  - `size_bytes` integer, required

## Response `201`

Signed upload target

- Upload
  - `uploadId` string
  - `filename` string
  - `contentType` string
  - `sizeBytes` integer
  - `workspaceId` string, nullable: Workspace that owns this upload reservation. Stored workspace API keys are pinned to this value.
  - `ownerEmail` string, nullable
  - `apiKeyId` string, nullable
  - `status` 'created' | 'uploaded'
  - `signedPutUrl` string
  - `expiresAt` string, date-time
  - `storageMode` 'render_temp_storage' | 'durable_filesystem' | 'object_storage'
  - `objectKey` string, nullable
  - `objectUrl` string, nullable

## Other responses

- `413`: Upload reservation exceeds configured maximum size

---

[API](https://skmtc.dev/uploadcheck/apis/uploadcheck-app-api.md) · [All operations](https://skmtc.dev/uploadcheck/apis/uploadcheck-app-api/llms.txt) · [OpenAPI document](https://skmtc.dev/uploadcheck/apis/uploadcheck-app-api/revisions/d7c8a14caa30?raw)
