> ## Documentation Index
> Fetch the complete documentation index at: https://docs.callkaro.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# What is a Workflow?

> A sequence of calls, messages, waits and checks that each contact moves through on their own

A workflow is an automation you draw once and run for as many contacts as you like. Each contact you add gets their own **run**, which walks the steps one at a time: call them, wait two hours, check whether they picked up, send a WhatsApp template if they didn't, update their CRM record, and so on.

Workflows are built on a visual canvas as **Normal Workflows**. Open **Dashboard → Workflows**, click **Create Workflow**, and choose **Normal Workflow**.

<Note>
  The type is chosen when a workflow is created and cannot be changed afterwards.
</Note>

## What a workflow can do

| Step | What it does |
| - | - |
| **Send Call** | Calls the contact with a voice agent, with optional retries, and waits for the call to finish. |
| **Send WhatsApp Template** | Sends an approved WhatsApp template. |
| **Send WhatsApp Message** | Sends a free-text WhatsApp message. |
| **Wait** | Pauses the run for a number of minutes. |
| **Conditions** | Sends the contact down a different path depending on the last call, their CRM record, post-call data and more. |
| **API Call — Basic** | Calls your own API with a URL, headers and a JSON body. |
| **API Call — Advanced** | Runs your own JavaScript. |
| **Update Contact** | Writes values onto the contact in the CRM. |
| **End** | Finishes the run. |

Every workflow begins at a single **Start** node and each path finishes at an **End** node.

## How a run moves

1. A contact is **enrolled**, usually from the [CRM](/crm/leads#assign-contacts-to-an-agent-or-a-workflow), and their run begins at Start.
2. Each step runs and hands over to the next one it is connected to. A **Conditions** step picks one of several paths.
3. A **Wait** step parks the run until its time is up. A **Send Call** step parks it until the call, including any retries, has ended.
4. The run finishes at an **End** step.

Everything a run learns travels with it. After a call, later steps can read the call's outcome and the agent's post-call variables. After an API step, later steps can read what your API returned.

## Run statuses

| Status | Meaning |
| - | - |
| **Running** | Executing steps right now. |
| **Waiting** | Paused on a Wait step, or waiting for a scheduled start time. |
| **Awaiting call** | A call has been placed and the run continues when it ends. |
| **Completed** | Reached an End step. |
| **Failed** | Stopped by an error. |
| **Cancelled** | Stopped before it finished. |

<CardGroup cols={3}>
  <Card title="Build a workflow" icon="pen-ruler" href="/workflows/build-a-workflow">
    The canvas and every step type.
  </Card>

  <Card title="Conditions and values" icon="code-branch" href="/workflows/conditions-and-values">
    Branch rules and filling in values.
  </Card>

  <Card title="Enroll and monitor" icon="chart-line" href="/workflows/enroll-and-monitor">
    Add contacts and follow every run.
  </Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.