Copilot Studio Friction

Get notified when this record changes

One email when the status or the fix changes — double opt-in, no tracking, unsubscribe in every email.

Flow fails with "FlowActionBadRequest"

Mitigatedsince 8 July 2026

Last verified

Details & related

Assessment

Confidence
Confirmed officialConfirmed by Microsoft documentation or an official statement.
Severity
Blocking
Typical time lost
Hours

Identification

Agent flowsAll channels

Verification & changes

  1. 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.

  2. Change

    Provisionally approved by the Product Owner; external LLM quality review pending.

  3. 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 fix

Refresh the tool configuration in the topic

  1. Open your agent in Copilot Studio.
  2. Open the topic that calls the flow.
  3. Select the "…" (ellipsis) menu on the flow's tool node.
  4. Select "Refresh".

✅ You should now see: the node's inputs and outputs match the flow's current definition.

  1. Compare every input and output against the flow, one by one.
  2. Save the topic.
  3. Publish the agent.

Solution 2

Official workaround

Convert unsupported input values

  1. Open the flow's input parameters in the flow designer.
  2. Check each parameter's type: only "Text", "Boolean", and "Number" work.
  3. Convert lists, records, or JSON to a text value before passing them in.
  4. 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 workaround

Clear the cached conversation state in Teams

  1. Open the conversation with your agent in Teams.
  2. Type "start over".
  3. If the error persists, type "goodbye" to end the conversation.
  4. 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.