Realtime TTS-2 is live. Built for realtime conversation that feels human. Read the Realtime TTS-2 announcement

Content detection

Detect content

Checks whether the speech in an audio file, or in a video file's audio track, was generated by Inworld TTS. Send the file as multipart/form-data with a config part first and a file part second. The server reads the upload as a stream and answers once the whole file has arrived. Inworld does not store or log the file or its name.

POST/detection/v1/detect

Send an audio or video file to check whether its speech was generated by Inworld TTS. The API is free to call with any API key. It covers the TTS-2 and TTS-2 Flash models. Other AI-generated speech can also score high, so read a high score as "AI-generated, likely by Inworld".

Inworld does not store or log the uploaded file or its name.

Send the upload

Send multipart/form-data with exactly two parts, in this order:

  1. config: a JSON object such as {"audio": {"fileName": "clip.mp3"}}.
  2. file: the file to check.

The server reads the upload as a stream, so a file part sent before config is rejected with 400. Any other part is rejected too.

Read the score

probability is a detection score from 0 to 1. A higher score means the audio is more likely to have been generated by Inworld TTS. The field is absent when the server cannot score the file, usually because it holds less than 1 second of audio. Check whether probability is present rather than inferring it from the clip's length.

A score is evidence, not proof. Accuracy drops in these cases:

  • Short clips.
  • Phone-quality or heavily compressed audio. Narrowband audio, such as 8 kHz phone calls.
  • Noise and editing. Background noise, music, or mixing with other recordings lowers the score.

Limits

LimitValue
File size25 MiB
Audio length5 minutes
Time to finish the upload2 minutes
Pause in the upload10 seconds
Uploads in progress per account4

An upload that pauses for 10 seconds or does not finish within 2 minutes is ended with 408. Retry it on a faster connection, or with a smaller file.

The server detects the format from the file's bytes, not its extension. It accepts WAV, MP3, OGG, FLAC, M4A, WebM and video containers (MP4, MOV, MXF), whose audio track it checks. Raw headerless PCM is not accepted.

Authorizations

Authorizationstringrequired

Your authentication credentials. For Basic authentication, please populate Basic $INWORLD_API_KEY.

Body

multipart/form-data

configobjectrequired

What the content is. Send it as the first part, as JSON. Exactly one modality must be set; audio is the only one today.

Show child attributes

audioobjectrequired

The content is an audio file, or a video file whose audio track is checked.

Show child attributes

fileNamestring

Optional. The file's name, such as clip.mp3. Used only as a hint about the container format. When omitted, the name of the file part is used. Inworld does not store or log it.

filestringrequired

The file to check, sent after config. The server reads the format from the file's bytes, so the file needs a recognizable header: WAV, MP3, OGG, FLAC, M4A, WebM, or a video container (MP4, MOV, MXF), whose audio track is checked. Raw headerless PCM is not accepted. At most 25 MiB and 5 minutes of audio.

Response

200 - application/json

providerstring

The provider that probability refers to. Always inworld.

probabilitynumber

Detection score in [0, 1]: how likely the audio was generated by provider. A higher score means more likely. Absent when the server cannot score the file, usually because it holds less than 1 second of audio.