Tenantbox is in early beta free to use, actively being built. Join early access →
Stop writing tenant isolation logic from scratch. Tenantbox gives your SaaS per-tenant file storage, quota enforcement, and usage tracking in two API calls. Files go directly to Cloudflare R2, your server is never in the way.
We boast faster uploads!
Files go straight to storage - your server is never in the way.
api key
tenant id
file
Drop a file or click to choose
Any type · Max 50 MB
No key yet? Get one free · Read the docs
Every SaaS team eventually hits the same six problems. Most discover them in production.
Building it yourself
Typical time to ship: 2–4 weeks of engineering time
With Tenantbox
Typical time to ship: under an afternoon
Powered by Cloudflare R2
Your files' actual home
Files are stored on Cloudflare R2, S3-compatible object storage with global distribution and zero egress fees. Your data isn't on some mystery server. It's on infrastructure trusted by millions of developers worldwide.
Files stored in isolated per-tenant namespaces on R2
Your data, always
No lock-in by design
Every file you upload is accessible via a standard presigned URL. You store the file_path in your own database. If you ever leave Tenantbox, your data is yours, no export process, no hostage fees.
File paths stored in your DB, always accessible
Early access, honest terms
Beta, not vaporware
Tenantbox is in active beta. The API is live, uploads work, and early users shape the roadmap. Free tier includes 1 GB storage and unlimited tenants. Pricing will be public before any limits are enforced.
No credit card required ever, for the free tier
No SDK required. Copy the snippet for your language and you're done.
import axios from 'axios'
import fs from 'fs'
// Step 1 — Get presigned upload URL
const { data } = await axios.post(
'https://api.tenantbox.dev/api/storage/upload/',
{
tenant_id: 'user_123',
filename: 'contract.pdf',
content_type: 'application/pdf',
},
{
headers: {
'Authorization': 'Bearer sk_live_xxx',
'Content-Type': 'application/json',
},
}
)
console.log('File path:', data.file_path)
console.log('New tenant:', data.is_new_tenant)
// Step 2 — Upload directly to Tenantbox storage. Your server never sees the file.
const fileBuffer = fs.readFileSync('contract.pdf')
await axios.put(data.presigned_url, fileBuffer, {
headers: { 'Content-Type': 'application/pdf' },
})
console.log('Upload complete!')Manage uploads, enforce quotas, and isolate tenants without writing the boilerplate yourself.
alice@acme.com
Total files
Storage used
Storage limit
500 MBAll confirmed uploads for this tenant.
| File | Size | Status | |
|---|---|---|---|
contract_2026.pdf contract_2026.pdf | 1.2 MB | Confirmed | |
profile_photo.png profile_photo.png | 3.8 MB | Confirmed | |
q3_report.xlsx q3_report.xlsx | 614.4 KB | Confirmed | |
onboarding.mp4 onboarding.mp4 | 23 MB | Pending |
2
API calls to upload
$0
Egress fees
∞
Tenants per project
No complex SDK. No server-side file handling. Just two HTTP calls and your file is safely stored, isolated, and tracked.
Your server makes one authenticated POST to Tenantbox with the tenant ID, filename, and content type. You get back a presigned upload URL and the file path.
Your client PUTs the file directly to the presigned URL. The file never touches your server which means faster uploads and no bandwidth cost on your end.
Tenantbox automatically creates the tenant on first upload, namespaces the file, enforces storage quotas, and starts tracking usage. Zero boilerplate on your side.
Your server is never the bottleneck
Because uploads go client → storage directly, large files don't block your API, consume memory, or rack up egress charges. Tenantbox handles isolation, quotas, and tracking in the background.
No testimonials yet, we're early and honest about it. What we can promise: the API works, uploads are live, and every piece of feedback directly shapes what gets built next.
Free
During beta
1 GB
Storage included
∞
Tenants
Every alternative requires you to build these features yourself or doesn't offer them at any price tier.
| Feature | S3 AWS S3 | R2 Cloudflare R2 | GCS Google Cloud | SB Supabase | TB Tenantbox |
|---|---|---|---|---|---|
Per-tenant file isolationAutomatic namespace per user/org | |||||
Auto-create tenant on uploadNo pre-registration required | |||||
Per-tenant quota enforcementHard limits before upload begins | |||||
Direct client-to-storage uploadsFiles never touch your server | |||||
Usage tracking per tenantFiles count, bytes used | |||||
Zero egress fees✦ Serving files to end users | |||||
Dashboard for file managementView, delete, download files | |||||
Free to get started | |||||
Two-call upload APINo SDK required |
✦ Egress fees apply when serving files outside the same region. Tenantbox offers zero egress fees, globally.
Free to get started. No credit card required. Two API calls and your files are isolated, tracked, and quota-enforced per tenant out of the box.