The work starts after submit.
You keep the fields and UI. Fillo handles what happens next.
- ValidateCheck every reply on the server.
- SaveKeep answers and files together.
- DeliverRetry webhooks and send to Slack.
- TrackSave progress and show drop-off.
Try it: drag a sample into the form. This demo sends it straight to a test S3/R2 bucket.
Your React app owns the UI. Fillo handles the schema, upload session, validation, and response record.
const form = defineForm({
id: "support",
pages: [{ id: "request", blocks: [
{ id: "attachment", kind: "file_upload" },
] },
] });
<FilloForm form={form} client={fillo} />You can. The fields are the easy bit. It’s everything after someone presses submit that becomes a project.
You keep the fields and UI. Fillo handles what happens next.
Each file needs signed parts, retries, completion checks, and cleanup. Fillo handles that; the bytes go to your storage.
Old replies should still make sense after a field is added, renamed, or removed.
Built in Denmark. Hosted in the EU.
Do that for the form people see. Fillo handles the part behind it: checking answers, moving files, saving replies, and keeping later changes safe.
Straight from the browser to the S3 or R2 bucket you connect. Fillo saves the reply and a reference to the file.
No. Keep the bucket private. Only people in your workspace can open durable files through Fillo.
Fillo keeps track of it, resumes where the storage provider allows, and cleans up uploads that were abandoned.
Each reply remembers the form version it came from, so old answers still make sense after you publish a change.
No. The React SDK renders normal controls in your app. Use the defaults, bring your own components, or go fully headless.
Presigned parts, retries, verification, and cleanup are documented.