transfer.sh Alternative: 5 cURL Upload Tools That Still Work
transfer.sh is remembered for one-command uploads, but its familiar workflow does not answer every production requirement. Compare anonymous sharing, expiry, ownership, and API stability separately instead of treating every alternative as interchangeable.
The right transfer.sh replacement depends on the job. An anonymous throwaway link, an account-owned API upload, and a public URL for an application are different requirements.
Start with the requirement
- Persistent API and CDN URL: use FilePost. It needs an API key, returns JSON, and keeps files online until you delete them.
- Anonymous one-off upload: use 0x0.st or catbox.moe. Good for quick public sharing, not a production dependency.
- Expiring one-download link: use file.io. It is closest to the temporary-file behavior people remember from transfer.sh.
- Large media files: use pixeldrain if the file size matters more than the API shape.
If another system needs the URL
If the URL will be read later by an app or workflow, choose persistence over anonymous convenience:
Upload → capture the returned URL → save it in your database or send it to the next automation step.
FilePost is the fit when that URL must remain available after the transfer finishes. Use file.io or an anonymous host when the file is intentionally temporary.
The comparison uses expiry, API shape, file size, and whether the returned URL is suitable for an application or automation workflow.
What Made transfer.sh Great, and What to Look For
If you loved transfer.sh, you were relying on at least three things:
- Uploads are a single cURL command. No account, no SDK, no multipart setup beyond
--upload-fileor-F. - The response is just a URL. Plain text, ready to paste into Slack, email, or a terminal.
- Files eventually go away. A 14-day default retention kept it safe and cheap.
Different alternatives emphasize different parts of that list. Pick the one that matches your actual job.
Quick Comparison Table
| Feature | FilePost | file.io | 0x0.st | catbox.moe | pixeldrain |
|---|---|---|---|---|---|
| cURL upload in one line | Yes | Yes | Yes | Yes | Yes |
| Free tier | Yes (1 provisional / 15 verified) | Yes | Yes (anonymous) | Yes (anonymous) | Yes |
| URLs with no automatic expiry by default | Yes | No (default 1 download) | 30 to 365 days (size-based) | Yes (not guaranteed) | Yes |
| Management API | Yes | Limited | No | Partial (account-based) | Yes (with account) |
| Max file size | 50 MB free / 500 MB paid | 100 MB free | 512 MB | 200 MB | 20 GB |
| Dedicated CDN | Yes | No | No | No | Yes |
| Starting paid price | 4 USD/mo (Lite) | Varies | Free only | Donation-based | Around 4 EUR/mo |
1. FilePost: Best for Persistent cURL Uploads with a Real API
FilePost keeps the cURL-first feel of transfer.sh but adds persistence, a CDN, and a management API. You sign up once, get an API key, and your uploads return a CDN URL with no automatic expiry by default.
Why Choose FilePost
- One-line cURL upload: POST a file, get back a JSON body with a stable CDN URL.
- No automatic expiry by default. Unlike transfer.sh's 14-day window, FilePost URLs keep working until you delete the file, configure expiry, or the account is terminated.
- CDN delivery. Downloads go through Cloudflare, so shared links stay fast at any geography.
- Free tier. One provisional 10 MB upload before verification, then 15 uploads per month and 50 MB files after verification, with no card.
- Intake links. Generate a shareable upload URL that lets anyone (clients, friends, teammates) drop a file without needing an API key.
- Management API. List, delete, and inspect files through a real REST API, not just a one-shot upload.
- Automation handoff. Capture the returned
urlin a script, webhook, n8n node, or other downstream step and keep using it after the workflow ends.
Upload a File (One Line)
curl -X POST https://upload.filepost.dev/v1/upload \
-H "X-API-Key: your_api_key" \
-F "file=@build.tar.gz"
Response:
{
"url": "https://cdn.filepost.dev/file/filepost/uploads/a1/a1b2c3.tar.gz",
"file_id": "a1b2c3d4e5f6",
"size": 4823104
}
transfer.sh Muscle Memory, Adapted
If you had a shell function for transfer.sh, the port is a couple of lines:
# Before: transfer.sh
transfer() {
curl --progress-bar --upload-file "$1" "https://transfer.sh/$(basename "$1")"
}
# After: FilePost (extract the URL from the JSON response)
upload() {
curl -s -X POST https://upload.filepost.dev/v1/upload \
-H "X-API-Key: $FILEPOST_KEY" \
-F "file=@$1" | jq -r .url
}
Add export FILEPOST_KEY=fh_... to your shell rc file and you are back to one-command sharing.
If the payload is an archive, the ZIP to URL guide shows the same public-link workflow for ZIP, TAR, and GZ files.
Move a workflow from transfer.sh
Test the request with a small file from your own workflow. If the returned URL works in the next step, the basic integration is working.
Test a small upload2. file.io: Closest to transfer.sh's Default (Auto-Delete)
file.io is the most direct spiritual successor to transfer.sh's "files go away" default. Uploads auto-delete after the first download or at the end of a set retention period.
What it does well
- cURL-friendly API, one-line uploads
- Auto-expiration matches transfer.sh's ephemeral feel
- Free tier available
Tradeoffs
- Default is auto-delete after first download, not what you want for repeated access
- No rich management API for listing or selectively deleting files
Good fit: Quick one-off transfers where you explicitly want the file to go away. See our file.io alternative comparison for when to pick something else.
3. 0x0.st: Best for Fully Anonymous cURL Uploads
0x0.st (The Null Pointer) is a minimalist anonymous file host. No accounts, no signup, just cURL. It is operated as a hobby service, which makes it a fine fit for informal sharing and a bad fit for anything production-critical.
Upload Example
curl -F 'file=@hello.txt' https://0x0.st
What it does well
- No account, no key, no signup
- Excellent cURL UX
- Free
Tradeoffs
- Retention depends on file size, smaller files last longer (up to 365 days), larger files expire faster
- No management API, you cannot list or delete uploads
- Operated informally, not a production dependency
- Abuse-prone: some providers and corporate networks block it
Good fit: One-off text snippets and small files you want to share publicly and anonymously. Not a production choice. If you are specifically comparing 0x0.st against an account-based API, see the focused 0x0.st alternative guide.
4. catbox.moe: Anonymous Permanent Hosting
catbox.moe is another minimalist anonymous file host, focused on persistent (not time-limited) uploads. Popular among hobby communities for image and small-file sharing.
Upload Example
curl -F "reqtype=fileupload" \
-F "fileToUpload=@image.png" \
https://catbox.moe/user/api.php
What it does well
- Persistent URLs by default (though not legally guaranteed)
- Anonymous or account-based uploads
- Free, donation-supported
Tradeoffs
- Community-run service, not production-grade
- 200 MB file size limit
- Hotlinking policies and content restrictions can affect long-term availability
Good fit: Hobby projects and community use, not business applications.
5. pixeldrain: Best for Large Files with an Account
pixeldrain supports files up to 20 GB per upload and has a clean web UI plus a REST API. With an account you get a real management layer.
Upload Example
curl -T image.png -u :YOUR_API_KEY \
https://pixeldrain.com/api/file/image.png
What it does well
- Very large file support (up to 20 GB)
- REST API with listing and deletion
- Polished web UI with file previews
Tradeoffs
- Subscription required for heavy use
- Bandwidth limits apply for free accounts
- Primary audience is media sharing, not developer integrations
Good fit: Large media files you want to share publicly, with an API.
How to Choose the Right transfer.sh Alternative
- You need a persistent URL inside an automation: FilePost. Capture the JSON
urland store or send it downstream. - You want transfer.sh's one-line cURL feel with persistent URLs, a CDN, and an API: FilePost is the closest current fit in this comparison.
- You want transfer.sh's auto-delete default: file.io.
- You want anonymous, no-account cURL uploads for small text files or snippets: 0x0.st.
- You want anonymous persistent hosting: catbox.moe. Community-run, not production.
- You want to share very large files (multi-GB): pixeldrain.
Self-Hosting transfer.sh
The transfer.sh source code is on GitHub and you can still run it on your own server or S3 bucket. Self-hosting makes sense when files must stay inside your infrastructure.
If you go self-hosted, expect to handle abuse reports, storage growth, and CDN caching yourself. Otherwise, those responsibilities are the main tradeoff compared with a hosted service.
Conclusion
For persistent links, an authenticated upload API such as FilePost is a closer fit than transfer.sh's temporary-sharing model. For anonymous or self-destructing links, 0x0.st, catbox.moe, or file.io may be more appropriate, depending on retention and operational requirements.
If you need a persistent URL, start with the authenticated upload example above and test it with a small file from your own workflow.