Copilot Studio Friction
Flow fails with "FlowActionBadRequest"
Last verified
Details & related
Assessment
- Confidence
- Confirmed officialConfirmed by Microsoft documentation or an official statement.
- Severity
- Blocking
- Typical time lost
- Hours
Identification
Verification & changes
Verified
Doc check by human: Official troubleshooting article, CAT blog post and input/output doc re-read during seed migration; causes and refresh fix still documented.
Change
Provisionally approved by the Product Owner; external LLM quality review pending.
Change
Initial record created from the seed dossier (migration wave 1).
Are you in the right place?
- Your agent calls an agent flow, and the call fails right away with
FlowActionBadRequest. - The failure started after you changed the flow's inputs or outputs.
- Or the call works in the test pane but keeps failing in Teams.
- The flow runs fine when you test it directly in Power Automate.
If instead the flow fails after about 100 seconds → see Agent flow fails with FlowActionTimedOut. If instead the flow runs but no outputs arrive → see "No output was received from flow". If instead the flow never appears as a tool → see Your flow doesn't show up as a tool.
What's happening
Cause 1: The call no longer matches the flow's contract. When you add a flow, Copilot Studio stores a copy of its inputs and outputs. Change the flow later, and the agent keeps calling the old shape — the flow rejects the request. It is like ordering with last year's order form: the fields moved, so the warehouse rejects the slip. Unsupported types cause the same rejection: agent flows accept only Text, Boolean, and Number. An input left empty (a "null" value) can trigger the error too.
Cause 2: Teams replays an outdated conversation state. Teams sometimes caches an old state of the agent conversation. The error then survives even after you fixed and refreshed everything correctly.
For technicians
There is no automatic schema-drift detection; the refresh is a manual, mandatory step after every input/output change. The type restriction means every structured value (list, record, JSON) travels as a serialized string. The receiving side must parse it back, typically with a Parse value node in the topic.
How to fix it
Solution 1
Official fixRefresh the tool configuration in the topic
- Open your agent in Copilot Studio.
- Open the topic that calls the flow.
- Select the "…" (ellipsis) menu on the flow's tool node.
- Select "Refresh".
✅ You should now see: the node's inputs and outputs match the flow's current definition.
- Compare every input and output against the flow, one by one.
- Save the topic.
- Publish the agent.
Solution 2
Official workaroundConvert unsupported input values
- Open the flow's input parameters in the flow designer.
- Check each parameter's type: only "Text", "Boolean", and "Number" work.
- Convert lists, records, or JSON to a text value before passing them in.
- Make sure every input receives a value at runtime — never pass an empty input.
✅ You should now see: the call carries only supported, filled-in values.
Solution 3
Official workaroundClear the cached conversation state in Teams
- Open the conversation with your agent in Teams.
- Type "start over".
- If the error persists, type "goodbye" to end the conversation.
- Ask your question again in a fresh conversation.
✅ You should now see: the flow call succeeds against the refreshed configuration.
Check that it worked
Trigger the flow through the agent in the published channel your users use, with realistic values for every input.
Expected: no FlowActionBadRequest, and Power Automate's run history shows a succeeded run.
If it didn't work
- The channel still runs your old agent version. Publish and propagation delay is suspect number one. See Teams answers with an old version.
- You changed the flow again after the refresh. Every input/output change needs a fresh refresh. Repeat the refresh procedure.
- A complex object still slips through. Recheck every input; lists and records must travel as serialized text.
- An input is empty at runtime. Trace which variable fills it and give it a fallback value.
Prevent it next time
- Treat every flow input/output change as unfinished until you refresh the tool configuration in the topic.
- Keep flow parameters to Text, Boolean, and Number. Pass structure as serialized text — see the Parse value discipline pattern.
- Retest after each change in a fresh Teams conversation, never in an old one.
Evidence
Official documentationlearn.microsoft.com
The official troubleshooting article adds null input values and a cached Teams conversation state as triggers, cleared by typing 'start over'.
Microsoft statementmicrosoft.github.io
Microsoft's CAT team calls FlowActionBadRequest the most common runtime error and attributes it to schema mismatch after input/output changes without a tool refresh.
Official documentationlearn.microsoft.com
The official doc limits agent flow input and output parameters to the Text, Boolean, and Number types.