Cost and caps
Formsieve is a one-time purchase. Checking submissions uses your own Jev key, so the provider bills you per use. This page shows what a check costs and how to keep the bill predictable.
What a check costs
As of 2026-09-22, TypeSafe's list price for Jev is $0.042 per million input tokens; output is free. Vercel AI Gateway charges the same with no markup (see Getting a key for its current offer); OpenRouter charges the same with no inference markup but adds a 5.5% fee ($0.80 minimum) when you buy credit. Prices can change during TypeSafe's early access; check the provider's page.
A Formsieve check sends about 1,100 to 1,500 input tokens (our estimate from the request format: your site and form description, the submission fields, the signals and six questions; longer messages use more). At a typical 1,300 tokens:
| Checks that reach the API | Approximate cost |
|---|---|
| 1 | $0.000055 |
| 1,000 | $0.055 |
| 10,000 | $0.55 |
| 100,000 | $5.50 |
The Test connection button sends a short sample of about 500 tokens (about $0.00002).
Many submissions never reach the API: those stopped by the honeypot, the time-to-submit check, the rate limit, the lists, a disposable domain or the replay cache cost nothing, and so do trivial submissions and allow-listed senders.
Seeing what you spend
The Dashboard shows, for the last 30 days: the submissions checked, the number sent to the AI model and their share of all submissions, the input tokens with their estimated cost, and the average and 95th-percentile latency. For the current calendar month it shows the cost so far and a projection for the whole month. When the provider reports the cost of each call (OpenRouter and Vercel do), Formsieve uses that figure; otherwise it multiplies the tokens by Price per million input tokens (USD) (Settings → Advanced, default $0.042). The WP-CLI command wp formsieve-gf stats (or wp formsieve-cf7 stats) prints the same figures for any number of days (Developer hooks and WP-CLI, Developer hooks and WP-CLI).
Re-checks of an entry by an administrator (Re-check in the entry's Formsieve panel) and WP-CLI samples (wp formsieve-gf test <form_id> or wp formsieve-cf7 test <form_id>) are billed like any other call, so they are included in the API calls, tokens, cost and latency, but they are not counted as submissions: the submission counts, the share sent to the model, the unchecked submissions, the corrections and the most frequent categories cover what visitors sent. When there were any, the Sent to the AI model card adds "plus N re-checks", and the Log tab marks those rows.
Caps
| Cap | Default | When it is reached |
|---|---|---|
| Checks per form per hour | 0 (no limit) | Further submissions to that form in the same clock hour are not sent to the API. |
| Checks per month | 0 (no limit) | Further submissions this calendar month (UTC), all forms together, are not sent to the API. |
The caps count requests sent to the provider, which is what you are billed for: every request counts before it is sent, and a quick retry after a timeout or server error counts as a second request. Test connection is not counted. The counters exist only while a cap is set (in your site's object cache when it has a persistent one, otherwise as short-lived WordPress transients); a counter that does not exist yet, for example right after you set a cap, starts from the calls recorded in the decision log for that hour or month. The dashboard's figures come from the decision log (one row per checked submission), so after retries they can be a little lower than the cap counters.
Both are under Settings → Detection → Cost limits. The monthly count also includes days of the current month whose log rows the retention task has already deleted (with the 30-day retention setting). Capped submissions follow your fail mode (When the API cannot answer): by default they are delivered with a note on the entry, "Not checked (hourly cap reached)" (Gravity Forms) or in Flamingo and the Formsieve log, "Formsieve: not checked (hourly cap reached)" (Contact Form 7) (or "monthly cap reached"); with Fail closed they are treated as spam. Local pre-filters still apply. A sensible start for a small business site is 30 checks per form per hour and 5,000 per month.
You can also cap spending at the provider: OpenRouter lets you give a key its own credit limit, and Vercel lets you set budgets.
During a spam flood
- The pre-filters and the replay cache absorb most of it for free.
- Caps stop the rest from reaching the API.
- If the provider starts failing, the circuit breaker stops calls for 10 minutes after 5 failures within 5 minutes, then tries one request.
- Consider switching on Aggressive mode or the High preset for the duration.