Gemini 3.8 Flash TTS – Inconsistent 400 content_blocked Errors on Narration

I’m developing a personal audiobook tool using Gemini 3.8 Flash TTS and a custom Voice Design narrator.

I’m encountering inconsistent HTTP 400 content_blocked errors when generating ordinary literary passages.

On 11 October 2026:

  • A 129-word passage from Chapter One generated successfully.

  • The following 163-word passage returned content_blocked.

  • Both requests used the same model, custom voice, SDK version (google-genai 2.29.0), single-speaker configuration and empty style instruction.

  • Both request payloads were validated, with no encoding or structural issues identified.

Other passages from the same book have also generated successfully.

The API returns only:

Request blocked for an unspecified policy reason. Please modify your input and retry.

The failed request isn’t visible in my AI Studio logs.

Could someone from the Gemini API team investigate whether this is an expected restriction or a potential false positive?

Is there a supported way to obtain a more specific rejection reason, or improve the reliability of legitimate long-form audiobook narration?

I can provide redacted technical diagnostics privately if needed.

Thanks!

Hello @Nathaniel_Hoskin ,

DM’ed you for more details.

Dear Google Gemini API Team,

I am reporting a recurring issue with Gemini 3.8 Flash TTS that prevents my application from reliably generating spoken German audio from user-provided text.

The issue appears to involve content filtering, potentially the recitation/copyright filter. However, the API only returns the generic content_blocked error, so I cannot determine the actual reason.

1. Application and intended use

I maintain a private Telegram bot called Tagestext for German language learning.

The application extracts a daily German Bible verse and accompanying commentary from an EPUB file and generates a spoken German recording for listening comprehension and shadowing practice.

The text must be read accurately and without paraphrasing, as preserving the original wording is essential for language study.

I understand that the source material may be copyrighted. I am not requesting a workaround for copyright protections or content safety mechanisms. I would like to understand the supported and compliant way to use Gemini TTS for this type of material.

2. Technical environment

  • Python 3.11 on GitHub Actions (ubuntu-latest).

  • Official google-genai Python SDK, installed using version constraint >=2.26.0,<3. The exact resolved version has not yet been captured.

  • API interface: client.interactions.create().

  • Primary model: gemini-3.8-flash-tts.

  • Secondary model: gemini-3.8-flash-lite-tts, used only after certain transient server errors, not after policy blocks.

  • Voice: Alnilam.

  • Style: slow, calm, natural German narration.

  • Output format: response_format={"type": "audio"}.

  • Speech instructions are provided through speech_metadata.style.

  • Voice configuration: generation_config={"speech_config": [{"voice": "Alnilam"}]}.

The application sends the complete German passage as a single text input. It does not automatically split or paraphrase content after a policy rejection.

A target duration of approximately 110 seconds is configured locally for audio processing. This target is not passed to Gemini as an API duration parameter.

3. Confirmed failures on October 26, 2026

First attempt:

  • Approximately 09:43:33 UTC.

  • Model: gemini-3.8-flash-tts.

  • Result: HTTP 400, content_blocked.

  • No audio was returned.

The application recorded the failure and prevented automatic retries of the same input.

Second attempt:

  • October 26, 2026, approximately 13:47:03–13:47:08 UTC.

  • Explicitly triggered by the user.

  • Same model and saved voice settings.

  • A new API call was made.

  • Result: HTTP 400, content_blocked again.

  • No audio was returned.

The relevant application logs are:

REQUEST_MODE: repeat_audio
Explicit user-requested Gemini recheck
TTS call 2/4
TTS refused transcription using
gemini-3.8-flash-tts: content_blocked
Audio skipped: content_blocked

Both API attempts were recorded in the application’s persistent usage ledger.

This was not a 429 RESOURCE_EXHAUSTED error. The local budget was not exhausted, and the application did not automatically retry after the policy rejection.

The current application logs capture the normalized content_blocked reason but not the complete structured API error response or a server request ID.

4. Different behavior in Google AI Studio

I also tested the German passage manually using Google AI Studio.

The results were inconsistent:

  • Some manual TTS generations succeeded.

  • Other attempts with the complete passage were rejected.

  • Splitting the passage into smaller logical sections sometimes allowed generation, but other sections were still blocked.

  • AI Studio displayed the message: “The generated content was filtered because it may contain material that resembles existing copyrighted works.”

  • In later manual experiments, TTS generation succeeded again for material that had previously been refused.

Some of the manual experiments used different voices, including Enceladus, and different text formatting or style instructions. Therefore, these tests do not establish that identical request payloads behave differently between AI Studio and the API.

However, they do demonstrate that the observed filtering behavior is difficult to predict.

5. Why this matters

This is a daily educational application. An unpredictable refusal prevents the student from receiving the requested audio and interrupts the learning routine.

The application is not asking Gemini to compose or reproduce a new article. It supplies the text directly and requests speech synthesis only.

I would like to continue using Gemini TTS because its German narration quality and expressiveness are suitable for language study.

6. Questions for the Gemini API team

  1. Does the API’s content_blocked response in this case specifically indicate the copyright/recitation filter, or could a different policy mechanism be responsible?

  2. Is this behavior expected for supplied German religious or educational texts, including Bible verses and commentary, or could it represent a false positive?

  3. Why can a passage sometimes be synthesized manually in AI Studio while other attempts are rejected? Are there differences in filtering behavior between AI Studio and the Interactions API?

  4. Is there a supported way to synthesize user-provided text verbatim for language learning when the user has the necessary rights or authorization to use the material?

  5. Are there specific model settings or recommended API configurations that can improve the reliability of legitimate educational narration without altering the source text or bypassing content protections?

  6. Does changing from the free API tier to a paid tier affect these content-filtering decisions, or only quotas and rate limits?

  7. Can you investigate the two failed requests using their timestamps and project information provided privately? Is there a way to capture a more specific rejection reason or a request identifier?

I can provide sanitized application logs, screenshots from Google AI Studio, and a minimal reproduction example through an appropriate private support channel.

I have also found reports of similar content_blocked behavior from other Gemini TTS developers:

I would appreciate clarification on whether this is an expected product limitation, a known issue, or a problem that requires further investigation.

Thank you for your assistance.

Best regards