QAlaunch

Contact Form 7 keeps spinning and won’t send

Contact Form 7 sends every submission through the WordPress REST API, so an endless spinner means that request was blocked, failed or never returned. The usual causes are a security or admin plugin that disables the REST API, a firewall rule that blocks the request on some devices, or cached scripts left over after an update. Open DevTools > Network, submit the form and look at the request to /wp-json/contact-form-7/…/feedback; its status code tells you which.

Opens your site in a real browser on desktop and phone. Free, about two minutes, no signup. Full report from $19.

What you'll see

A visitor fills in the form, clicks Send and the little spinner next to the button keeps turning. No green success message or red error ever appears, and nothing arrives by email. In some cases it only happens on phones or only for visitors who are not logged in.

Why it happens

1. The REST API is switched off or restricted

Plugins such as Admin and Site Enhancements, Disable REST API, or the REST options in some security suites block anonymous REST requests. Contact Form 7 needs that endpoint, so the submission is refused and the spinner waits forever.

2. A firewall rule blocks the submission

Wordfence, All In One WP Security, a host firewall or Cloudflare rules can treat the POST as suspicious, especially from mobile networks that share IP addresses. That explains cases where desktop works and phones do not.

3. Old cached scripts after an update

After Contact Form 7 or WordPress updates, a page cache or CDN can keep serving old JavaScript or an outdated nonce. The form then posts something the server rejects.

4. A script error or reCAPTCHA problem

Another plugin’s JavaScript error can stop the form handler, and a reCAPTCHA v3 integration with wrong keys or a blocked Google script leaves the request hanging.

How to fix it

  1. Open the contact page, then DevTools > Network. Submit the form and click the request whose URL contains /wp-json/contact-form-7/v1/contact-forms/ and ends in /feedback. Note the status: 401 or 403 points at a block, 500 at a server error, and no request at all at a JavaScript problem.
  2. For 401 or 403, check every security and admin-tweak plugin for an option named “Disable REST API” or “restrict REST to logged-in users”, and either turn it off or allow the contact-form-7 route. Also look at the firewall log for blocked requests at the time you tested.
  3. Purge the page cache, the minification cache and any CDN. In WP Rocket, LiteSpeed Cache and similar tools, exclude the contact page or Contact Form 7’s scripts from combine and delay JavaScript.
  4. If a red console error appears when you click Send, use the Health Check & Troubleshooting plugin to test with other plugins disabled for your session only.
  5. Once the success message appears, test delivery separately: install an SMTP plugin such as WP Mail SMTP, send its test email and then a real form submission. A green message only proves WordPress accepted the form, not that the email reached anyone.

How to check it's fixed

  • Submit the form on desktop and on a phone. The success message should appear within a few seconds.
  • In the Network tab the feedback request returns 200 and its response contains “status”: “mail_sent”.
  • The test email lands in the destination inbox, not in spam.

What a QAlaunch scan shows for this

  • JavaScript console errors on the contact page and failed requests, including a blocked or erroring REST call while the page loads.
  • Whether submitting the form empty shows Contact Form 7’s validation messages, which proves its script is running at all.
  • The scan never sends a real message, so it cannot tell you whether a submission is accepted or whether the email reaches your inbox.

See exactly what a full report contains in the sample report.

Frequently asked questions

Why does Contact Form 7 work when I am logged in but not for visitors?

Logged-in admins usually bypass page caching and pass REST API restrictions that block anonymous users. Always test in a private window, which behaves like a real visitor.

The success message shows but I never get the email. Is that the same problem?

No, that is a mail delivery problem. Configure SMTP through your email provider, set the From address to an address on your own domain, and check spam. The spinner problem happens before email is involved.

Should I switch to a different form plugin?

Other plugins that use admin-ajax instead of the REST API may work immediately, which can be a useful test. But the block that stopped Contact Form 7 is still there and can affect other plugins, so find it first.

Done for you · not automated

Rather have a QA engineer test it by hand?

If this is a site you're launching or handing to a client, I'll go through it by hand, including the WordPress-specific issues a scan can't reach, like logged-in flows.

$299one-time · 3 business days
  • Up to 10 key pages tested by hand, not a scan
  • Every flow a customer uses: forms, sign-up, checkout, booking
  • Real mobile and desktop browsers
  • A written report in plain language, with screenshots
  • A 15-minute call to walk you through it
  • 10 years of professional QA experience

Tell me about your site and I'll reply personally, usually the same day.

No payment now. I'll confirm scope and price first.

More for WordPress: all WordPress fixes · WordPress testing · why WordPress breaks after updates · why contact forms fail silently

Written by Waqas Ahmad, QA engineer with 10 years of professional testing experience. Last checked October 26, 2026.

Sources: WordPress.org: Contact Form 7 blocked from submitting, spinning · WordPress.org: Contact Form 7 not submitting on mobile · WordPress.org: submit wheel spins endlessly