> ## 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 audio moderation

> Submit an audio clip for moderation. The clip is transcribed and the resulting text runs through the same keyword blocklist and LLM prohibition check as prompt moderation. Pass a publicly reachable HTTP or HTTPS `audio` URL — the worker downloads it. URLs that use another scheme, or that resolve to a private or internal network address, are rejected with `400 INVALID_REQUEST`. The clip must be no larger than 100 MB and no longer than 30 minutes.

This moderates **transcribed speech**, not non-speech audio content — music, sound effects and other non-verbal audio are not classified.

The transcript is never stored and never returned. A rejection `reason` is model-generated text, scrubbed of verbatim quotation on a best-effort basis, and may paraphrase what was said.

Returns a job ID for polling or webhook delivery.

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

<Note>
  Moderates **transcribed speech** only — non-speech audio is not classified. The transcript is
  never stored and never returned; see [audio
  moderation](/moderation/audio-moderation#transcript-privacy) for exactly what the rejection
  `reason` may contain.
</Note>


## OpenAPI

````yaml api-reference/openapi.json POST /api/v1/moderate/audio
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/audio:
    post:
      tags:
        - Moderation
      summary: Submit audio moderation
      description: >-
        Submit an audio clip for moderation. The clip is transcribed and the
        resulting text runs through the same keyword blocklist and LLM
        prohibition check as prompt moderation. Pass a publicly reachable HTTP
        or HTTPS `audio` URL — the worker downloads it. URLs that use another
        scheme, or that resolve to a private or internal network address, are
        rejected with `400 INVALID_REQUEST`. The clip must be no larger than 100
        MB and no longer than 30 minutes.


        This moderates **transcribed speech**, not non-speech audio content —
        music, sound effects and other non-verbal audio are not classified.


        The transcript is never stored and never returned. A rejection `reason`
        is model-generated text, scrubbed of verbatim quotation on a best-effort
        basis, and may paraphrase what was said.


        Returns a job ID for polling or webhook delivery.
      operationId: submitAudioModeration
      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/audio \
              -H "Authorization: Bearer $OMNIFENCE_API_KEY" \
              -F "audio=https://example.com/clip.mp3" \
              -F "webhook_url=https://your-app.com/webhooks/omnifence"  # optional
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: API key from the Omnifence dashboard

````