Getform is Forminit now
On 14 January 2026 Getform was renamed to Forminit. Old endpoints like https://getform.io/f/… keep working, so most forms did not break on that day. The rest moved: getform.io redirects to forminit.com, the old app.getform.io dashboard redirects to app.forminit.com, and every old docs link now opens the docs home page instead of the page it pointed to. If a tutorial sent you to a Getform docs page that looks unrelated, that is why.
npm install getform installs an unrelated jQuery package from 2018; Forminit's own SDK is the forminit package.
What the endpoints answered on our test
response.ok passes and the page thanks the visitor. Only the body says the form does not exist.We sent requests to both hosts on 11.10.2026 with a made-up form ID. The same mistake gets an HTML page when a normal form submits and JSON when your code asks for it with Accept: application/json or sends a JSON body.
| What you see | HTTP status | What happened |
|---|---|---|
| Page: “This form has been deleted and is no longer available. Please contact support if you believe this is an error.” | 200 | The form ID does not exist (typo, placeholder or deleted form) |
{"success":false,"error":"FORM_NOT_FOUND","code":404,"message":"This form has been deleted…"} | 200 | The same, with fetch or a JSON body |
| The Forminit home page opens | 302 | The form sent GET instead of POST; the data is dropped |
<Error><Code>AccessDenied</Code><Message>Access Denied</Message></Error> | 403 | getform.io/f/ with no ID at all |
| “Page Not Found - 404” | 404 | forminit.com/f/ with no ID at all |
The docs list FORM_NOT_FOUND as a 404, but the live reply is HTTP 200 with "code":404 inside the body.
“This form has been deleted”: the form ID is wrong
This message comes back for any ID that does not match a form, so it shows up even when you never deleted anything. Most of the time it is one of these:
- the placeholder from a tutorial or an AI builder is still in the code, for example
YOUR_FORM_IDor{your-form-id}; - a character was lost when the ID was copied;
- the ID sits in an environment variable that exists on your computer but not on the live site, so the URL ends in
/f/undefined.
Open the form in the Forminit dashboard, copy the endpoint and paste the whole URL into the form's action.
<form action="https://forminit.com/f/YOUR_FORM_ID" method="POST"> <label>Email <input type="email" name="email" required></label> <label>Message <textarea name="message" required></textarea></label> <button type="submit">Send</button> </form>
The page jumps to the Forminit home page
If pressing Send takes the visitor to forminit.com, your form is sending GET. A form tag without method does that by default, and so does opening the endpoint as a link. Forminit answers GET with a redirect to its home page and keeps nothing, with no error anywhere. Add method="POST" to the form tag.
403 “AccessDenied” on getform.io
This XML answer looks like a permissions problem, but on our test it only appeared when the URL ended in /f/ with no ID after it. The usual cause is an empty environment variable on the live site. Print the endpoint your page actually uses, or look at the request in the browser's Network tab, and you will see the missing ID.
fetch says it worked, but nothing arrives
Getform's old fetch example checked response.ok and threw an error only when it was false. Forminit now answers a missing form with HTTP 200, so response.ok is true and the visitor sees your thank-you message while the data goes nowhere. Read the body: when success is false, show message instead of a success state.
When we tested 105 AI-built sites, 27 forms showed success and sent nothing (the study).
const response = await fetch("https://forminit.com/f/YOUR_FORM_ID", {
method: "POST",
headers: { Accept: "application/json" },
body: new FormData(form),
});
const data = await response.json();
// Forminit answers 200 even when the form does not exist,
// so response.ok is not enough. Check the body.
if (data.success === false) throw new Error(data.message);
showSuccess();Submissions that never show up in the inbox
These come from Forminit's documentation rather than our test, because they need a real form:
- If you limit the form to your domains, a submission from any other address is not rejected. It goes to the Spam folder. A preview URL or a new domain can send everything there.
- The free plan has 100 submissions a month. Over the limit, Forminit says forms “pause and reject new submissions”, and those submissions are not stored, so they cannot be recovered later.
- Old Getform docs listed field names it drops, among them
id,submitandpassword. If one field never arrives, rename it. - Forminit supports reCAPTCHA v3. A token older than two minutes fails with
RECAPTCHA_TOKEN_EXPIRED.
If you are switching anyway
Formgong works the same way: a form posts to one URL with a key. A missing or wrong key gets a real error status and "success": false, so a plain response.ok check already catches it. The free plan has 300 submissions a month with email on every one, Telegram alerts, data stored in the EU, and errors and thank-you pages in 12 languages. Switching means changing the action to https://formgong.com/submit and adding <input type="hidden" name="access_key">. See the HTML guide and how Formgong compares with other form backends.
Frequently asked questions
Is Getform shut down?
No. Getform was renamed to Forminit on 14 January 2026. Old getform.io/f/ endpoints still accept submissions; the dashboard and docs moved to forminit.com.
Why does Getform say “This form has been deleted”?
The ID after /f/ does not match a form. It appears for typos, placeholders and empty environment variables too. Copy the endpoint again from the Forminit dashboard.
Why does my Getform form open the Forminit home page?
The form sends GET. Add method="POST" to the form tag; Forminit redirects GET requests to its home page and keeps nothing.
How do I know a Forminit submission really worked?
Send Accept: application/json and check the body: success must be true. HTTP status alone is not enough, because a missing form also returns 200.
Sources and documentation
Official references for this guide: Forminit: Getform is now Forminit, Forminit: submit form API and error codes, Forminit: authorized domains, Forminit: pricing and limits, Forminit: reCAPTCHA. HTML contact form, where data is stored.
Related guides
- Lovable form submissions to email and Telegram
- HTML contact form without a backend: a working example
- How to send website form submissions to Telegram
- Contact form not sending email? Check where it stops
- Managing website leads in Telegram without a CRM
- Form backend for Lovable, Bolt, v0, Cursor
- Telegram bot for a contact form: build or skip?
- GDPR form backend: 7 checks before you choose
- Lovable form not sending email? 6 fixes
- Netlify Forms not working? React and Bolt fixes
- Stop contact form spam without a CAPTCHA
- GitHub Pages contact form: a working setup
- Mailto Form in HTML: Why It Fails and What to Use
- HTML form to Google Sheets: 2 free methods
- Webflow form submission limit: what to do at 50
- Turnstile vs reCAPTCHA vs hCaptcha for forms
- Contact Form 7 and Elementor forms to Telegram
- Squarespace contact form not sending email?
- Shopify contact form: where do messages go?
- Google Form to Telegram: free Apps Script way
- Wix contact form not sending email? Fixes
- EU / GDPR Formspree alternatives compared
- HTML form action attribute explained
- How do HTML forms work? The HTTP request
- Types of Injection Attacks on Web Forms (2026)
- Indirect Prompt Injection in MCP
- MCP Rug Pull Attack: Detect Tool Changes
- Form without a backend: 7 ways that work
- Thank-you page after form submission (HTML)
- Indirect Prompt Injection Examples (2023–2026)
- Indirect Prompt Injection via Email
- What Is Tool Poisoning in MCP?
- WordPress contact form without a plugin
- Send email from frontend JavaScript
- How to Prevent Indirect Prompt Injection
- Honeypot Form Field: How to Add One That Works
- Contact Form with File Upload (HTML, No PHP)
- Angular contact form without a backend
- Send form submissions to Slack or Discord without Zapier
- Verify a form webhook signature (HMAC-SHA256)
- Contact forms that send nothing: 793 AI-built sites tested
- v0 contact form that actually sends: 3 ways
- How we tested AI-built contact forms, and 12 bugs we hit
- Cloudflare vs Netlify free plan: hosting that never pauses
- EmailJS errors 400, 412 and 422: causes and fixes
- Resend errors in contact forms: domain, CORS, API key
- Supabase Edge Function blocked by CORS policy: 3 causes
- Formspree “Form not found” and other errors: fixes
- Web3Forms errors: “Invalid access key” and 403 explained
- How to add customer reviews to your website for free
- Next.js contact form not working? 6 errors, reproduced
- Webflow form not sending email? What to check, tested
- FormSubmit not working? “This form needs Activation” fix
- Contact form “TypeError: Failed to fetch”: causes and fixes
- WooCommerce product enquiry form
- Contact Form 7 vs WPForms
- Gravity Forms alternative free
- WordPress contact form block