Troubleshooting Submissions and Deliveries
What to check when a submission, email, webhook or chat message does not arrive, a real message is marked spam, or the redirect lands on the wrong page.
Most problems come down to one of five things: the request never reached Formboost, the form does not exist or is off, the submission was stored but not delivered, a destination refused it, or it was screened as spam. Work through the section that matches what you see.
The Form Submits, but Nothing Appears in the Dashboard
Check the endpoint ID. The action must be exactly https://formboost.app/f/YOUR_ENDPOINT_ID,
copied from the form's page in the dashboard. A wrong ID is deliberately answered the same way
as a right one — 202 Accepted — so that the endpoint cannot be used to guess valid IDs; the
submission is then dropped. Copy the ID again and submit a test.
Check the form is enabled. A disabled form also answers 202 and drops the submission.
Open the form in the dashboard and check its status.
Check the response. A plain HTML post is answered with a 302 redirect; a fetch() call
gets 202 with a JSON body. Anything else is an error with a machine-readable name:
| Status | name | What it means |
|---|---|---|
400 | EMPTY_SUBMISSION | Every field was empty, or the only fields were _honey and _redirect |
400 | MALFORMED_BODY | The body could not be parsed as JSON or form data |
404 | ROUTE_NOT_FOUND | The URL is not /f/<id> — check for a typo or a trailing path |
413 | PAYLOAD_TOO_LARGE | The body is over 256 KB; file uploads are not accepted |
415 | UNSUPPORTED_CONTENT_TYPE | Send application/json or application/x-www-form-urlencoded |
429 | RATE_LIMITED | More than 10 submissions a minute from one IP — wait for RateLimit-Reset |
Check the browser console. fetch() works from any origin — the endpoint answers preflight
requests — so a CORS error usually means the URL is wrong (a typo produces a 404 that carries
no CORS headers) rather than a policy problem.
Look under Spam. A submission that was stored but scored as spam is listed in the form's spam view, not the inbox. See marked as spam below.
Values Show "Limit exceeded — upgrade your plan to view"
The form owner's monthly submission allowance was used up when this submission arrived. It was accepted and stored so nothing is lost, but its field values are masked and nothing was delivered for it — no email, chat message, webhook or auto-reply. Upgrading reveals the values. The allowance resets monthly on the day your plan started; the dashboard shows the count. Spam submissions count toward it, so a form under bot attack can reach the limit early.
No Email Notification Arrived
- Is email notification on for this form, and is the recipient address right? Both are per-form settings.
- Was the submission delivered at all? Spam and over-limit submissions are stored but not delivered. Check the spam view and the usage counter.
- Is it the only destination on a Free-plan form? Free allows one destination per form. If you added Slack, email may have been turned off to make room.
- Check the spam folder for mail from
notifications@formboost.app, and add it to your contacts. If your form sends a_subjectfield, the notification uses that subject. - Replying goes nowhere? Replies go to an unmonitored address unless the form sends a
_replytofield with the submitter's email.
A Webhook, Zapier or n8n Delivery Shows a Failure
Open Integrations → Delivery Logs on the form. Every attempt is recorded with the status code your endpoint returned, or the error if it never answered.
| What the log shows | Cause | Fix |
|---|---|---|
401 / 403 | Your endpoint rejected the request | Add the header it expects (an Authorization value, an API key) as a custom header on the integration |
404 | Nothing is listening at the URL | For n8n, the workflow is not Active, or you pasted the Test URL instead of the Production URL. For Zapier, the Zap is off |
405 | Your endpoint does not accept POST | Change the method on the integration, or accept POST |
4xx from a validation error | Your endpoint expected a different body | The payload is documented on the HTTP Webhook page: your fields are under submission, not at the top level |
5xx | Your endpoint crashed | Check its logs; the eventId in the payload identifies the submission |
| Timeout / no response | The endpoint took more than 15 seconds, or is not publicly reachable | Answer 2xx quickly and do slow work afterwards. localhost, private IPs and non-HTTPS URLs are refused |
Formboost delivers each submission once and does not retry. Fix the endpoint, then press
Send test to confirm before the next real submission. The test carries
event: "form.submission.test" and does not create a submission.
A Slack, Discord or Telegram Message Did Not Arrive
- Slack: the URL must begin with
https://hooks.slack.com/. The channel is fixed when the webhook is created; to post somewhere else, create a new webhook. - Discord: the channel webhook URL comes from Server Settings → Integrations → Webhooks.
If the webhook was deleted in Discord, deliveries fail with
404— create a new one. - Telegram: the bot must be a member of the group or channel, and the chat ID must be the
numeric ID (negative for groups) or the
@usernameof a public channel. A bot in a privacy-mode group must be allowed to post. - All three appear in Delivery Logs with a status code, like a webhook.
A Real Message Was Marked as Spam
Every submission gets a score from 0 to 100 and a reason; at 50 or above it is stored as spam and not delivered. The reason is shown on the submission. The common ones:
- Honeypot field populated. Your
_honeyinput is not hidden from people — it must be visually hidden and haveautocomplete="off", or browsers autofill it. - High link density, Excessive uppercase, Repeated-character run, Blocklisted term. The message itself looked like a bot's. These are weighted, so one alone rarely reaches 50.
- Disposable email domain. The address is from a throwaway provider.
- Scripted user agent or No origin or referer. The request did not look like it came
from a browser on a web page — typical of a
curltest. Real visitors send both headers.
If a form receives many legitimate submissions that trip these signals, turn spam filtering off for that form; it is a per-form switch, and there are no rules to edit. On Starter and above an AI model reads the borderline cases with your form's description as context — a clear description ("Support form for a Python library; messages often contain code and links") improves its judgement.
The Redirect Lands on Formboost's Thank-You Page, Not Mine
The _redirect value must be an absolute https:// URL on the same host as the page the
form was submitted from. Anything else — http://, a relative path, another domain — falls
back to the default page rather than failing the submission. This is what prevents someone
submitting to your endpoint from their site and redirecting your visitors elsewhere. A
fetch() submission is never redirected; it gets 202 and your script decides what to show.
Still Stuck
Write to support@formboost.app with the endpoint ID, the time
of the submission and what the delivery log shows, or ask in the
support page. Include the requestId from the 202 response if you have it — it
identifies the submission end to end.
Auto Reply: Confirmation Emails to Submitters
Send an automatic email to whoever fills in your form. Your own subject and message on Starter; HTML, {{fieldName}} variables and no Formboost branding on Pro.
Integrations Overview
Every destination a Formboost form can deliver to — email, Slack, Discord, Telegram, Google Sheets, Zapier, n8n, webhooks — with plan availability and setup.