# Policies and actions

A moderation policy decides what happens to an asset based on its [moderation report](/docs/guides/moderation-reports). Each category gets a default action, and rules add exceptions using the category's [qualifiers](/docs/guides/moderation-categories#qualifiers). Policies change actions, never category definitions.

## How policies apply

Each project uses one account policy that covers **all six categories**. The project stores only `settings.moderationProfileId`, which references a built-in or account-owned policy. New projects start with **General community**.

In the portal’s [Moderation policies](/portal/moderation-policies) page, choose a policy and select **Use this policy** to apply it to the current project.

- **Save policy** updates the policy for every project that uses it. Shared policies list the other affected projects and ask you to confirm before saving.
- **Save as copy** creates a new account policy from your draft and applies it to this project only. Built-in presets are read-only, so editing one always requires a copy.
- A custom policy can be deleted only when no project uses it.

Changes apply to future moderation checks, including checks that reuse cached classification evidence. Existing asset decisions are not reprocessed. Saves check the policy version and project list; after a conflict, reload and review before saving again. Policies and their project lists are private to the owning account.

## Actions

Every category has a default action. If several categories match, the strongest action wins, in the order `purge`, `hide`, `alert`, then `ignore`.

| Action | Asset result | Content behavior |
| --- | --- | --- |
| `ignore` | `approved`, with `report.flagged: false` when no other action applies | No moderation action is taken. |
| `alert` | `approved`, with `report.flagged: true` | Delivery remains enabled. |
| `hide` | `rejected`, with `report.flagged: true` | Stored content is retained but delivery is blocked. |
| `purge` | `rejected`, with `report.flagged: true` | Stored source, preview and retained extracted text are deleted. The asset record and report remain. |

`alert`, `hide` and `purge` all record an [`asset.flagged`](/docs/api/events#event-asset-flagged) event. [Connectors](/docs/guides/webhooks) decide where it goes: the notification bell by default, plus any webhook, Slack or email connector subscribed to it. Use `alert` when you want to hear about content without blocking it.

- `ignore` changes the action only; moderation still runs. A high score can therefore stay unflagged.
- Normal retention still applies to `ignore` and `alert`, so `keepContentAfterProcessing: false` can leave no content to deliver. `hide` keeps content for review regardless; `purge` deletes it regardless.
- `processingOptions.flaggedContentPolicy` overrides the policy action for a single asset.
- Ignoring one category never exempts another matching category.

## Built-in policies

Choose the preset closest to your community, then save a copy if you need different actions or exceptions.

### General community

Hide qualifying content across all six categories while allowing wholly supportive or preventive content. Explicit restricted forms override allowances.

| Category | Default action | Qualifier exceptions |
| --- | --- | --- |
| sexual | hide at 60% | Only support-prevention → ignore (qualifier boundary 90%); Any sexual-solicitation → hide (qualifier boundary 90%) |
| violence | hide at 60% | Only support-prevention → ignore (qualifier boundary 90%); Any graphic OR Any violent-preparation OR Any violent-encouragement → hide (qualifier boundary 90%) |
| self-harm | hide at 40% | Only support-prevention → ignore (qualifier boundary 90%); Any self-harm-methods OR Any self-harm-encouragement → hide (qualifier boundary 90%) |
| harassment | hide at 60% | Only support-prevention → ignore (qualifier boundary 90%); Any harassment-encouragement → hide (qualifier boundary 90%) |
| hate | hide at 60% | Only support-prevention → ignore (qualifier boundary 90%); Any hate-threat OR Any discriminatory-exclusion OR Any dehumanization → hide (qualifier boundary 90%) |
| criminal-activity | hide at 70% | Only support-prevention → ignore (qualifier boundary 90%); Any criminal-instructions OR Any criminal-promotion OR Any criminal-preparation OR Any criminal-request → hide (qualifier boundary 90%) |

### Children’s platform

Hide qualifying content across all six categories, including content presented for support or prevention. No qualifier allowances.

| Category | Default action | Qualifier exceptions |
| --- | --- | --- |
| sexual | hide at 60% | None |
| violence | hide at 60% | None |
| self-harm | hide at 40% | None |
| harassment | hide at 60% | None |
| hate | hide at 60% | None |
| criminal-activity | hide at 70% | None |

### Education and support

Allow wholly historical, documentary, supportive or preventive content across all six categories. Restricted forms remain hidden.

| Category | Default action | Qualifier exceptions |
| --- | --- | --- |
| sexual | hide at 60% | Only support-prevention → ignore (qualifier boundary 90%); Only historical → ignore (qualifier boundary 90%); Only documentary → ignore (qualifier boundary 90%); Any sexual-solicitation → hide (qualifier boundary 90%) |
| violence | hide at 60% | Only support-prevention → ignore (qualifier boundary 90%); Only historical → ignore (qualifier boundary 90%); Only documentary → ignore (qualifier boundary 90%); Any graphic OR Any violent-preparation OR Any violent-encouragement → hide (qualifier boundary 90%) |
| self-harm | hide at 40% | Only support-prevention → ignore (qualifier boundary 90%); Only historical → ignore (qualifier boundary 90%); Only documentary → ignore (qualifier boundary 90%); Any self-harm-methods OR Any self-harm-encouragement → hide (qualifier boundary 90%) |
| harassment | hide at 60% | Only support-prevention → ignore (qualifier boundary 90%); Only historical → ignore (qualifier boundary 90%); Only documentary → ignore (qualifier boundary 90%); Any harassment-encouragement → hide (qualifier boundary 90%) |
| hate | hide at 60% | Only support-prevention → ignore (qualifier boundary 90%); Only historical → ignore (qualifier boundary 90%); Only documentary → ignore (qualifier boundary 90%); Any hate-threat OR Any discriminatory-exclusion OR Any dehumanization → hide (qualifier boundary 90%) |
| criminal-activity | hide at 70% | Only support-prevention → ignore (qualifier boundary 90%); Only historical → ignore (qualifier boundary 90%); Only documentary → ignore (qualifier boundary 90%); Any criminal-instructions OR Any criminal-promotion OR Any criminal-preparation OR Any criminal-request → hide (qualifier boundary 90%) |

**Support or prevention** exceptions allow qualifying content that wholly seeks or provides non-harmful support, prevention or recovery. A supportive reply does not excuse another participant's harmful instructions or encouragement. General community allows that content; Education and support also allows wholly historical or documentary content; Children's platform has no exceptions.

## Rules

Rules replace a category's default action when their conditions match. Give each rule a name and one or more conditions, and choose whether every condition or at least one must match. Add condition groups for combinations such as "graphic AND (historical OR fictional)". Each group has its own every-or-any choice, and the rule chooses whether every group or at least one must match.

Conditions use [Any or Only](/docs/guides/moderation-categories#any-and-only) and refer to findings across the whole asset, so two Any conditions need not describe the same passage. An unavailable condition cannot establish a match, but another condition can still satisfy an "at least one" group. When matching rules conflict, the strongest action wins, regardless of rule order.

For example, a violence policy might use:

- Default: hide.
- Only historical: ignore.
- Only historical **and** graphic: hide.
- Threat: purge.

An **Only → Ignore** exception needs evidence that its condition covers all qualifying content in the category. An **Any → Ignore** exception ignores the whole category as soon as the condition is present, even if other qualifying content does not share it. Use Only when additional current threats or other content should prevent the exception.

## Sensitivity

Score boundaries are under **Advanced** in the portal. A **60% category boundary** means "apply this policy when the category score reaches 60%"; it does **not** mean "60% chance this classification is correct". Lower boundaries catch weaker signals, and higher boundaries require stronger evidence.

Each category's default boundary and action are listed in the [built-in policy tables](#built-in-policies) above, which show each preset’s defaults.

Qualifier conditions use a separate boundary, **90%** by default. Rules inherit the category boundary unless they override it. If a rule's conditions match but the category score is below the rule's boundary, the rule applies no action and the default is not reapplied. These are operating settings, not calibrated accuracy guarantees, so leave them at their defaults unless reviewed outcomes justify a change.

## Trying an example

The policy page includes an example asset preview. Pick a scenario or customize the assumed findings, and the preview runs your unsaved draft through the same rules used for moderation. It shows the resulting action, which rules matched, the evidence for each condition, and how conflicts were resolved. It does not classify content; classify a real asset in Assets to see actual findings.

Unsaved changes are marked in the editor, and the browser warns before you leave the page. **Discard changes** restores the last saved policy.
