> ## Documentation Index
> Fetch the complete documentation index at: https://docs.omnifence.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Submit video frame moderation

> Submit a video URL for frame-by-frame moderation. The pipeline extracts frames with FFmpeg and runs per-frame VLM classification, then merges the results (any prohibited frame rejects the video). Pass a publicly reachable HTTP or HTTPS `video` — the worker downloads it for frame extraction. URLs that use another scheme, or that resolve to a private or internal network address, are rejected with `400 INVALID_REQUEST`. The linked video must be no larger than 300 MB; a larger file fails during frame extraction. Returns a job ID for polling or webhook delivery.

<Note>
  Requires the `moderate:video` scope. Requests without this scope receive a `403 FORBIDDEN`
  response. See [authentication](/authentication#scopes).
</Note>

This endpoint runs the legacy frame-by-frame pipeline: the video is sampled with FFmpeg and each
frame is classified, then the results are merged (any prohibited frame rejects the video). For most
cases, prefer [`POST /moderate/video`](/api-reference/endpoint/video-moderate), which sends the whole
clip to a video-capable model directly.


## OpenAPI

````yaml api-reference/openapi.json POST /api/v1/moderate/video/frame
openapi: 3.1.0
info:
  title: Omnifence API
  description: >-
    Content moderation API. Clients submit images or videos which pass through a
    classification pipeline and receive a pass/reject decision.
  version: 1.0.0
  contact:
    email: support@omnifence.ai
servers:
  - url: http://localhost:3051
    description: Local development
security:
  - bearerAuth: []
tags:
  - name: System
    description: Health and diagnostics
  - name: Moderation
    description: Submit moderation jobs
  - name: Jobs
    description: Query job status and progress
  - name: Usage
    description: Billing and usage data
  - name: Webhooks
    description: Webhook registration
  - name: Account
    description: Authenticated client account settings
  - name: Billing
    description: Customer-facing billing balance and ledger
  - name: Admin
    description: Platform administration (requires admin:config scope)
paths:
  /api/v1/moderate/video/frame:
    post:
      tags:
        - Moderation
      summary: Submit video frame moderation
      description: >-
        Submit a video URL for frame-by-frame moderation. The pipeline extracts
        frames with FFmpeg and runs per-frame VLM classification, then merges
        the results (any prohibited frame rejects the video). Pass a publicly
        reachable HTTP or HTTPS `video` — the worker downloads it for frame
        extraction. URLs that use another scheme, or that resolve to a private
        or internal network address, are rejected with `400 INVALID_REQUEST`.
        The linked video must be no larger than 300 MB; a larger file fails
        during frame extraction. Returns a job ID for polling or webhook
        delivery.
      operationId: submitVideoFrameModeration
      responses:
        '202':
          description: Default Response
          content:
            application/json:
              schema:
                type: object
                properties:
                  job_id:
                    type: string
                    format: uuid
                  status:
                    type: string
                    enum:
                      - queued
                required:
                  - job_id
                  - status
      x-codeSamples:
        - lang: bash
          label: cURL
          source: |-
            curl -X POST https://api.omnifence.ai/api/v1/moderate/video/frame \
              -H "Authorization: Bearer $OMNIFENCE_API_KEY" \
              -F "video=https://example.com/clip.mp4" \
              -F "webhook_url=https://your-app.com/webhooks/omnifence"  # optional
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: API key from the Omnifence dashboard

````