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

# Action step

> Call Anyreach-native apps or 2,000+ third-party apps.

The Action step runs pre-built integrations. Instead of crafting HTTP requests and managing OAuth yourself, you pick an app, pick an action, and fill in the parameters.

<Frame>
  <img src="https://mintcdn.com/anyreach/N-fj2r4kJZGPzxjc/images/workflows/action-initial.png?fit=max&auto=format&n=N-fj2r4kJZGPzxjc&q=85&s=431e45bf7ef3aa0c8fed923061693662" alt="Select an app modal for the Action step" width="3084" height="1926" data-path="images/workflows/action-initial.png" />
</Frame>

## Two integration sources

**AnyReach** — native actions organized by entity:

* Conversations
* Phone Calls
* Agents
* Knowledge Base
* Workflows

<Frame>
  <img src="https://mintcdn.com/anyreach/N-fj2r4kJZGPzxjc/images/workflows/anyreach-actions.png?fit=max&auto=format&n=N-fj2r4kJZGPzxjc&q=85&s=fc697cdf9a38d34e44852bc91c06026b" alt="AnyReach native actions list" width="3106" height="1918" data-path="images/workflows/anyreach-actions.png" />
</Frame>

**External Apps** — 2,000+ third-party apps. Includes Slack, Google Sheets, Salesforce, HubSpot, Stripe, Notion, and more.

<Frame>
  <img src="https://mintcdn.com/anyreach/N-fj2r4kJZGPzxjc/images/workflows/external-actions.png?fit=max&auto=format&n=N-fj2r4kJZGPzxjc&q=85&s=5801ac8541e88462d62f7036e177d77b" alt="Selecting an external app in the Action step" width="3102" height="1926" data-path="images/workflows/external-actions.png" />
</Frame>

## When to use Action vs HTTP API

| Use Action when                             | Use HTTP API when                          |
| ------------------------------------------- | ------------------------------------------ |
| The integration is available in the catalog | It's a custom internal API                 |
| You want OAuth managed for you              | Bearer-token auth is sufficient            |
| You want a typed parameter UI               | You need full control over the raw request |

## Adding an Action step

<Steps>
  <Step title="Click + below a node">
    The "Select next step" panel opens. Click **Add Action**.
  </Step>

  <Step title="Pick a source">
    The "Select an app" modal opens. Choose **Anyreach** for native actions or browse/search under **External Apps** for Pipedream integrations.
  </Step>

  <Step title="Authenticate (first time only)">
    For external apps, connecting a new app prompts OAuth. The connection is stored at the org level and reused across all workflows.
  </Step>

  <Step title="Pick an action and fill parameters">
    Each app exposes a list of actions (e.g., Slack → "Send message to channel"). Fill in the parameters — most fields accept expressions like `{{ ctx.input.name }}`.
  </Step>

  <Step title="Save">
    Click **Save** in the inspector to confirm the configuration.
  </Step>
</Steps>

## What lands in ctx

After the Action step runs, its output is added to `ctx` under the step's id:

```json theme={null}
{
  "n5": {
    "ok": true,
    "channel": "C0123456789",
    "ts": "1234567890.123456"
  }
}

Here, `n5` is the step id of the "Notify Slack" action.

```

Reference it downstream:

```
{{ `n5`.ok }}
```

## Examples

### Send Slack notification

Pick `Slack` → `Send message to channel`. Fill in the channel and message text:

```
Message: "New call completed: {{ n1.contact_name }}"
```
