Each project has three lists. A term on a list is folded the same way the engine folds text (case, look-alikes, separators, leetspeak), so Scunthorpe on the allow list also allows SCUNTHORPE and Scunth0rpe, and pwnzor on the block list blocks p.w.n.z.o.r.
| List | Effect |
|---|---|
allow |
The term never matches, in any context. For place names, surnames, product names and the words your community uses harmlessly. |
block |
The term matches as profanity, severity strong, whatever the lexicon says. For words that are a problem in your product and nowhere else. |
reserved |
In the username contexts, the term matches as reserved. For admin, support, moderator and your own brand. |
From the dashboard
The lists page takes one term per line, or a CSV. The list is replaced on save.
From the API
Read, replace or empty a list with the project’s own key. A key sees only its own project.
curl -X PUT https://api.unprofane.com/v1/projects/prj_YOUR_PROJECT_ID/lists/allow \
-H "Authorization: Bearer up_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"terms":["Scunthorpe","Dickinson","cockatoo"]}'
Up to 5,000 terms of up to 64 characters per list. Every change bumps the list version, and every key on the project reads the new list within a minute.
With a request
A check or a batch can carry its own allow and block terms, added to the project’s lists for that request only. Use it when the terms depend on where the text is going: a channel’s own banned words, or the names in one game’s lobby.
{
"text": "we sell big ass fans, add me on t3l3gr4m",
"lists": { "allow": ["big ass fans"], "block": ["telegram"] }
}
Up to 50 terms of each kind, 64 characters each, folded as the project’s are. An allowed phrase clears the words inside it and no others: big ass fans allows that phrase, not ass on its own. A publishable key cannot send lists, since anyone can write a browser’s request; send them from your server.
What a list cannot do
An allow-listed term inside a longer profane string still matches on the longer string, and an allowed phrase clears only what it covers. A block-listed term does not become a slur or a threat; it is profanity. Lists are per project, not per account: make a project per product.