Input
Submit amultipart/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
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 atPOST /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.