---
title: "Send one complete file to storage"
method: PUT
path: "/api/file-transfers/upload"
---

# Send one complete file to storage

`PUT /api/file-transfers/upload`

## Request

- Base URL: `https://www.toma.com`
- URL: `https://www.toma.com/api/file-transfers/upload`
- Auth: none required

Use only the request returned by the upload operation. The short-lived, action-bound token authorizes one file and current owner/grant; ready files cannot be overwritten. Self-hosted servers accept files up to 100 MiB here. On Vercel, files above 4 MiB use the signed storage request returned by the upload operation.

## Query parameters

- `token` string, required

## Request body `application/octet-stream`

- string, binary

## Response `200`

Original bytes uploaded; call complete.

- object

## Other responses

- `400`: Size or checksum mismatch.
- `401`: Invalid or expired link.
- `403`: Access revoked.
- `404`: File unavailable.
- `409`: Upload not writable.
- `413`: Use the returned direct upload request for this file size.
- `503`: Storage unavailable.

---

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