Billing & Pricing
FormShield plans, credit weights per product, metered overage, and how to upgrade or manage your subscription from the dashboard.
FormShield bills in credits, not raw requests. One credit is the unit of metered usage; every product spends a fixed number of credits per call, and your plan includes a monthly pool of them. Heavier checks cost more credits, so a single shared balance covers every product on one bill.
Plans
Every org starts on Free. Paid plans add a larger monthly credit pool and metered overage; Enterprise is unmetered and sales-led.
| Plan | Price | Monthly credits | Overage |
|---|---|---|---|
| Free | $0 | 10,000 | None — hard stop at the limit |
| Pro | $25/mo | 50,000 | $0.80 per 1,000 credits |
| Business | $99/mo | 300,000 | $0.60 per 1,000 credits |
| Enterprise | Custom | Unlimited | — |
Credits per product
Each product spends a fixed number of credits per call. The passive Content Protection beacon is always free, so you can instrument every pageview without touching your balance.
| Product | Endpoint | Credits per call |
|---|---|---|
| IP Intelligence | GET /v1/ip | 1 (+1 only for rdns enrichment on a cache miss) |
| Email Intelligence | POST /v1/email | 3 |
| Content Filter | POST /v1/check, POST /v1/content | 2 |
| Content Protection — beacon | handshake / collect / report | Free |
| Content Protection — deep analysis | — | 4 |
| Voight | POST /v1/challenge/verify | 1 |
| Auth Protection | POST /v1/sessions/resolve | 2 |
| Metering (coming soon) | POST /v1/meter | 2 |
| Auth Protection — signup (coming soon) | — | 5 |
| Commerce Protection (coming soon) | POST /v1/commerce/verify | 30 |
The region and company IP enrichments are included at no extra credit; only rdns (reverse DNS) can add a credit, and only when the hostname isn’t already cached. Every response reports the exact credits charged under metadata (and metadata.enrichment on /v1/ip), so cost is never a surprise.
How metering and overage work
FormShield meters usage per org across the calendar billing period.
- Free hard-stops at 10,000 credits — calls past the limit return
429 QUOTA_EXCEEDEDuntil the period resets. The passive beacon path is never hard-stopped. - Pro and Business soft-allow past their included credits and bill the overage to a Stripe Billing Meter at the plan’s per-1,000-credit rate. You’re never blocked mid-month for going over.
- Enterprise is unmetered (quota-exempt).
Check your current usage any time:
curl https://api.formshield.dev/v1/orgs/{orgId}/usage \
-H "Authorization: Bearer fs_live_…"{
"plan": "pro",
"monthly_quota": 50000,
"used": 18240,
"remaining": 31760,
"period": "202606",
"period_end": "2026-07-01T00:00:00.000Z",
"overage": 0,
"subscription_status": "active",
"trial_end": null
}When you’re subscribed, period_end is your Stripe billing-period end (not the calendar month). subscription_status is one of active, trialing, past_due, canceled, or incomplete.
The 14-day Pro trial
Upgrading to Pro starts a 14-day free trial that requires a card. Stripe Checkout collects a payment method up front; you’re not charged during the trial, and at day 14 the trial auto-converts to paid Pro unless you cancel first. There’s no automatic drop back to Free — cancel from the billing portal before the trial ends if you don’t want to continue.
While on trial, GET /v1/orgs/{orgId}/usage returns subscription_status: "trialing" and a trial_end ISO timestamp.
Upgrade a plan (Checkout)
Start a subscription from your backend, then redirect the browser to the returned Stripe Checkout URL.
-
Create a checkout session
POST /v1/orgs/{orgId}/billing/checkoutwith the target plan. Requires the manage billing capability (org owner or billing role).bash curl -X POST https://api.formshield.dev/v1/orgs/{orgId}/billing/checkout \ -H "Authorization: Bearer fs_live_…" \ -H "Content-Type: application/json" \ -d '{ "plan": "pro" }'The
planisproorbusiness. Optionalsuccess_urlandcancel_urloverride where Stripe sends the user afterward. -
Redirect to Checkout
The response is
{ "url": "https://checkout.stripe.com/…", "session_id": "cs_…" }. Send the browser tourl. Stripe handles the card and trial; on success the user returns to yoursuccess_url. -
The webhook updates your quota
FormShield receives the Stripe lifecycle events at
POST /webhooks/stripeand updates the org’s plan, quota, and subscription status. The new credits are live within a few minutes.
Manage billing (Portal)
To change a card, view invoices, switch plans, or cancel, open the Stripe Billing Portal.
curl -X POST https://api.formshield.dev/v1/orgs/{orgId}/billing/portal \
-H "Authorization: Bearer fs_live_…" \
-H "Content-Type: application/json" \
-d '{ "return_url": "https://app.formshield.dev/billing" }'The response is { "url": "https://billing.stripe.com/…" } — redirect the browser there. The portal requires the manage billing capability. Most teams do all of this from the dashboard’s Billing page, which wraps both endpoints.
Common questions
What happens when I run out of credits? question path On Free, calls past 10,000 credits return 429 QUOTA_EXCEEDED until the month resets — except the passive beacon path, which is never hard-stopped. On Pro and Business, you keep working: usage past your included credits is metered as overage and billed at your plan’s per-1,000-credit rate.
Is the beacon really free? question path Yes. The passive Content Protection beacon (handshake / collect / report) costs zero credits, so you can record scored pageviews across your whole site without spending your balance. Deep analysis and the per-call APIs are what consume credits.
Do I need a card to try a paid plan? question path Yes. The 14-day Pro trial is card-required — Stripe Checkout collects a payment method, you aren’t charged during the trial, and it auto-converts to paid Pro at day 14 unless you cancel from the billing portal first.
How do I see what I've used? question path Call GET /v1/orgs/{orgId}/usage for plan, monthly_quota, used, remaining, period_end, and any overage, or open the dashboard’s Billing page for the same numbers with a usage chart.