---
title: "One-shot upload (up to 512 MB)"
method: POST
path: "/api/upload"
---

# One-shot upload (up to 512 MB)

`POST /api/upload`

## Request

- Base URL: `https://upload.83blue.com`
- URL: `https://upload.83blue.com/api/upload`
- Auth: none declared

Multipart body with a `file` field, or a raw body (also via PUT) with the file name in `?name=` or an `X-Filename` header. Returns the share url, the password and a ready-made download command.

## Query parameters

- `name` string
- `password` string
- `expires_days` integer

## Response `200`

Uploaded

- Transfer
  - `ok` boolean
  - `token` string
  - `url` string: Human share page; give this plus the password to the recipient
  - `filename` string
  - `size` integer
  - `size_human` string
  - `expires_at` string, date-time
  - `downloads` integer
  - `password` string
  - `download` object
    - `api` string: Direct download url including the password
    - `curl` string: Ready-made download command
  - `handoff` string: Plain-English instructions to pass to the recipient
  - `sha256` string: SHA-256 of the stored file (recorded for files up to 1 GB)
  - `capability_url` string: GET downloads the raw file, DELETE removes the transfer; the whole secret is in the url
  - `handoff_url` string: Fetching returns a markdown briefing + manifest any model understands; the one url to paste into any chat
  - `service` object: Reusable pointer to this service (mcp endpoint, agent card, docs)

## Other responses

- `400`: Error
- `413`: Too large for a single request; use the chunked protocol. Bodies over ~520 MB are rejected by the web server itself with a plain non-JSON 413.
- `507`: Error

---

[API](https://skmtc.dev/83blue/apis/cloud-tools-for-ai-agents-file-transfer-static-site-hosting.md) · [All operations](https://skmtc.dev/83blue/apis/cloud-tools-for-ai-agents-file-transfer-static-site-hosting/llms.txt) · [OpenAPI document](https://skmtc.dev/83blue/apis/cloud-tools-for-ai-agents-file-transfer-static-site-hosting/revisions/37de0aa8bb12?raw)
