---
title: AI Moderation via REACH
url: https://docs.kaltura.com/docs/rich-media-cms-apis/content-moderation/moderation-ai-reach
---

## AI Moderation via REACH

REACH (Real-time Enrichment, Analysis, and Classification Hub) provides AI-powered content moderation using LLMs and computer vision models. Content is analyzed against configurable policies that define rules for text, visual, and audio content.

### Ordering a Moderation Task

```bash
curl -X POST "$KALTURA_SERVICE_URL/service/entryVendorTask/action/add" \
  -d "ks=$KALTURA_KS" \
  -d "format=1" \
  -d "entryVendorTask[objectType]=KalturaEntryVendorTask" \
  -d "entryVendorTask[entryId]=$KALTURA_ENTRY_ID" \
  -d "entryVendorTask[catalogItemId]=$MODERATION_CATALOG_ITEM_ID" \
  -d "entryVendorTask[taskJobData][objectType]=KalturaEntryVendorTaskModerationJobData"
```

**Moderation catalog items** have `serviceFeature=15`. List available items:

```bash
curl -X POST "$KALTURA_SERVICE_URL/service/vendorCatalogItem/action/list" \
  -d "ks=$KALTURA_KS" \
  -d "format=1" \
  -d "filter[serviceFeatureEqual]=15"
```

### Reading Moderation Results

Poll the task until `status=2` (READY):

```bash
curl -X POST "$KALTURA_SERVICE_URL/service/entryVendorTask/action/get" \
  -d "ks=$KALTURA_KS" \
  -d "format=1" \
  -d "id=$VENDOR_TASK_ID"
```

The moderation output is in the `moderationOutputJson` field of the task's `taskJobData`:

```json
{
  "moderationOutputJson": {
    "violations": [
      {
        "rule": "profanity",
        "severity": "high",
        "timestamp": 45.2,
        "description": "Explicit language detected in transcript"
      }
    ],
    "summary": "Content flagged for profanity at 0:45",
    "overallScore": 0.85,
    "policyId": "default_moderation_v2"
  }
}
```

**Task status values (`KalturaEntryVendorTaskStatus`):**

| Value | Name | Description |
|-------|------|-------------|
| 1 | PENDING | Task queued for processing |
| 2 | READY | Analysis complete — results available |
| 3 | PROCESSING | Currently being analyzed |
| 5 | ERROR | Task failed — check `errDescription` |
| 7 | ABORTED | Cancelled before completion |

### Category Auto-Action

When a moderation task completes, the system can automatically activate or reject the entry within a specific category based on the moderation result:

- **Pass** → `categoryEntry.activate` — entry becomes visible in that category
- **Fail** → `categoryEntry.reject` — entry is hidden in that category

This is configured at the catalog item level and applies per-category, not per-entry. The entry's global `moderationStatus` is **not** changed by this auto-action — only the `categoryEntry` status is affected.
