---
title: "Upload proxy (local/proxy storage only)"
method: PUT
path: "/documents/uploads/blob"
tags: ["Documents"]
---

# Upload proxy (local/proxy storage only)

`PUT /documents/uploads/blob`

## Request

- Base URL: `https://dataroom.corgi.com/api/v1`
- URL: `https://dataroom.corgi.com/api/v1/documents/uploads/blob`
- Auth: HTTP bearer

The PUT target that POST /documents/uploads returns as `uploadUrl` **only on the local/proxy storage backend** (local dev / in-cluster MinIO). On real S3/R2 the `uploadUrl` is an absolute presigned URL and this route is never touched. Authorized by the upload binding `token` (sent as `x-upload-token`), not the normal bearer credential. Send the raw file bytes as the request body.

## Query parameters

- `key` string, required

## Request body `application/octet-stream`

- string, binary

## Response `200`

Stored (`{ ok, key, sizeBytes }`)

## Other responses

- `401`: Missing or invalid upload token
- `413`: Too large

---

[API](https://skmtc.dev/corgi/apis/dataroom-api.md) - [All operations](https://skmtc.dev/corgi/apis/dataroom-api/llms.txt) - [OpenAPI document](https://skmtc.dev/corgi/apis/dataroom-api/revisions/73f75ef04a00?raw)
