---
title: "Request a file upload URL"
method: POST
path: "/api/v1/files/upload"
tags: ["Files"]
---

# Request a file upload URL

`POST /api/v1/files/upload`

Returns a pre-signed URL. PUT your file bytes to that URL, then call `POST /api/v1/files/{fileId}/confirm`.

## Request body

- UploadRequest
  - `filename` string, required
  - `contentType` string, required
  - `bytes` integer, required
  - `sha256` string — Optional hash for deduplication

## Response `201`

Upload URL created

- SuccessResponseUploadResult
  - `ok` true
  - `data` UploadResult
    - `fileId` string, uuid
    - `uploadUrl` string, uri — PUT file bytes here
    - `expiresIn` integer
    - `maxBytes` integer
    - `status` 'pending'

## Changes

- **2026-04-17** `5eb4ed0f33c7` — 9 breaking, 3 warning, 6 info
  - the response property `data` became optional for the status `201`
  - the response property `data/expiresIn` became optional for the status `201`
  - the response property `data/fileId` became optional for the status `201`
  - the response property `data/maxBytes` became optional for the status `201`
  - …14 more

[Change history](https://skmtc.dev/bitbybit-dev/apis/bitbybit-cad-cloud-api/changes/api/v1/files/upload/post.md)

---

[API](https://skmtc.dev/bitbybit-dev/apis/bitbybit-cad-cloud-api.md) · [All operations](https://skmtc.dev/bitbybit-dev/apis/bitbybit-cad-cloud-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/bitbybit-dev/bitbybit-cad-cloud-api/revisions/5eb4ed0f33c7/schema)
