Interactions API: GET /v1beta/interactions/{id} returns 400 "API key not valid" since ~19:30 UTC Sep 21, while create still succeeds (gemini-omni-1.1-flash)

Since about 19:30–19:50 UTC on Sep 21, every attempt to retrieve a Gemini Omni interaction fails with 400 API key not valid. The same key keeps succeeding on POST /v1beta/interactions (the job is accepted) and on generateContent. It reproduces with three different keys, including one freshly created in AI Studio, and in the AI Studio playground itself. The key appears to be rejected only on the retrieval/stream path.

Setup

  • Model: gemini-omni-1.1-flash, via the Interactions API (POST /v1beta/interactions, then polling GET /v1beta/interactions/{id})
  • Auth: x-goog-api-key header
  • Paid tier, billing enabled, Generative Language API enabled
  • Keys: auth keys (service-account-bound). One is ~5 months old and was working until today. Two new ones were created today, one in Cloud Console and one in AI Studio. All three fail the same way.
  • No code or deploy changes on our side since Sep 18.

Errors (verbatim)

  • REST, on retrieval: {"error":{"message":"API key not valid. Please pass a valid API key.","code":"invalid_request"}}
  • AI Studio playground: Agent finished with error: Failed to close Interaction stream: API key not valid. Please pass a valid API key.

Cloud Monitoring (serviceruntime request_count, generativelanguage.googleapis.com, 10-min windows, UTC)

Window CreateInteractionHttp 200 GetInteractionHttp 200 GetInteractionHttp 400 CreateInteractionStream 400
18:10 – 19:30 9 57 1 0
19:40 – 20:30 9 0 9 9
  • Since ~19:40 UTC there have been zero successful GetInteractionHttp calls with any key. Every create still returns 200.
  • The failing CreateInteractionStream calls are attributed to credential apikey:UNKNOWN, so the key doesn’t seem to be resolved on that path.
  • GenerateContent with the same key returned 200 throughout.

Questions

  1. Is this a known regression on the Interactions retrieval/stream path for auth keys?
  2. Are interactions that were created but can’t be retrieved being billed?
  3. Will those interactions be retrievable once this is fixed?

Happy to share the project ID and interaction IDs privately.

I am having the same issue. Very frustrating as everything but the interaction polling works…

I have the same issue today. Notably my API key works fine for non-background interaction API requests.

Here’s a bash script that runs the interactions API twice, first with background: true (fails), then normally without backgrounding (succeeds).

#!/usr/bin/env bash

echo "api key prefix: ${GEMINI_API_KEY::5}" &&
echo "api key len: $(echo -n "$GEMINI_API_KEY" | wc -c)" &&
echo "api key suffix byte: $(echo; echo -n "$GEMINI_API_KEY" | tail -c 1 | hd)" &&
echo "background interactions API:" &&
ID=$(curl -s -X POST https://generativelanguage.googleapis.com/v1beta/interactions \
    -H "x-goog-api-key: $GEMINI_API_KEY" \
    -H "Content-Type: application/json" \
    -H "Api-Revision: 2026-05-20" \
    -d '{"model": "gemini-3.8-flash", "input": "Reply with OK only.", "background": true}' |
  python3 -c "import json,sys; print(json.load(sys.stdin)['id'])") &&
echo "id=$ID" &&
curl -s -X GET -w "\nhttp_code: %{http_code}\n" "https://generativelanguage.googleapis.com/v1beta/interactions/$ID" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -H "Api-Revision: 2026-05-20" &&
echo "interactions API:" &&
curl -s -X POST https://generativelanguage.googleapis.com/v1beta/interactions \
    -H "x-goog-api-key: $GEMINI_API_KEY" \
    -H "Content-Type: application/json" \
    -H "Api-Revision: 2026-05-20" \
    -d '{"model": "gemini-3.8-flash", "input": "Reply with OK only."}'

output:

api key prefix: AQ.Ab
api key len: 53
api key suffix byte: 
00000000  51                                                |Q|
00000001
background interactions API:
id=v1_ChdLWm0wYXYyR01OSG9xdHNQNU9yM3VBZxIXS1ptMGF2MkdNTkhvcXRzUDVPcjN1Q..
{"error":{"message":"API key not valid. Please pass a valid API key.","code":"invalid_request"}}
http_code: 400
interactions API:
{"id":"v1_ChZMSm0wYW9JbHRORFBzZy1lejRHZ0N3EhZMSm0wYW9JbHRORFBzZy1lejRHZ0..","status":"completed","usage":{"total_tokens":79,"total_input_tokens":6,"input_tokens_by_modality":[{"modality":"text","tokens":6}],"total_cached_tokens":0,"total_output_tokens":1,"total_tool_use_tokens":0,"total_thought_tokens":72,"raw_prompt_token":37,"model_invocation_token_counts":[{"prompt_tokens_details":[{"modality":"text","tokens":37}],"candidates_tokens_details":[{"modality":"text","tokens":5}],"thoughts_tokens_details":[{"modality":"text","tokens":72}]}],"non_grounding_model_invocation_token_counts":[{"prompt_tokens_details":[{"modality":"text","tokens":37}],"candidates_tokens_details":[{"modality":"text","tokens":5}],"thoughts_tokens_details":[{"modality":"text","tokens":72}]}]},"created":"2026-09-24T03:29:48Z","updated":"2026-09-24T03:29:48Z","service_tier":"standard","steps":[{"signature":"EvsCCvgCAWkUfRNjHYWcdcDOzZw6hmmSd9WCG/gFE+cJ72xxSVlefkeV5lKWbIvsv1Q10dDolePJg+kGBQmHKYmrO465xXKe78F9lSHZPkRep2LEkrNPh0Kx/evQce5NIIajWoWRiskSuusjL1/3zLoara8leJT6C7jJ9ABoP9ubd/lh/x4TnmV/6/62uN8Zzq3smKLhykHHsDDheXUGV/xl8iNJvQgxGFvSirj6c/TPipKDQFLcADOe2JZM4uxJU0IEdGyTepLYnqUI2gkq5yCxVdO36UvOJUio8JRHdM7v0niYOlU6lAy5cYZ0QsobdYVh6SzEAg0JqAbuV00XQQXH0VAFxlIOFlG3D0gSmnR0B16RCVvLgQCEKSpYP3PwzY3Dczrfb2mBasg4IwmbbifJJjkT7cavvSSH0yvwFFKTmKVO7aNTBYsUnY/6QfUWwThOtVBlKBTIbcwh4bGsJk5hJiZhAI3dy7uf1SMXCW4OxYCRzTB/DDXxmkcmoQ==","type":"thought"},{"content":[{"text":"OK","type":"text"}],"type":"model_output"}],"object":"interaction","model":"gemini-3.8-flash"}

Same issue here. Still reproducing on Sep 23.

  • Model: gemini-omni-1.1-flash (also seen on gemini-omni-flash-preview), Interactions API.
  • POST /v1beta/interactions with background: true returns 200 in_progress with an id.
  • The first GET /v1beta/interactions/{id}, about 3 seconds later, returns
    400 “API key not valid. Please pass a valid API key.”
    Older failed ids now return 400 “Request contains an invalid argument.”
  • Auth: x-goog-api-key header. The ?key= query parameter fails the same way.
  • Same key still works for generateContent, files, models, and a synchronous
    (background: false) Omni request. A GET of an interaction created on Sep 21,
    before the incident, still returns 200.
  • Last good background run: 2026-09-21 17:05 UTC.
    First failure: 2026-09-22 04:37 UTC. Latest repro: 2026-09-23 17:21 UTC.
  • Latest failing id:
    v1_ChdrQXEwYXVDVEE1cjZ2ZElQbjdXZnNRbxIXa0FxMGF1Q1RBNXI2dmRJUG43V2ZzU..
  • Paid tier, billing enabled.

Question: are these failed background interactions billed? We cannot retrieve their output.

Adding a reproduction from 2026-10-05 04:31 UTC with gemini-3.8-flash. A tiny text-only REST request (no video) to POST /v1beta/interactions used background: true, store: true, and input: “Reply OK”. Headers were x-goog-api-key and Api-Revision: 2026-05-20. Creation returned HTTP 200 with status in_progress. GET /v1beta/interactions/{id} about 8 seconds later returned HTTP 400 with error code invalid_request. Explicit store: true did not resolve it.

In a separate tiny background test, GET /v1beta/interactions/{id}?stream=true connected with HTTP 200 but emitted interaction.created, interaction.status_update, then an error event with code invalid_request rather than a completed result. The same API key succeeds on ordinary text requests and model metadata. We deleted the test interactions after these checks.

This appears similar to the retrieval/stream problem in this thread, but we cannot confirm it has the same root cause. Is there a known issue with background interaction retrieval for API keys, or a safe structured diagnostic that distinguishes authentication from an unavailable interaction result? We are intentionally omitting the key, interaction IDs, and provider message text from this public post.