Data Validation — entry 004 of 7
PurgoMalum
PurgoMalum is a free, keyless GET-only web service that strips or flags profanity and obscenity in a submitted text string, recognizing common character substitutions ("@" for "a", "$" for "s") and an internal profanity list that can be extended per-request with an `add` parameter of extra blocked words. Separate request-type paths return the cleaned text as plain text, XML, or JSON, or return just a "true"/"false" verdict via its `containsprofanity` endpoint, so callers pick the shape they need without content negotiation headers. It's a single-purpose text-moderation utility rather than a full profile of a company's platform — there is no dashboard, key, or paid tier.
PurgoMalum is a free, keyless GET-only profanity filter: a live GET to /service/json?text=... in this run returned the input text with recognized profanity replaced by asterisks, and the same call against /service/plain and /service/xml returned the identical cleaned string wrapped in plain text and a <PurgoMalum> XML envelope respectively.
GreatAPIs Score
Auth quickstart
- No API key or signup required — every container (
/service/json,/service/plain,/service/xml,/service/containsprofanity) answered fully keyless in this run's probes, withaccess-control-allow-origin: *on every response.
Your key is stored only in this browser (localStorage) and sent directly to the API — never to greatapis.
Filter profanity from a text string
GEThttps://www.purgomalum.com/service/json?text=this+is+shitty+test
{"result":"this is ****** test"}Developer reference
https://www.purgomalum.com/serviceGotchas & limits
- Errors don't use an HTTP error status — they're always HTTP 200, with the error message shaped to match the requested container: a live GET to
/service/jsonwith an over-longfill_textreturned{"error":"User Replacement Text Exceeds Limit of 20 Characters."}, the same call against/service/plainreturned the bare stringUser Replacement Text Exceeds Limit of 20 Characters., and against/service/xmlreturned<PurgoMalum xmlns="http://www.purgomalum.com"><error>User Replacement Text Exceeds Limit of 20 Characters.</error></PurgoMalum>— a client checking only the status code will never see these fail. - A request with no
textparam at all is also a 200: a live GET to/service/jsonwithtextomitted returned{"error":"No Input"}, not a 4xx. fill_charonly accepts a narrow set of characters, not "any single character" or "alphanumeric only": live probes this run showed*(the default) and-both accepted, while%,@,!, and even a plain digit0all returned{"error":"Invalid User Replacement Characters"}— check your exact character against a live call rather than assuming it's allowed./service/containsprofanityreturns a baretrue/falsestring (confirmed live:text=this is shitty test→true), not a JSON boolean or a 0/1 flag, regardless of which container path you hit it through.- The
addparameter extends the blocklist per-request rather than needing a stored list: a live GET withtext=this is a bogusword test&add=boguswordfiltered the custom word too, returning{"result":"this is a ********* test"}, even though "bogusword" isn't profanity on its own.