Drop-in replacement ·

A drop-in Perspective API alternative

Google's Perspective API stops answering on 31 December 2026. VigiMod answers the same requests at the same path: change the host and the key, and your code, plugin or script keeps working. Free during the beta, trained on 26 languages.

Change the host and the key, nothing else

Same path (/v1alpha1/comments:analyze), same JSON in and out, the key in ?key= as before (or in the X-API-Key header).

Before: Perspective API

import requests

r = requests.post(
    "https://commentanalyzer.googleapis.com/v1alpha1/comments:analyze",
    params={"key": PERSPECTIVE_KEY},
    json={
        "comment": {"text": message},
        "languages": ["it"],
        "requestedAttributes": {"TOXICITY": {}, "INSULT": {}, "THREAT": {}},
    },
)
scores = {k: v["summaryScore"]["value"] for k, v in r.json()["attributeScores"].items()}
flagged = scores["TOXICITY"] >= 0.8

After: VigiMod

import requests

r = requests.post(
    "https://api.vigimod.com/v1alpha1/comments:analyze",   # the only changes:
    params={"key": VIGIMOD_KEY},            # host and key
    json={
        "comment": {"text": message},
        "languages": ["it"],
        "requestedAttributes": {"TOXICITY": {}, "INSULT": {}, "THREAT": {}},
    },
)
scores = {k: v["summaryScore"]["value"] for k, v in r.json()["attributeScores"].items()}
flagged = scores["TOXICITY"] >= 0.8

curl

curl -s "https://api.vigimod.com/v1alpha1/comments:analyze?key=$VIGIMOD_KEY" \
  -H "Content-Type: application/json" \
  -d '{"comment": {"text": "sei proprio un idiota"},
       "requestedAttributes": {"TOXICITY": {}, "SEVERE_TOXICITY": {}}}'

# {"attributeScores": {
#    "TOXICITY": {"summaryScore": {"value": 1.0, "type": "PROBABILITY"}},
#    "SEVERE_TOXICITY": {"summaryScore": {"value": 0.6, "type": "PROBABILITY"}}}}
# an insult: toxic, but not hate or a threat, so not severe

Node.js

const r = await fetch(
  `https://api.vigimod.com/v1alpha1/comments:analyze?key=${process.env.VIGIMOD_KEY}`,
  {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({
      comment: { text: message },
      requestedAttributes: { TOXICITY: {}, PROFANITY: {} },
    }),
  },
);
const { attributeScores } = await r.json();
const toxicity = attributeScores.TOXICITY.summaryScore.value;

Tools built on Perspective

Coral

Admin → Configure → Moderation → Perspective toxic comment filter: set the endpoint to https://api.vigimod.com/v1alpha1 and the API key to your VigiMod key. Raise the timeout to 3000 ms: Coral publishes a comment without a score when the answer arrives late.

Discourse

The official Perspective plugin calls Google's host directly and has no setting for it: in your copy of the plugin, replace commentanalyzer.googleapis.com with api.vigimod.com and put your VigiMod key in perspective_google_api_key.

Drupal, WordPress and your own scripts

Any module or script that lets you set the Perspective URL works: use https://api.vigimod.com/v1alpha1/comments:analyze with your VigiMod key. If the URL is written in the code, it is one line to change.

How each Perspective attribute is scored

Perspective attributeVigiMod readsNote
TOXICITYtoxicRude, disrespectful or aggressive messages, insults, hate and threats included.
SEVERE_TOXICITYhate, threat, toxic (at most 0.6)Hate and threats; a message that is only rude stays under 0.7.
IDENTITY_ATTACKhateAttacks on people for who they are.
INSULTinsultInsults aimed at a person.
THREATthreatThreats of violence or harm.
SEXUALLY_EXPLICITsexualSexual content.
PROFANITYbuilt-in ruleSwearing and vulgar language, in any language (OBSCENE is accepted too).
FLIRTATIONbuilt-in ruleFlirting and sexual advances (experimental in Perspective).
SPAMadvertisingUnsolicited advertising.
Others—ATTACK_ON_AUTHOR, INCOHERENT, INFLAMMATORY, LIKELY_TO_REJECT, UNSUBSTANTIAL and the bridging attributes return a 400 error that names them.

What to know before switching

  • The scores come from VigiMod's model, not Perspective's. They are rescaled so that 0.7 is VigiMod's tuned threshold for each attribute: thresholds between 0.7 and 0.9 behave sensibly, but check yours on a few days of real messages.
  • An attribute VigiMod does not score is an explicit 400 error, never a made-up number. The _EXPERIMENTAL names are accepted.
  • context.entries is used: the previous messages change the scores, so replies, jokes and quotes are read with what came before.
  • Comments longer than 1,000 characters are scored in parts, up to 10,000 characters; each part counts as one message for the rate limit, and spanScores gives the score of each part.
  • Nothing is stored: comments are scored and discarded, and comments:suggestscore is accepted but its scores are not kept.
  • All languages are accepted: the model was trained on 26 and works best in English, Italian, Spanish, French, German and Portuguese.

When you want more than Perspective

The compatible endpoint is the quick switch. The native /moderate endpoint of the same key adds:

  • Custom rules in plain language, like “No selling accounts”, each with its own score.
  • Self-harm, advertising and per-user spam scores, and slur lists by category.
  • Policies made in the dashboard, with if/then actions (delete, timeout, ban), a review queue and webhooks.
  • The same privacy: messages are checked and discarded, not used to train models.

Migrate in three steps

  1. 1

    Create a free account and an API key.

  2. 2

    Replace commentanalyzer.googleapis.com with api.vigimod.com, and your Perspective key with the VigiMod key.

  3. 3

    Watch a few days of real messages and adjust your thresholds if needed.

Questions

When does Perspective API stop working?

According to Jigsaw's notice it accepts no new requests for access since February 2026 and keeps answering existing users until 31 December 2026.

Is Perspective API free?

It was free, with a quota per project. After 31 December 2026 it stops answering for everyone, so a free plan no longer helps. VigiMod is free during the beta.

What replaced Perspective API?

Google has not released a direct successor. VigiMod answers the same comments:analyze requests, so code built for Perspective keeps working with a new host and key.

Do I have to change my code?

Only the host and the key. The request and the answer have the same shape; an attribute VigiMod does not score returns a 400 error that names it.

Are the scores the same as Perspective's?

No model gives the same numbers. Both return a probability from 0 to 1 per attribute, and VigiMod's are rescaled so that 0.7 is its threshold. Check your thresholds on your own messages.

Which languages does it support?

It was trained on 26 languages and works best in English, Italian, Spanish, French, German and Portuguese. Every language code is accepted.

Is VigiMod free?

Yes, during the beta: all features, 120 messages per minute per key, up to 10 keys.

Switch before 31 December

An API key takes a minute. Then change one line.