Formspree imposes certain limits on resources, and limits the rate at which public APIs can be invoked.
Plan based limits
Formspree limits the number of forms, projects, emails and team members that can be added to each account based on the user’s current plan. It also limits the number of submissions and amount of file storage that can be used each month.
The resources that are limited based on plan level include:
- Forms that can be created
- Projects that can be created
- Submissions that can be received each month
- Team members that can be invited
- Emails that can be linked to your account
- Total size of all file uploads
For a full list of limits per plan, see the plans page.
Formspree also imposes system-wide limits that are applied to all accounts regardless of plan level. These limits are imposed to ensure that Formspree can maintain uptime and provide reliable service to all users.
The limits are checked when new form submissions are received, and if exceeded, Formspree will return an error. The limits are:
- Form rate limit: 20 posts per minute
- Max upload file size: 25MB
- Max files per submission: 10 files
To avoid hitting these limits, we recommend the following:
- Do not load test Formspree’s post endpoint
- When submitting forms via AJAX, disable the submit button after the form is submitted until the response is returned from Formspree. This will prevent accidental “double click” duplicate submissions. The formspree-react library provides a hook for state management that can assist in disabling forms while waiting for a response.
- Always display rate limit errors to the website visitor who submitted the form, so they will know to wait and try again later.
After submitting to a Formspree endpoint, HTML forms that reach the limit will be redirected to an error page. Form owners don’t need to add any additional code to enable this behavior.
AJAX forms (those with an
accept-type header set to
application/json ) will respond with a
The formspree-react library includes a built-in validation component that can be used to catch and display rate limit errors.