File Uploads Pro

Accept file attachments with your form submissions. Files are uploaded to S3 and replaced with public URLs in your submission data.

Plan limits

PlanFile UploadsMax File Size
FreeNot available
Pro ProEnabled10 MB per file
Business BusinessEnabled25 MB per file

HTML form

Set the form's enctype to multipart/form-data to enable file uploads:

HTML
<form action="https://formfa.st/f/your_endpoint_id"
      method="POST"
      enctype="multipart/form-data">
  <input type="text" name="name" required />
  <input type="email" name="email" required />

  <label>
    Attachment
    <input type="file" name="resume" />
  </label>

  <button type="submit">Submit</button>
</form>

JavaScript (FormData)

JavaScript
const form = document.querySelector("#my-form");
const formData = new FormData(form);

const res = await fetch("https://formfa.st/f/your_endpoint_id", {
  method: "POST",
  headers: { Accept: "application/json" },
  body: formData,
  // Don't set Content-Type — the browser handles it
});

Don't set Content-Type manually

When using FormData, let the browser set the Content-Type header automatically. It needs to include the multipart boundary.

How files are stored

When a file is submitted:

  1. The file is uploaded to S3 under a unique path: submissions/{formId}/{uuid}.{ext}
  2. The file field in your submission data is replaced with the public URL
  3. The URL is included in your notification email and webhook payload

Error handling

If a file exceeds the size limit, the submission is rejected with a 400 error:

JSON
{
  "error": "File too large: resume.pdf (max 10 MB)"
}

If no S3 bucket is configured (free plan or self-hosted without S3), file fields are silently ignored and the submission is processed without them.