Skip to main content
formsieve Docs Support
All docs pages

Troubleshooting

Start with Test connection (Settings → Connection) or wp formsieve-gf test / wp formsieve-cf7 test: it reports the route, the model, the latency and the billing state, and names the problem. The dashboard shows the circuit-breaker state and the last error, and Formsieve keeps the last 50 API errors (never your key or visitor text) for support.

"API key invalid"

The provider rejected the key (HTTP 401 on any route, or 403 on TypeSafe direct).

  • Check that the route matches the key: an OpenRouter key does not work on the Vercel route, and so on.
  • Copy the key again without spaces; check it was not revoked in the provider's dashboard.
  • A key defined in wp-config.php (FSV_GF_API_KEY, FSV_CF7_API_KEY, FORMSIEVE_API_KEY) wins over the one saved in the settings, so check wp-config.php too.

After an invalid-key error Formsieve pauses calls for 60 minutes, so a wrong key cannot generate a stream of failing requests. Save the corrected key and run Test connection to confirm it works. Meanwhile submissions are handled by your fail mode.

"Key valid, but no credit"

The key works but the account cannot pay for the call. Formsieve shows a link to the right page and retries after 15 minutes:

  • TypeSafe: add credit in the console at https://console.typesafe.ai (TypeSafe bills prepaid credit).
  • OpenRouter (HTTP 402): buy credit at https://openrouter.ai/settings/credits. If the message mentions the key's limit, raise the credit limit of that key.
  • Vercel AI Gateway (HTTP 402): the team has no positive balance or a budget was reached; add credits or raise the budget in the Vercel dashboard.
  • AI/ML API (HTTP 403 "You've run out of credits"): top up at https://aimlapi.com/app/billing.

"Add a payment method"

Vercel returns customer_verification_required when the team has no valid payment method; Vercel requires one even for free credits. Add a card to the Vercel team, then run Test connection. A 403 that mentions the free tier means the model needs purchased credits.

"Circuit breaker open"

After 5 failed calls within 5 minutes (timeouts, network errors, rate limits, server errors), Formsieve stops calling the API for 10 minutes and then sends a single probe; if it succeeds, checks resume. A provider that asks to wait longer than 0.3 seconds before a retry is not retried within the same submission. An HTML error page (for example a CDN or firewall block page answering with 403) counts as an ordinary error, not as a rejected key or missing credit. While it is open a notice shows on Formsieve's screens and submissions follow your fail mode. Usual causes: an outage at the provider, a slow or blocked outbound connection from your host, or rate limiting.

Submissions noted "not checked"

They were not checked by the model. The note, "Not checked (…)" by Formsieve (Gravity Forms) or "Formsieve: not checked (…)" (Contact Form 7), appears on the entry (for caps, the circuit breaker, missing credit and API errors) (Gravity Forms) or in Flamingo (when installed) (Contact Form 7) and in the reason column of Formsieve → Log. Setup problems are always delivered; the other reasons follow When the API cannot answer: delivered with fail open (the default), treated as spam with fail closed. The text in brackets tells you why:

Text in brackets (log reason code) What to do
no API route chosen, no API key, data-sharing consent not given (no_route, no_key, no_consent) Finish the setup wizard. Always delivered.
hourly cap reached, monthly cap reached (cap_hourly, cap_monthly) A cap was reached (Cost and caps); raise it or wait. Caps count every request sent to the provider, so retries after errors use them up faster.
API temporarily paused after errors (breaker_open) See "Circuit breaker open" above.
no API credit (no_credit) See "Key valid, but no credit" above.
API unavailable (api_unavailable) Timeout, network or server error, or OpenRouter found no zero-data-retention endpoint; see "Timeouts" and "No endpoint available" below. The dashboard's last API error names the cause.

Formsieve for CF7 logs nothing at all until an API key is saved or Test mode is on, so there is no "no API key" note.

The dashboard counts unchecked submissions in the last 24 hours. Fail open is the default on purpose: an outage should cost you a filtered inbox for a while, never a lead.

Timeouts and connection errors

Each check has a 3-second budget with at most one quick retry. If your host is slow to reach the provider or blocks outbound HTTPS, allow connections to the host of your route (api.typesafe.ai, ai-gateway.vercel.sh or openrouter.ai). Formsieve uses the WordPress HTTP API, so a proxy configured with WP_PROXY_HOST and WP_PROXY_PORT in wp-config.php is used.

"No endpoint available" on OpenRouter

With Require zero data retention on, OpenRouter may answer that no eligible endpoint exists (for example when its only zero-data-retention Jev endpoint is down). The submission is then not checked and follows your fail mode (noted "Formsieve: not checked (API unavailable)"; delivered with fail open, treated as spam with fail closed), and the Dashboard's last API error shows no_eligible_endpoint. This error does not open the circuit breaker, so every submission keeps trying; while it lasts, a warning notice says "The route found no endpoint that meets your data policy (zero data retention), so submissions are not being checked and follow your fail mode." It disappears once a submission is answered by the model again. Turning the setting off lets OpenRouter use endpoints that may retain data. As of 2026-09-22 TypeSafe's Jev endpoint is on OpenRouter's zero-data-retention list, so this should be rare. We recommend leaving the setting on.

"Unrecognized model"

The route answered with a Jev version that Formsieve's thresholds were not set for. Filtering continues; see Calibration and consider Strict calibration.

Request rejected as invalid (HTTP 400 or 422)

The provider did not accept the request format. This is never retried. It usually means a proxy on the Custom route changes the request, or the Custom model name is wrong. Check the base URL, path and model, and send us the error from the dashboard if it persists. On AI/ML API (Custom route) it can also mean that AI/ML API rejects Formsieve's structured criteria; see Getting a key.

Nothing seems to be checked

  • Are you logged in? Trusted users are allowed without a check (Trusted users; see Pre-filters). Test from a private browser window.
  • Is Test mode on? A red badge shows in the admin bar; verdicts are simulated.
  • Is the setup finished? Until a route, a key and consent are in place (or Test mode is on), nothing is checked, not even by the free local checks; the log shows "not checked" rows. Without a key or Test mode, Formsieve for CF7 is completely inactive: no hidden fields and no log rows.
  • Is the form enabled? Check the form's Formsieve settings, the Additional Settings tab for formsieve: off, and demo_mode: on (Contact Form 7 then sends no mail and Formsieve does not check the form).
  • Did another tool decide first? When Gravity Forms' honeypot, or another plugin that hooks into gform_entry_is_spam before priority 50, has already flagged a submission, Formsieve does not check it. (Gravity Forms' Akismet check runs after Formsieve.)
  • Did another tool decide first? When Akismet, reCAPTCHA, Turnstile or the Disallowed Comment Keys check of Contact Form 7 has already flagged a submission, Formsieve does not check it.
  • Did a pre-filter decide? Open Formsieve → Log; the reason code shows which check decided (Reason codes).

The dashboard shows fewer submissions than the Log tab

The Log tab lists every decision, including re-checks from an entry's Formsieve panel and WP-CLI samples (marked "Re-check" or "WP-CLI sample") and Test mode rows (marked "Test mode"). The Dashboard counts only what visitors submitted outside Test mode. Its API calls, tokens and cost do include the re-checks and samples, because they were billed (Cost and caps).

A threshold I typed was not saved

The review and block thresholds (Settings → Detection → Sensitivity) accept a fraction such as 0.85 or a percentage such as 85 or 85%; 1 means 100%. Anything else (text, a negative number, more than 100) is refused with a message and the previous value stays. If the review threshold is not below the block threshold, the setting is saved with a warning, because then nothing can go to review.

A real lead was marked as spam

  1. Restore it: Not Spam on the entry or Not spam in Flamingo, or Mark not spam in Formsieve's log. Formsieve learns the sender.
  2. Look at the reason on the entry or in Flamingo's spam log or Formsieve's log. If it came from a list or a heuristic, adjust that list. If it came from the model, consider the Low preset, or describe legitimate messages in the form's What legitimate submissions look like / What this form is for setting ("Suppliers often write to offer quotes").
  3. Keep When the API cannot answer on fail open and Review band on its default (deliver and tag the subject), so borderline messages still reach you.

After a salt change (moving the site or a security reset)

The stored key is obfuscated with your site's authentication salt. If the salts in wp-config.php changed (a migration or a security reset), the saved key cannot be read back and forms are not checked; an error notice says "The saved API key can no longer be read because the site's security salts changed". Enter the key again under Settings → Connection, or define it as a constant.

The same salt keys the hashes in the decision log and in the learned trusted and blocked lists. After a salt change, Formsieve can no longer match those older records to an e-mail address: Export Personal Data and Erase Personal Data do not find older log rows, and earlier learned senders stop matching (blocked senders go on to the other checks, and trusted senders are checked again). The older rows hold no readable address and are removed by the daily retention task. Let Formsieve learn again from your Spam and Not spam corrections.

Updates through Envato Market

See Envato Market updates.

Asking for help

Write to [email protected] with your WordPress, PHP and host-plugin versions, the route (never your key), the Test connection result and, for a specific submission, the request ID shown on the entry.