Unprofane
DocsLists

Lists

Allow, block and reserved lists per project, from the dashboard or the API. Terms are folded the way the engine folds text, so a listed word matches its disguises too.

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.