File uploads for your app, without the bill
Let your users upload photos, videos and documents straight from the browser. You get a CDN link, a signed webhook and one fixed monthly price. No bandwidth fees, no surprises.
- 2 GBfree storage
- $5/mo for 100 GB
- 50 GBmax file size
// 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 });
}// server.js: Express creates the upload, the browser sends the bytes
import express from 'express';
const app = express();
app.use(express.json());
app.post('/api/upload', requireUser, async (req, res) => {
const { name, size, type } = req.body;
const r = 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: req.user.id } }),
});
res.status(r.status).json(await r.json());
});
app.listen(3000);// In the browser: no SDK, no API key
const picked = document.querySelector('input[type=file]').files[0];
// 1. Ask your own server for an upload URL
const { upload } = await fetch('/api/upload', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ name: picked.name, size: picked.size, type: picked.type }),
}).then((r) => r.json());
// 2. Send the bytes straight to Rapidfile (files up to 95 MB use one PUT)
const res = await fetch(upload.url, { method: 'PUT', body: picked });
const { file } = await res.json();
console.log(file.url); // https://cdn.rapidfile.cc/<id>/<name># 1. Create an upload (server side, with your secret key)
curl https://api.rapidfile.cc/v1/uploads \
-H "Authorization: Bearer $RAPIDFILE_SECRET_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"cat.jpg","size":48213,"type":"image/jpeg"}'
# 2. PUT the bytes to upload.url from the response (no key needed)
curl -T cat.jpg "$UPLOAD_URL"
# Or upload from your server in one request (up to 95 MB)
curl -T cat.jpg -H "Content-Type: image/jpeg" \
-H "Authorization: Bearer $RAPIDFILE_SECRET_KEY" \
"https://api.rapidfile.cc/v1/files?name=cat.jpg"PUT upload.url{
"file": {
"id": "Xy7Kq2Lm9P",
"name": "cat.jpg",
"status": "ready",
"url": "https://cdn.rapidfile.cc/Xy7Kq2Lm9P/cat.jpg"
}
}
How it works
Three requests, zero file proxying
- 1
Your server creates an upload
One
POST /v1/uploadswith your secret key. You decide who may upload what, and how big.POST /v1/uploads Authorization: Bearer rk_live_… { "name": "cat.jpg", "size": 48213, "type": "image/jpeg" } - 2
The browser uploads directly
The response holds a signed URL. The browser PUTs the file to it; large files go up in parallel parts.
await uploadFile(file, { getUpload: '/api/upload' }) - 3
Webhook and CDN link
The file is ready on the CDN and your app gets a signed
file.uploadedwebhook to save it.{ "type": "file.uploaded", "data": { "url": "https://cdn.rapidfile.cc/Xy7K…/cat.jpg" } }
Features
Everything user uploads need, nothing you have to run
Direct browser uploads
Your server hands the browser a signed upload URL. Bytes never touch your servers, so there is nothing to proxy or scale.
Multipart up to 50 GB
Big files are split into parts that upload in parallel and retry on their own. The SDK does it with one function call.
CDN links
Every public file gets a permanent URL on cdn.rapidfile.cc, ready for an <img>, <video> or download link.
Private files, signed URLs
Mark uploads private and hand out signed URLs that expire when you choose, from a few seconds up to 7 days.
Webhooks with HMAC
Get file.uploaded and file.deleted events, signed with HMAC-SHA256 so you know they came from us.
Free bandwidth
No egress fees. Plans include a daily number of CDN requests instead of a meter that runs every time someone views a file.
Fixed price
Free to start, then $5, $15, $49 a month. The price on the page is the price on the invoice.
Plain REST, tiny SDK
A handful of endpoints, JSON in and out, CORS enabled. Use the browser SDK or just fetch from any language.
Give your AI agent file uploads
Connect Claude Code, Cursor, VS Code or any MCP client to https://api.rapidfile.cc/mcp with an app's secret key. Your agent can upload text, binary or a URL and get a CDN link back, hand out signed upload URLs, list and delete files and check usage.
upload_filecreate_upload_urllist_filesget_filedelete_fileget_signed_urlget_usage
claude mcp add --transport http rapidfile-api https://api.rapidfile.cc/mcp --header "Authorization: Bearer rk_live_…"Pricing
Start free. Grow on a fixed price.
Guides
Pick your stack
Questions
What is the Rapidfile Upload API?
A hosted file upload service for your web or mobile app. Your server creates an upload with a secret key, your user's browser sends the file straight to Rapidfile, and you get a CDN link plus a webhook. It is built and run by Enzonic LLC, the team behind Rapidfile.
How much does it cost?
There is a free plan with 2 GB of storage and 100,000 CDN requests a day. Paid plans start at $5 a month for 100 GB. Prices are fixed: there are no bandwidth or per-upload fees. See pricing.
Do files pass through my server?
No. Your server only makes one small JSON request to create the upload. The bytes go from the browser directly to Rapidfile using a signed URL that is valid for one hour and only works for that one file.
How large can uploads be?
Up to 512 MB per file on the free plan and up to 50 GB on Scale. Files over 95 MB are uploaded in parallel parts; the browser SDK handles that, including retries and progress.
Can files be private?
Yes. Create the upload with "acl": "private". Private files have no public URL; your server creates short-lived signed URLs (up to 7 days) when a user should see the file.
Which frameworks are supported?
Anything that can make an HTTPS request. The docs have copy-paste guides for Next.js, Express, SvelteKit and plain HTML, and the API is plain REST with JSON.
Is there an SDK?
A dependency-free browser module at https://api.rapidfile.cc/sdk.js (MIT licensed). It uploads single files and multipart files, reports progress and retries failed parts. Server side you only need fetch.
Can AI agents use the API?
Yes. https://api.rapidfile.cc/mcp is a remote MCP server (Streamable HTTP). Connect Claude Code, Cursor, VS Code or any MCP client with an app's secret key and the agent can upload files, list and delete them, create signed URLs and check usage. See MCP for AI agents.
Ship uploads this afternoon
Create an app, copy the secret key into your server, drop in the SDK.