Error codes
What each error means and what to do about it.
When a signup fails, a JSON reply carries the code in error. A plain HTML form sends the visitor to your error page with ?error=<code>. The embed shows the matching text in the visitor's language.
| Code | Meaning | What to do |
|---|---|---|
invalid_email | The address isn't a valid email address. | Ask the visitor to check it. |
missing_field | A required question wasn't answered. | Check the form sends every required question. |
verification_failed | The bot check failed or was missing. | See Spam protection. |
rate_limited | Too many tries from this visitor in a minute. | Wait a minute. |
closed | The waitlist isn't taking signups. | The project is a draft or closed. |
origin_not_allowed | The form is on a site that isn't on the project's list. | Add the site's address to the project. |
too_large | The form sent more than 32 KB. | Shorten long answers. |
length_required | The request had no Content-Length. | Send the form from a browser or set the header. |
invalid_body | The form data couldn't be read. | Send it as a normal form or FormData. |
server_error | Something went wrong on our side. | Try again in a minute. |
origin_not_allowed always comes back as JSON with status 403. Waitlark doesn't send visitors back to a site it doesn't know.
A page per error
On the project you can set an error page per language, and optionally one per code (error_invalid_email and so on). Without a page for the code, the visitor lands on the general error page.
Updated 19 October 2026