Skip to navigation

Content Provenance API (Beta)

Check whether an audio file carries an ElevenLabs watermark, and what that tells you about where it came from.

Audio generated by ElevenLabs carries an inaudible watermark embedded in the audio samples themselves. The content provenance endpoint, POST /v1/content-provenance/watermark, reads a file you upload and tells you whether it finds one.

When the watermark matches a generation record, the response names the product and model that produced the audio, when it was generated, and an id for that generation. It never includes the prompt, the account, or the user behind the generation.

What the watermark reports

A finished check returns two fields: is_detected and details.

is_detected is true when the decoder recognised an ElevenLabs watermark in the file, and false when it did not.

details is populated only when the generation details can be recovered from the watermark, which might not be possible for short or heavily changed audio. It then carries product, model, generated_at, and unique_id. Any of these four can be null. If no record matched, or no watermark was found, details is null.

You can also send version to choose which decoder reads the file. Leave it out, or send latest, to use the latest decoder. Currently only latest is supported.

Check a file

Upload the audio as a multipart form with the field name file, and set the part’s media type, for example audio/mpeg. Your API key needs the watermark permission. OAuth access tokens are not accepted.

curl -X POST https://api.elevenlabs.io/v1/content-provenance/watermark \
-H "xi-api-key: $ELEVENLABS_API_KEY" \
-F "file=@./example.mp3;type=audio/mpeg"

version is optional. To send it explicitly:

curl -X POST https://api.elevenlabs.io/v1/content-provenance/watermark \
-H "xi-api-key: $ELEVENLABS_API_KEY" \
-F "file=@./example.mp3;type=audio/mpeg" \
-F "version=latest"

A file that carries a watermark returns something like this:

{
"is_detected": true,
"details": {
"product": "Music",
"model": "Eleven Music v2",
"generated_at": "2026-07-27T18:34:12+00:00",
"unique_id": "row-123"
}
}

Limits

Accepted files. Any audio/* type the decoder can read, including MP3, WAV, FLAC, AAC, and Ogg. You can also omit the media type or send application/octet-stream. An image or any other non-audio type returns 400 with the status invalid_file_type.

Size and length. Each file can be at most 50 MB, and between 0.5 seconds and 5 minutes long after decoding. Send one file per request.

Rate limit. Each API key user can submit 25 checks per 24 hours. Requests over that limit return 429. If you need a higher limit, reach out.

Handling errors

A 429 is worth retrying later. A 400 or 422 means the request itself needs to change, for example a non-audio file or a version other than latest.

Using the result

The endpoint reads the watermark that is already in the file, nothing more. The response has no prompt and no account, so for any decision that depends on where audio came from, keep a person in the loop.