# Create upload

`POST /uploads`

Base URL: `https://api.viewcy.com/2025_06`

## Request Body

Content-Type: `application/json`

- `filename` (string)
- `byteSize` (integer)
- `checksum` (string)
- `contentType` (string)

## Responses

### 201 — Creates a direct-upload session and returns a presigned URL

- `object` (string)
- `id` (string)
- `uploadUrl` (string)
- `uploadHeaders` (object)
  - `Content-Type` (string)
- `maxBytes` (integer)
- `expiresAt` (string)
- `meta` (object)
  - `requestId` (string)

### 400 — Returns 400 when required metadata is missing

- `object` (string)
- `status` (integer)
- `message` (string)
- `errors` (array)
  Items:
    - `field` (string)
    - `message` (string)
- `meta` (object)
  - `requestId` (string)

### 401 — Returns 401

- `object` (string)
- `status` (integer)
- `message` (string)
- `meta` (object)
  - `requestId` (string)

### 403 — Creates a direct-upload session and returns a presigned URL

- `object` (string)
- `status` (integer)
- `message` (string)
- `meta` (object)
  - `requestId` (string)

### 413 — Returns 413 when bytesize exceeds the maximum

- `object` (string)
- `status` (integer)
- `message` (string)
- `errors` (array)
  Items:
    - `field` (string)
    - `message` (string)
- `meta` (object)
  - `requestId` (string)

### 415 — Returns 415 for a non-image content type

- `object` (string)
- `status` (integer)
- `message` (string)
- `errors` (array)
  Items:
    - `field` (string)
    - `message` (string)
- `meta` (object)
  - `requestId` (string)

---
Full OpenAPI spec: https://developer.viewcy.com/openapi/2025_06_viewcy_api.yaml

Interactive docs: https://developer.viewcy.com/api/create-upload
