> ## Documentation Index
> Fetch the complete documentation index at: https://docs.omnifence.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Decision logic

> How moderation decisions are determined

Every completed moderation job reports `is_prohibited` as a boolean. While the job is still
processing, `is_prohibited` is `null`.

## Decision rule

The logic is straightforward:

* **`is_prohibited: false`** — all categories (built-in and custom) are `false`.
* **`is_prohibited: true`** — any category is `true`.

```
any built-in OR any custom category triggered → is_prohibited: true
none triggered → is_prohibited: false
```

There is no confidence score or threshold — the decision is binary based on category detection.

## Example: partial rejection

In this example, only `nsfw` is triggered. `is_prohibited` is `true` even though all other
categories are `false`.

```json theme={null}
{
  "is_prohibited": true,
  "categories": {
    "ai_adult_general": false,
    "underage": false,
    "nsfw": true
  },
  "job_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "type": "image",
  "status": "completed"
}
```

## Image-moderation specifics

* The result reflects the combined output of all VLM child jobs and any custom-category checks.
* Keyword matches can set specific categories. For example, blocked keywords related to minors set
  `underage: true`.

## Prompt-moderation specifics

* Prompt-only jobs evaluate no built-in categories. The `categories` field is omitted entirely from
  the response for prompt jobs.
* `is_prohibited` is `true` when the LLM prohibition check judges the prompt prohibited; `reason`
  (top-level) explains why. Otherwise `is_prohibited` is `false`.

## Video-moderation specifics

* Categories are merged across all extracted frames using OR logic. If any single frame triggers a
  category, that category is `true` for the entire video.

## Underage detection

When the `underage` category is `true`, `is_prohibited` is `true` like any other category
violation. Repeated underage detections may be reviewed manually and can result in account
termination at our discretion — see [account termination](/authentication#account-termination).
