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

# Action Components

> Reference guide for all action components that perform operations in your automations

# Action Components

Action components perform operations like sending notifications, creating records, or updating data. They're typically the "end points" of your automation flows.

<Note>
  **Important:** Action components always execute their side effects when reached, even if their outputs aren't connected to downstream nodes. This ensures emails are sent, tasks are created, etc.
</Note>

***

## Communication Actions

### Send Email V2

Sends an email to specified recipients.

#### Configuration

| Field                | Description                                                                                                                                             |
| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **To**               | Recipient email address(es) - supports @ notation                                                                                                       |
| **Subject**          | Email subject line                                                                                                                                      |
| **Body**             | Email body content (supports HTML and @ notation)                                                                                                       |
| **CC**               | Carbon copy recipients (optional)                                                                                                                       |
| **Reply To**         | Reply-to address (optional)                                                                                                                             |
| **Send As Role**     | Send the email on behalf of a specific role (e.g., Account Owner, CSM). The email is sent from the connected person who holds that role on the account. |
| **Connected Person** | Dropdown showing people connected to the account in the selected role. Automatically populated based on the chosen role.                                |

#### Example Configuration

```
To: @account_data.owner_email
Subject: Action Required: @account_data.name health score dropped
Body:
  Hi @account_data.owner_name,

  The health score for @account_data.name has dropped to @account_data.health_score.

  Please review and take appropriate action.
```

#### Output Data

Returns confirmation of email sent with message ID.

***

### Email Template V2

Sends an email using a pre-defined template.

#### Configuration

| Field                  | Description                                       |
| ---------------------- | ------------------------------------------------- |
| **Template**           | Select from saved email templates                 |
| **To**                 | Recipient email address(es)                       |
| **Template Variables** | Key-value pairs to populate template placeholders |

#### When to Use

* Consistent branded communications
* Complex email layouts
* Reusable email content across automations

<Note>
  Templates are built in [Email Templates](/campaigns/email_templates) and personalized with [merge tags](/campaigns/personalization) such as `{{ contact.name }}`.
</Note>

***

### Send Consolidated Email V2

Sends a **single email** to multiple recipients in a To / CC / BCC layout — useful for digests, weekly roll-ups, and shared announcements. Unlike Email Template V2 (which sends one personalized email per recipient), Consolidated Email sends one message that everyone in the audience receives together.

#### Configuration

| Field              | Description                                                                                                                                                                    |
| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Email Template** | Select the template to send. Templates that reference `{{ contact.* }}` variables are not allowed here because per-recipient personalization isn't possible in a single email. |
| **To (Audience)**  | Segment whose contacts populate the TO field. All TO recipients see each other.                                                                                                |
| **CC (Audience)**  | Optional segment whose contacts populate the CC field.                                                                                                                         |
| **BCC (Audience)** | Optional segment whose contacts populate the BCC field.                                                                                                                        |
| **Test Mode**      | Toggle to send only to the test email below (skips HIL and recipient lists).                                                                                                   |
| **Test Email**     | Address to receive the test send.                                                                                                                                              |

#### When to Use

* Send a weekly account digest to a CSM, their manager, and the AE on CC
* Notify a customer's executive sponsor and copy the internal team
* Broadcast a release announcement to a curated audience

<Warning>
  If the To audience has multiple recipients, the template body must **not** include `{{ contact.* }}` variables — those resolve per-recipient and can't be personalized in a consolidated send. Use Email Template V2 instead if you need personalization.
</Warning>

#### Approval Behavior

Send Consolidated Email supports Human-in-the-Loop. When approval is required, the pending email shows the full TO / CC / BCC list and the resolved email body so reviewers can confirm the audience before sending.

***

### Slack V2

Sends a message to a Slack channel.

#### Configuration

| Field       | Description                                              |
| ----------- | -------------------------------------------------------- |
| **Channel** | Select Slack channel                                     |
| **Message** | Message content (supports Slack markdown and @ notation) |

#### Example Message

```
:warning: *Account Alert*

*@account_data.name* requires attention

• Health Score: @account_data.health_score
• Owner: @account_data.owner_name
• ARR: $@account_data.arr

<https://app.statisfy.com/accounts/@account_id|View Account>
```

#### Slack Formatting Tips

| Syntax        | Result    |
| ------------- | --------- |
| `*text*`      | **Bold**  |
| `_text_`      | *Italic*  |
| `:emoji:`     | Emoji     |
| `<url\|text>` | Hyperlink |
| `\n`          | New line  |

***

### Slack Channel Manager V2

Creates or manages Slack channels programmatically.

#### Configuration

| Field            | Description                        |
| ---------------- | ---------------------------------- |
| **Action**       | Create, Archive, or Update channel |
| **Channel Name** | Name for the channel               |
| **Members**      | Initial members to add (optional)  |

***

### Notify User on Slack V2

Sends a **direct message** from the Statisfy Slack app to a specific person on Slack. Use this when you want to reach an individual privately instead of posting in a channel.

#### Configuration

| Field                     | Description                                                                                                                                                                    |
| ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Message**               | The DM body — supports markdown and @ notation. Markdown is auto-converted to Slack's `mrkdwn` format.                                                                         |
| **Notify Person or Role** | Choose who to message. You can target a specific person by email, or a role (e.g., Account Owner, CSM) — the role is resolved to the connected person on the relevant account. |

#### Resolution Order

If multiple targeting options are configured, Statisfy resolves the recipient in this order:

1. Explicit **email** address
2. **Role** on the account (e.g., Account Owner) resolved through the account in flow context
3. Falls back to the user attached to the flow context (e.g., the task assignee)

#### Prerequisites

* Slack integration must be installed
* The target user must have an email that matches a Slack workspace member
* The Statisfy Slack app must be reachable in the user's workspace

#### When to Use

* Privately nudge an account owner when their account drops to At Risk
* DM a CSM with the agenda before an upcoming meeting
* Alert the assigned task owner without posting in a public channel

<Note>
  Slack channel messages and DMs are separate components — use **Slack V2** to post in a channel and **Notify User on Slack V2** to DM an individual.
</Note>

***

### Gmail Send V2

Sends an email through a connected Gmail account.

#### Configuration

| Field       | Description                                              |
| ----------- | -------------------------------------------------------- |
| **To**      | Recipient email address(es) - supports @ notation        |
| **Subject** | Email subject line                                       |
| **Body**    | Email body content (supports HTML and @ notation)        |
| **CC**      | Carbon copy recipients (optional)                        |
| **BCC**     | Blind carbon copy recipients (optional)                  |
| **Role**    | Select which connected user's Gmail account to send from |

#### Prerequisites

* Google Workspace integration must be connected
* The sending user must have authorized Gmail access

#### When to Use

* Send emails from a specific team member's Gmail (e.g., the account owner)
* Replies and follow-ups appear in the sender's Gmail thread
* Use instead of Send Email V2 when you need emails to come from a real person's inbox

***

### Gmail Reply Listener V2

Listens for replies to emails sent by Gmail Send V2 and triggers downstream actions.

#### Configuration

| Field                 | Description                                    |
| --------------------- | ---------------------------------------------- |
| **Linked Gmail Send** | The Gmail Send V2 node to monitor for replies  |
| **Timeout**           | How long to wait for a reply before timing out |

#### When to Use

* Wait for a customer to respond to an outreach email
* Trigger follow-up actions based on whether a reply was received
* Build conversational email sequences

***

## Task Management Actions

### Create Task V2

Creates a new task in Statisfy.

#### Configuration

| Field           | Description                                      |
| --------------- | ------------------------------------------------ |
| **Title**       | Task title                                       |
| **Description** | Task description                                 |
| **Assignee**    | User to assign the task to                       |
| **Due Date**    | When the task is due                             |
| **Priority**    | Task priority level                              |
| **Account**     | Associated account (auto-populated from context) |

#### Example

```
Title: Follow up with @account_data.name
Description: Health score dropped. Review and schedule call.
Assignee: @account_data.owner_email
Due Date: (3 days from now)
Priority: High
```

***

### Create Task (Advanced) V2

Creates a task with full configuration options.

#### Additional Configuration

| Field             | Description                 |
| ----------------- | --------------------------- |
| **Task Type**     | Select task type            |
| **Tags**          | Add tags to the task        |
| **Custom Fields** | Set custom field values     |
| **Watchers**      | Add users to watch the task |

***

### Add Task Comment V2

Adds a comment to an existing task.

#### Configuration

| Field             | Description                                        |
| ----------------- | -------------------------------------------------- |
| **Task ID**       | The task to comment on (from context or specified) |
| **Comment**       | Comment content                                    |
| **Mention Users** | Users to mention in the comment (optional)         |

***

## CRM Actions

### Create Salesforce Case V2

Creates a case in Salesforce.

#### Configuration

| Field           | Description           |
| --------------- | --------------------- |
| **Subject**     | Case subject          |
| **Description** | Case description      |
| **Priority**    | Case priority         |
| **Account**     | Salesforce account ID |
| **Contact**     | Salesforce contact ID |
| **Case Type**   | Type of case          |

#### Prerequisites

* Salesforce integration must be configured
* User must have appropriate Salesforce permissions

***

### Custom Field Updater V2

Updates custom fields on Statisfy entities.

#### Configuration

| Field             | Description                                      |
| ----------------- | ------------------------------------------------ |
| **Entity Type**   | Account, Contact, Task, etc.                     |
| **Entity ID**     | The entity to update (from context or specified) |
| **Field Updates** | Key-value pairs of fields to update              |

#### Example

```
Entity Type: Account
Entity ID: @account_id
Field Updates:
  - last_automation_run: (current timestamp)
  - risk_flag: true
```

***

### Opportunity Custom Field Updater V2

Updates custom fields specifically on opportunities.

#### Configuration

| Field              | Description                |
| ------------------ | -------------------------- |
| **Opportunity ID** | The opportunity to update  |
| **Field Updates**  | Custom field values to set |

***

### Upstream Custom Field Updater V2

Updates custom fields on parent/related entities.

#### When to Use

* Update account fields from a task automation
* Sync data from child to parent entities

***

### Custom Field Object Updater V2

Updates custom fields that have an **object** type (nested key-value structures) on Statisfy entities.

#### Configuration

| Field                | Description                                    |
| -------------------- | ---------------------------------------------- |
| **Entity Type**      | Account, Contact, Opportunity, etc.            |
| **Entity ID**        | The entity to update (supports @ notation)     |
| **Custom Field Key** | The object-type custom field to update         |
| **Object Values**    | Key-value pairs to set within the object field |

#### When to Use

* Update structured custom fields (e.g., a "contract\_details" object with nested keys)
* Set multiple related values within a single custom field atomically
* Differs from Custom Field Updater V2 which updates flat field values

***

## Project Actions

### Create Project V2

Creates a new project from a template.

#### Configuration

| Field            | Description              |
| ---------------- | ------------------------ |
| **Template**     | Project template to use  |
| **Project Name** | Name for the new project |
| **Account**      | Associated account       |
| **Owner**        | Project owner            |
| **Start Date**   | Project start date       |

***

### Get Project Link V2

Retrieves the URL link to a project.

#### Configuration

| Field          | Description                     |
| -------------- | ------------------------------- |
| **Project ID** | The project to get the link for |

#### Output Data

```json theme={null}
{
  "project_link": "https://app.statisfy.com/projects/proj_123"
}
```

***

## Document Actions

### RTE Document Populator V2

Populates a rich text document template with data.

#### Configuration

| Field             | Description                   |
| ----------------- | ----------------------------- |
| **Template**      | Document template to populate |
| **Variables**     | Data to insert into template  |
| **Output Format** | PDF, HTML, or Markdown        |

***

### Fetch RTE Document V2

Retrieves content from a rich text document.

#### Configuration

| Field           | Description           |
| --------------- | --------------------- |
| **Document ID** | The document to fetch |

***

### Pin Content V2

Pins content to an entity for quick access.

#### Configuration

| Field           | Description              |
| --------------- | ------------------------ |
| **Entity Type** | Where to pin the content |
| **Entity ID**   | The specific entity      |
| **Content**     | Content to pin           |

***

## Data Actions

### SQL Query V2

Executes a SQL query against your data.

#### Configuration

| Field          | Description                               |
| -------------- | ----------------------------------------- |
| **Query**      | SQL query to execute                      |
| **Parameters** | Query parameters (for safe interpolation) |

<Warning>
  SQL queries are executed with read-only access for safety. Use other action components for write operations.
</Warning>

#### Example

```sql theme={null}
SELECT account_id, name, health_score
FROM accounts
WHERE health_score < 50
AND owner_id = :owner_id
```

***

### Get Contact ID from Email V2

Resolves a contact ID from an email address.

#### Configuration

| Field     | Description              |
| --------- | ------------------------ |
| **Email** | Email address to look up |

#### Output Data

```json theme={null}
{
  "contact_id": "contact_123",
  "contact_found": true
}
```

***

## AI-Powered Actions

### Generate Risk Mitigation Plan V2

Uses AI to generate a risk mitigation plan.

#### Configuration

| Field               | Description                      |
| ------------------- | -------------------------------- |
| **Account Context** | Account information to analyze   |
| **Risk Factors**    | Specific risk factors to address |

#### Output Data

Returns a structured risk mitigation plan with recommended actions.

***

### Generate Risk Mitigation Summary V2

Creates a summary of risk factors and recommended actions.

#### Configuration

| Field                 | Description             |
| --------------------- | ----------------------- |
| **Account Data**      | Account information     |
| **Recent Activities** | Recent activity context |

***

### Survey Template V2

Manages survey templates and responses.

#### Configuration

| Field         | Description                         |
| ------------- | ----------------------------------- |
| **Template**  | Survey template to use              |
| **Recipient** | Who to send the survey to           |
| **Due Date**  | When the survey should be completed |

***

## Integration Actions

### API Call V2

Makes HTTP API calls to external services with built-in authentication support.

#### Configuration

| Field                         | Description                                                                                                                                                                                                                                 |
| ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **URL**                       | API endpoint URL (required)                                                                                                                                                                                                                 |
| **Method**                    | HTTP method: GET, POST, PUT, PATCH, DELETE, HEAD                                                                                                                                                                                            |
| **Authentication**            | None, API Key, Bearer Token, or Basic Auth                                                                                                                                                                                                  |
| **Secret Value**              | Select stored secret for credentials (from Settings > Secrets)                                                                                                                                                                              |
| **API Key Header/Param Name** | Header or query param name for API key (shown when auth = API Key)                                                                                                                                                                          |
| **API Key Location**          | Send API key in Header or Query Parameter (shown when auth = API Key)                                                                                                                                                                       |
| **Username**                  | Username for Basic Auth (shown when auth = Basic Auth)                                                                                                                                                                                      |
| **Send Custom Headers**       | Toggle to add custom HTTP headers                                                                                                                                                                                                           |
| **Headers (JSON)**            | Custom headers as JSON, e.g. `{"X-Custom": "value"}`                                                                                                                                                                                        |
| **Send Query Parameters**     | Toggle to add URL query parameters                                                                                                                                                                                                          |
| **Query Parameters (JSON)**   | Query params as JSON, e.g. `{"page": "1"}`                                                                                                                                                                                                  |
| **Send Request Body**         | Toggle to add a request body (for POST/PUT/PATCH)                                                                                                                                                                                           |
| **Request Body (JSON)**       | JSON request body                                                                                                                                                                                                                           |
| **Timeout**                   | Request timeout in seconds (default: 30)                                                                                                                                                                                                    |
| **Max Retries (rate limits)** | How many times to retry when the API responds with `429 Too Many Requests`. Retries honor the response's `Retry-After` header (falling back to exponential backoff), plus a small random delay. Default 3; set to 0 to disable. Range 0–10. |
| **Follow Redirects**          | Whether to follow HTTP redirects (default: true)                                                                                                                                                                                            |
| **Strict JSON Parsing**       | When enabled, invalid JSON in the request body, headers, or query parameters fails the component and logs the error to the **Logs** tab. When disabled (default), malformed JSON is silently ignored and the request still runs.            |

#### Example: Call External Webhook

```text theme={null}
URL: https://api.example.com/webhook
Method: POST
Authentication: Bearer Token
Secret Value: my-api-token
Body: {"account": "@account_data.name", "event": "health_drop"}
```

#### Output Data

```json theme={null}
{
  "url": "https://api.example.com/webhook",
  "success": true,
  "status_code": 200,
  "data": { "received": true }
}
```

<Note>
  All credentials are retrieved securely from Google Secret Manager. Configure your secrets in **Settings > Secrets** before using authentication.
</Note>

<Tip>
  If the external service rate-limits you (HTTP `429`), API Call V2 automatically retries up to **Max Retries (rate limits)** times before failing — waiting as long as the service's `Retry-After` header asks. Raise this for strict-quota APIs, or set it to 0 to fail fast instead of waiting.
</Tip>

<Warning>
  A non-2xx HTTP response (any `4xx` or `5xx` status) now **fails the component and stops the flow at this node** — downstream nodes do not run, and there is no error response for a later node to inspect. The status code and a short response snippet are written to the flow's **Logs** tab. If you need to guard against failures, do it *before* the API Call — for example, validate inputs upstream, or run a separate lightweight probe request earlier in the flow and branch on its result.
</Warning>

***

### Stella V2

Executes natural language business intelligence queries using the Stella AI engine.

#### Configuration

| Field               | Description                                                                          |
| ------------------- | ------------------------------------------------------------------------------------ |
| **Query**           | Natural language query to execute (e.g., "What are the top risks for this account?") |
| **Account Segment** | Segment of accounts to run the query on (optional)                                   |

#### When to Use

* Generate AI-powered account insights within automations
* Run business intelligence queries as part of a workflow
* Get natural language summaries of account data

#### Output Data

Returns the Stella query response as text.

***

## Workflow Control

### Sleep V2

Pauses workflow execution for a specified duration, then automatically resumes. Input data passes through unchanged.

#### Configuration

| Field         | Description                                |
| ------------- | ------------------------------------------ |
| **Sleep For** | Number of time units to sleep (default: 1) |
| **Time Unit** | Hours or Days                              |

#### When to Use

* Wait before sending a follow-up message
* Add a delay between actions (e.g., create task, wait 2 days, check status)
* Schedule time-delayed notifications

#### Example: Follow-up Reminder

```
Trigger → Send Email → Sleep (2 days) → Send Follow-Up Email
```

<Note>
  The Sleep component pauses the entire workflow execution. When resumed, data passes through unchanged to the next node.
</Note>

***

### Human-in-the-Loop V2

Pauses workflow execution for human approval before continuing. The workflow resumes only after a user approves or rejects the request.

#### Configuration

| Field               | Description                                                       |
| ------------------- | ----------------------------------------------------------------- |
| **Subject**         | A short title/description for the approval request                |
| **Notify on Slack** | Send a Slack notification to the approver when approval is needed |

#### When to Use

* Require manager approval before sending external communications
* Review AI-generated content before it's sent
* Gate critical actions (e.g., creating Salesforce cases) behind human review

#### Example: Approval Before Email

```
Trigger → Generate Email (LLM) → Human-in-the-Loop → Send Email
```

The workflow pauses at the Human-in-the-Loop node. An approver reviews the generated email in Statisfy and approves or rejects it. If approved, the workflow continues and sends the email.

<Note>
  Approval requests appear in the **Approvals** section in Statisfy. Enable Slack notifications to alert approvers immediately.
</Note>

***

## Best Practices

<Accordion title="Use @ notation for dynamic content">
  Always use @ notation to reference data from upstream nodes rather than hardcoding values. This makes your automations flexible and reusable.
</Accordion>

<Accordion title="Test actions individually">
  Use the play button to test each action node before activating the full flow. This catches configuration errors early.
</Accordion>

<Accordion title="Handle missing data gracefully">
  Add conditions before actions to check that required data exists. This prevents errors when data is unexpectedly missing.
</Accordion>

<Accordion title="Log important actions">
  For critical actions, consider adding logging or notifications so you can track what the automation did.
</Accordion>

## Next Steps

<CardGroup cols={2}>
  <Card title="Logic Components" icon="code-branch" href="/agent-studio/automations/logic">
    Add conditional routing
  </Card>

  <Card title="Processing Components" icon="gears" href="/agent-studio/automations/processing">
    Transform your data
  </Card>
</CardGroup>
