# Gemini 3 "Thought signature is not valid" - Can't do multi-turn tool calling

**URL:** <https://discuss.ai.google.dev/t/gemini-3-thought-signature-is-not-valid-cant-do-multi-turn-tool-calling/119360>\
**Category:** Gemini API\
**Tags:** api, bug, gemini, gemini-3\
**Created:** [January 27, 2026, 6:02pm UTC](https://discuss.ai.google.dev/t/gemini-3-thought-signature-is-not-valid-cant-do-multi-turn-tool-calling/119360 "2026-01-27T18:02:36Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![Flop](https://d1dlmcr85iqnpo.cloudfront.net/user_avatar/discuss.ai.google.dev/flop/32/32852_2.png) [@Flop](https://discuss.ai.google.dev/u/Flop)\
**Post date:** [January 27, 2026, 6:02pm UTC](https://discuss.ai.google.dev/t/gemini-3-thought-signature-is-not-valid-cant-do-multi-turn-tool-calling/119360/1 "2026-01-27T18:02:36Z")

</div>

Hey everyone,

I’ve been running into a frustrating issue with Gemini 3 models (mostly flash) and I’m hoping someone can point me in the right direction.

I’m building an agentic workflow that uses iterative tool calling via the OpenAI Python SDK pointed at OpenRouter. Works great with Claude, GPT, etc. But with Gemini 3, I keep hitting this error on either the second tool call or maybe the 10 tool call in the chain of thought API call (after sending back tool results):

400 Bad Request - “Unable to submit request because Thought signature is not valid”

After a lot of digging, I found [Google’s docs on thought signatures]([https://ai.google.dev/gemini-api/docs/thought-signatures](https://ai.google.dev/gemini-api/docs/thought-signatures)). Apparently Gemini 3 returns a `thought_signature` that you need to echo back in multi-turn conversations with tool calling.

The problem is I can’t find this field anywhere in the OpenRouter response.

I’ve inspected the tool\_call objects extensively:

[DEBUG] Tool call type: \<class ‘openai.types.chat.chat\_completion\_message\_tool\_call.ChatCompletionMessageToolCall’\>

[DEBUG] Tool call \__dict_\_: {‘id’: ‘call\_xxx’, ‘function’: Function(…), ‘type’: ‘function’}

[DEBUG] NO thought\_signature found

It’s just not there. Checked model\_extra, extra\_content, every attribute I could find.

## **Things I’ve tried (none worked)**

- Looking for thought\_signature in various places in the response

- Using “skip\_thought\_signature\_validator” as the signature (Google’s docs mention this as an option)

- Removing the reasoning parameter entirely

- Adding provider-specific params

- Retrying with exponential backoff (it just keeps failing)

## **Questions**

1. **Does OpenRouter expose the thought\_signature from Gemini 3?** If so, where is it?

2. **Is there a way to bypass this validation?** The skip validator string doesn’t seem to work through OpenRouter.

3. **Is multi-turn tool calling just not supported for Gemini 3 via OpenRouter?**

For now I’m detecting this error and falling back to Claude, which works but adds latency.

## **Error details**

```auto
{
  "error": {
    "message": "Provider returned error",
    "code": 400,
    "metadata": {
      "raw": "{
        \"error\": {
          \"code\": 400,
          \"message\": \"unable to submit request because thought signature is not valid.. learn more: https://cloud.google.com/vertex-ai/generative-ai/docs/model-reference/gemini\",
          \"status\": \"invalid_argument\"
        }
      }",
      "provider_name": "google",
      "is_byok": false
    }
  }
}

```

Anyone else run into this? Thanks!

---

<div class="post-metadata">

**Author:** ![Kegen\_Guyll](https://d1dlmcr85iqnpo.cloudfront.net/user_avatar/discuss.ai.google.dev/kegen_guyll/32/90218_2.png) [@Kegen\_Guyll](https://discuss.ai.google.dev/u/Kegen_Guyll)\
**Post date:** [February 2, 2026, 5:55pm UTC](https://discuss.ai.google.dev/t/gemini-3-thought-signature-is-not-valid-cant-do-multi-turn-tool-calling/119360/2 "2026-02-02T17:55:02Z")

</div>

I’ve been running into this same issue, using openClaw with openRouter. This has only happened with the flash 3 model.

---

<div class="post-metadata">

**Author:** ![Vishal](https://d1dlmcr85iqnpo.cloudfront.net/user_avatar/discuss.ai.google.dev/vishal/32/5016_2.png) [@Vishal](https://discuss.ai.google.dev/u/Vishal)\
**Post date:** [February 2, 2026, 6:21pm UTC](https://discuss.ai.google.dev/t/gemini-3-thought-signature-is-not-valid-cant-do-multi-turn-tool-calling/119360/3 "2026-02-02T18:21:04Z")

</div>

> **[Preserving Reasoning - Reasoning Tokens - Improve AI Model Decision Making](https://openrouter.ai/docs/guides/best-practices/reasoning-tokens#preserving-reasoning)**
>
> For models that support it, the OpenRouter API can return Reasoning Tokens, also known as thinking tokens. OpenRouter normalizes the different ways of customizing the amount of reasoning tokens that the model will use, providing a unified interface...

This section has more info on how to preserve the reasoning for Gemini 3. If you pass back the reasoning details then that should resolve the missing thought signatures error

---

<div class="post-metadata">

**Author:** ![Steve\_Hanna](https://d1dlmcr85iqnpo.cloudfront.net/user_avatar/discuss.ai.google.dev/steve_hanna/32/34025_2.png) [@Steve\_Hanna](https://discuss.ai.google.dev/u/Steve_Hanna)\
**Post date:** [February 9, 2026, 9:17am UTC](https://discuss.ai.google.dev/t/gemini-3-thought-signature-is-not-valid-cant-do-multi-turn-tool-calling/119360/4 "2026-02-09T09:17:10Z")

</div>

@Vishal This is happening when using the Google genai sdk as well ( [see this post](https://discuss.ai.google.dev/t/gemini-3-flash-preview-inconsistent-thought-signature-generation-in-parallel-function-calls-causes-400-errors-and-potential-silent-data-loss/118936) ) as through openrouter, so it appears to be a problem with the API.

---

<div class="post-metadata">

**Author:** ![Amurli\_The](https://d1dlmcr85iqnpo.cloudfront.net/user_avatar/discuss.ai.google.dev/amurli_the/32/33068_2.png) [@Amurli\_The](https://discuss.ai.google.dev/u/Amurli_The)\
**Post date:** [April 1, 2026, 5:56am UTC](https://discuss.ai.google.dev/t/gemini-3-thought-signature-is-not-valid-cant-do-multi-turn-tool-calling/119360/5 "2026-04-01T05:56:22Z")

</div>

I really wonder why no one is calling out the obvious: OpenAI API is a REST API. and google introduced state to an inherently stateless API - without any technical need - they broke our stacks on purpose for one reason: vendor lock-in by sabotage - and to make that effect stronger they allow for silent degradation if you do not use the “feature”, which means all solutions that do not build on googles sabotage-API appear to be worse at their job then google solutions.

suck my thumb, usurper.

---

<div class="post-metadata">

**Author:** ![system](https://d1dlmcr85iqnpo.cloudfront.net/user_avatar/discuss.ai.google.dev/system/32/1_2.png) [@system](https://discuss.ai.google.dev/u/system)\
**Post date:** [November 5, 2026, 6:37pm UTC](https://discuss.ai.google.dev/t/gemini-3-thought-signature-is-not-valid-cant-do-multi-turn-tool-calling/119360/6 "2026-11-05T18:37:28Z")

</div>

Closed on November 5, 2026, 6:37pm UTC

This thread was automatically closed 60 days after the last reply. If you are running into an issue, please create a new post.
