Skip to main content
Pro - a Free form rejects a multipart submission with attachments.
Formpaste can accept file attachments on your forms. Uploads are a standard multipart/form-data POST to the same /submit endpoint you already use — no separate upload endpoint, no JavaScript required.

Adding a file input

Plain HTML (no JS)

Add enctype="multipart/form-data" to the form and a file input:

React / Vue / Astro / any JS

Build a FormData and post it - don’t set Content-Type yourself; the browser adds the correct multipart boundary:

Limits

A file over the per-file limit, or a submission with too many files, is rejected outright — nothing is silently dropped or truncated:

What happens to an uploaded file

  1. The file uploads to storage (Cloudflare R2) and is held privately while it’s scanned. Nothing is released before scanning completes - this is fail-closed: if scanning can’t confirm a file is clean, it is not made available.
  2. If the file passes, it becomes downloadable from your dashboard - open the submission and download the file. Downloads are owner-scoped: only the account that owns the form can fetch it, over a short-lived authenticated link. Files are never publicly reachable by URL.
  3. If the file fails scanning (or is an unsafe/unrecognized type), it’s blocked and never delivered to you.
Files are never emailed as attachments - your notification email links you to the dashboard to view/download them. Retention: a file is kept as long as its submission (Pro: 365 days), then deleted automatically. Deleting a submission deletes its files immediately.

Free vs. Pro

Free forms do not accept file uploads. Submitting a multipart request with attachments against a Free-plan form is rejected with:

Zero-config

No dashboard toggle to flip - any Pro-plan form accepts multipart/form-data submissions with file fields as soon as you add a <input type="file"> (or append files to a FormData) in your form.