---
title: live_video.violation_detected | SafetyKit
description: Deploy AI agents to automate risk reviews, onboarding, and investigations. Trusted by leading marketplaces and fintech platforms.
---

You will receive this event when SafetyKit detects a policy violation in a livestream ingested through the [Streams API](/api/resources/streams/methods/add/index.md).

Webhooks are only sent for violations. Frames and transcripts that do not produce a violation do not generate webhooks.

## Example Payload

```
{
  "type": "live_video.violation_detected",
  "namespace": "example_live_streams",
  "stream_id": "230980923",
  "frame_id": "frame_45000",
  "violation_id": "230980923:45000",
  "request_id": "example_live_streams:230980923:frame_45000",
  "occurred_at_ms": 45000,
  "url": "https://app.safetykit.com/t/example/video-review?view=events&namespace=example_live_streams&streamId=230980923&frameTimestamp=45000",
  "violation": {
    "summary": "The seller directed abusive language at a viewer.",
    "policies": [
      {
        "label": "content.abusive_language",
        "evidence": "The seller used targeted abusive language toward a chat participant.",
        "confidence": "high"
      }
    ]
  }
}
```

## Fields

- `type`: Event type (`live_video.violation_detected`)
- `namespace`: Namespace the stream was ingested into
- `stream_id`: Original `stream_id` provided when the stream content was ingested
- `frame_id`: Original `frame_id` provided when the frame was ingested
- `violation_id`: Identifier for this violation
- `request_id`: Request identifier from ingestion, in the format `namespace:stream_id:frame_id`
- `occurred_at_ms`: Milliseconds from stream start at which the violation occurred
- `url`: Link to the stream playback view in SafetyKit
- `violation.summary`: Explanation of the detected violation
- `violation.policies`: Flagged policies, each with a `label`, supporting `evidence`, and a `confidence` level (`low`, `medium`, or `high`)

## Minimal validation checklist

- verify signature and timestamp before parsing
- require `type === "live_video.violation_detected"`
- require non-empty `namespace`, `stream_id`, and `violation_id`
- handle multiple entries in `violation.policies` — a single violation can flag more than one policy
