Skip to main content
string
required
The API key for your account. You can find this in your account settings.
Object Post uploads one file and returns its id and, for public files, a CDN url you can embed or share directly. It backs attachments, generated exports and user-uploaded media for applications hosted on the platform. A single request accepts files from 512 bytes up to 100 MB. Larger files, up to 10 GiB, go through the chunked upload flow or the S3 gateway. Requires the blob:write scope, or an upload token sent in Authorization, and an active plan.
Treat the returned id as opaque: store it as it comes and send it back to the other routes. It starts with pub/ or prv/ and can change when the file changes visibility or expiry. Legacy files, stored before the September 2026 update, keep ids without that prefix, and every route accepts both.

Parameters

file
required
Use FormData (multipart/form-data), exactly one file per request.
Send a real filename: the stored extension comes from it (reads.fastq.gz stays .fastq.gz).
string
required
The file name, without extension. 1 to 128 characters: letters, digits, _, . and -, starting with a letter, digit or _. It can’t contain ...
string
A folder path for the file, up to 8 segments separated by / and 256 characters in total. Each segment follows the same pattern as name, up to 64 characters. A trailing / is ignored.
boolean
default:"false"
true stores the file without a public URL. Read it through Object Download, a share link or the S3 gateway. When omitted, the rule for the prefix decides.
string
Deletes the file automatically after this time: 30 or 30d for days, 6h for hours. From 1 hour to 1825 days (5 years). Expiries under 7 days need the Enterprise plan. When omitted, the rule for the prefix decides.
boolean
default:"false"
true adds a random suffix to the name, so the URL can’t be guessed and a new upload never replaces an old one. Private files always get it (false together with private=true is refused).
boolean
default:"true"
Without a security hash, a new upload with the same name and prefix replaces the file. false refuses it with 409 OBJECT_ALREADY_EXISTS instead.
string
inline (open in the browser) or attachment (download, with the original file name).
boolean
default:"false"
true makes browsers download the file instead of opening it, whatever its type.
string
How long the CDN and browsers keep the file: immutable (1 year), max-age=N with N from 60 to 31536000 seconds, or no-cache (every read goes to storage; Enterprise only). Files with a security hash default to immutable. The cache never outlives the file’s expiry.
string
A JSON object of string values, returned by Object Info. Keys use a-z, 0-9 and - (up to 64 characters). Up to 5 keys and 512 bytes in total. Pro and Enterprise only.
string
The SHA-256 of the file. When it doesn’t match, the upload is refused with CHECKSUM_MISMATCH and nothing is stored.

Rate limits & concurrency

  • Every account may have at most 4 uploads in progress at the same time (TOO_MANY_CONCURRENT_UPLOADS, 429).
  • Hobby and Standard plans are limited to 1 upload per second (RATE_LIMITED, 429). Pro and Enterprise are exempt.
  • Uploads over the account’s included storage are refused with STORAGE_QUOTA_EXCEEDED.

File types

Practically any extension is accepted, including formats with no registered MIME type (.bam, .vcf, .fasta, .parquet, .h5, .npy and so on).
  • The served Content-Type is derived server-side from the extension. Unknown formats are served as application/octet-stream.
  • Formats a browser renders (.html, .svg, .xml and similar) are always served as downloads.
  • Executables and installers are refused with BLOCKED_FILE_TYPE: exe, msi, dll, bat, cmd, com, scr, cpl, pif, hta, vbs, vbe, jse, wsf, wsh, msc, reg, lnk, sys, drv, ps1, apk, xpi.
  • A rule for the prefix or an upload token can restrict the accepted extensions and size.

Response

string
“success” if successful, “error” if not.
object

Errors

See Errors for the full list.