Toxicity detection

A toxicity detection API that tells an insult from a joke

Send a message, get a toxicity score between 0 and 1. VigiMod reads the whole sentence, and the messages before it if you send them, so an attack on a person is flagged while swearing at a video game or teasing a friend is not. Trained on 26 languages, free during the beta.

Real answers, not a word list

These are the scores the API gave to each message. A list of bad words would flag “killing”, “hate” and “idiot” and miss most of the real attacks.

MessageToxic scoreResult
enyou're honestly the dumbest person in this server, just leave1.00flagged
enthis boss fight is killing me, I hate this level so much0.00not flagged
itma stai zitto, nessuno ti ha chiesto niente, fai pena1.00flagged
itche partita di merda, abbiamo giocato malissimo0.00not flagged
escállate ya, das asco, nadie te quiere aquí1.00flagged
dedu bist so ein erbärmlicher Versager, verschwinde endlich1.00flagged
frt'es vraiment trop fort, bien joué mec !0.00not flagged
enst*pid l0ser, g0 away1.00flagged
enlol you absolute idiot, I love yousent after: “happy birthday mate!!” · “you forgot it last year”0.01not flagged

Answers of VigiMod 1.2.1 on 11 November 2026, default thresholds.

What the toxic score means

  • Flagged: messages that are rude, disrespectful or aggressive towards someone. Insults, humiliation, telling a person they are worthless or should leave.
  • Not flagged: strong language aimed at things (a match, a level, a bug), praise, and friendly teasing when the previous messages show it is a joke.
  • Tricks are undone first: letters swapped for numbers or symbols, spaced-out letters and stretched words are read as the word they hide.
  • Insults, hate and threats also have their own scores, so you can treat a threat differently from plain rudeness.

One request

A POST with the message. Everything else is optional: the previous messages, the categories you need, your own threshold.

import requests

r = requests.post(
    "https://api.vigimod.com/moderate",
    headers={"X-API-Key": VIGIMOD_KEY},
    json={
        "text": message,
        "context": previous_messages,        # optional: the last messages, oldest first
        "categories": ["toxic", "insult"],   # optional: only what you need (faster)
        "thresholds": {"toxic": 0.8},        # optional: flag less
    },
)
result = r.json()
result["scores"]["toxic"]   # 0.0 to 1.0
result["flags"]["toxic"]    # True when the score reaches the threshold

You choose how strict it is

  1. Every category has a default threshold, tuned on validation data. A score at or above it sets the flag.
  2. Raise the threshold to flag less (fewer false alarms), lower it to catch more. You can change it per request, so each community has its own.
  3. VigiMod only flags. What happens next (delete, hide, warn, send to a moderator) is your decision.

What to expect

VigiMod works best in Italian, English, Spanish, French, German and Portuguese, and understands 26 languages. For short replies, sarcasm and jokes, send the previous messages as context: the model reads them together with the message. For the decisions that matter most, add a moderator review.

Questions

What is a toxicity score?
A number between 0 and 1 that says how likely a message is to be rude, disrespectful or aggressive towards someone. The API compares it with a threshold and returns a flag; you can read the score and decide yourself.
Is swearing flagged as toxic?
Not by itself. “What a shitty match” is not an attack on anyone and is not flagged; an insult aimed at a person is. If your community allows no swearing at all, add a rule such as “No swearing” or turn on block_slurs.
Which languages does it work in?
It was trained on 26 languages and works best in Italian, English, Spanish, French, German and Portuguese. You do not need to say which language a message is in.
How much does it cost?
It is free during the beta, with 120 messages per minute for each API key. Paid plans with higher limits will come later, announced well in advance.
Do you keep the messages?
No. Messages are checked and discarded: they are not stored and not used to train models. The only exception is a review queue you turn on for your moderators: its messages are kept for the days you choose, then deleted.

Try it on your own messages

Create a free key and send your first request in a couple of minutes.