Janus
Features

Risk Scoring

How Janus scores each verification from 0 (human) to 100 (bot).

Every verification produces a risk score from 0 (human) to 100 (bot). The score is built from multiple independent signals, processed through the built-in engine, then through any registered plugins.

Base score: 50

Every verification starts at 50 (neutral). Signals add or subtract from this base. The final score is clamped to 0-100.

Signal categories

Default thresholds

Prop

Type

All thresholds are configurable per site in the dashboard under Site SettingsRisk Thresholds.

Extending with plugins

After the built-in engine runs, plugins execute in priority order. Each plugin can adjust the score by up to ±50 points and add custom anomalies.

const myPlugin: RiskPlugin = {
  name: 'ip-blocklist',
  priority: 10,
  async evaluate(ctx) {
    const blocked = await db.isBlocked(ctx.ipAddress);
    return blocked
      ? { scoreAdjustment: 40, anomalies: ['ip_blocklisted'] }
      : { scoreAdjustment: 0 };
  },
};