> For the complete documentation index, see [llms.txt](https://docs.rewst.help/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.rewst.help/rewst-documentation/documentation/automations/nodes/nodes-actions.md).

# Nodes: Actions

*Actions* are the operations available for creating and automating, which live inside of a workflow. You grab these actions from the left side menu of the Workflow Builder, and drag them onto the Workflow Builder canvas. When you run a workflow, Rewst is completing a series of actions specified within that workflow. Each action has a set of configuration options within it, editable in its node menu in Workflow Builder once dragged onto the Canvas.

{% hint style="info" %}
Ask the Rewst Agent to explain any node in Rewst. This documentation exists to help you get started, but in-platform questions and learning are the fastest way to achieve automation.
{% endhint %}

## Action types: Built-in actions

<details>

<summary>Get Org External ID - <code>CTX.get_org_external_id</code></summary>

Read one provider or integration external ID mapping for the active organization selected by Set Org. If Set Org has not changed context, the workflow org is used. Missing mappings don't fail. The deterministic out output has:

* Ok = true
* Found = false
* External\_id = empty string

<figure><img src="https://3039672601-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fh0G0em3PH6aDfPoI5XpN%2Fuploads%2FQCZXWpByhVkS2yE2hc4R%2FScreenshot%202026-08-25%20at%203.48.26%E2%80%AFPM.png?alt=media&amp;token=f98990ae-f13e-4a14-845b-6c5c54b49361" alt="" width="375"><figcaption></figcaption></figure>

</details>

<details>

<summary>List Org External IDs - <code>CTX.list_org_external_ids</code></summary>

List all external ID mappings for the active organization selected by Set Org as the provider integration slug > external ID. If Set Org has not changed context, the workflow org is used. The output includes ok, org\_id, external\_ids, and count.&#x20;

</details>

<details>

<summary>List Sub-Orgs - <code>CTX.list_sub_orgs</code></summary>

List child organizations. Filter by depth, status, tags, or organization IDs.

</details>

<details>

<summary>Resolve Org from External ID - <code>CTX.resolve_org_from_external_id</code></summary>

Reverse-resolve a vendor-side external ID— for example, a PSA company ID arriving in a trigger payload— to the Rewst child organization it's mapped to, within this parent org. Feed the resolved org\_id into Set Org to scope a trigger-initiated run to the right child organization. Unmapped IDs don't fail. The out output has:

* Ok = true
* Found = false
* Empty org\_id for you to branch

</details>

<details>

<summary>Call Workflow - <code>TASKS.call_workflow</code></summary>

For Rewst Classic users: this action is now how you use subworkflows in Rewst.

Call another existing workflow into the workflow you're currently building. Choose a workflow at the time of action configuration, or resolve it with an expression, such as a different workflow per loop iteration. Input fields will be loaded dynamically from the workflow schema. Choose which version of the workflow to execute.&#x20;

</details>

<details>

<summary>Grant Achievement - <code>TASKS.grant_achievement</code></summary>

Grant a manually-grantable achievement. The only definitions this organization is authorized to grant are selectable. The list is filtered server-side, not by this workflow. Wire the Failure output to handle authorization and validation errors.&#x20;

</details>

<details>

<summary>Code Expression - <code>CTX.code_expression</code></summary>

When visual tools aren't enough, use this action to write code to transform data exactly how you need to. Jinja is great for string templating: JEXL is JavaScript-like for complex logic. Use this as a last resort after trying Object Builder and Transform Array.

</details>

<details>

<summary>Invoke Agent - <code>TASKS.invoke_agent</code></summary>

Invoke a named agent with an instruction and return its response to the workflow. The agent runs with its own assigned workflow access, via **Settings> Agents**, not the calling workflow's permissions. An agent with no workflow access can't run. Fire the Failure output to handle invocation errors.&#x20;

</details>

<details>

<summary>Render Document PDF - <code>TASKS.render_document_pdf</code></summary>

Renders a PDF document either from a published App page or from raw HTML.

Configuration fields

* **Source** — App Page or Raw HTML
* For App Page: pick the **App** and **Page**, plus optional query and route params
* For Raw HTML: provide the **HTML**
* **Filename** — optional, `.pdf` is added automatically
* **Watermark / Branding** — optional toggles with their own text

</details>

<details>

<summary>Send Channel Message - <code>TASKS.send_channel_message</code></summary>

Send a pre-composed message into an agent channel conversation the tenant has previously messaged. Address it by Agent Channel and Conversation ID, usually carried from the triggering event or a prior node. The bot connection is resolved server-side. No credential is configured here.&#x20;

</details>

<details>

<summary>Send Email - <code>TASKS.send_email</code></summary>

Send an email to one or more recipients using the configured SMTP credential. Provide To, Subject, and either Text Body or HTML Body. If you leave the Credential field blank, the platform email default will be used. Emails must be separated by commas or semicolons when entered into configuration fields.

</details>

<details>

<summary>Send HTTP Request - <code>TASKS.send_http_request</code></summary>

Calls any HTTP API and returns the response. Set the action's name in its alias. Put dynamic query values in the query field rather than building them into the URL.

Configuration fields

* Credential
* Method
* URL
* Headers - Note that final headers include credential headers merged at runtime from the selected integration
* Query parameters
* Body - For multipart file uploads, set Content-Type to multipart/form-data and bind Rewst file references in body fields, such as file0 or attachments

</details>

## Action types: Flow control

These actions decide where a workflow goes next: branch on a condition, loop over a list, split and rejoin parallel paths, or switch the organization a step runs against. They don't reshape data, nor they call outside systems.

One term you may hear the Rewst Agent use to explain its work is *handle*, a labeled exit point on a node. A branch node has several handles, like "true" and "false", and you wire each one to a different next step.

{% hint style="info" %}
Click on any of the action types below to expand and read its documentation.
{% endhint %}

<details>

<summary>Delay - <code>TASKS.delay</code></summary>

This node pauses the workflow for a set time, then continues. Use it for simple sleeps, retry backoff, and throttling. A single Delay caps at one hour. For longer waits use a schedule via the [Run on Schedule trigger](/rewst-documentation/documentation/automations/nodes/nodes-triggers.md#run-on-schedule). Don't read Delay's output as data. It's a timing node only. If you need to wait for an external system to call back, use the [Wait for Webhook](#wait-for-webhook) action instead.

Configuration fields

The drop-down **Mode** selector has two options:

* **Mode "for"** — sleep a fixed number of seconds as `durationSeconds`
* **Mode "until"** — wait until a specific timestamp, ISO 8601 or unix milliseconds

</details>

<details>

<summary>If/Else - <code>NONE.if_else</code></summary>

This node splits the workflow into two paths based on a single condition. Branch items down true/false paths using a simple comparison. Comparison value formats include **Text**, **Number**, **Boolean**, and **Null**.

<figure><img src="https://3039672601-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fh0G0em3PH6aDfPoI5XpN%2Fuploads%2Fj6kEYgQpskabX0jlAjFX%2FScreenshot%202026-08-11%20at%202.40.55%E2%80%AFPM.png?alt=media&amp;token=9abbe4fe-3273-4d85-8e1b-b4960d1553d6" alt=""><figcaption></figcaption></figure>

</details>

<details>

<summary>Join: All</summary>

This node waits for every incoming branch to finish before continuing. The workflow continues with the first result and ignores the others. All results are collected and combined into a single output. Use it when multiple branches do the same thing and you only need one result, like trying multiple APIs and using whichever responds first. There are no configuration fields.

<figure><img src="https://3039672601-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fh0G0em3PH6aDfPoI5XpN%2Fuploads%2FQfprdZKPgA4z3wlcln2R%2FScreenshot%202026-08-11%20at%202.44.56%E2%80%AFPM.png?alt=media&amp;token=17d7311d-4f94-4599-8419-78b408ab2667" alt=""><figcaption></figcaption></figure>

</details>

<details>

<summary>Join: Any</summary>

This node continues as soon as the first branch finishes. The workflow continues with the first result and ignores the others. Use it where mutually exclusive branches reconverge, and when multiple branches do the same thing and you only need one result, like trying multiple APIs and using whichever responds first. There are no configuration fields.

<figure><img src="https://3039672601-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fh0G0em3PH6aDfPoI5XpN%2Fuploads%2FF6Dgfhefhb3GeamJ2bK8%2FScreenshot%202026-08-11%20at%202.45.25%E2%80%AFPM.png?alt=media&amp;token=4ec80ab4-c673-48c5-bcb3-3d701a4b46fe" alt=""><figcaption></figcaption></figure>

</details>

<details>

<summary>Join: Quorum</summary>

This node waits until a specific number of branches completes, such as "at least 3 out of 5." You choose how many is enough and what happens to the branches still running. Use when you need partial results to proceed, like waiting for a majority of validators to confirm a transaction, or getting responses from most but not all servers. You must connect at least two branches to configure the threshold.&#x20;

<figure><img src="https://3039672601-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fh0G0em3PH6aDfPoI5XpN%2Fuploads%2F61559Uu1ALzwl9OuiBAx%2FScreenshot%202026-08-11%20at%202.45.57%E2%80%AFPM.png?alt=media&amp;token=3a189fcc-e65f-4e91-871f-ebb48e4776c5" alt=""><figcaption></figcaption></figure>

Configuration Fields

* **Required count** - list the number of branches

</details>

<details>

<summary>Join: Stream</summary>

This node forwards each branch result the moment it arrives, rather than waiting. Results flow through in real-time as parallel operations finish. Use it when you want to process results progressively, like displaying search results as each source responds, or processing files as uploads complete. There are no configuration fields.

<figure><img src="https://3039672601-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fh0G0em3PH6aDfPoI5XpN%2Fuploads%2F1TPCLV8b9lkcVJ0ZYPJQ%2FScreenshot%202026-08-11%20at%202.46.24%E2%80%AFPM.png?alt=media&amp;token=ac91166f-19d7-48d9-9541-cfd3350f2e0f" alt=""><figcaption></figcaption></figure>

</details>

<details>

<summary>Loop - <code>CTX.logic_loop</code></summary>

This node iterates over a list. Each item runs the loop body once. After all items finish, the workflow continues on the done path.

<figure><img src="https://3039672601-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fh0G0em3PH6aDfPoI5XpN%2Fuploads%2FJX1qgj357pySaUZycjm6%2FScreenshot%202026-08-11%20at%202.44.11%E2%80%AFPM.png?alt=media&amp;token=2a343211-8faa-4fb5-a8c0-695c11df0375" alt=""><figcaption></figcaption></figure>

</details>

<details>

<summary>Set Org - <code>CTX.set_org</code></summary>

This node switches the organization context for the steps that follow, so that downstream nodes run against a different organization. For example, an MSP acts on one of its customer orgs.

<figure><img src="https://3039672601-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fh0G0em3PH6aDfPoI5XpN%2Fuploads%2FMLnyPQlDkeww6h4Lc9tC%2FScreenshot%202026-08-11%20at%202.47.19%E2%80%AFPM.png?alt=media&amp;token=1cf05035-2a37-43a1-91a8-f26f03cc5917" alt=""><figcaption></figcaption></figure>

</details>

<details>

<summary>Switch - <code>NONE.switch</code></summary>

This node routes the workflow to one of many cases.&#x20;

<figure><img src="https://3039672601-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fh0G0em3PH6aDfPoI5XpN%2Fuploads%2FD4elq0n0NYR2KD3ZhHXK%2FScreenshot%202026-08-11%20at%202.41.54%E2%80%AFPM.png?alt=media&amp;token=8e6711df-aee9-4daf-85b2-e52b6f8caa40" alt=""><figcaption></figcaption></figure>

Configuration fields

* There are two modes:&#x20;
  * **Rules** mode holds an ordered list of cases with matching rules
  * **Expression** mode runs JavaScript that returns a zero-based case index
* Choose the task that has the data you need.&#x20;
* Toggle **First match only** on or off to determine if more than one match should be considered

</details>

<details>

<summary>Wait for Webhook - <code>TASKS.wait_for_webhook</code></summary>

This action generates a unique callback URL and pauses the workflow until an external system calls it or the timeout expires. Wire the URL Ready output to send the resume URL and token via email, Slack, API, etc.&#x20;

Configuration Fields

* **Timeout (seconds)** -  Choose how long to wait before timing out, in seconds
* **Authentication** -  How callback requests are authenticated
* **Callback URL** - Generated at runtime, the exact resume URL is emitted on the node's URL Ready output when the workflow runs
* **Allowed HTTP Methods** - Which HTTP methods can trigger the callback
  * GET
  * POST
  * PUT
  * PATCH
  * DELETE

</details>

## Action types: Integration-specific

When you set up an integration in Rewst, it comes with a predefined set of actions, which will automatically appear in your Workflow Builder actions menu. These actions allow you to work with various parts of the integrated product as per its API. Rewst's integrations pull in the most useful and most commonly used actions, but not all available actions.  Each integration will appear as its own section. Click **∨** next to your integration's section header to expand and view all available actions.&#x20;

<figure><img src="https://3039672601-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fh0G0em3PH6aDfPoI5XpN%2Fuploads%2FLgWCueQkoRref0dR8kD1%2FScreenshot%202026-08-11%20at%203.24.08%E2%80%AFPM.png?alt=media&amp;token=be7373e7-7355-4811-8ff0-23ee57b63860" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Were you a Rewst Classic user? Generic actions in Rewst are no longer a separate action node for each integration in the Workflow Builder. Instead, use the HTTP request access action, which lets you select a credential you already have saved in Rewst, then use the endpoint not included with Rewst's integration.
{% endhint %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.rewst.help/rewst-documentation/documentation/automations/nodes/nodes-actions.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
