Comparison
An OpenAI Moderation API alternative that applies your rules
OpenAI's moderation endpoint (omni-moderation-latest) is free and checks text and images for 13 fixed categories. It scores each message on its own and cannot learn your community's rules. VigiMod reads the previous messages, checks rules you write in plain language and is free during the beta.
Side by side
| OpenAI Moderation | VigiMod | |
|---|---|---|
| Price | Free | Free during the beta |
| Categories | 13 fixed sub-categories | 8 categories, plus spam, slur lists and your rules |
| Community rules | No | Up to 10 rules in plain language per request, each with its own score |
| Conversation context | No, each input is scored alone | Up to 10 previous messages |
| Thresholds | Fixed flags; scores to use yourself | Default thresholds you can change per request |
| Spam and repeated messages | No | Per-user spam score |
| Account | OpenAI account and API key | VigiMod account and API key |
VigiMod moderates text: chat, comments, forum posts. If you also need images moderated, run an image service next to it. For text, VigiMod adds what generic endpoints do not have: your community's rules and the context of the conversation.
From OpenAI categories to VigiMod
| OpenAI | VigiMod | Note |
|---|---|---|
| harassment | insult, toxic | insult for attacks on a person, toxic for general rudeness. |
| harassment/threatening | threat | Threats against a person. |
| hate, hate/threatening | hate (+ threat) | Attacks on people for who they are. |
| self-harm, /intent, /instructions | self_harm | One category; tune its threshold for your audience. |
| sexual | sexual | Sexual content. |
| sexual/minors | child_safety | Opt-in: add it to categories. |
| violence, violence/graphic | threat | Only threats are covered; for graphic descriptions add a rule. |
| illicit, illicit/violent | rules | Write it as a rule, for example “No selling drugs or weapons”. |
The same call, before and after
OpenAI Moderation
from openai import OpenAI
client = OpenAI()
r = client.moderations.create(
model="omni-moderation-latest",
input=message,
)
result = r.results[0]
flagged = result.flagged
harassment = result.category_scores.harassmentVigiMod
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
"rules": {"no-spoilers": "No spoilers about films or series"},
},
)
result = r.json()
flagged = result["flagged"]
insult = result["scores"]["insult"]
spoiler = result["scores"]["rule:no-spoilers"]What you gain
- Your community's rules, like “No spoilers” or “No selling accounts”, scored like any category.
- The previous messages as context: jokes between friends and replies are read correctly.
- Per-request thresholds, so each server or forum decides how strict to be.
- A spam score per user, for repeated messages and floods.
- Messages are checked and discarded: nothing is stored or used for training.
Switch in three steps
- 1
Create a free account and an API key.
- 2
Replace the moderations call with one POST to /moderate, adding the previous messages and your rules if you want them.
- 3
Map the categories with the table above and check the thresholds on a few days of real messages.
Questions
Is the OpenAI Moderation API free?
Yes, OpenAI does not charge for its moderation endpoint. VigiMod is also free during the beta; the reason to switch is not the price but rules, context and community-specific thresholds.
Can the OpenAI Moderation API use custom categories?
No. Its categories are fixed. To enforce a community rule you need another layer, such as a language model prompt or an API that accepts rules, like VigiMod.
Can I use both?
Yes. A common setup is OpenAI for images and VigiMod for chat text with your rules and context.
Does VigiMod understand languages other than English?
It was trained on 26 languages and works best in Italian, English, Spanish, French, German and Portuguese.
How long does switching take?
Usually less than an hour: one HTTP call changes and the categories map as in the table above.
Keep learning
All guides- Intermediate · 7 min readZero-shot classification: how a model understands rules written in plain wordsHow can a model enforce “No spoilers” if it was never trained on that rule? Natural language inference, entailment and custom moderation rules, explained.
- Basics · 5 min readWhy context matters in chat moderationThe same sentence can be harmless or harmful depending on what came before. How conversation context changes moderation, with real examples.
- Basics · 5 min readFalse positives and false negatives in content moderationEvery moderation system makes two kinds of mistakes. What they are, what each one costs a community and how to keep both low.
Try your own rules
Create a free key and test a rule on your messages in a couple of minutes.