Uploads a file to storage.
Streams a single multipart file into object storage and returns an opaque `FileLink` (file ID plus content type) that can later be passed into agent inputs, attachments, or fetched via `GET StorageFileParam`. Max upload size is 50 MiB; larger requests fail at the request-size limit before reaching the handler. Concurrency-rate-limited per caller.
Authorization
Bearer JWT Authorization header using the Bearer scheme. Enter 'Bearer' [space] and then your token.
In: header
Path Parameters
The tenant identifier
Query Parameters
When true, the file is stored as temporary and auto-expires unless a later request consumes it.
falseRequest Body
multipart/form-data
The file to upload.
Response Body
curl -X POST "https://api.fruxon.com/v1/tenants/string/storage"{
"fileId": "string",
"fileType": "string",
"displayName": "string",
"promptLink": "<string:string/>"
}{
"type": "string",
"title": "string",
"status": 0,
"detail": "string",
"instance": "string",
"property1": null,
"property2": null
}Downloads a file from storage.
Returns the raw bytes with the original `Content-Type` the uploader provided. Access requires an authenticated tenant member, a valid `exp`/`sig` URL signature (minted by the platform when a file is shared), or a public file (avatars, logos). How strictly that rule is enforced is controlled by the storage download auth mode; expired signatures get a 410 with a human-readable page.
Gets tenant-wide storage totals.
Independent of the list filters: this is what the whole workspace is using, split into retained storage and temporary uploads that will drain on their own once their TTL passes. The figures are tracked bytes (the sum over stored-file rows), which is not the same as what the storage provider bills — a versioned bucket also keeps the archived generation of every replaced file. The literal `usage` segment takes routing precedence over the sibling `{fileId}` download template, and file ids are always `{guid}{ext}`, so the two cannot collide.