Gemini-3.5-transcribe returns empty transcription (HTTP 200, zero output tokens) on all documented REST paths

Filing here since the Google Issue Tracker has no public Gemini API component. gemini-3.5-transcribe returns empty transcriptions on all documented REST paths, while the same audio transcribes perfectly on other models.

Environment

  • Model: gemini-3.5-transcribe (response modelVersion: “gemini-3.5-transcribe”)
  • Endpoints tested: REST v1beta :generateContent and /v1beta/interactions
  • Auth: free-tier API key (ai.google.dev)
  • Date: Aug 28, 2026 (America/Mexico_City)
  • Audio: WAV PCM 16 kHz mono, 5.5 s, clear es-MX speech (synthetic, generated by
    gemini-2.5-flash-preview-tts, no personal data)

Expected behavior

The model returns the transcription text of the provided audio.

Actual behavior

HTTP 200 with EMPTY output, no error and no safety metadata, on all three documented paths:

  1. :generateContent + inlineData (WAV base64): parts: [{}], finishReason STOP
  2. :generateContent + fileData (file uploaded via Files API, state ACTIVE): identical
  3. /v1beta/interactions + input: [{type: "audio", uri, mime_type: "audio/wav"}]:
    status “completed”, total_output_tokens: 0

Tested with and without generationConfig.audioTranscriptionConfig.languageCodes: ["es-MX"]
(generateContent) and with/without generation_config.transcription_config (interactions).

Key evidence

The API DOES ingest the audio: usageMetadata reports exactly 138 audio tokens
(5.5 s × 25 tokens/s) on every call. The SAME WAV file transcribes perfectly via
gemini-3.6-flash and gemini-3.5-flash-lite (inlineData + transcription prompt), returning
the exact source sentence: “Hola, mi nombre es Santiago y esta es una prueba de
transcripción de voz.”

This is a silent failure: HTTP 200 with no error and no text. Developers lose hours
auditing their audio format, sample rate, prompt and quota while the dedicated
transcription model simply returns nothing.

Reproduction

Node ESM scripts (run with any free-tier API key, GOOGLE_API_KEY in env or inline):

  • stt-chain-test.mjs — TTS generates the audio, wraps it in WAV, calls
    gemini-3.5-transcribe via inline_data → empty
  • stt-ab2.mjs — uploads the same WAV via Files API → calls via file_data → empty
  • stt-interactions.mjs — calls /v1beta/interactions with the file URI → completed,
    0 output tokens

Real response fragment (generateContent, audio/wav):
{“candidates”:[{“content”:{“parts”:[{}],“role”:“model”},“finishReason”:“STOP”,…}],
“usageMetadata”:{“promptTokenCount”:138,“promptTokensDetails”:[{“modality”:“AUDIO”,
“tokenCount”:138}],“serviceTier”:“standard”},“modelVersion”:“gemini-3.5-transcribe”}

Real response fragment (interactions):
{“status”:“completed”,“usage”:{“total_input_tokens”:139,
“input_tokens_by_modality”:[{“modality”:“audio”,“tokens”:138}],
“total_output_tokens”:0,…}}

Workaround

Use gemini-3.5-flash-lite with inlineData WAV + transcription prompt + temperature 0 —
returns the exact transcription and has a larger free-tier quota (500 RPD).

Attached: waveform of the test audio (WAV PCM 16 kHz mono, 5.5 s, peak amplitude 0.83 — clearly voiced signal, not noise or silence). Full audio available on request; it is also byte-reproducible by running the attached TTS+wrap script (stt-chain-test.mjs).