Skip to main content
Audio moderation transcribes the speech in an audio clip and runs the transcript through the same checks as text moderation.
This moderates transcribed speech, not non-speech audio content. Music, sound effects, tone of voice and other non-verbal audio are not screened. A clip with no speech in it passes.

Input

Submit a multipart/form-data request with:
The audio 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.

Formats

mp3, m4a / mp4 audio, wav, flac, ogg (including Opus), webm and aac. The container is verified server-side; a file whose contents don’t match a supported audio container is rejected before transcription.

Limits

Both are hard limits. A clip over the duration cap fails after the initial probe, before any transcription cost is incurred.
Lossless long-form audio hits the 100 MB size cap well before the 30-minute duration cap. A 30-minute WAV is roughly 300 MB. Compress to a lossy format (for example 64 kbps mono MP3, about 14 MB for 30 minutes) before submitting. Transcription quality is unaffected.

How it’s checked

The clip is transcribed, and the transcript is checked against the prohibited-content policy and every enabled custom category on your account. A prohibited transcript rejects the job, with a reason explaining what tripped. When a custom category caused the rejection, the reason names it by slug.

Output

On a rejection, a reason field explains what tripped. See decision logic for how the prohibition decision is determined.

Transcript privacy

The transcript is never stored and never returned. The rejection reason is model-generated text, scrubbed of verbatim quotation on a best-effort basis, and may paraphrase what was said. Concretely: a transcript exists only in short-lived, automatically-expiring storage for the duration of the job, and is deleted when the job finishes. No transcript is written to the job record, returned on the job response, or included in a webhook delivery. The reason on a rejection is checked server-side for verbatim excerpts of the transcript, which are replaced with a generic category description. But a short excerpt or a paraphrase can still appear. If your content is sensitive enough that even a paraphrase is unacceptable, surface only is_prohibited to your users and discard reason.

Latency

Audio moderation is slower than the other modalities: transcription time scales with clip length. Register a webhook rather than polling tightly. The job reports queued for the whole run and then flips straight to a terminal status, with no incremental progress to observe, so frequent polling only burns rate limit.