Data Validation — entry 004 of 7

PurgoMalum

Verified Jul 2026

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.

profanity-filtercontent-moderationtext-validationobscenity-filter
AuthenticationNone requiredCall it straight away — no key, no signup.
HTTPSSupportedTraffic is encrypted in transit.
CORSEnabledCallable directly from browser JavaScript.
PricingFreeNo paid tier — free for the documented use case.
FormatsJSON, XML, Plain TextResponses can be requested as JSON or XML or Plain Text.

GreatAPIs Score

Score80out of 100
Authentication25/25No authentication required
Pricing20/20Free to use
Docs0/20No docs or spec available
Formats15/15Supports 3 response formats
Freshness20/20Verified within 6 months

Embed this badge

Scored 80 on greatapis.com
<a href="https://greatapis.com/api/purgomalum/"><img src="https://greatapis.com/badge/purgomalum.svg" alt="Scored 80 on greatapis.com"></a>

Auth quickstart

  1. No API key or signup required — every container (`/service/json`, `/service/plain`, `/service/xml`, `/service/containsprofanity`) answered fully keyless in this run's probes, with `access-control-allow-origin: *` on every response.
Stored keyNo key stored

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

200 application/json

{"result":"this is ****** test"}

Developer reference

Base URLhttps://www.purgomalum.com/service

Gotchas & 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/json` with an over-long `fill_text` returned `{"error":"User Replacement Text Exceeds Limit of 20 Characters."}`, the same call against `/service/plain` returned the bare string `User Replacement Text Exceeds Limit of 20 Characters.`, and against `/service/xml` returned `<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 `text` param at all is also a 200: a live GET to `/service/json` with `text` omitted returned `{"error":"No Input"}`, not a 4xx.
  • `fill_char` only 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 digit `0` all returned `{"error":"Invalid User Replacement Characters"}` — check your exact character against a live call rather than assuming it's allowed.
  • `/service/containsprofanity` returns a bare `true`/`false` string (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 `add` parameter extends the blocklist per-request rather than needing a stored list: a live GET with `text=this is a bogusword test&add=bogusword` filtered the custom word too, returning `{"result":"this is a ********* test"}`, even though "bogusword" isn't profanity on its own.