# Remove from Workflow

Cancel this conversation's pending waits — the step that stops a reminder chase the moment the contact replies or pays, before the next one is due.

## Getting here

**Automate → Workflows**, open a workflow, click **+** on the canvas, then pick **Remove from Workflow** under **Add Steps**.

## Before you start

- An **owner**, **admin** or **agent** can add this step and save the workflow. Publishing it is an **owner** or **admin** action.
- Building and running workflows depends on your plan; see [pricing](/pricing).
- Nothing outside Inchat has to be connected. The step only cancels rows already queued for this conversation.

## Set up

1. Open the workflow and click **+** where the cancellation belongs — typically right after the event that makes the chase unnecessary, such as a reply or a payment.
2. Pick **Remove from Workflow**.
3. Choose which workflow's pending waits to cancel — **All workflows**, or one named workflow.
4. Save the step, then publish the workflow.

## Fields

| Field | What it means | Default | Limits |
| --- | --- | --- | --- |
| Workflow to cancel | Which workflow's queued waits this step cancels for the conversation. Not a visible on-screen label — the dropdown carries this text only for a screen reader. | All workflows | The list never offers this same workflow as a choice, so a stored value that matches neither a listed workflow nor **All workflows** — for example, a deleted workflow — falls back to showing **This workflow**. |

## How it works

- The step cancels every still-**pending** queued row for this conversation — either across the whole workspace's workflows, or only the one workflow chosen — by marking those rows canceled so the cron that drains them skips them.
- That covers a **Wait** step's queued resume and an **Assign To** step's queued Timeout Branch message alike: both are the same kind of queued row underneath.
- **All workflows** also cancels queued rate-limit retries that have no workflow at all — including a retry of the AI's own auto-reply after it was throttled — because those share the identical queue with nothing to tell them apart at the workflow level.
- A wait that has already fired and moved on cannot be cancelled after the fact — only rows still waiting for their due time are affected.

## When it fails

- There is nothing to cancel: the step still succeeds — an empty result is not a failure, it just means no matching wait was pending.

## Limits

- Despite the name, it does not stop a workflow that is actively running on this conversation right this moment — a step already executing finishes; only what has already been queued for later is affected.
- It cannot release a contact currently parked waiting for an answer to an **Ask a Question** step in some other workflow — that is a different kind of pending state, not a queued wait.
- It cannot cancel a workflow that has been triggered but has not yet started running (queued but not yet drained) — it only reaches waits that are already queued and pending.
- It does not touch anything about the AI, the assignee or the conversation's status — cancelling a queued Timeout Branch message, for instance, does not undo the assignment that queued it.
- **All workflows** is genuinely all of them — including a rate-limit retry the AI's own auto-reply queued, which has no workflow behind it at all. There is no way to cancel only a workflow's own queued rows while leaving those retries alone.

## Use cases

- A payment-reminder workflow queues a chase every day the invoice stays open; the moment the customer pays, this step cancels the rest of the chase.
- A workflow sets a short reply-timeout on an **Assign To** step; if the assignee replies before the timeout, a later workflow step cancels that queued timeout message so it never goes out.

## FAQ and troubleshooting

### Does this stop a workflow that is running right now?

No. It only cancels waits that are already queued for later — a step actively running when this fires finishes on its own.

### Will this release a contact stuck waiting on a question from another workflow?

No. A parked question is a different kind of pending state; Remove from Workflow only cancels queued waits.

## Related

- [Wait](https://inchat.inseller.my/help/workflows/wait)
- [Assign To (human)](https://inchat.inseller.my/help/workflows/assign-to-human)
- [Trigger Another Workflow](https://inchat.inseller.my/help/workflows/trigger-another-workflow)
- [Avoid workflow loops](https://inchat.inseller.my/help/workflows/avoid-workflow-loops)

---

Source files: `src/lib/workflows/ai-builder/spec.ts`, `src/lib/workflows/canvas-model.ts`, `src/components/workflows/WorkflowStepConfigDrawer.tsx`, `src/lib/workflows/engine-record-actions.ts`, `src/lib/workflows/pending.ts`, `src/lib/delivery/throttle-retry.ts`, `src/app/(app)/workflows/[id]/page.tsx`, `src/lib/workflows/engine.test.ts`
