API

Everything the web page does, over plain HTTP. No keys, no rate limits, no signup. Every endpoint returns JSON unless it returns bytes.

Upload in one request

curl -T ./movie.mkv https://files.nitaimaarek.com/
curl --data-binary @dump.log https://files.nitaimaarek.com/dump.log
curl -F file=@photo.jpg https://files.nitaimaarek.com/api/form

The response is JSON: {"id":"aB3xY9k","url":"…/f/aB3xY9k","download":"…/d/aB3xY9k","token":"…"}. Add ?raw=1 to get just the URL as text — handy in shell pipelines.

Query options (all optional)

expires0 · 1h · 1d · 7d · 30d · or seconds
listed0 keeps it off the public Browse page
passpassword required to download
noteshort description shown on the file page
nameoverride the stored filename

Resumable upload

What the browser uses. Survives a dropped connection at any size.

POST /api/new            {"name":"x.iso","size":123,"expires":0,"pass":"","listed":true}
                         -> {"id":"…","token":"…","offset":0}
PUT  /api/put/<id>?token=…&offset=N     raw bytes appended at N
GET  /api/status/<id>?token=…          -> {"offset":N}   (where to resume)
POST /api/done/<id>?token=…           -> the finished file's JSON

Import a URL

POST /api/import   {"url":"https://…","expires":"7d"}  -> {"job":"…"}
GET  /api/import/<job>   -> {"state":"running","got":123,"total":456}

The transfer runs on the server, so closing the tab does not stop it.

Download

GET /d/<id>attachment, honours Range — resume with curl -C -
GET /r/<id>inline with the real content type, for hotlinking and embeds
GET /api/zip?ids=a,b,cstreams one zip64 archive of several files, with a real Content-Length
GET /api/file/<id>metadata as JSON
GET /api/list?q=&kind=&sort=&limit=public listing as JSON
GET /api/statscounts, bytes stored, free space

Password-protected files take ?pass=… on any of those.

Delete

POST /api/delete/<id>?token=<token from upload>

The token is the only way to delete a file, and it is only ever shown to the uploader. Lose it and the file stays until it expires.

Limits

No cap on a single file, no cap on how many, no throttling. The one hard rule is that uploads stop while the disk has less than 3 GB free, so the box never fills up under the other services running on it. Check /api/stats for current headroom.