- Docs
- Troubleshooting
Submissions not arriving?
Work down this list. Start with the curl test at the bottom of the page if you want a fast answer: it tells you whether the problem is your form or your setup.
1. Check the dashboard first
Open your form in the dashboard. If the submission is in the inbox, it was stored and the problem is delivery: open the Delivery log to see each destination’s status and error, fix the cause, and press Retry. If it isn’t there, the request never got stored; keep reading.
2. The form action
The action must be your exact form URL, https://api.formrill.com/YOUR_FORM_ID/submit. A typo in the ID, a missing /submit or a leftover YOUR_FORM_ID returns 404 Form not found. Copy it from the Setup tab.
3. Method must be POST
Use method="POST". Without it the browser sends a GET, which the endpoint doesn’t accept.
4. Every field needs a name
Browsers only send inputs that have a name attribute, and FormRill stores whatever it receives. An input with only an id is silently left out. Name the email field email so Reply goes to the visitor.
5. The honeypot must stay empty
The botcheck checkbox must stay unchecked and hidden. If it has a value (other than false), the request is rejected with 422 Spam detected and the submission goes to your Spam folder instead of your inbox. Don’t pre-check it, don’t show it, and don’t reuse the name botcheck for a real field.
6. Domain whitelist
If you set allowed domains on the form, only requests whose Origin or Referer host matches one of them (or a subdomain) are accepted; others get 403. Check for www versus the bare domain, a staging URL, or localhost while testing. With a whitelist set, a request that sends neither header is refused too.
7. Check spam and junk folders
Notification emails come from our email provider, and some mailboxes file the first one as spam. Mark it as not spam, and add the sender to your contacts. Whatever happens to the email, the submission is in the dashboard.
8. Submitting with JavaScript
- Send
Accept: application/jsonto get JSON back. Without it, errors come back as plain text and success as an HTML page or a303redirect thatfetchfollows. - Send either
FormDataor a JSON body withContent-Type: application/json. A JSON body must be an object. - Bodies over 100 KB return
413. - CORS: the submit endpoint allows requests from any origin, so a CORS error in the console almost always hides a different problem, such as a wrong URL. Check the Network tab for the real status code.
9. File uploads aren’t supported yet
File uploads aren’t supported yet: a form that sends a file gets a clear error (415) and nothing is saved. If a form with a file input fails, remove the file field or ask for a link instead. See Reliability.
10. Test with curl
curl -i -X POST https://api.formrill.com/YOUR_FORM_ID/submit \
-H 'Accept: application/json' \
-d 'name=Test' -d 'email=you@example.com' -d 'message=Hello'{"ok":true,"id":"s_…"}: stored. Check the dashboard; if it is there but no email arrived, look at the delivery log.404: wrong form ID or URL.403: domain whitelist.422: honeypot.413: body too large.415: the form sent a file.
If curl works but your page doesn’t, the difference is in your form markup: revisit steps 2 to 6. Full status codes are in the API reference, and the storage and retry model is on the reliability page.
Need a fresh, working form URL?
Free up to 500 submissions a month and unlimited forms. No server, no credit card.
Start free