[ session ] guest@tmpdrop · [ max ] 25 MB · [ ttl ] 1h / 24h / 7d · [ status ] ONLINE_

Upload a file. Get a link. The link dies on schedule. No accounts, no tracking, no analytics, no third party. Non-HTML uploads are served under a strict Content-Security-Policy sandbox so they can't run in your browser; .html files are hosted as live pages (see file types).

drop a file

[ttl]

api

One endpoint. Multipart form. Public. No auth.

methodpathpurpose
POST/uploadupload a file, get a URL + slug
GET/f/:slugfetch a file (returns 410 once expired)
GET/healthzliveness probe

upload — curl

curl -F [email protected] -F ttl=1h https://tmpdrop.solardev.online/upload

Response (JSON):

{
  "url":        "https://tmpdrop.solardev.online/f/AbCdEfGhIjKl.png",
  "slug":       "AbCdEfGhIjKl",
  "expires_at": 1717000000,
  "size":       18234,
  "mime":       "image/png"
}

parameters

fieldrequirednotes
fileyesmultipart file part. Max 25 MB.
ttlno1h (default), 24h, or 7d. Anything else: 400.

file types

Any file type is accepted. Size is the only gate — see 25 MB above.

Non-HTML uploads are served with a strict Content-Security-Policy: sandbox plus X-Content-Type-Options: nosniff, so nothing in an uploaded file can execute in your browser.

HTML hosting: text/html and application/xhtml+xml uploads are hosted as live pages — they render inline at their /f/:slug URL with scripts enabled, so you can drop a self-contained .html file and share a working link. The link still dies on its TTL. Only upload HTML you trust — a hosted page runs with full script access on this origin.

status codes

codemeaning
200ok
400no file, or bad ttl
410file expired
413over size limit
429rate limited (30 req / min per IP)

retention & privacy