Who this page is for
UploadThing popularized a developer-friendly way to add file uploads to TypeScript apps. If you are evaluating hosted upload services, or want a second option, this page describes the Rapidfile Upload API plainly so you can compare it with the current documentation and pricing of any other provider yourself. We don't quote other services' prices or limits here because they change; check their sites for the latest.
What Rapidfile offers
- Direct browser uploads. Your server signs, the browser uploads to Rapidfile. Files never pass through your backend.
- Large files. Multipart uploads with parallel parts and automatic retries, up to 50 GB per file on Scale.
- CDN links. Public files are served from
cdn.rapidfile.cc. - Private files. Signed URLs that expire after up to 7 days.
- Webhooks.
file.uploadedandfile.deleted, signed with HMAC-SHA256. - Framework-agnostic. Plain REST plus a tiny MIT browser SDK; guides for Next.js, Express, SvelteKit and plain HTML.
- Pricing. Free plan with 2 GB; Starter $5/mo for 100 GB, Growth $15/mo for 500 GB, Scale $49/mo for 2 TB. No bandwidth fees.
How the integration model differs
Rapidfile deliberately keeps the integration small and framework-neutral. There is no router or component library to adopt: your
existing backend gets one endpoint that calls POST /v1/uploads, and the browser calls uploadFile(). Rules like
"images only, max 10 MB, signed-in users" live in that endpoint as ordinary code, next to the rest of your authorization logic. Metadata
you attach (a user id, a post id) comes back on the file and in webhooks.
// app/api/upload/route.ts: runs on your server, so the secret key stays private
import { auth } from '@/lib/auth'; // your own session check
export async function POST(req: Request) {
const user = await auth(req);
if (!user) return Response.json({ error: 'unauthorized' }, { status: 401 });
const { name, size, type } = await req.json();
const res = await fetch('https://api.rapidfile.cc/v1/uploads', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.RAPIDFILE_SECRET_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({ name, size, type, metadata: { userId: user.id } }),
});
return Response.json(await res.json(), { status: res.status });
}Moving an existing project
Add the endpoint
Create a route that authorizes the user and calls
POST /v1/uploads, like the one above. Express, SvelteKit and Python versions are in the docs.Swap the client call
Replace your upload component's upload call with
uploadFile(file, { getUpload: '/api/upload', onProgress }). Keep your own UI.Handle completion
Use the returned file directly, or the
file.uploadedwebhook, to saveidandurlin your database.Copy old files if you want
A small script can download existing files and re-upload them with
PUT /v1/files, then update the stored URLs.
When Rapidfile is a good fit
Teams who want predictable monthly costs, apps where users upload large videos or archives, and projects that are not tied to a single framework tend to fit well. If you rely on features specific to another provider's SDK, compare carefully before moving. Rapidfile is operated by Enzonic LLC, which also runs Rapidfile file transfers and Rapidfile Media.
UploadThing is a trademark of its respective owner. Rapidfile is not affiliated with, endorsed by or sponsored by UploadThing.
Frequently asked questions
Is Rapidfile a drop-in replacement for UploadThing?
No. The integration is different: a REST endpoint on your server plus a small browser SDK. Most projects switch by adding one route and changing the upload call in their component.
Does Rapidfile work with React and Next.js?
Yes. The docs include a Next.js App Router guide with a route handler, a client component and a webhook route. Any React app can call uploadFile().
Is there a free tier?
Yes: 2 GB storage, 100,000 CDN requests a day and files up to 512 MB.
Are there bandwidth charges?
No. Rapidfile plans have fixed prices with no egress fees.
Can I keep files private?
Yes. Upload with acl "private" and generate signed URLs that expire.