Skip to main content
Video moderation sends the whole clip to a video-capable vision model and evaluates it against the configured categories — the same checks as image moderation, applied to the video directly (no frame extraction).

Input

Submit a multipart/form-data request with:
The video field must be a public HTTP or HTTPS URL. URLs using another scheme, or resolving to a private or internal network address, are rejected with 400 INVALID_REQUEST. The linked video must be no larger than 300 MB.

Pipeline

Checks run in parallel on the submitted video:

VLM classification

A video-capable vision-language model analyses the clip for the always-on AI Adult General policy (which also folds in any enabled per-client custom categories) and, when enabled, the informational NSFW label. The AI Adult General step is the sole prohibited-decision source; NSFW is returned alongside the result but never causes a rejection on its own.

Output

On a rejection, a reason field explains what tripped. The nsfw field is only present when the NSFW classifier is enabled. See decision logic for how the prohibition decision is determined.

Legacy: frame-by-frame moderation

A frame-by-frame variant is available at POST /moderate/video/frame. It samples frames from the video with FFmpeg (default: one frame every 5 seconds, snapped to the nearest keyframe), classifies each frame individually, and merges the results with OR logic — if any single frame trips a category, the entire video is flagged. Track frame-by-frame progress via SSE; progress events include frames_completed and frame_count fields.