FAQ

Questions, answered.

The short version of how filter8() works, what happens to your data, and how billing runs. Still stuck? [email protected].

Getting started

How do I get started?
Create an account — you land in Test mode with a f8_test_ key and 100 free calls. Send your first POST /v1/filter with a curl and you'll get a verdict back in one round-trip.
Do I need a credit card to try it?
No. Test mode is free and card-free. Add a card only when you're ready to mint a live f8_live_ key and lift the 100-call cap.
What languages / SDKs are supported?
It's a plain HTTP + JSON API, so anything that can make a request works today. There's also a WebSocket transport (/v1/stream) for the low-latency path. First-party SDKs are on the roadmap.

The engine

Is there really no LLM involved?
Not in the hot path. Every verdict is a pure function of (bundle version, input) — a normalization pipeline feeding an Aho-Corasick + NFA matcher, then scoring and a rating-aware decision. That's what makes it fast, cheap, and fully replayable. Models only ever review the ambiguous tail, offline.
What are the four verdicts?
allow passes text through, mask censors the offending span in place, reject blocks with a reason, and review routes to a human. Which one fires is driven by score against per-(rating, category) ceilings.
How does it catch evasion like l33t or spacing?
Normalization folds leet, homoglyphs, invisible characters, repeats, and separators back to a canonical form before matching — with an offset map so masking still censors the original span cleanly. A whitelist vetoes false positives (the classic "class" ≠ "ass" trap).
Can I bring my own blocklist?
Yes, on Scale and up. The dictionary is a versioned bundle with a per-tenant overlay — add terms, whitelist others, disable defaults — hot-swapped with zero downtime. Every verdict is stamped with the bundle version it used.

Data & privacy

Do you store the text I send?
The core filter is stateless — a single /v1/filter call keeps nothing after it responds. The optional conversation layer (for cross-message abuse) stores a short window, encrypted at rest, with per-rating retention caps and an erasure API.
What ends up in your logs?
Span offsets, never the substring. No raw content and no detected PII is ever written to a log line — the request log records where a match was, not what it said.
Is it usable with minors' data?
It's built for it. Ratings carry stricter thresholds and shorter retention for minor-rated content, and the erasure API supports deletion by conversation, speaker, or message — aligned with COPPA and GDPR-K. See the Privacy Policy.

Billing

What counts as a call?
One POST /v1/filter, or one item inside a batch request. Health checks, version, and metrics endpoints don't count.
What happens when I hit my quota?
Your choice, per key: hard-cap at quota (a 429 with Retry-After) or auto-overage at your tier's per-100K rate. Every response also carries RateLimit-* headers so you can self-throttle.
Can I change plans anytime?
Yes — upgrade, downgrade, or cancel from your dashboard. Changes prorate to your billing cycle. See Pricing for the full ladder.

Deployment

Can I run it on my own infrastructure?
Filter8 is a managed, hosted API today — self-hosted / on-prem deployment isn't available yet. The managed API is the same engine and the same dictionary bundles behind every verdict.
Where does the managed service run?
The managed API runs in our primary region, with logical per-tenant isolation.
How do webhooks / escalations work?
Register an endpoint (Startup and up). It's verified with a signed handshake, every payload is HMAC-signed, and delivery retries with backoff before dead-lettering. The callback URL is tenant config, never a request field — that's the SSRF control.
Didn't find it?
Ask us directly, or read the API reference.
Read the docs Contact support