Unprofane

French profanity filter API that reads verlan

It reads verlan, accents dropped or swapped and texting shorthand, and lets habite and salopette through.

Live on the real engine Verlan, flipped back

te pu

« pute » whore

**** block · strong

Or pick

Name your users' country too: gosses and tabernacle are read as Canada reads them (every word read by country).Each answer is the rules alone, the fast mode, checking a comment with language: "fr". In balanced mode, the default, the model reads what the rules leave open.

Accents dropped or swapped

Five spellings of one insult, each read back to the same word.

  • enculé
  • encule
  • éncule
  • enculè
  • ENCULÉ

Each one reads as

encule

fucker

blockall 5

Every other French disguise, read back

Each spelling as typed, what the rules read in it, the tricks they named and their answer.

Texting shorthand, read in full

The letters French users type in place of the words.

Short forTypedWhat it saysThe rules
fils de putefdpson of a whoreblock · strong
nique ta mèrentmfuck your motherblock · strong
ferme ta gueuleftgshut the fuck upblock · moderate
va te faire foutrevtffgo fuck yourselfblock · strong
ta gueuletgshut upblock · mild
putainptnfuck, said to no onereview · strong

French words a list would block

A list matching inside words finds a rude string in each; the rules read the whole word.

  • habiteLives, as in j’habite
  • salopetteDungarees
  • fichierA computer file
  • MâconA town in Burgundy
  • pissenlitA dandelion
  • PuteauxA town beside Paris
  • députéA member of parliament
  • BitcheA town in Lorraine

A list matching inside words8 of 8blocked

Unprofane, rules alone8 of 8allow

Measured in French

The same French texts given to every system, and the open benchmark’s French items.

95.2%

Unprofane

Flagged 4.2% of clean French texts

65.3%

Perspective API

Flagged 2.1% of clean French texts

58.1%

OpenAI moderation

Flagged 6.3% of clean French texts

The share of 167 toxic French texts each caught; the same set holds 240 clean ones. The judged development set, read on , engine 2026-09-29, each system at Unprofane’s overall false-alarm rate. Unprofane was tuned on this set, so its figures here flatter it.How it was measured

1.000F1 on the Scunthorpe Test’s 35 French items, rules aloneThe public split, run of , engine 2026-10-18. Every language’s score

Other APIs and French

Name French in the call

Send language "fr" and a bare word reads as French writes it. Every language is still read.

Get your API key

100 checks a day, no card

curl -X POST https://api.unprofane.com/v1/check \
  -H "Authorization: Bearer up_test_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text":"Va te faire foutre, connard","context":"comment","language":"fr"}'
Response200
{
  "allowed": false,
  "action": "block",
  "severity": "strong",
  "matches": [
    {
      "text": "Va te faire foutre",
      "normalized": "va te faire foutre",
      "category": "insult",
      "severity": "strong"
    },
    {
      "text": "connard",
      "normalized": "connard",
      "category": "insult",
      "severity": "strong"
    }
  ],
  "censored": "******************, *******",
  "language": {
    "detected": "fr",
    "confidence": 0.75
  }
}

Other languages

Filter French before anyone reads it

Every language Unprofane covers is read on every call, French with its disguises included.

Get your API key