Reading moderation reports

A moderation report is the classification result attached to a completed asset. Always check status before reading a score: an unevaluated category is unknown, not safe.

For what each category and qualifier means, see Category definitions. For how reports turn into actions, see Policies and actions.

Audio/video reports can include media.segments with source: "clip" for native analysis of overlapping chunks. These are approximate evidence ranges. Native audio/video produces parent-category scores without ordinary qualifier scores or a transcript; profiles requiring qualifiers retain the legacy pipeline. See audio and video limits.

Reading reports safely

Narrow on status before accessing score:

const violence = asset.report?.categories.violence;

if (violence?.status === "evaluated" || violence?.status === "partial") {
  console.log(violence.score, violence.likelihood);
} else if (violence) {
  console.log(`Violence was not evaluated: ${violence.reason}`);
}

Every report contains all six category keys. Check each result’s evaluation status before using its score.

Report shape

Every report contains all six parent categories. Overlapping content-type, context and severity evidence is nested under qualifiers. These are not additional top-level categories.

Top-level fieldMeaning
processedAtUnix timestamp in milliseconds for the completed report.
flaggedWhether the final policy decision applied a non-ignored action. It is not a raw classification flag.
scoreHighest evaluated parent-category score. It does not account for configured thresholds.
categoriesRequired results for all six parent categories.
labelsOptional processing labels. Labels do not drive the six policy thresholds.
notesOptional processing context.

Category and qualifier results

Each parent category nests its evidence under qualifiers. Qualifier IDs are category-specific; the current sets and their definitions are listed in Category definitions. Use the documented qualifier IDs for each category.

Qualifier fieldMeaning
scoreEvidence that the qualifier is present anywhere in the category's qualifying content. Any conditions use it.
scopeScoreEvidence that the qualifier covers all qualifying content in the category. Only conditions use it. It never exceeds score.

Direct image classification supplies presence only and omits scopeScore; text has separate presence and scope checks. Missing scope cannot establish an Only condition, and a missing qualifier cannot establish either.

Qualifiers have their own evaluation status and do not change the parent category's score. Their scores are diagnostic evidence, not probabilities of correctness.

Evaluation status

StatusMeaningScore fields
evaluatedThe parent category was directly evaluated. Individual qualifiers may still be unavailable.Includes score and likelihood.
partialA narrower signal was evaluated, but not the complete parent category.Includes the strongest available qualifying signal and its likelihood.
not-evaluatedNo usable score exists for this category. Policy thresholds are not applied to it.Includes reason; omits score and likelihood.

Qualifiers use evaluated or not-evaluated; they do not use partial.

Possible not-evaluated reasons are:

ReasonMeaning
not-supportedThe processing path used for this asset cannot assess this category or qualifier.
unavailableAssessment was attempted but produced no usable result. A complete moderation failure normally puts the asset into error instead of returning a successful report.

Coverage varies by input type and processing availability, and a parent result does not guarantee that every qualifier was evaluated.

Do not convert not-evaluated into a zero score. Zero means the signal was evaluated and received its lowest score; not-evaluated means CalmLens has no result.

Scores and likelihoods

Scores are normalized to the range 0–1. Likelihood labels use these boundaries:

ScoreLikelihood
< 0.2very-unlikely
0.2–< 0.4unlikely
0.4–< 0.6possible
0.6–< 0.8likely
>= 0.8very-likely

The parent category score retains the strongest supported category evidence, including directly evaluated narrower checks. Qualifiers do not change this score. report.score is the maximum evaluated parent score. Scores are normalized into the same shape, but are not calibrated probabilities of correctness.

OCR and merged image reports

Enable OCR when written content in images matters. See OCR and image reports for setup, child assets, combined scores and usage.

Audio and video reports

See Audio and video moderation for supported formats, sampling limits, timelines and usage.

Example report

This example includes all six categories and selected qualifiers.

{
  "processedAt": 1788364800000,
  "flagged": true,
  "score": 0.91,
  "categories": {
    "sexual": {
      "status": "evaluated",
      "score": 0.02,
      "likelihood": "very-unlikely"
    },
    "violence": {
      "status": "evaluated",
      "score": 0.91,
      "likelihood": "very-likely",
      "qualifiers": {
        "physical-attack": {
          "status": "evaluated",
          "score": 0.98,
          "scopeScore": 0.95,
          "likelihood": "very-likely"
        },
        "historical": {
          "status": "evaluated",
          "score": 0.97,
          "scopeScore": 0.97,
          "likelihood": "very-likely"
        },
        "graphic": {
          "status": "evaluated",
          "score": 0.91,
          "scopeScore": 0.9,
          "likelihood": "very-likely"
        }
      }
    },
    "self-harm": {
      "status": "evaluated",
      "score": 0,
      "likelihood": "very-unlikely"
    },
    "harassment": {
      "status": "evaluated",
      "score": 0.02,
      "likelihood": "very-unlikely"
    },
    "hate": {
      "status": "evaluated",
      "score": 0.73,
      "likelihood": "likely"
    },
    "criminal-activity": {
      "status": "evaluated",
      "score": 0.02,
      "likelihood": "very-unlikely"
    }
  }
}

Signing in

Signing out

Cookies on CalmLens

We use essential cookies to keep you signed in and the site secure. With your permission, we'll also use functional cookies to remember preferences such as your layout and documentation language, and to offer Google One Tap sign-in. We don't use analytics or advertising cookies. Manage cookies