enctype="multipart/form-data" to your <form>, keep method="POST", and add a named <input type="file">. Files are emailed with the submission, up to 10 MB combined, and FormSubmit doesn't store them afterwards. If you need to find an upload again later, use a backend that stores files.Point any HTML form at one endpoint. 500 free submissions — no card, no time limit — and unlimited forms.
Create free accountDoes FormSubmit support file attachments?
Yes. FormSubmit.co accepts file uploads natively: set enctype="multipart/form-data" on a form that POSTs to https://formsubmit.co/[email protected] and add an <input type="file"> with a name. The file arrives as an attachment on the submission email. You can use several file inputs, but together the files must stay under 10 MB, and FormSubmit doesn't keep them after sending (FormSubmit documentation, checked October 10, 2026).
That's the whole feature. There's no attachment-specific option, no _attachment field, and no setting to change the limit. Everything below covers the markup that works, what the docs do and don't say, and the five ways uploads usually go wrong.
A working FormSubmit file upload form
This is FormSubmit's own documented pattern with a few optional fields added. Replace the email address and you can paste it into any static page:
<form action="https://formsubmit.co/[email protected]"
method="POST"
enctype="multipart/form-data">
<input type="email" name="email" placeholder="Your email" required>
<textarea name="message" placeholder="Details"></textarea>
<!-- the file input needs a name, or nothing is sent -->
<input type="file" name="attachment" accept="image/png, image/jpeg">
<!-- optional FormSubmit fields -->
<input type="hidden" name="_subject" value="New upload from the site">
<input type="hidden" name="_next" value="https://yourdomain.com/thanks.html">
<button type="submit">Send</button>
</form>What each piece does:
enctype="multipart/form-data"is the only attachment-specific requirement. HTML forms default to URL-encoding, which sends the file's name, not its bytes.method="POST"is required: every FormSubmit example uses it, and a file can't travel in a GET URL anyway.name="attachment"is just the name FormSubmit's example uses. Any name works, as long as there is one: FormSubmit's help page says fields without anameattribute aren't included in the email.acceptonly filters the visitor's file picker. It isn't validation, and FormSubmit doesn't document any server-side file type rules._nextmust be a full URL includinghttps://. FormSubmit's help page traces the "make sure your form has the method=POST attribute" error to a_nextvalue that was a path instead of a URL.
Leave reCAPTCHA on (don't add _captcha=false) unless you have a reason: FormSubmit's docs say it may apply "technical limitations" to forms without it. If you'd rather not publish your address in the action, FormSubmit sends you a random string to use instead once you confirm your email.
FormSubmit attachment limits: what the docs say (and don't)
Every row below was checked on formsubmit.co on October 10, 2026. Where the docs are silent, the table says so instead of guessing.
| Question | What FormSubmit documents |
|---|---|
| Size limit | 10 MB combined across all file inputs in one submission. It was 5 MB until early 2026 (web.archive.org snapshots of October 30, 2025 and February 21, 2026). |
| Per-file limit | Not stated; only the 10 MB total is documented. |
| Number of files | "Several file input fields" are allowed. A single input with the multiple attribute isn't mentioned. |
| Allowed file types | Not stated. The example only uses accept="image/png, image/jpeg" in the picker. |
| Storage | Files aren't retained and can't be accessed through the API. Text submissions are kept for 30 days. |
| Webhooks | The sample webhook payload shows text fields only; files in webhooks aren't documented. |
| Plans | Free, no registration, unlimited forms and submissions. No paid plan is listed anywhere on the site. |
Two practical consequences. First, because 10 MB is a total, a form with three file inputs gives each visitor about 3 MB per file if they fill all three. Second, your own mailbox applies its own message-size limit on top of FormSubmit's, so test with a file close to the limit before you rely on it.
Why FormSubmit attachments don't arrive: 6 failure modes
1. You're submitting through the AJAX endpoint
FormSubmit's AJAX endpoint is https://formsubmit.co/ajax/[email protected], and every example on its AJAX page (fetch, Axios, jQuery) sends a JSON body. JSON can't carry a file's bytes, and the docs don't say whether the AJAX endpoint accepts a multipart FormData body. The documented path for files is the normal form POST shown above. If you must stay on the page, test a FormData request yourself with a real file before shipping, and note that FormSubmit's autoresponse feature doesn't work with AJAX submissions either.
2. The enctype is missing or misspelled
Without enctype="multipart/form-data" the browser sends something like attachment=resume.pdf. The email arrives, the field shows the filename, and there's no attachment. It's the most common upload bug on any form backend, and the fix is one attribute.
3. The files add up to more than 10 MB
Phone photos and scanned PDFs pass 10 MB quickly, especially with several inputs. The docs don't describe what visitors see when they go over, so add a size check in the browser (read input.files[i].size before submit) and say the limit next to the input.
4. The upload came in before you confirmed the form
The first submission to a new address triggers a confirmation email. FormSubmit's help page says submissions made before you confirm are delivered once you do, but uploaded files from that period aren't kept. Confirm the form with a test submission before you publish it.
5. The email went to spam
FormSubmit's own help page tells you to check your spam folder, "especially if you are receiving a lot of them", and to mark the messages as not spam. Since FormSubmit doesn't keep the file, a spam-foldered upload you delete is gone. More on why form emails get filtered in why contact form emails go to spam.
6. You're testing from a local file
Opening the page as file:///…/contact.html produces FormSubmit's "Unable to submit form" error. Serve the page from a web server, or add a hidden _url field with the page's real URL, as the help page suggests.
When you need uploads stored, not just emailed
FormSubmit's model is email-only for files: the attachment is the only copy. That's fine for an occasional screenshot. It isn't fine for resumes, signed documents, warranty receipts or anything you'll need to find again after the email has been archived, forwarded or deleted. At that point you want a form backend that saves the file with the submission.
The splitforms version of the same form uses the same enctype and file input, with an access key in place of the email address:
<form action="https://splitforms.com/api/submit"
method="POST"
enctype="multipart/form-data">
<input type="hidden" name="access_key" value="YOUR_ACCESS_KEY">
<input type="email" name="email" required>
<textarea name="message"></textarea>
<input type="file" name="attachment" accept=".pdf,image/*" multiple>
<button type="submit">Send</button>
</form>To submit with JavaScript instead, post a FormData body and let the browser set the Content-Type header. Setting it yourself drops the multipart boundary, and a JSON body can't carry files:
const form = document.querySelector("form");
form.addEventListener("submit", async (e) => {
e.preventDefault();
const res = await fetch("https://splitforms.com/api/submit", {
method: "POST",
headers: { Accept: "application/json" }, // no Content-Type here
body: new FormData(form),
});
console.log(await res.json());
});How uploads work on splitforms (verified against the code that runs the submit endpoint):
- Limits: up to 5 files per submission, 5 MB each. A file over 5 MB isn't stored, and a request body larger than five 5 MB files plus the form fields returns
413 payload_too_large. - Plans: uploads need a paid plan with the Storage integration connected in the dashboard. On the Free plan (500 submissions total) the text fields are still saved and the JSON response notes that the files were dropped.
- Storage space: files count toward your plan's storage, 500 MB on Pro ($5/month) and 5 GB on Annual ($49/year). Stored files stay with their submission until you delete it; if an account drops back to Free, its files are removed after 30 days.
- Email: the notification email lists every file with a download link that lasts 7 days, and when the files total 7 MB or less they're attached to the email too.
- Dashboard and webhooks: each submission links its files in the dashboard, and webhook payloads include a
filesarray with pre-signed download URLs so your own backend can copy them. - Safety checks: executable and script extensions (
.exe,.js,.shand similar) are rejected, and the stored content type is sniffed from the file's bytes rather than trusted from the browser.
Notification email itself is free on every splitforms plan. For the full walkthrough of multipart forms, drag-and-drop and validation, see how to add file uploads to a contact form, or the file uploads feature page. If your site is on GitHub Pages, Netlify or another static host, static site file upload forms covers that setup.
FormSubmit or a storing backend?
| FormSubmit | splitforms | |
|---|---|---|
| Cost of uploads | Free | Paid plans: Pro $5/month, Annual $49/year |
| Size limit | 10 MB total per submission | 5 files of 5 MB each |
| How files reach you | Email attachment only | Email links (attached when 7 MB or less), dashboard, webhooks |
| Files kept afterwards | No | Yes, until you delete the submission |
| Signup | None (confirm by email) | Account and access key |
Pick FormSubmit when uploads are occasional, small, and an email is enough of a record. Pick a storing backend when a lost email would mean a lost file. For everything else that differs between the two (dashboard, spam filtering, history, migration steps), read the full FormSubmit alternative comparison, and see splitforms pricing for plan details.
Sources
FormSubmit claims were checked on October 10, 2026 against FormSubmit's own pages:
- FormSubmit documentation: file uploads, 10 MB limit, special fields, 30-day archive, files not retained.
- FormSubmit AJAX documentation: the fetch, Axios and jQuery examples (JSON bodies).
- FormSubmit help (FAQ): spam folder, activation, blank emails, local-file and
_nexterrors. - FormSubmit API documentation: what the submissions API returns.
- FormSubmit homepage: free setup, no registration, confirmation email.
- Archived documentation, October 30, 2025 (5 MB) and February 21, 2026 (10 MB).
splitforms limits and plan details come from the splitforms docs and pricing page.
FAQ
Does FormSubmit.co support file attachments?
Yes. FormSubmit documents native file uploads: add enctype="multipart/form-data" to a form that posts to https://formsubmit.co/[email protected] and include an <input type="file"> with a name attribute. The file arrives attached to the submission email. You can use several file inputs, but the combined size must stay under 10 MB.
What is FormSubmit's file attachment size limit?
10 MB in total per submission, across all file inputs, according to formsubmit.co/documentation. The limit used to be 5 MB: the web.archive.org snapshot of the documentation from October 30, 2025 says 5 MB, and the February 21, 2026 snapshot says 10 MB. FormSubmit doesn't document a per-file limit or a list of allowed file types.
Can I upload files through FormSubmit's AJAX endpoint?
FormSubmit doesn't document it. Its AJAX examples (fetch, Axios and jQuery against https://formsubmit.co/ajax/[email protected]) all send JSON, and JSON can't carry file bytes. If you need attachments, use a normal multipart POST, which is what the file upload docs show, or test a FormData request against the AJAX endpoint yourself before relying on it.
Is FormSubmit free?
Yes. FormSubmit describes setup as free with no registration, and its documentation promises unlimited forms and submissions. Its website doesn't list any paid plan, so there's nothing to upgrade to if you need longer history or file storage.
Does FormSubmit keep uploaded files?
No. FormSubmit keeps submissions for 30 days and lets you read them through its API up to 5 times a day, but its documentation says uploaded files aren't retained and can't be accessed through the API. If the email is lost, so is the file.
How do I keep uploaded files after the email is sent?
Use a form backend that stores uploads. On splitforms, paid plans with the Storage integration connected keep up to 5 files of 5 MB each per submission, with links in the dashboard, the notification email and webhook payloads. Pro is $5/month with 500 MB of file storage; Annual is $49/year with 5 GB.
Need uploads you can find again? Point your form at https://splitforms.com/api/submit, connect Storage, and every file is saved with its submission. Get a free access key.
