[gemini-3.5-transcribe] Documented custom_vocabulary + diarization/timestamps configuration is rejected by the Interactions API

Summary

The Audio Transcription documentation explicitly shows custom_vocabulary,
diarization_mode: "speaker", and timestamp_granularities: ["word"] in the
same transcription configuration. The Gemini Developer API rejects that exact
documented combination.

Documentation:

Environment

  • Observed at: 2026-08-29T10:18:04Z–10:18:05Z
  • API: Gemini Developer API, Interactions API v1beta
  • Endpoint: POST https://generativelanguage.googleapis.com/v1beta/interactions
  • Model: gemini-3.5-transcribe
  • SDK: @google/genai 2.19.0
  • Runtime: Bun 1.3.14 / TypeScript 5.9.3
  • OS: macOS 26.3.1 arm64
  • Language hint: ro-RO
  • Billing tier: Free tier

Documented configuration

{
  "generation_config": {
    "transcription_config": {
      "language_codes": ["ro-RO"],
      "custom_vocabulary": ["Noveris"],
      "mode": {
        "type": "verbatim",
        "diarization_mode": "speaker",
        "timestamp_granularities": ["word"]
      }
    }
  }
}

Actual behavior

The exact documented combination is rejected with HTTP 400:

custom_vocabulary is incompatible with timestamps.

Removing timestamps while retaining custom vocabulary and diarization is also
rejected with HTTP 400:

custom_vocabulary is incompatible with diarization.

These are deterministic 400 responses, so retrying is not appropriate.

Control result

Using the same endpoint, API key, uploaded audio, MIME type and language hint,
removing only custom_vocabulary while retaining diarization and word timestamps
completes successfully and returns word_info annotations with speaker IDs.

Expected behavior

Either:

  1. the documented combined configuration should be accepted by the backend; or
  2. the documentation and API schema should declare these features mutually
    exclusive, and the combined example should be removed.

Minimal reproduction

The reproduction used a 37.935-second synthetic fixture with six alternating TTS turns
(Ioana ro-RO / Eddy it-IT) and the invented term Noveris.

Fixture SHA-256:

f6b92b28ecedf1ccf650451d109707624795c8160717a31b6e186215537f5c2c

The forum currently accepts only image attachments for this account. The synthetic audio fixture can be supplied privately on request.

Upload the fixture once, wait until the File is ACTIVE, then send the documented
configuration above. Reuse the same File URI and remove only
timestamp_granularities for the diarization-only incompatibility control. Both
requests use store: false and stream: false. Delete the File in finally.

Request evidence

  • vocabulary + diarization: 2026-08-29T10:18:04.277Z, HTTP 400,
    custom_vocabulary is incompatible with diarization.
  • vocabulary + diarization + timestamps: 2026-08-29T10:18:04.617Z, HTTP 400,
    custom_vocabulary is incompatible with timestamps.
  • cleanup control: filesApiCount=0, uploaded target absent.

Request/correlation IDs and project identifiers can be supplied separately in a
private Customer Care case, but must not be posted in this public topic.

I also encountered the same problem

Thank you for reporting this, it’s a bug, fix coming.

Update: Sorry I rushed into this - the team confirmed custom vocabulary cannot be combined with speaker diarization or word-level timestamps. The API rejects requests that combine custom_vocabulary with either feature. Thank you for flagging it. We are updating the docs to reflect this.