qu.ax
qu.ax · Debrid · 1 record · JSON
qu.ax Debrid
caveatanonymousno cardMretention-clamped
| Free tier | Max upload size is 256MB. Expiry is chosen per upload from 1 day, 7 days or 30 days; no account and no email are asked for. unit bytes; metered on none; The offer is a per-object cap and a retention choice, not a byte allowance. |
|---|---|
| Price | USD 0 |
| Per-object cap | Max upload size is 256MB (256000000 bytes) |
| Retention | 1 day / 7 days / 30 days selected at upload. The default (no expiry field sent) produced expires=1795313693, which is 2026-11-22T02:14:53Z, exactly 30 days after the upload. (30 days) |
| Egress | Downloads are served from qu.ax itself; no byte allowance, no account and no published download counter. Nothing on the page meters traffic out. free_allowance: none published |
| Identity | anonymous No account, no email, no cookie was sent; the upload was one POST from a bare HTTP client and a URL came back. |
| Limits |
A file type allow-list runs before the size check: the same 1 MiB payload sent as payload-1mib.bin was refused with HTTP 400 {"message":"file type is not allowed","success":false}, and accepted once renamed to .txt. The download side is referer-gated: GET /x/leM7o.txt without a Referer answers 200 with an 8 254-byte HTML page, and the same request with Referer: https://qu.ax/leM7o answers 200 with the 1 048 576 bytes. |
| Binding | retention-clamped At 1 TiB a month the 256 MB cap only means 4 000 uploads, which a loop handles; the hard stop is that nothing on the service extends a file past 30 days, so a re-fetch after a month needs the original bytes, which the client no longer has if this was the only copy. |
| Interface | rest, cli POST https://qu.ax/upload.php as multipart/form-data, field name 'files[]'. The reply is JSON: files[0].url, .size, .hash (SHA-1), .expires (epoch seconds). endpoint: https://qu.ax/upload.php |
| Tooling | curl -F 'files[]=@file' https://qu.ax/upload.php; a ShareX .sxcu is published at /static/quax.sxcu |
| Composes with | A 30-day, 256 MB anonymous mirror is the cheap middle tier of an archive: big enough for a single dataset shard, long enough to outlive a scrape job, and reachable by one curl line, so it composes with a scheduler and no credential store. |
| Reliability | Two gates before the bytes: an extension allow-list refuses .bin outright, and the raw path /x/<id>.<ext> serves a 200 HTML landing page unless the request carries a Referer header from the file page. Both produce HTTP 200, so a client that trusts status alone reads an error page as a download. |
| Notes | The caveat is the extension allow-list, the 30-day ceiling and the referer-gated download. For a 20 TiB archive this is a distribution mirror, not storage: 80 000 files at 256 MB. |
| Evidence rung | measured Upload, read-back and digest all happened: 1 048 576 bytes posted, 1 048 576 bytes fetched from /x/leM7o.txt with the Referer header, SHA-256 matched. A push against the 256 MB edge would raise the cap from documented to measured. |
| Checked | 2026-10-24 (live); stale on 2026-11-23 |
| Parsed numbers |
|
Evidence (4)
| date | source | what it proved |
|---|---|---|
| 2026-10-23 | probe:https://qu.ax/ | POST of 1 048 576 bytes as payload-1mib.bin -> HTTP 400 {'message':'file type is not allowed','success':false}; the same bytes as .txt -> HTTP 200 with files[0].url=https://qu.ax/leM7o and expires=1795313693 (2026-11-22T02:14:53Z) |
| 2026-10-23 | probe:https://qu.ax/leM7o | the URL the API returned serves HTTP 200 with 8 254 bytes of text/html - the file page, not the file; its only download href is /x/leM7o.txt, which 302s back to the page when a Referer is absent |
| 2026-10-23 | probe:https://qu.ax/x/leM7o.txt | with 'Referer: https://qu.ax/leM7o' the same path returns 1 048 576 bytes of text/plain, sha256 da0099c231f1182a5d411c8ac5149dfb7a2e3578a3970928490cb78ba92aecc9, full-body hash matched the uploaded file |
| 2026-10-23 | qu.ax/ | 'Max upload size is 256MB' and the 1 day / 7 days / 30 days expiry choices |
More fields (2)
{
"api_reply_fields": "files[0].url, .file_name, .hash (sha1), .size, .expires",
"largest_upload_tested_bytes": 1048576
}