---
title: "Start a file upload"
method: POST
path: "/api/v2/vendor/uploads"
tags: ["Uploads"]
---

# Start a file upload

`POST /api/v2/vendor/uploads`

## Request

- Base URL: `https://craftwork.design`
- URL: `https://craftwork.design/api/v2/vendor/uploads`
- Auth: HTTP bearer

Returns presigned URLs for every part. PUT bytes `[(n-1)*partSize, n*partSize)` of the file to `parts[n-1].url` (no auth header), then call `completePath`. Up to 100 files a day; packs up to 10 GB, previews up to 50 MB.

## Request body

- UploadStart
  - `fileName` string, required
  - `size` integer, required: Exact size in bytes
  - `contentType` string
  - `kind` 'pack' | 'preview'

## Response `201`

Upload started.

- object
  - `data` Upload, required
    - `id` string
    - `fileName` string
    - `size` integer
    - `partSize` integer
    - `partCount` integer
    - `parts` object[]
      - `partNumber` integer
      - `url` string
    - `expiresAt` string, date-time
    - `completePath` string

## Other responses

- `401`: Missing, invalid or revoked API key.
- `403`: The key lacks the scope this endpoint needs (INSUFFICIENT_SCOPE).
- `413`: File too large.
- `415`: Send the body as application/json.
- `422`: The body failed validation; details lists each problem.
- `429`: 120 requests a minute per key, or the daily upload limit (DAILY_UPLOAD_LIMIT). See Retry-After.

---

[API](https://skmtc.dev/craftwork/apis/craftwork-author-api.md) - [All operations](https://skmtc.dev/craftwork/apis/craftwork-author-api/llms.txt) - [OpenAPI document](https://skmtc.dev/craftwork/apis/craftwork-author-api/revisions/eb2a8340d0e9?raw)
