Unprofane
DocsOverview

Documentation

One endpoint answers whether a text can be shown, with the evidence. Everything else is a setting on it.

Start here

  • Quickstart: a key, a first call and a reading of the response, in under two minutes.
  • Examples: texts in the covered languages with the rules' answer and the answer with the model, side by side.
  • API reference: every endpoint, every field, in eight languages. Also as openapi.json.
  • Errors: every problem type, its status and what to send instead.

Guides

  • Contexts: What the text is changes how it is read. Usernames are split into words and checked backwards; comments are read as prose.
  • Policies: How strict to be. Four presets, or your own map of category to allow, review or block, saved on the project.
  • Evasion tags: Every way a writer disguises a word is normalised and named in the response, so you can see how the filter was fooled and choose what to do about it.
  • Engine versions: Versions are dated and immutable. Pin one per project or per request, read the changelog, and replay a sample before you move.
  • 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.
  • Publishable keys: A key that may live in a browser or a game client, limited to /v1/check and to the origins you allow, with a per-address limit.
  • Edge-only projects: A project setting that guarantees no text is ever sent to a model. The model client is not constructed, so no code path can reach it.
  • Rate limits and quotas: Bursts per key per minute by plan, the monthly allowance, what happens past it, how test keys are capped, and what a key does with no plan.
  • Batch checks: Up to 100 texts in one request, each with its own id, answered in order. One bad item never fails the batch.
  • Feedback: Send a correction when a result is wrong. Corrections feed the lexicon, the innocent list and the calibration, never a silent change inside a pinned version.
  • Perspective migration: Change the base URL and keep your client. The same path, the same JSON, the same errors, the key as ?key=.
  • Privacy for developers: What the API keeps and what it never keeps, in the terms a developer needs to answer their own users and their own lawyer.
  • SDKs: The JavaScript and Python clients: typed, no dependencies beyond the runtime, retries with jitter, and a batch helper for any number of texts.
  • MCP server: The same engine as a Model Context Protocol server, for coding agents and assistants. Three tools, the same keys, Streamable HTTP.

Limits at a glance

WhatLimit
EndpointPOST https://api.unprofane.com/v1/check
Text1 to 10,000 characters; 64 in the username and display_name contexts
BatchUp to 100 items a request
Lists sent with a requestUp to 50 allow and 50 block terms, 64 characters each
A project's listsUp to 5,000 terms each, 64 characters each
Requests a minute, per keyHobby 120, Starter 600, Growth 3,000, Scale 12,000
Test keys100 checks a day per account, on every plan and with none
Live and publishable keysAnswer on a plan, from $9 a month; with no plan, 402 subscription-required

For agents

/llms.txt is the index and /llms-full.txt is every page on this site's docs in one Markdown file, written from the same sources as these pages. The MCP server at https://api.unprofane.com/mcp exposes check_text, check_batch and get_integration_snippet over Streamable HTTP with the same bearer keys.

4 reference pages, 14 guides.