File uploads
Form attachments go straight from the browser to Cloudflare R2 via presigned URLs. Your Vercel function never proxies bytes.
The flow
The SDK does all five steps for you. Pass files and that’s it.
SDK
Limits
- 10 files per submission.
- 25 MB per file by default — raise per-project up to 200 MB on Pro.
- Accepted MIME types defaulted to images and documents. Configure at Forms → settings → uploads.
Where the files live
R2 bucket scoped to your agency: caddi-uploads-<agency>. Caddi owns the bucket and rotates the access keys. You can mirror to your own bucket via webhook if you want long-term storage on your side.
Reading a file
The inbox shows file names and content types. Click to download — Caddi issues a short-lived read URL. Public sharing requires explicit “Make public” per file (writes an audit log entry).
Files inherit the submission’s retention. Default is indefinite. Set per-project at Forms → settings → retention if you want auto-purge after N days.