Skip to content
StatusSupportDashboard
API Reference
Streams

live_video.violation_detected

You will receive this event when SafetyKit detects a policy violation in a livestream ingested through the Streams API.

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

{
"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"
}
]
}
}
  • 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)
  • 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