BYTETOOLS

PurgoMalum API

Free profanity filter API with no key: remove or mask offensive words from text, with custom word lists and configurable replacement characters. Tested.

No API key requiredCORS enabledHTTPSFree tier

Endpoint tested and returned HTTP 200 on 2026-08-19

What is the PurgoMalum API?

PurgoMalum is a free, key-free profanity filtering API that removes or masks offensive words in a supplied string, with configurable replacement characters and support for adding or excluding custom words.

PurgoMalum takes text and returns it with profanity filtered out, replaced by a character of your choosing. It handles common obfuscations such as character substitution and repeated letters, which naive word-list filters miss.

It is worth being realistic about what any profanity filter achieves. Filters produce both false positives — the classic Scunthorpe problem, where legitimate words contain filtered substrings — and false negatives from creative spelling. Use it as one layer, not as your only moderation.

Quick facts

Base URL
https://www.purgomalum.com/service
Authentication
No API key required.
Rate limit
No published limit; the service asks for reasonable use.
Pricing
Free.
CORS
Enabled — callable directly from browser JavaScript
Official docs
Read the docs

How to use the PurgoMalum API

Every request below was executed against the live API on 2026-08-19, and the response shown is the real body it returned — not an illustration.

1. Filter profanity from text

GET https://www.purgomalum.com/service/json?text=this%20is%20a%20test

curl
curl 'https://www.purgomalum.com/service/json?text=this%20is%20a%20test'
JavaScript (fetch)
const res = await fetch("https://www.purgomalum.com/service/json?text=this%20is%20a%20test");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);
Python (requests)
import requests

res = requests.get("https://www.purgomalum.com/service/json?text=this%20is%20a%20test", timeout=20)
res.raise_for_status()
print(res.json())
Response — HTTP 200
{
  "result": "this is a test"
}

Parameters

ParameterTypeRequiredDescription
textstringRequiredThe text to filter. URL-encode it. this is a test
addstringOptionalComma-separated extra words to filter. badword,another
fill_textstringOptionalReplacement text for filtered words. [removed]
fill_charstringOptionalSingle character to mask each letter. *
formatstringOptionaljson, xml or plain. json

Response fields

resultstring
The filtered text. That is the whole response on the JSON endpoint.

What you can build with the PurgoMalum API

  • Filter user-generated comments and usernames
  • Moderate chat messages in a game or community app
  • Sanitise form input before storage
  • Add a first-pass content filter ahead of human moderation

Common errors and how to fix them

Legitimate words filtered

Substring matching causes false positives — the Scunthorpe problem.

Fix: Use the `add` and exclusion options to tune the list for your context, and never auto-ban on a filter hit alone.

Obfuscated profanity slips through

No filter catches every creative spelling.

Fix: Treat it as one layer alongside reporting and human moderation.

Text truncated

The text parameter was not URL-encoded.

Fix: Percent-encode the text; ampersands and spaces break the query string.

PurgoMalum API — frequently asked questions

Is PurgoMalum free?

Yes, free with no API key or registration.

Can I add my own banned words?

Yes, pass a comma-separated list in the `add` parameter, which is how you tune it for community-specific terms.

Does it catch obfuscated profanity?

It handles common substitutions and repeated characters, but no filter catches everything. Treat it as a first pass rather than complete protection.

Should I auto-ban users based on this?

No. Profanity filters produce false positives on legitimate words containing filtered substrings. Use it to flag content for review rather than to take automatic punitive action.

Tools that pair with this API

PurgoMalum is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-19; always check the official documentation before relying on this API in production, as terms and limits can change.