Use case

AI moderation for forums, using the thread as context

Forum moderators spend hours on reports, off-topic posts and arguments that got out of hand. VigiMod checks each new post before it is published, reading the previous posts in the thread and your forum's rules, so the clear cases are handled and only the doubtful ones reach a person.

What makes it hard

Replies make sense only in the thread

“You clearly didn't read it” is fine or rude depending on what came before. VigiMod reads up to ten previous posts.

Off-topic and selling

Many forums ban selling, politics or other topics. Rules in plain words catch them, like any category.

Too many reports

Holding flagged posts for review means moderators look at a short queue instead of the whole forum.

How it works with VigiMod

  1. 1

    Before a new post is saved, your forum sends it to VigiMod with the last posts of the thread and your rules.

  2. 2

    If nothing is flagged, the post is published as usual.

  3. 3

    If something is flagged, the post waits in the moderation queue with the category that triggered it.

Rules you can copy

Send them in the rules field: each one comes back with its own score, like a built-in category.

{
  "rules": {
    "no-selling": "No buying or selling items",
    "no-politics": "No discussions about politics or elections",
    "on-topic": "Only photography talk here",
    "no-personal-attacks": "No comments about other members instead of their arguments"
  }
}

Example

A Python function to call before saving a post: flagged posts wait for a moderator instead of going live.

Python

# pip install requests
# Call this before saving a new post: flagged posts wait for a moderator instead of going live.
import os
import requests

RULES = {
    "no-selling": "No buying or selling items",
    "on-topic": "Only photography talk here",
}

def check_post(text: str, author_id: str, thread: list[str]) -> dict:
    r = requests.post(
        "https://api.vigimod.com/moderate",
        headers={"X-API-Key": os.environ["VIGIMOD_KEY"]},
        json={
            "text": text[:2000],
            "context": [p[:2000] for p in thread[-10:]],   # the previous posts of the thread
            "rules": RULES,
            "user_id": author_id,
            "scope": "forum",
        },
        timeout=5,
    )
    r.raise_for_status()
    return r.json()

# in your "new post" handler
result = check_post(post.body, str(post.author_id), [p.body for p in thread.posts])
post.status = "pending_review" if result["flagged"] else "published"
post.flagged_by = [name for name, hit in result["flags"].items() if hit]

Tips

  • Hold flagged posts for review instead of deleting them: moderators keep the final word.
  • A message can be up to 2,000 characters: for longer posts, check the first part and the last part.
  • Use different rules per section: a marketplace section allows selling, the general section does not.

Questions

Does it work with Discourse, phpBB, Flarum or NodeBB?
Yes, with a small plugin or a webhook: any forum that can make an HTTP call when a post is created can use VigiMod.
What about long posts?
Each message can be up to 2,000 characters. Check longer posts in parts, or the beginning and the end.
Can each section have its own rules?
Yes. Rules are sent with each request, so every section, category or tag can send different ones.
Is it free?
During the beta, yes: 120 messages per minute per API key and every feature included.

Try it on your community

Create a free API key in two minutes. No card, no trial period.