Everything the web page does, over plain HTTP. No keys, no rate limits, no signup. Every endpoint returns JSON unless it returns bytes.
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.
| expires | 0 · 1h · 1d · 7d · 30d · or seconds |
|---|---|
| listed | 0 keeps it off the public Browse page |
| pass | password required to download |
| note | short description shown on the file page |
| name | override the stored filename |
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
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.
| 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,c | streams 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/stats | counts, bytes stored, free space |
Password-protected files take ?pass=… on any of those.
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.
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.