docs
stormdoor.dev
FINDING

profanity.word

The text matches a word or phrase on the applicable language's profanity list.

SEVERITY
medium
LEADS TO
suspect
GATE
/v1/profanity
CHECK
profanity.word
Jump to what to do

What it looks at#

Whole-word matching against StormDoor’s per-language profanity word/phrase lists (seeded from LDNOOBW, CC-BY-4.0), after normalising the text:

  • Case is folded.
  • Repeated letters collapse — “shiiiit” and “shit” match the same way. Only runs of three or more collapse, so ordinary doubled letters (“committee”, “sorry”, “kaffe”) are untouched.
  • Common leetspeak substitutes fold to their letter: 0→o 1→i 3→e 4→a 5→s 7→t @→a, and the dollar sign folds to s.
  • A word spelled out with a separator between every letter — f.u.c.k, f-u-c-k, f u c k — is reconstructed, but only when every piece really is a single letter; ordinary abbreviations like “a.m.” or two-letter words on either side of a period are never treated as spelled-out evasion.
  • Multi-word phrases on the list match the same way, tolerating any amount of whitespace between the words.

Matching is whole-word, the same “Scunthorpe problem” guard /v1/pii and /v1/secrets apply: “cunt” inside “Scunthorpe” is a substring, never a whole word, and never fires. Word boundaries are Unicode-aware, so å/ä/ö/ü/ß and similar are letters, not separators — Swedish “skit” inside “skitbra” doesn’t fire either, because “skitbra” is one whole word.

Which list applies#

The caller’s languages when given, else the language /v1/profanity detects with confidence, else English — never every list at once. Sending languages is the single biggest thing you can do to reduce both misses and false positives: without it, short or ambiguous text falls back to the English list, and an English list run over ordinary Swedish or Norwegian text will flag words that are completely unremarkable in their own language (Swedish “fan”, “slut” — see the docs’ languages guidance).

What to do#

Medium severity — a real match, but plan-appropriate content moderation is a judgement call your product makes, not this API. redact: "mask" before storing or forwarding text you don’t need the raw wording in.

OTHER FINDING CODES FROM /V1/PROFANITY