{"openapi":"3.1.0","info":{"title":"Profanity Filter API","version":"1.0.0","description":"Detect and censor profanity in user-generated text across 24 languages — for comment moderation, chat filtering, username and form validation, and trust-and-safety pipelines. Send any text and get back whether it contains profanity, the exact bad words found and which languages they belong to; or get the text back with every bad word masked (choose your own mask character). Matching is word-boundary aware (so \"Scunthorpe\" and \"Penistone\" are not flagged) and normalises common leetspeak (sh1t, @ss) before matching. Target a specific language (or several) or scan all 24 at once. Powered by the well-known LDNOOBW word lists, bundled in — so the service is fully self-contained: no third-party calls, no rate limits, always available. Live, no cache. 4 endpoints. No upstream key.","contact":{"name":"PremiumApi","url":"https://www.oanor.com/by/premiumapi"}},"servers":[{"url":"https://api.oanor.com/profanity-api","description":"oanor gateway"}],"tags":[{"name":"Moderation"},{"name":"Reference"},{"name":"Meta"}],"components":{"securitySchemes":{"oanorKey":{"type":"apiKey","in":"header","name":"x-oanor-key","description":"Get your key at https://www.oanor.com/developer/keys"}}},"security":[{"oanorKey":[]}],"paths":{"/v1/check":{"get":{"operationId":"get_v1_check","tags":["Moderation"],"summary":"Detect profanity","description":"","parameters":[{"name":"text","in":"query","required":true,"description":"Text to scan","schema":{"type":"string"},"example":"this shit is great"},{"name":"lang","in":"query","required":false,"description":"Language code(s), comma-separated, or all","schema":{"type":"string"}}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"count":1,"matches":[{"word":"shit","languages":["da","en","nl","no"]}],"is_profane":true,"languages_checked":24},"meta":{"timestamp":"2026-06-02T16:52:05.001Z","request_id":"50bd9071-a1d7-42f9-a6cd-712831d9aec0"},"status":"ok","message":"Detect profanity","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/clean":{"get":{"operationId":"get_v1_clean","tags":["Moderation"],"summary":"Censor profanity","description":"","parameters":[{"name":"text","in":"query","required":true,"description":"Text to censor","schema":{"type":"string"},"example":"this shit is great"},{"name":"lang","in":"query","required":false,"description":"Language code(s) or all","schema":{"type":"string"}},{"name":"mask","in":"query","required":false,"description":"Mask character (default *)","schema":{"type":"string"}}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"cleaned":"this **** is great","matches":["shit"],"original":"this shit is great","masked_count":1},"meta":{"timestamp":"2026-06-02T16:52:05.110Z","request_id":"55e14e75-8cb9-42fd-a02e-6027f5f73410"},"status":"ok","message":"Censor profanity","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/languages":{"get":{"operationId":"get_v1_languages","tags":["Reference"],"summary":"Supported languages","description":"","parameters":[],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"count":24,"languages":[{"code":"ar","terms":38},{"code":"cs","terms":41},{"code":"da","terms":20},{"code":"de","terms":66},{"code":"en","terms":403},{"code":"eo","terms":37},{"code":"es","terms":68},{"code":"fa","terms":45},{"code":"fi","terms":130},{"code":"fr","terms":91},{"code":"hi","terms":119},{"code":"hu","terms":96},{"code":"it","terms":168},{"code":"ja","terms":180},{"code":"ko","terms":72},{"code":"nl","terms":190},{"code":"no","terms":40},{"code":"pl","terms":54},{"code":"pt","terms":76},{"code":"ru","terms":151},{"code":"sv","terms":43},{"code":"th","terms":31},{"code":"tr","terms":142},{"code":"zh","terms":319}],"total_terms":2620},"meta":{"timestamp":"2026-06-02T16:52:05.211Z","request_id":"5975bfb4-cb9d-4657-a5c2-6031998698aa"},"status":"ok","message":"Supported languages","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/meta":{"get":{"operationId":"get_v1_meta","tags":["Meta"],"summary":"Spec","description":"","parameters":[],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"auth":"none upstream; this gateway requires x-api-key","name":"Profanity Filter API","note":"Detect and censor profanity in 24 languages. /v1/check?text=... flags matches; /v1/clean?text=...&mask=* returns censored text; pass ?lang=en (or comma-separated, default: all languages). Word-boundary matching + leetspeak normalisation. Self-contained — no network calls, always available.","source":"Bundled LDNOOBW word lists (24 languages) — fully local, no upstream","endpoints":4},"meta":{"timestamp":"2026-06-02T16:52:05.318Z","request_id":"28185532-b634-45e7-a1eb-378aa7617eb7"},"status":"ok","message":"Meta","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}}},"x-oanor-pricing":[{"slug":"free","name":"Free","price_cents_month":0,"monthly_call_quota":1820,"rps_limit":2,"hard_limit":true},{"slug":"starter","name":"Starter","price_cents_month":650,"monthly_call_quota":40000,"rps_limit":8,"hard_limit":true},{"slug":"pro","name":"Pro","price_cents_month":2300,"monthly_call_quota":215000,"rps_limit":20,"hard_limit":true},{"slug":"mega","name":"Mega","price_cents_month":5700,"monthly_call_quota":1060000,"rps_limit":50,"hard_limit":true}],"x-oanor-marketplace-url":"https://www.oanor.com/api/profanity-api"}