Gemini 3 Function-Calling 400 Error Checker
Getting a 400 error or silently broken multi-turn tool use from the Gemini 3 API? Paste your request or response to check function-calling turns for missing thoughtSignature fields, functionResponse ordering mistakes, and missing id echoes. 100% client-side.
🔒 Runs entirely in your browser — no data is ever sent anywhereWhen you need a Gemini thought signature validator
Gemini 3's function-calling flow attaches an opaque thoughtSignature to each functionCall part, and it has to be replayed back to the API unmodified on the next turn — strip it, reorder it, or serialize your conversation history in a way that drops it, and the next request comes back with a 400 error that doesn't obviously point at the signature as the cause. If you're mid-integration and hitting a mysterious 400 on the second or third turn of a tool-use loop, pasting the request or response here checks the exact structural rules Gemini enforces, rather than guessing which of several possible causes it is.
What this tool checks: signatures, ordering, and id echoes
There are two distinct signature rules depending on the shape of the tool call: for several function calls made in parallel within one response, only the first functionCall part is required to carry a signature; for function calls made sequentially across separate turns, each turn's functionCall needs its own. This tool checks both cases specifically and reports exactly which turn is missing one, along with whether functionResponse parts match their corresponding functionCall in order and count, and whether the functionCall id is echoed back correctly. It accepts a full request body, a bare contents array, a raw API response, or a single content object, and detects which one you gave it — though response-only input skips the ordering checks, since there's no conversation history to check against. It can't verify what's inside a signature, only whether one is present where the API requires it — the contents are encrypted by Google and not decodable by anyone but Gemini itself.
Frequently asked questions
What is a Gemini thought signature?
It's an encrypted, opaque string the Gemini 3 API attaches to a functionCall part to preserve the model's internal reasoning state across a multi-turn tool-use conversation. When you replay conversation history back to the API — including that functionCall and its result — you must include the thoughtSignature exactly as it was returned, unmodified. Leaving it out (or stripping it during your own serialization) makes the next request invalid.
Why does my request fail with a 400 error?
The most common cause is a missing thoughtSignature on a functionCall part being replayed into history. There are two signature rules: for parallel function calls in one response, only the first functionCall part carries a signature; for sequential function calls across separate turns, each turn's functionCall needs its own. This tool checks both cases and tells you exactly which turn is missing one.
Can this tool decode or verify what's inside a thoughtSignature?
No — thought signatures are encrypted by Google and not decodable client-side (or server-side, by anyone but Gemini itself). This tool only checks structure: whether a signature is present where the API requires one, whether functionResponse parts match their functionCall in order and count, and whether the Gemini 3 functionCall id is echoed back correctly. It can't tell you if a signature's contents are valid, only whether one is missing where it shouldn't be.
What can I paste in?
A full request body ({ contents: [...] }), a bare contents array, a raw generateContent/streamGenerateContent response ({ candidates: [...] }), or a single content object ({ role, parts }). This tool detects which shape you gave it. Response-only shapes are checked for a missing signature but skip the ordering checks, since there's no conversation history to check against.
Related AI tools
Token Counter
Count tokens for GPT-5, GPT-4o, and older OpenAI models as you type, using the exact same tokenizer OpenAI's API uses.
Citations Viewer
Paste a Claude Citations API response to see the answer text with each cited passage highlighted and matched to its source document, location, and quoted text.
MCP Validator
Paste a Model Context Protocol tool definition — a single tool object, an array, or a full tools/list response — to check it against the spec: missing name or inputSchema, a name most clients will reject, a required property that doesn't exist, malformed annotations, and more.
Embedding Truncator
Truncate a Matryoshka-style embedding vector to fewer dimensions and correctly L2-renormalize it — the step most people skip when truncating OpenAI, Gemini, Cohere, or Nomic embeddings by hand.
Bracketly is free and open-source. If this tool saved you time, consider supporting it.
☕ Buy me a coffee